Webhook

Webhook là lệnh gọi lại HTTPS do đối tác tạo. Lệnh gọi lại này chỉ định cách nhân viên hỗ trợ của bạn sẽ phản hồi các tin nhắn và sự kiện. Sau khi định cấu hình webhook, bạn có thể bắt đầu nhận tin nhắnsự kiện.

Webhook của đối tác và webhook của nhân viên hỗ trợ

Bạn có thể định cấu hình webhook của mình ở cấp đối tác hoặc ở cấp nhân viên hỗ trợ.

  • Webhook đối tác của bạn áp dụng cho mọi nhân viên hỗ trợ mà bạn duy trì. Nếu nhân viên hỗ trợ của bạn có hành vi tương tự hoặc nếu bạn chỉ có một nhân viên hỗ trợ, hãy sử dụng webhook đối tác.
  • Webhook của nhân viên hỗ trợ áp dụng cho từng nhân viên hỗ trợ. Nếu vận hành nhiều nhân viên hỗ trợ có hành vi riêng biệt, bạn có thể đặt một webhook riêng cho mỗi nhân viên hỗ trợ.

Nếu bạn đã định cấu hình cả webhook của đối tác và webhook của tác nhân, thì webhook của tác nhân sẽ được ưu tiên đối với tác nhân cụ thể đó, trong khi webhook của đối tác sẽ áp dụng cho mọi tác nhân không có webhook riêng.

Định cấu hình webhook của nhân viên hỗ trợ

Bạn sẽ nhận tin nhắn gửi tới nhân viên hỗ trợ tại webhook của đối tác. Nếu bạn muốn nhận tin nhắn từ một nhân viên hỗ trợ cụ thể đến một webhook khác, hãy đặt một webhook của nhân viên hỗ trợ.

  1. Mở Business Communications Developer Console rồi đăng nhập bằng Tài khoản Google dành cho đối tác RBM của bạn.
  2. Nhấp vào nhân viên hỗ trợ.
  3. Nhấp vào Các công cụ tích hợp.
  4. Đối với Webhook, hãy nhấp vào Định cấu hình.
  5. Đối với URL điểm cuối webhook, hãy nhập URL webhook bắt đầu bằng "https://".
  6. Hãy ghi lại giá trị clientToken của bạn. Bạn cần có mã này để xác minh rằng tin nhắn bạn nhận được là đến từ Google.
  7. Hãy định cấu hình webhook của bạn để chấp nhận yêu cầu POST với thông số clientToken đã chỉ định và gửi phản hồi 200 OK có giá trị văn bản thuần tuý của thông số secret làm nội dung phản hồi.

    Ví dụ: nếu webhook của bạn nhận được một yêu cầu POST có nội dung cơ thể sau đây

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

    thì webhook của bạn cần xác nhận giá trị clientToken và nếu clientToken chính xác, hãy trả về phản hồi 200 OK với 1234567890 là nội dung phản hồi:

    // 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. Trong Developer Console, hãy nhấp vào Xác minh. Khi RBM xác minh webhook của bạn, hộp thoại sẽ đóng lại.

Xác minh tin nhắn đến

Vì webhook có thể nhận tin nhắn từ bất kỳ người gửi nào, nên bạn phải xác minh rằng Google đã gửi tin nhắn đến trước khi xử lý nội dung tin nhắn.

Để xác minh rằng Google đã gửi thư cho bạn, hãy làm theo các bước sau:

  1. Trích xuất tiêu đề X-Goog-Signature của thư. Đây là bản sao đã băm, được mã hoá base64 của tải trọng nội dung thư.
  2. Base-64 giải mã tải trọng RBM trong phần tử message.body của yêu cầu.
  3. Sử dụng mã thông báo máy khách của webhook (mà bạn đã chỉ định khi thiết lập webhook) làm khoá, tạo HMAC SHA512 với các byte của tải trọng tin nhắn được giải mã theo cơ sở 64 và mã hoá kết quả base64.
  4. So sánh hàm băm X-Goog-Signature với hàm băm bạn đã tạo.
    • Nếu hàm băm khớp với nhau, thì bạn xác nhận rằng Google đã gửi tin nhắn đó.
    • Nếu hàm băm không khớp, hãy kiểm tra quá trình băm của bạn để xem một thông báo đã biết là tốt.

      Nếu quy trình băm của bạn đang hoạt động chính xác và bạn nhận được một thông báo cho rằng đã bị gửi cho bạn một cách gian lận, hãy liên hệ với chúng tôi.

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);
  

Các bước tiếp theo

Sau khi bạn định cấu hình webhook, nhân viên hỗ trợ có thể nhận tin nhắn từ thiết bị thử nghiệm của bạn. Gửi tin nhắn để xác thực chế độ thiết lập của bạn.