Webhook はパートナーが作成した HTTPS コールバックで、エージェントがメッセージとイベントに応答する方法を指定します。Webhook を構成したら、メッセージとイベントの受信を開始できます。
パートナー Webhook とエージェント Webhook
Webhook は、パートナー レベルまたはエージェント レベルで構成できます。
- パートナー Webhook は、あなたが管理するすべてのエージェントに適用されます。エージェントの動作が類似している場合や、エージェントが 1 つしかない場合は、パートナー Webhook を使用します。
- エージェント Webhook は個々のエージェントに適用されます。動作が異なる複数のエージェントを操作する場合は、エージェントごとに異なる Webhook を設定できます。
パートナー Webhook とエージェント Webhook の両方を構成した場合、エージェント Webhook は特定のエージェントで優先され、パートナー Webhook は独自の Webhook を持たないエージェントに適用されます。
エージェント Webhook を構成する
パートナー Webhook でエージェントに送信されたメッセージを受信します。特定のエージェントからのメッセージを別の Webhook に到着させる場合は、エージェント Webhook を設定します。
- ビジネス コミュニケーションのデベロッパー コンソールを開き、RBM パートナーの Google アカウントでログインします。
- エージェントをクリックします。
- [Integrations] をクリックします。
- [Webhook] で [構成] をクリックします。
- [Webhook エンドポイント URL] に、「https://」で始まる Webhook URL を入力します。
clientToken
の値をメモします。これは、受信したメッセージが Google から送信されていることを確認するために必要です。指定された
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); });
Play Console で [確認] をクリックします。RBM が Webhook を検証すると、ダイアログが閉じます。
受信メールを確認する
Webhook はどの送信者からでもメッセージを受信できるため、メッセージの内容を処理する前に、Google が着信メッセージを送信したことを確認する必要があります。
受信したメッセージが Google から送信されたことを確認する手順は次のとおりです。
- メッセージの
X-Goog-Signature
ヘッダーを抽出します。これは、メッセージ本文のペイロードのハッシュされ、base64 でエンコードされたコピーです。 - リクエストの
message.body
要素内の RBM ペイロードを Base64 でデコードします。 - Webhook のクライアント トークン(Webhook の設定時に指定したもの)をキーとして使用し、base-64 でデコードされたメッセージ ペイロードのバイトの SHA512 HMAC を作成し、結果を base64 でエンコードします。
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 を構成すると、エージェントはテストデバイスからメッセージを受信できるようになります。メッセージを送信して設定を検証します。