API を通じてカスタムバッジを付与する

フォーラムで作成したカスタムバッジは、API を介して付与できます。これは、カスタムバッジの SQL を使用せずにバッジを授与する優れた方法です。

API を通じてバッジを付与するには、バッジを付与したいユーザーのユーザー名と、付与したいバッジの ID(または名前)を知る必要があります。また、サイトの「管理 > API > キー」セクション(/admin/api/keys)で API キーを生成していることを確認してください。

バッジ ID の特定

バッジ ID は、バッジの URL から取得できます。「管理/バッジ」セクションに移動し、付与したいバッジをクリックします。URL は次のようになります。https://forum.example.com/admin/badges/102。URL の最後の数字がバッジ ID です。

API 呼び出しの実行

API 呼び出しをテストするには、curl または Postman を使用してバッジの付与を試すことができます。以下は、ターミナルから curl を使用してバッジを付与する方法です。

まず、作業を簡単にするために api_key 変数を設定します。

api_key=yourapikey

次に、ID が 102 のバッジをユーザー bobby に付与します。

curl -X POST "https://forum.example.com/user_badges" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "username=bobby" \
-F "badge_id=102" \
-F "reason=https://forum.example.com/t/whats-the-best-photo-youve-ever-taken/160/2"

badge_id の代わりに badge_name を使用して、バッジをその名前で識別することもできます。

-F "badge_name=My Custom Badge"

reason パラメータはオプションです。指定する場合は、サイト上のトピックまたは投稿の URL に設定する必要があります。

バッジの詳細と付与された時刻を含む JSON 応答が返されます。

「いいね!」 27

Has anybody added a badge (or flair) via Zapier to Discourse API like outlined here?

Also, seems like a great candidate for an action via the official integration, @HAWK.

「いいね!」 3

画像付きカスタムバッジをAPI経由で作成する方法に関する Create a custom badge with an image through the API も参照してください。このリンクには、アップロード方法と、バッジの付与に関する別の例(Python)も記載されています。

「いいね!」 1

このメソッドが https://docs.discourse.org/ のAPIドキュメントに記載されていない理由は何ですか?

そこで見つけられませんでした。

「いいね!」 2

ドキュメントを完全な状態に保ったり、最新の状態にしたりすることが誰の仕事でもないようで、誰かが親切にもここに手順を投稿したからです。一般的に、APIのドキュメントはDiscourse APIのリバースエンジニアリングとソースコードを見ることによって作成されます。

「いいね!」 7

API経由でこのようなバッジの付与を自動化する方法はないということですね。

例えば、返信に5,000いいねが付いた人にバッジが付与される、といった具合です。

「いいね!」 1

セルフホストまたはエンタープライズをご利用の場合は、バッジSQLを有効にする必要があります。

「いいね!」 2

バッジSQLを有効にできない場合、技術的には自動化可能ですが、2段階のプロセスになります。まず、APIリクエストを実行して、条件を満たしているがまだバッジが付与されていないユーザーのユーザー名を返すData Explorerクエリを実行します。Discourse APIでData Explorerクエリを実行する。次に、そのクエリによって返されたユーザー名を使用して、API経由でバッジを付与します。

ただし、これは少し非効率に感じます。私の知る限り、単一のAPI呼び出しで複数のユーザーにバッジを付与するために使用できるルートはないため、資格のあるユーザー数によっては、多数のAPIリクエストを行うことになる可能性があります。

最終的には、これはAutomationプラグインで処理できる種類のもののようです。指定されたクエリIDを持つData Explorerクエリを実行する定期的なトリガーを設定できます。クエリによって返されたフィールドに基づいて、結果を使用してさまざまなスクリプトをトリガーできます。たとえば、クエリによってusernameフィールドが返された場合、バッジを付与したり、ユーザーをグループに追加したりするスクリプトを実行するために使用できます。

「いいね!」 2

バッジのSQLが無効になった原因と同じ問題が発生しませんか?

「いいね!」 1

そうは思いません。Data Explorer のクエリは、10 秒後にタイムアウトするトランザクション ブロックで実行されます。これは、バッジ クエリがトリガーする可能性のある種類の問題を回避するためのものだと思います。もし設定がそのようになっていなければ、非効率的な Data Explorer クエリがサイトをクラッシュさせる可能性があります。

今考えてみると、カスタム バッジ SQL にも同様のセーフガードがあるかどうか疑問に思います。

「いいね!」 4