Discourse Webhooks で Zapier タスクをトリガーする

Discourse Webhooks を使って Zapier 経由でタスクを実行したいですか?早速始めましょう!

:bulb: ヒント: 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 でのアクションの設定

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 ユーザーアカウントが匿名化された

:tada:


特定のユーザーイベントでトリガーする

アカウント作成時のみなど、特定のユーザーイベントに対してのみメールを送信したい場合は、「Catch Raw Hook」トリガーを使用してください。

  1. 「show less common options」をクリックします。
  2. 「Catch Raw Hook」をクリックします。
  3. 残りの手順に従って通常通りトリガーを設定します。

トリガーが設定されたら、フィルターを追加します。

  1. 「Add a Step」をクリックします。
  2. 「Filter」をクリックします。
  3. 「Save and Continue」をクリックします。
  4. 最初のドロップダウンから「Headers Http X Discourse Event」を選択します。
  5. 2 番目のドロップダウンから「(Text) Exactly matches」を選択します。
  6. フィルターしたい完全なヘッダーを入力します(例:user_logged_out)。
  7. 複数のヘッダーで Zapier を実行したい場合は、「+OR」をクリックし、最初のものと同じように追加します。
  8. 「Test & Continue」をクリックします。
  9. フィルターテストを確認し、「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」アクションによって返されたプロパティを使用してください。

「いいね!」 32