Discourseのゲーミフィケーションを外部システム(ポイントの交換と付与)と連携する方法

Discourse Gamification をリリースしてから1年が経ち、ロードマップで最も要望の多かった機能の1つである、Discourse Gamification を外部ゲーミフィケーションシステムと統合する機能が実現しました。例を挙げると、以下のようになります。

  • 社内の既存のゲーミフィケーションプログラムとの統合

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

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

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

この新しいシステムにより、管理者は以下のことが可能になります。

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

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

  • 作成済みのカスタムイベントを更新および一覧表示する

API

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

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

イベント一覧

curl http://example/admin/plugins/gamification/score_events.json -H "Api-Key: apikeyhere" -H "Api-Username: system"

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

curl http://example/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 -H "Api-Key: apikeyhere" -H "Api-Username: system"

イベント作成

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"

イベント更新

jo -p id="1" points="25" description="May 2023 Karaoke atendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
「いいね!」 27

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