외부 시스템과 Discourse Gamification을 연동하는 방법(포인트 사용 및 지급)

미친 아이디어가 하나 있습니다. 우연히도 WooCommerce에서 포인트 기반의 가상 지갑을 사용하고 있는데, 이걸 Discourse의 게이미피케이션 포인트와 동기화하고 싶습니다… 하지만 API만으로는 상당히 무겁다고 느껴지네요 (cron으로 x시간마다 조회하거나, 사용자가 WC에서 액션을 할 때마다 요청을 보내는 방식이죠)… WooCommerce의 가상 지갑이 Discourse에서 획득한 포인트로 업데이트되도록 웹훅(webhook)을 만들 수 있을까요?.. 가이드 스키마를 첨부합니다.

Discourse API가 relatively new(비교적 신생)이고 웹훅도 없어서 더 복잡할 수 있다는 걸 알고 있습니다. 하지만 저는 단순히 사용 사례를 제시하고 아이디어의 타당성을 확인해 보고 싶을 뿐입니다.

게임화는 5분마다 재계산되므로, 크론타브(crontab) 스타일의 동기화를 사용하는 것이 매우 적절하다고 생각합니다.

1개의 좋아요

아, 그 접근 방식은 생각해보지 못했네요… 즉, n8n(비용 절감을 위해 자체 호스팅)을 사용할 수 있겠네요. 5분 또는 10분마다 크론 트리거를 만들어 Discourse API에서 새로운 포인트를 조회할 것입니다. (모든 사용자를 조회하는 방법은 무엇인가요? 아니면 이벤트에 대해 처리하나요?)… 물론, 양쪽 플랫폼 간에 점수가 동기화되지 않는 짧은 시간 창이 항상 존재할 것입니다…

그것에 대해 생각해 보니, 게임화 플러그인이 이벤트를 통해 정보를 전송하는 웹훅을 만들 수 있다면 (API를 통해 조회할 필요가 없이) 예를 들어 활성 사용자가 200명일 때 5분마다 200번씩 API를 조회해야 하는 상황을 피할 수 있을 것 같습니다. 또한 기본적으로 Discourse는 웹훅을 허용하기 때문에… 이는 중요한 문제입니다. Discourse는 포인트의 주요 출처이며 (더 지속적으로 업데이트되므로) 이러한 업데이트는 Discourse의 변경 사항에 따라 즉시 백그라운드 동기화를 가능하게 해 줄 것입니다…

@Falco
이벤트를 삭제하는 API를 추가할 계획인가요? 감사합니다.

1개의 좋아요

추가하고 싶지만, 아직 계획에 없습니다. 현재는 값을 0으로 업데이트할 수 있습니다.

2개의 좋아요

@Falco 감사합니다.
이벤트에서 점수 추측을 할 때, 예를 들어 대회 이벤트에서 패배하면 ID에 마이너스 점수가 부과되는 거죠?

1개의 좋아요

네, 음수를 부여할 수도 있습니다. 포인트를 선물로 교환하거나 페널티를 적용하는 등의 이벤트에 유용합니다.

1개의 좋아요

늦게 합류합니다. 특정 포인트 거래를 지정하여 리더보드 랭킹에 '지출’로 계산되지 않도록 하는 방법이 있을까요? 다른 진정한 음수 포인트(반대 투표/플래그, 위에서 제안된 '래더 이벤트’에서 패배할 때의 API 이벤트 등)는 리더보드에 반영되어야 합니다.
예를 들어:

  • 활동을 통해 1만 포인트를 모으고 1위를 유지합니다. 좋습니다!
  • 1만 포인트를 고급 굿즈에 지출하여 ‘사용 가능’ 포인트가 0이 됩니다. 쿼리가 1만 - 1만을 합산하기 때문입니다.
    • 하지만 여전히 리더보드 상위에 있어야 합니다.
  • 래더 게임에서 2천 포인트를 잃으면 리더보드에 8천으로 표시됩니다. 1위를 잃게 됩니다… 사용 가능 잔액은 -2천이 됩니다.
2개의 좋아요

hey @Falco
이벤트의 포인트를 수정한 후, 해당 ID의 전체 포인트가 다시 계산되나요?
그렇지 않은 것 같은데, 의도된 동작인가요?

OP의 경고에서 언급한 내용입니다. UI 전체에서 총 점수를 캐시로 저장하고 있기 때문에, 수정 후에는 캐시가 업데이트된 후에야 반영됩니다. 최근 이벤트의 경우 캐시가 자동으로 업데이트되지만, 10일 이상 지난 이벤트의 경우 해당 기간에 대한 점수 업데이트를 수동으로 트리거해야 합니다.

2개의 좋아요

7개의 게시물이 새 주제로 분리되었습니다: Add bulk_create to Gamification external event API

API 키의 범위를 Gamification 플러그인으로만 제한할 수 있나요?

API 키 관리자 보기에서 키를 ...admin/plugins/gamification/score_events로 제한하는 옵션을 찾을 수 없습니다.

또한 리더십에서는 이 작업에 대해 정말로 글로벌 API 키가 필요한지에 대해 회의적인 시각을 보이고 있습니다.

1개의 좋아요

말씀이 맞을 것 같습니다. 요청이 들어올 때마다 추가적으로 더 많은 스코프가 추가되는 것 같습니다. 셀프 호스팅을 하고 계시다면 커스텀 플러그인을 통해 이를 처리할 수 있습니다. PR을 제출하시거나 Contribute 채널에 기능 요청으로 게시할 수도 있습니다. 엔터프라이즈 고객이라면 리더십 팀에 요청을 전달해 보실 수 있습니다. :wink:

음. 이제 플러그인에서 커스텀 API 스코프를 추가하는 것이 가능한지(특히 하나의 플러그인이 다른 플러그인을 위해 API 스코프를 추가하는 경우) 궁금해집니다. 가능할 것 같아 보이지만, 실제로 그렇게 된 사례를 본 적은 없습니다.

아니면 API 전용으로 사용자를 하나 만들어 두면, 적어도 그 방식으로 추적은 할 수 있을 것입니다.

1개의 좋아요

이런 일이 실제로 있었나요?

CC: @Falco

프로그래밍 초보자인 제가 게시글 내용을 열심히 이해하려 노력했지만, 여전히 꽤 어렵습니다…… 이 기능이 일종의 "페이투뷰(pay to see)"와 비슷한지 궁금합니다. 전통적인 포럼에서는 사용자가 이벤트(일일 체크인, 게시글 작성, 댓글 달기 등)를 통해 포인트를 획득하고, 특정 게시글의 전체 내용을 보기 위해 포인트를 지불해야 하는 경우가 매우 흔합니다. 전통적인 포럼(예: 디스쿠즈)에서는 포인트 획득과 차감 작업 모두 자동화되어 있습니다. 제가 현재 파악한 바로는, 게이미피케이션이 “포인트 획득” 부분은 처리할 수 있지만, “포인트 차감” 작업은 관리자가 수동으로 API를 호출해야 하는 건지 궁금합니다. 개인 포럼 입장에서는 너무 어려울 것 같습니다. 제 이해로는, 프로그래밍 지식이 거의 없는 상태에서 API를 무모하게 조작하는 것은 위험할 수 있으며, 심지어 커뮤니티 전체가 무너질 수도 있다고 들었습니다……:sob:

이 “페이투뷰” 기능을 독립형 플러그인으로 구현할 수 있을까요? 아니면 누군가를 고용해서 커스터마이징을 맡기게 된다면, 대략 얼마가 들까요?

1개의 좋아요