Discourse Gamificationを外部システムと統合する方法(ポイントの交換と付与)

Discourse Gamificationを1年前にリリースして以来、ロードマップで最も要望の多かった機能の1つが、Discourse Gamificationを外部のゲーミフィケーションシステムと統合する機能でした。例は多数あります。

  • 企業における既存のゲーミフィケーションプログラムとの統合

  • IRLイベントや、コミュニティの顧客であること、製品の購入など、Discourse外で発生するイベントに対してポイントを付与する機能。

  • ユーザーがポイントを景品、製品、特典と交換できるようにする機能

本日、プラグインの1周年記念に合わせて、カスタムのスコアリングイベントを処理するための完全なAPIにより、上記すべてが可能になりました :tada:

この新しいシステムにより、管理者は次のことができるようになります。

  • ユーザーにカスタムスコアイベントを付与する

  • 交換やペナルティのイベントに対応するため、ユーザーにマイナスのスコアイベントを付与する

  • 以前作成されたカスタムイベントを更新および一覧表示する

API

:warning: API経由で付与されたポイントがユーザーの総合スコアに反映されるまでには、現在の日付で作成されたイベントの場合は最大10分、過去10日間に作成されたイベントの場合は最大24時間かかります。過去10日より前の日付で作成されたイベントについては、バックフィル(backfill)のrakeタスクを実行する必要があります。

現在、3つの異なるAPIエンドポイントがあります。

イベントの一覧表示

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

特定のユーザーまたは日付のイベントを一覧表示することもできます。

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?user_id=1\u0026date=2023-05-01 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

イベントの作成

curl -X POST https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-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"

イベントの更新

curl -L -X PUT https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?id=6 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 11,
  "date": "2023-04-15",
  "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

これは素晴らしいですね。ちょうどアンバサダー/チャンピオンプログラムを開始・パイロット運用している最中で、さまざまなソース(Discourse、GitHub、Ghost)からのWebhookを監視し、チャンピオンプログラムを集約するためにAirtableを使用しています。これをチェックして、プログラムや貢献の管理/監視に利用できるかどうかを確認するのが楽しみです。

ユーザーではなく、ユーザーグループにポイントを付与できると素晴らしいです。エンタープライズ顧客としてのユースケースは、基本的にユーザーが所属する会社にポイントを付与し、会社ごとにポイントを集約したいということです。このようなことの実現可能性はいかがでしょうか?

「いいね!」 9

ああ、使い方がわかりません:smiling_face_with_tear:
ビジネスプランを利用しています。

UIから操作できたらいいのですが。

それでも、このチームを構築してくれてありがとうございます!これからも頑張ってください。

「いいね!」 5

Discourse で Automation プラグイン を使用して、一度限りのポイントを付与することは可能でしょうか?

「いいね!」 1

ポイントの引き換えはどのように機能しますか? 個々のイベントからポイントを差し引くために使用できる更新イベントがあるようですが、ポイントを引き換えるには非効率的な方法のように思えます。

また、Discourse インスタンスでイベントを一覧表示しようとすると、404 が返されます。

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

404 Not Found
「要求された URL またはリソースが見つかりませんでした。」

プラグインを有効にし、UI を通じて設定できます。外部システム API を有効にするために何か見落としていることはありますか?

「いいね!」 1

銀行での10年間の経験のせいかもしれませんが、ポイントの引き換えについて私が思い描いているのは、マイナスの値を持つカスタムイベントを発行することです。

たとえば、ユーザーがTシャツと引き換えにポイントを使用したいとしましょう。そのTシャツは10,000ポイントかかります。あなたの引き換えシステムでのフローは次のようになります。

  1. ユーザーが十分なポイントを持っているか確認します。
curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
  1. 「ポイント引き出し」イベントを発行します。
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"

これはセマフォのようなものでラップする必要があるでしょう。これはそれらを使用する教科書的な例ですが、提案されたワークフローの概要は次のとおりです。

これは非常に新しい機能なので、提案されたワークフローが正しく機能しない場合はお知らせください。

ブラウザと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

本日、少しテストしてみました。追跡できるイベントは確認できましたが、ユーザーIDでイベントを絞り込む直接的なクエリがあるかどうかは不明です。監査ログを作成したり、ユーザーにポイントの獲得/喪失方法を提示したりする方法を探しています。

「いいね!」 1

API呼び出しが成功してポイントが追加されたときに、UIに何か記録されますか?

素晴らしい!そして、もう一つ提案があります。UIインターフェースで、ユーザーがサブスクリプションのポイントを交換できる機能を追加することは可能でしょうか?また、イベント(トピック作成など)でユーザーが1日に獲得できるポイント数に上限を設定する機能も追加できるでしょうか?

ありがとうございます!

いいえ、この機能は100% APIベースです。OPで説明されているように、「イベント一覧」エンドポイントを呼び出してイベントを確認できます。

「いいね!」 3