Webhook

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

合作夥伴 Webhook 和服務專員 Webhook

你可以在合作夥伴層級或服務專員設定 Webhook 第二,自訂角色只能 套用至專案或機構

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

設定虛擬服務專員 Webhook

你會透過合作夥伴 Webhook 接收傳送給服務專員的訊息。如果您希望 設定訊息,將特定代理程式的訊息改為傳送至其他 Webhook Webhook

  1. 開啟 Business Communications 開發人員控制台 ,然後使用你的 RBM 合作夥伴 Google 帳戶登入。
  2. 按一下代理程式。
  3. 點選 [Integrations] (整合)。
  4. 在「Webhook」部分,按一下「設定」
  5. 在「Webhook 端點網址」部分,輸入開頭為 「https://」。
  6. 記下 clientToken 值。您需要 確認你收到的訊息確實來自 Google
  7. 將 Webhook 設定為接受指定項目的 POST 要求 clientToken 參數,並傳送含有純文字值的 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. 在 Play 管理中心按一下「驗證」。RBM 驗證 Webhook 後 對話方塊就會關閉

驗證收到的訊息

由於 Webhook 可以接收來自任何寄件者的訊息,請務必確認 Google 在處理訊息內容之前已送出訊息。

如要確認 Google 是否確實向您傳送了訊息,請按照下列步驟操作:

  1. 擷取訊息的 X-Goog-Signature 標頭。這是經過雜湊處理的 訊息內文酬載的 Base64 編碼副本,
  2. 對要求的 message.body 元素中的 RBM 酬載進行 Base-64 解碼。
  3. 使用 Webhook 的用戶端憑證 (您在設定 Webhook) 做為金鑰,請建立位元組的 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 傳回 200 OK 以外的所有項目,都視為傳送 失敗。

開發人員必須注意,傳送高費率的訊息 高速產生 Webhook 通知,因此必須設計其程式碼, 確保他們可以正常使用通知。 開發人員考量可能導致失敗回應的情況,包括 500 回應來自網路容器、逾時或上游失敗。Thing 可考慮加入的內容:

  • 確保 DDoS 保護措施的設定符合預期 Webhook 通知速率
  • 確保資料庫連線集區等資源不會用盡 會產生逾時或 500 回應。

貨品交付失敗時的行為

RBM 收到回應時,會使用輪詢和重試機制, 200 OK。RBM 會增加 最多重試 600 秒。退休程序將持續 7 天, 超過 55 天傳送

代理程式層級 Webhook 的影響

RBM 將合作夥伴的訊息排入一個佇列中。合作夥伴使用位置 但由於 Webhook Webhook 會影響傳送至其他 Webhook 的傳送作業。屬於其他網路的 Webhook 代理程式會在失敗訊息的輪詢期間呼叫代理程式 失敗的訊息會排入重試佇列,整體傳送率會下降, 代理程式會受到影響

開發人員務必瞭解這個模型並據此編寫程式碼, 接收訊息並排入佇列等待處理 降低傳回失敗的機會

後續步驟

Webhook 設定完成後 接收訊息 來自: 測試裝置傳送訊息 驗證設定