Discourse でのユーザー登録時に Zapier を通じて Salesforce リードを作成する

Salesforce のリードは、ユーザーがフォーラムに登録する際に作成できます。これを行うには、Webhook を構成して Zapier にポストし、その後 Zapier の Salesforce 統合を使用してリードを作成します。

新しい Zap の作成

Zapier にログインし、「Make a Zap!」ボタンをクリックします。Zap を作成するためのフォームが表示されるページに移動します。

Zap に名前を付け、フォームの「Trigger」セクションから「Choose App」をクリックします。ページの「Choose a Trigger App」セクションから「Webhooks」を選択します。

「Select Webhooks by Zapier Trigger」フォームで「show less common options」を選択し、次に「Catch Raw Hook」を選択します。

「Save + Continue」をクリックします。

次に、Webhook URL をクリップボードにコピーします。

Discourse ユーザーイベント Webhook の作成

Discourse Webhook を作成するには、Discourse フォーラムの「Admin / API / Webhooks」に移動し、「Add webhook」ボタンをクリックします。表示されるフォームで、Zapier の Webhook URL を「Payload URL」フィールドに貼り付けます。「Which events should trigger this webhook?」の下で「Select individual events」を選択します。次に「User Events」グループの下で「User is created」チェックボックスをオンにします。「Active」チェックボックスをオンにして Webhook を有効にし、「Create」ボタンをクリックします。

:bulb: ヒント: user_created イベントのみを選択しているため、Discourse は新しいユーザーが登録されたときのみこの Webhook を発火し、他のユーザー変更については発火しません。つまり、後述する Zapier のフィルターステップは必須ではありませんが、安全策として推奨されます。

Zapier での Webhook テスト

Zapier に戻り、「Ok, I did this」ボタンをクリックします。

次に、Discourse から Zapier へサンプルリクエストを送信する必要があります。以下のステップをテストするために必要なデータを生成するには、フォーラムで新しいユーザーを作成する必要があります。このために使い捨ての Gmail アドレスを使用すると便利です。新しいユーザーとしてフォーラムに登録し、その後 Zapier のサンプルステップに戻ってデータを確認します。

サンプルを展開して、Discourse から送信されたデータを確認できます。「Continue」をクリックして次のステップに進みます。

Discourse のユーザー作成イベントのキャッチ

Discourse で Webhook を設定する際に user_created イベントのみを選択した場合、このフィルターステップはオプションです。ただし、安全策として依然として有効です。「Add a Step」をクリックし、次に「Filter」をクリックします。

ユーザー作成イベント以外のすべてのイベントを除外するには、フィルターを Headers Http X Discourse Eventuser_created と完全に一致する場合にのみ続行するように設定します。

'

「Test and Continue」ボタンをクリックします。フォーラムで新しいユーザーを作成してサンプルイベントをトリガーした場合、「Success」通知が表示されるはずです。代わりに「Zap が続行されなかった」という通知が表示された場合は、サンプルデータに戻り、Headers Http X Discourse Eventuser_created に設定されていることを確認してください。

「Continue」ボタンをクリックして次のステップに進みます。

Run Javascript ステップによる生ペイロードの解析

Zap のメニューから「Add a Step」をクリックします。次に「Action/Search」をクリックし、アクションメニューから「Code」を選択します。「Code」フォームで「Run-Javascript」を選択します。

Zapier は inputData オブジェクトを作成し、それに名前付きプロパティを追加できます。左列にプロパティの名前を入力します。右列のドロップダウンメニューから「Catch Raw Hook」を選択し、次に「Raw Body」を選択します。

ページを下にスクロールしてコード入力欄を表示します。

次に、サンプルコードを、Raw Body を解析し、最終的なアクションに必要な値を持つオブジェクトを返すコードに置き換える必要があります。以下は私が使用しているコードです。Salesforce には姓(last name)が必要であるため、姓が存在しない場合はエラーが返されます。私の Discourse サイトでは、登録時に必須となる「Company」というカスタムユーザーフィールドを追加しています。このデータを Salesforce に渡したいと考えています。Discourse から送信されたペイロードを確認すると、このフィールドは \"user_fields\":[\"10\"] にあることがわかります。Salesforce に渡したい生データフィールドを返すようにコードを設定する必要があります。

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,
            error: null
           };
  } else {
    return {error: "Missing last name"}
  }
} else {
  return {error: "A user object was not returned"};
}

コードを追加した後、「Continue」ボタンをクリックし、次に「Test This Step」ボタンをクリックします。結果には新しいユーザーのデータが返されるはずです。

失敗したリクエストの除外

JavaScript ステップでエラー(例:「Missing last name」)が返された場合、もう一つのフィルターステップを追加して、Salesforce への失敗したリクエストを回避できます。「Zaps」メニューから「Add a Step」をクリックし、「Filter」をクリックします。エラーがない場合にのみ続行するようにこのフィルターを設定します。

Zapier でのリード作成

「Add A Step」をクリックし、次に「Action/Search」をクリックします。アクションメニューで「Salesforce」を検索して選択します。Salesforce のアクションメニューから「Create Lead」を選択します。「Save + Continue」をクリックします。次に「Connect an Account」をクリックします。Zapier が Salesforce アカウントにアクセスすることを許可するよう求められます。「Test」ボタンをクリックして接続を確認します。

「Set up Salesforce Lead」ページでは、「Run-Javascript」ステップのフィールドを対応する Salesforce のフィールドに追加できます。

「Continue」をクリックし、次に「Send Test To Salesforce」をクリックします。新しい Salesforce リードが表示されるはずです。すべてが正常に機能している場合は「Finish」をクリックし、Zap をオンにします。

「いいね!」 11