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

일 년 전 Discourse Gamification을 출시한 이래, 로드맵에서 가장 많이 요청된 기능 중 하나는 외부 게이미피케이션 시스템과 Discourse Gamification을 통합할 수 있도록 하는 것이었습니다. 예를 들어 다음과 같은 경우가 있습니다:

  • 기업 내 기존 게이미피케이션 프로그램과 통합

  • Discourse 외부에서 발생하는 이벤트(예: 오프라인(IRL) 이벤트)나 온라인 다른 곳(예: 커뮤니티 고객, 제품 구매)에서 포인트를 부여할 수 있는 기능

  • 사용자가 포인트를 굿즈, 제품 또는 혜택으로 교환할 수 있는 기능

오늘, 플러그인의 1주년을 맞아 커스텀 스코어링 이벤트를 처리하기 위한 전체 API를 통해 위 모든 기능을 가능하게 했습니다 :tada:.

이 새로운 시스템은 관리자가 다음을 수행할 수 있게 합니다:

  • 사용자에게 커스텀 스코어링 이벤트를 부여

  • 교환 또는 패널티 이벤트를 처리하기 위해 사용자에게 음수 스코어링 이벤트를 부여

  • 이전에 생성된 커스텀 이벤트를 업데이트 및 목록으로 보기

API

:warning: API를 통해 부여된 포인트는 현재 날짜로 생성된 이벤트의 경우 사용자의 전체 점수에 반영되는 데 최대 1시간이 소요되며, 지난 10일 이내에 생성된 이벤트의 경우 최대 24시간이 소요됩니다. 10일 이전 날짜로 생성된 이벤트의 경우, 관리자 게이미피케이션 UI의 Recalculate Scores 버튼을 사용하거나 백필 rake 태스크를 실행할 수 있습니다: rake gamification_scores:backfill_scores_from[YYYY-MM-DD].

현재 3개의 서로 다른 API 엔드포인트가 있습니다.

이벤트 목록

최대 100개의 이벤트를 반환합니다. id, user_id, 및/또는 date로 필터링할 수 있습니다.

curl https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'

특정 사용자 또는 날짜의 이벤트도 목록으로 볼 수 있습니다:

curl https://<example_url>/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'

이벤트 생성

curl -X POST https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 13,
  "date": "2023-04-14",
  "points": 15,
  "description": "May 2023 Karaoke attendee"
}'

jo를 사용한 대체 문법:

jo -p user_id="13" date="2023-04-14" points="15" description="May 2023 Karaoke atendee" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

이벤트 업데이트

업데이트 엔드포인트에는 id와 points가 필요합니다. description은 선택적으로 업데이트할 수 있습니다. 생성 후에는 user_id와 date를 변경할 수 없습니다.

curl -L -X PUT https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
  "id": 6,
  "points": 25,
  "description": "May 2023 keynote attendee"
}'

jo를 사용한 대체 문법:

jo -p id="11" points="25" description="May 2023 Karaoke attendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
29개의 좋아요

UI를 통해 이 작업을 수행할 수 있는 방법이 있나요?

9개의 좋아요

기업 고객이 스폰서를 원한다면 고려해 볼 수 있는 부분입니다.

10개의 좋아요

정말 놀랍습니다. 저희는 현재 앰배서더/챔피언 프로그램을 시작하고 파일럿 테스트를 진행 중인 단계이며, Airtable을 사용해 다양한 소스(Discourse, GitHub, Ghost)에서 오는 웹훅을 모니터링하고 챔피언 프로그램 데이터를在那里에 집계하고 있습니다. 이 도구를 통해 저희 프로그램과 기여 사항을 관리/모니터링할 수 있을지 확인해 보고 싶습니다.

개인 사용자 대신 사용자 그룹에 포인트를 부여할 수 있다면 좋겠습니다. 엔터프라이즈 고객으로서의 사용 사례는, 기본적으로 사용자가 속한 회사에 포인트를 부여하고 각 회사의 포인트를 집계하는 것입니다. 이러한 기능이 실현 가능한지 궁금합니다.

9개의 좋아요

아, 이거 어떻게 사용해야 하는지 모르겠어요 :smiling_face_with_tear:
우리는 비즈니스 플랜을 사용 중입니다.

UI를 통해 이걸 운영할 수 있으면 좋겠어요.

그래도 이걸 만들어 주신 팀에게 감사드립니다! 좋은 일 계속하세요.

5개의 좋아요

이것은 Automation 플러그인을 사용하여 Discourse에서 일시적인 포인트를 부여하는 데 도움이 될 수 있나요?

1개의 좋아요

