Webhook

Webhook 是合作夥伴建立的 HTTPS 回呼,用於指定代理程式應如何回應訊息和事件。設定 Webhook 後,即可開始接收訊息事件

合作夥伴 Webhook 和服務專員 Webhook

您可以在合作夥伴層級或代理程式層級設定 Webhook。

  • 合作夥伴 Webhook 會套用至您維護的所有虛擬服務專員。如果您的代理程式具有類似行為,或只有一個代理程式,請使用合作夥伴 Webhook
  • 代理程式 Webhook 適用於個別服務專員。如果您操作的多個代理程式都有不同的行為,可以為每個代理程式設定不同的 Webhook

如果您同時設定了合作夥伴 Webhook 和代理程式 Webhook,則服務專員 Webhook 會以其特定代理程式為優先,而合作夥伴 Webhook 則適用於沒有自己 Webhook 的任何代理程式。

設定代理程式 Webhook

你會透過合作夥伴 Webhook 接收傳送給服務專員的訊息。如要讓特定代理程式的訊息到達其他 Webhook,請設定代理程式 Webhook。

  1. 開啟 Business Communications 開發人員控制台,並使用您的 RBM 合作夥伴 Google 帳戶登入。
  2. 按一下虛擬服務專員。
  3. 點選 [Integrations] (整合)。
  4. 在「Webhook」部分,按一下「Configure」
  5. 在「Webhook 端點網址」部分,輸入以「https://」開頭的 Webhook 網址。
  6. 記下 clientToken 值。您必須確認收到的訊息來自 Google
  7. 請將 Webhook 設為接受含有指定 clientToken 參數的 POST 要求,並傳送 200 OK 回應,並以 secret 參數的純文字值做為回應主體。

    舉例來說,如果您的 Webhook 收到包含下列內文內容的 POST 要求

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

    則 Webhook 應確認 clientToken 值,如果 clientToken 正確,傳回包含 1234567890200 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. 在 Developer Console 中,按一下「驗證」。RBM 驗證 Webhook 時,對話方塊會關閉。

驗證收到的訊息

由於 Webhook 可以接收來自任何寄件者的訊息,因此在處理訊息內容之前,您應確認 Google 已傳送傳入的訊息。

如要驗證 Google 是否傳送了您收到的訊息,請按照下列步驟操作:

  1. 擷取郵件的 X-Goog-Signature 標頭。這是訊息內文酬載的雜湊碼,採用 Base64 編碼。
  2. 在要求的 message.body 元素中透過 Base-64 解碼 RBM 酬載。
  3. 使用 Webhook 的用戶端憑證 (您在設定 Webhook 時指定) 做為金鑰,建立由 Base-64 解碼訊息酬載的位元組 SHA512 HMAC,以及使用 Base64 編碼的結果。
  4. 比較 X-Goog-Signature 雜湊和您建立的雜湊。
    • 如果雜湊值相符,表示您已確認 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 後,代理程式即可從測試裝置接收訊息。請傳送訊息來驗證設定。