Webhook

Webhook はパートナーが作成した HTTPS コールバックで、エージェントがメッセージとイベントに応答する方法を指定します。Webhook を構成したら、メッセージイベントの受信を開始できます。

パートナー Webhook とエージェント Webhook

Webhook は、パートナー レベルまたはエージェント レベルで構成できます。

  • パートナー Webhook は、あなたが管理するすべてのエージェントに適用されます。エージェントの動作が類似している場合や、エージェントが 1 つしかない場合は、パートナー Webhook を使用します。
  • エージェント Webhook は個々のエージェントに適用されます。動作が異なる複数のエージェントを操作する場合は、エージェントごとに異なる Webhook を設定できます。

パートナー Webhook とエージェント Webhook の両方を構成した場合、エージェント Webhook は特定のエージェントで優先され、パートナー Webhook は独自の Webhook を持たないエージェントに適用されます。

エージェント Webhook を構成する

パートナー Webhook でエージェントに送信されたメッセージを受信します。特定のエージェントからのメッセージを別の Webhook に到着させる場合は、エージェント Webhook を設定します。

  1. ビジネス コミュニケーションのデベロッパー コンソールを開き、RBM パートナーの Google アカウントでログインします。
  2. エージェントをクリックします。
  3. [Integrations] をクリックします。
  4. [Webhook] で [構成] をクリックします。
  5. [Webhook エンドポイント URL] に、「https://」で始まる Webhook URL を入力します。
  6. clientToken の値をメモします。これは、受信したメッセージが Google から送信されていることを確認するために必要です。
  7. 指定された clientToken パラメータを含む POST リクエストを受け入れ、レスポンス本文として secret パラメータの書式なしテキスト値を含む 200 OK レスポンスを送信するように、Webhook を構成します。

    たとえば、Webhook が次のような本文を含む POST リクエストを受け取ったとします。

    {
      "clientToken":"SJENCPGJESMGUFPY",
      "secret":"1234567890"
    }
    

    この場合、Webhook は clientToken 値を確認し、clientToken が正しい場合は、1234567890 をレスポンス本文とする 200 OK レスポンスを返します。

    // clientToken from Configure
    const myClientToken = "SJENCPGJESMGUFPY";
    
    // Example endpoint
    app.post("/rbm-webhook", (req, res) => {
      const msg = req.body;
      if (msg.clientToken === myClientToken) {
          res.status(200).send(msg.secret);
          return;
      }
      res.send(400);
    });
    
  8. Play Console で [確認] をクリックします。RBM が Webhook を検証すると、ダイアログが閉じます。

受信メールを確認する

Webhook はどの送信者からでもメッセージを受信できるため、メッセージの内容を処理する前に、Google が着信メッセージを送信したことを確認する必要があります。

受信したメッセージが Google から送信されたことを確認する手順は次のとおりです。

  1. メッセージの X-Goog-Signature ヘッダーを抽出します。これは、メッセージ本文のペイロードのハッシュされ、base64 でエンコードされたコピーです。
  2. リクエストの message.body 要素内の RBM ペイロードを Base64 でデコードします。
  3. Webhook のクライアント トークン(Webhook の設定時に指定したもの)をキーとして使用し、base-64 でデコードされたメッセージ ペイロードのバイトの SHA512 HMAC を作成し、結果を base64 でエンコードします。
  4. X-Goog-Signature ハッシュと作成したハッシュを比較します。
    • ハッシュが一致した場合、Google がメッセージを送信したことが確認されています。
    • ハッシュが一致しない場合は、既知の正常なメッセージのハッシュ化プロセスを確認します。

      ハッシュ化プロセスが正常に機能し、不正に送信されたと思われるメッセージを受け取った場合は、Google にお問い合わせください。

Node.js

  if ((requestBody.hasOwnProperty('message')) && (requestBody.message.hasOwnProperty('data'))) {
    // Validate the received hash to ensure the message came from Google RBM
    let userEventString = Buffer.from(requestBody.message.data, 'base64');
    let hmac = crypto.createHmac('sha512', CLIENT_TOKEN);
    let data = hmac.update(userEventString);
    let genHash = data.digest('base64');
    let headerHash = req.header('X-Goog-Signature');

    if (headerHash === genHash) {
      let userEvent = JSON.parse(userEventString);

      console.log('userEventString: ' + userEventString);
      handleMessage(userEvent);
    } else {
      console.log('hash mismatch - ignoring message');
    }
  }

  res.sendStatus(200);
  

次のステップ

Webhook を構成すると、エージェントはテストデバイスからメッセージを受信できるようになります。メッセージを送信して設定を検証します。