포인트 사용은 어떻게 이루어지나요? 개별 이벤트에서 포인트를 차감하는 데 사용할 수 있는 업데이트 이벤트가 있는 것 같지만, 포인트를 사용하는 방법으로서는 비효율적으로 보입니다.

또한, 내 Discourse 인스턴스에서 이벤트를 나열하려고 하면 404 오류가 발생합니다.

GET https://developer.sailpoint.com/discuss/admin/plugins/gamification/score_events.json

404 Not Found
“요청한 URL 또는 리소스를 찾을 수 없습니다.”

플러그인은 활성화되어 있고 UI를 통해 설정할 수 있습니다. 외부 시스템 API를 활성화하는 데 누락된 부분이 있을까요?

1개의 좋아요

저는 은행에서 10년간 근무한 경험 탓인지, 포인트 소액 방식을 음수 값의 커스텀 이벤트를 발행하는 것으로 구상하고 있습니다.

예를 들어, 사용자가 티셔츠를 포인트로 교환하려고 한다고 가정해 보겠습니다. 그리고 그 티셔츠의 가격이 10k 포인트라고 합시다. 소액 시스템의 흐름은 다음과 같습니다:

  1. 사용자가 충분한 포인트를 가지고 있는지 확인:

    curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
    
  2. “포인트 인출” 이벤트를 발행합니다.

    jo -p user_id="13" date="2023-04-14" points="-10000" description="T-Shirt Redeem - order #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
    

이것은 세마포어(semaphore)를 사용하는 교과서적인 예시이므로, 어떤 형태로든 세마포어로 감싸야 합니다. 하지만 제안된 워크플로우의 요지는 바로 이겁니다.

이것은 매우 최근의 기능입니다. 제안된 워크플로우가 올바르게 작동하지 않는다면 알려 주세요.

저에게는 브라우저와 API를 통해 모두 정상적으로 작동합니다. 이는 관리자 엔드포인트이므로, 브라우저로 로그인한 관리자가 되어야 하거나, OP에서 설명한 대로 API 키를 전달해야 합니다.

3개의 좋아요

아, 그게 빠져 있던 부분이군요. 음의 포인트를 발행할 수 있다는 걸 몰랐습니다. 그러면 완벽하게 작동할 것 같습니다.

:man_facepalming: 만료된 자격 증명을 사용 중이었네요. 확인해 주셔서 감사합니다.

2개의 좋아요

@Falco

이 API에 스코프를 추가할 계획이 있나요? 현재 점수를 생성하거나 업데이트하는 유일한 방법이 전역 액세스 권한이 있는 관리자 API 키를 사용하는 것 같습니다. 점수 업데이트만 가능하도록 제한하는 스코프가 있으면 좋겠습니다. 이렇게 하면 관리자 키가 점수 업데이트 외의 많은 작업을 수행할 수 있다는 우려 없이, 자동화 도구에서 이 API를 사용하는 데 대한 신뢰도가 높아질 것입니다.

3개의 좋아요

좋은 아이디어이지만, 저는 가까운 미래에 이 작업을 진행할 여력이 없습니다.

이 기능을 후원하고 싶으시다면 견적을 받아보실 수 있도록 지원 채널로 연락해 주세요.

3개의 좋아요

여기서도 같은 문제를 겪고 있습니다:

{"errors":["The requested URL or resource could not be found."],"error_type":"not_found"}

그 오류의 원인은

이것입니다. 그러니 본인의 자격 증명도 확인해 보세요 :wink:

1개의 좋아요

감사합니다. 혹시 모르니 저도 최신 버전으로 업데이트할게요.

최신 버전으로 업데이트하니 작동했습니다! 감사합니다

1개의 좋아요

오늘 이 기능을 조금 테스트해 봤습니다. 추적할 수 있는 이벤트는 확인했지만, userid 기준으로 이벤트만 조회할 수 있는 직접적인 쿼리가 있는지 확실하지 않습니다. 감사 로그를 만들거나, 사용자가 어떻게 포인트를 획득하거나 잃었는지를 표시하는 방법을 찾고 있습니다.

1개의 좋아요

API 호출을 통해 포인트를 성공적으로 추가할 때 UI에 어떤 것이 기록(log)되나요?

멋지네요! 그리고 또 다른 제안이 있는데요, UI 인터페이스에서 사용자가 포인트로 구독을 교환할 수 있는 기능을 추가할 수 있을까요? 그리고 이벤트(예: 토픽 생성)에서 사용자가 하루에 벌 수 있는 포인트 수에 한도를 설정할 수 있는 기능도요.

감사합니다!

아니요, 이 기능은 100% API 기반입니다. OP에 설명된 대로 “List Events” 엔드포인트를 호출하여 이벤트를 확인할 수 있습니다.

3개의 좋아요