Discourse API へのリクエストは、Zapier Webhook をアクションステップとして使用する Zap を作成することで自動化できます。このトピックでは、以下のアクションのリクエストを実行する方法について説明します。
- ユーザーをグループに追加
- カスタムバッジの付与
Zapier を使用して他の種類の API リクエストを実行する方法については、このトピックを読み、次に Discourse API ドキュメント で目的のアクションを検索してください。また、特定のアクションに対する API リクエストの作成方法については、Reverse engineer the Discourse API を参照してください。
トリガーステップの設定
各 Zap にはトリガーとアクションステップが必要です。トリガーは、アプリケーションから Zap のアクションステップへデータを渡すために使用されます。場合によっては、トリガーは特定の条件を満たすデータがある場合にのみ Zap がアクションステップを完了するように制御するためにも使用できます。
アクションステップを設定するには、Zapier ダッシュボード にアクセスし、「Make a Zap」ボタンをクリックしてください。トリガーアプリを選択するための検索フォームが開きます。
このトピックの例では、テスト用に API 呼び出しを設定しやすい WordPress の「New User」イベントをアクションステップとして使用しています。
トリガーステップの「Test This Step」ノードを使用すると、トリガーアプリから取得したデータサンプルを選択し、Zap のアクションステップに渡すことができます。このデータはアクションステップの設定に役立ちます。
Discourse から詳細を取得するためのオプションステップの追加
トリガーアプリから渡されるデータの種類によっては、最終的な API リクエストを行う前に Discourse からデータを取得する必要がある場合があります。例えば、WordPress の「New User」トリガーは、ユーザーの WordPress ユーザー名とメールアドレスを渡します。メールアドレスは Discourse ユーザーのメールアドレスと一致することはわかっていますが、この例の API リクエストでは、ユーザーの Discourse ユーザー名を知る必要があります。
メールアドレスからユーザーの Discourse 詳細を取得するには、Zap にアクションステップを追加してください。Webhook のアクションメニューから「GET」を選択します。
Webhook の編集テンプレートステップで、Discourse サイトのベース URL の後に /admin/users/list/all.json を続けて URL セクションに入力します。例えば、私のサイトのベース URL が https://demo.scossar.com の場合、URL フィールドに https://demo.scossar.com/admin/users/list/all.json と入力します。
Query String Params セクションで、キーとして「email」を入力し、「Insert a Field」アイコンをクリックしてドロップダウンメニューを開きます。ユーザーのメールアドレスを含むトリガーステップで渡された値を選択してください。
リクエストの認証
フォームを下にスクロールして Headers セクションに移動してください。このセクションはリクエストの認証に使用されます。以下の 3 つのキー/値のペアが必要です。
Api-Username: サイトの管理者ユーザー名。ほとんどの場合、「system」ユーザーが適しています。Api-Key: 最初のキー/値のペアで使用したユーザー名に関連付けられた API キーContent-Type:multipart/form-data
完了した Headers セクションは、ユーザーの API キーを使用している場合、以下のような表示になります。
「Continue」ボタンをクリックして、このリクエストに対して Discourse から取得されたデータを確認してください。
最終的なアクションステップの追加
トリガーと Discourse からデータを取得するためのオプションステップが設定されたら、「Add a Step」リンクをクリックし、アクションメニューから「Webhooks by Zapier」を選択してください。その後、Discourse への API リクエストで使用するリクエストメソッドを選択するよう求められます。
このトピックで使用される例に必要なリクエストタイプは以下の通りです。
- ユーザーをグループに追加:
PUT - カスタムバッジの付与:
POST
このトピックの例以外の API リクエストを設定するには、Discourse API ドキュメント を確認し、目的のリクエストの例があるか調べてください。例が見つからない場合は、Discourse API のリバースエンジニアリング方法 を読み、目的のアクションの URL とリクエストメソッドを見つける方法を学びましょう。リクエストメソッドが見つかったら、アクションメニューから選択してください。
注:リクエストに DELETE メソッドを使用する場合は、アクションメニューから「Custom Request」を選択してください。
最終的なアクションステップの設定
アクションの Headers セクションは、すべての API リクエストで同じ方法で設定できます。詳細については、このトピックの「リクエストの認証」セクションを参照してください。Discourse から詳細を取得するためのオプションステップを追加している場合、最終的なアクションの Headers セクションも、そのステップと同じ方法で設定できます。
Header のキー/値ペアを追加した後、API リクエストのフォームの URL フィールドと Data フィールドを入力する必要があります。
ユーザーをグループに追加
ユーザーをグループに追加するには、/groups/<group_id>/members.json に対して PUT リクエストを送信します。グループ ID を見つける最も簡単な方法は、Discourse UI を通じてグループページにアクセスし、ブラウザのアドレスバーの URL に .json を追加することです。例えば、私のサイトには https://demo.scossar.com/g/support に「support」グループがあります。https://demo.scossar.com/g/support.json にアクセスすると、グループ ID が 41 であることがわかります。私のフォーラムのベース URL は https://demo.scossar.com です。ユーザーをグループに追加する最終的なアクションステップの URL は https://demo.scossar.com/groups/41/members.json に設定されます。
ユーザーをグループに追加するリクエストには、1 つのパラメータ(カンマ区切りのユーザー名リスト)が必要です。フォームの Data セクションで、キーとして「usernames」を入力します。その後、「Insert a Field」アイコンをクリックして、トリガーまたはオプションの GET アクションステップから渡されたユーザー名プロパティを検索してください。
私の場合、GET ステップで取得したユーザー名を使用したいので、「GET」メニューを展開し、ドロップダウンから「Username」を選択します。
フォームの他のセクションはデフォルト値のままにしてください。
「Continue」ボタンをクリックしてステップをテストしてください。以前のステップで渡したユーザーが Discourse サイトに存在し、選択したグループのメンバーでない場合、ステップをテストするとそのユーザーがグループに追加されます。
すべてが期待通りに動作すれば、Zap を有効にしてください。
カスタムバッジの付与
ユーザーにカスタムバッジを付与するには、フォーラムのベース URL に /user_badges を追加した URL に対して POST リクエストを送信します。私のサイトのバッジ付与 URL は https://demo.scossar.com/user_badges です。Zapier での完了した URL フィールドは以下のようになります。
フォームの Data セクションには 2 つのキー/値のペアが必要です。「username」キーを追加し、ユーザー名を返すフィールドに設定してください。「badge_id」キーを追加し、付与したいバッジの ID に設定してください。バッジ ID は、管理画面の「Badges」ページに移動し、左側のメニューからバッジを選択することで確認できます。ブラウザのアドレスバーの URL の最後の値がバッジ ID となります。
私が付与しているバッジの ID は 105 なので、完了した Data セクションは以下のようになります。
フォームの Headers セクションが設定されていることを確認し、「Continue」をクリックしてください。その後、「Send Test」ボタンをクリックして Zap をテストしてください。以前のステップで渡したユーザーにバッジが付与されているはずです。
すべてが正しく動作している場合は、Zap を有効にしてください。












