Discourse Webhooks を使って Zapier 経由でタスクを実行したいですか?早速始めましょう!
ヒント: Zapier には現在、組み込みのトリガーとアクション(例:「新しい投稿」「投稿の作成」)を備えた 公式の Discourse 統合 があります。一般的なユースケースでは、汎用的な Webhook を手動で設定するよりもこちらの方が簡単です。以下のガイドでは、より高い柔軟性とすべての Discourse イベントタイプへのアクセスを可能にする手動 Webhook 設定について説明します。
Zapier にはトリガーとアクションが必要です。このチュートリアルでは、トリガーを Discourse Webhook に、アクションをメール送信に設定します。
任意のユーザーイベントでメールを送信する
ここでは、ユーザーイベント(ユーザーの作成、承認、更新、ログイン、ログアウト、停止など)が発生したときにメールを送信する Zap を設定します。特定のユーザーイベントをトリガーにする場合は、以下の 特定のユーザーイベントでトリガーする を参照してください。
Discourse Webhook の作成
-
ユーザーイベント用の新しい Discourse Webhook を作成します。
次のステップで Webhook URL が生成されたら、「ペイロード URL」を更新します。
新しい Zap の作成
Zapier ダッシュボードでこのボタンを探してください: ![]()
トリガーの設定
-
トリガーとして「Webhook」を選択します。以下を探してください:
-
トリガーを選択
「Catch Hook」を選択してください。
-
「Set up Webhooks by Zapier Hook」ステップはスキップできます。
「Continue」を押すだけです。
-
トリガーをテスト
生成されたカスタム Webhook URL をコピーし、最初に作成した Discourse Webhook の「ペイロード URL」セクションに貼り付けます。

次に、Discourse インスタンスでユーザーの作成/更新/承認を試みてください。
すべての手順を正しく実行し、ユーザーの作成/更新/承認が成功した場合、Zapier で成功メッセージが表示されます。
「view your hook」ハイパーリンクをクリックすると、解析されたデータが表示されます。
Zapier でのアクションの設定
-
アクションとして「Email」を選択します。以下を探してください:
-
「Save + Continue」を押します。
-
メールテンプレートの設定
必要に応じてメールテンプレートをさらに変更してください。JSON 応答で解析されたデータを追加するには、
+ボタンを使用できます。次にアクションをテストします。Zapier からメールが届くはずです。
Zap をオンにする
これで完了です。すべてのユーザーイベントに対してメールが届くようになります。Webhook をトリガーできるユーザーイベントの完全なリストは以下の通りです:
| イベント名 | 説明 |
|---|---|
user_created |
新しいユーザーアカウントが作成された |
user_approved |
ユーザーが承認された |
user_updated |
ユーザープロフィールが更新された |
user_logged_in |
ユーザーがログインした |
user_logged_out |
ユーザーがログアウトした |
user_confirmed_email |
ユーザーがメールを確認した |
user_destroyed |
ユーザーアカウントが削除された |
user_suspended |
ユーザーが停止された |
user_unsuspended |
ユーザーの停止が解除された |
user_anonymized |
ユーザーアカウントが匿名化された |
![]()
特定のユーザーイベントでトリガーする
アカウント作成時のみなど、特定のユーザーイベントに対してのみメールを送信したい場合は、「Catch Raw Hook」トリガーを使用してください。
- 「show less common options」をクリックします。
- 「Catch Raw Hook」をクリックします。
- 残りの手順に従って通常通りトリガーを設定します。
トリガーが設定されたら、フィルターを追加します。
- 「Add a Step」をクリックします。
- 「Filter」をクリックします。
- 「Save and Continue」をクリックします。
- 最初のドロップダウンから「Headers Http X Discourse Event」を選択します。
- 2 番目のドロップダウンから「(Text) Exactly matches」を選択します。
- フィルターしたい完全なヘッダーを入力します(例:
user_logged_out)。 - 複数のヘッダーで Zapier を実行したい場合は、「+OR」をクリックし、最初のものと同じように追加します。
- 「Test & Continue」をクリックします。
- フィルターテストを確認し、「Continue」をクリックします。
フィルターが設定されたら、希望するアクションを設定します。
完全な Webhook ヘッダーの使用
ヘッダーにアクセスするには、前述の手順に従ってください。「Catch Raw Hook」を選択し、フィルターを追加します。フィルターを設定して、Headers Http X Discourse Event が対象のイベントと一致する場合にのみ続行するようにします。
ここでの難しさは、「Catch Raw Hook」が Webhook の生の本文(raw body)を渡すことです。最終的なアクションには本文から解析されたデータが必要です。私の場合、フィルター後に Code アクションを追加することで対応しています。Code Action モーダルで「Run Javascript」を選択します。
Zapier は、名前付きプロパティを追加できる inputData オブジェクトを作成します。左列にプロパティの名前を入力します。右列のドロップダウンメニューから「Catch Raw Hook」を選択し、次に「Raw Body」を選択します。
ページを下げてコード入力欄を表示します。
次に、サンプルコードを、Raw Body を解析し、最終的なアクションに必要な値を含むオブジェクトを返すコードに置き換える必要があります。以下が私が使用しているコードです。このコードが返すオブジェクトは、Salesforce 統合で使用されています。Salesforce には姓(last name)が必要であるため、姓が存在しない場合はエラーが返されます。
const parsed = JSON.parse(inputData.raw);
if (parsed.user) {
const user = parsed.user,
name = user.name,
userFields = user.user_fields;
let firstName,
lastName,
company;
if (name) {
const splitName = name.split(' ');
firstName = splitName[0];
lastName = splitName[1]
}
if (userFields) {
company = userFields['10'];
}
if (lastName) {
return {id: user.id,
username: user.username,
lastName: lastName,
firstName: firstName,
email: user.email,
company: company
};
} else {
return {error: "Missing last name"}
}
} else {
return {error: "A user object was not returned"};
}
最終的なアクションで失敗したリクエストを行わないように、もう一つ Zapier フィルターを追加することもできます。そのフィルターを、JavaScript によって返されたエラーフィールドが存在しない場合にのみ続行するように設定します。
その後、最終的なアクションを追加できます。最終的なアクションで使用されるフィールドを選択する際は、「Run Javascript」アクションによって返されたプロパティを使用してください。























