Thiết lập Cloud Pub/Sub

Nhân viên hỗ trợ RBM nhận thông báo và sự kiện thông qua mối quan hệ xuất bản/đăng ký với Cloud Pub/Sub. Khi người dùng gửi tin nhắn đến nhân viên hỗ trợ hoặc tạo một sự kiện, ứng dụng nhắn tin của họ sẽ gửi thông tin đến gói thuê bao Pub/Sub của nhân viên hỗ trợ để họ có thể truy cập vào tin nhắn hoặc sự kiện. Hãy xem phần Nhận thông báo.

Người dùng gửi tin nhắn cho nhân viên hỗ trợ

Loại gói thuê bao Pub/Sub của nhân viên hỗ trợ sẽ xác định cách nhân viên hỗ trợ nhận tin nhắn. Vì vậy, bạn cần định cấu hình gói thuê bao Pub/Sub trước khi nhân viên hỗ trợ có thể nhận tin nhắn. Nhân viên hỗ trợ RBM hỗ trợ cả gói thuê bao pullpush.

Kéo gói thuê bao

Với gói thuê bao kéo, nhân viên hỗ trợ của bạn sẽ liên hệ với Cloud Pub/Sub và tìm nạp tin nhắn, sự kiện và các yêu cầu khác.

Điều kiện tiên quyết

Trước khi bắt đầu, bạn cần có một tác nhân RBM.

Thiết lập

  1. Mở Business Communications Developer Console, đăng nhập bằng Tài khoản Google RBM của bạn rồi nhấp vào nhân viên hỗ trợ.
  2. Trong bảng điều hướng bên trái, hãy nhấp vào Các công cụ tích hợp.
  3. Nhấp vào Chỉnh sửa gói thuê bao.
  4. Chọn Kéo, sau đó nhấp vào Lưu.
  5. Định cấu hình nhân viên hỗ trợ để sử dụng gói thuê bao kéo:
    • Nếu bạn sử dụng một tác nhân mẫu với gói thuê bao kéo, hãy làm theo hướng dẫn trong tệp README của mẫu.
    • Nếu bạn không sử dụng tác nhân mẫu, hãy xem phần Nhận tin nhắn bằng cách sử dụng tính năng kéo để tìm mã nhằm cho phép nhân viên hỗ trợ của bạn sử dụng gói thuê bao kéo. Tuỳ thuộc vào ngôn ngữ lập trình, bạn có thể cần mã dự án của nhân viên hỗ trợ.

Tìm mã dự án của bạn

Một số cơ chế đăng ký gói thuê bao yêu cầu bạn chỉ định mã dự án Google Cloud Project (GCP) của tác nhân. Mã dự án của nhân viên hỗ trợ được nhúng vào tên của gói thuê bao kéo theo project/.

  1. Mở Business Communications Developer Console, đăng nhập bằng Tài khoản Google RBM của bạn rồi nhấp vào nhân viên hỗ trợ.
  2. Trong bảng điều hướng bên trái, hãy nhấp vào Các công cụ tích hợp.
  3. Tìm Tên gói thuê bao của nhân viên hỗ trợ.
  4. Tìm phân đoạn văn bản trong khoảng từ project/ đến / sau. Đây là mã dự án của tác nhân hỗ trợ. Ví dụ: nếu tên gói thuê bao là projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription, thì mã dự án của nhân viên hỗ trợ là rbm-growing-tree-bank-nbdjkl6t.

C#

private async void InitPullMessages(string projectId, string jsonPath)
{
  GoogleCredential googleCredential = null;
  using (var jsonStream = new FileStream(jsonPath, FileMode.Open,
    FileAccess.Read, FileShare.Read))
  {
    googleCredential = GoogleCredential.FromStream(jsonStream)
      .CreateScoped(SubscriberServiceApiClient.DefaultScopes);
  }

  SubscriptionName subscriptionName = new SubscriptionName(projectId, subscriptionId);
  SubscriberClient subscriber = new SubscriberClientBuilder
  {
    SubscriptionName = subscriptionName,
    GoogleCredential = googleCredential

  }.Build();

  // setup listener for pubsub messages
  await subscriber.StartAsync(
    async (PubsubMessage message, CancellationToken cancel) =>
    {
      string text = System.Text.Encoding.UTF8.GetString(message.Data.ToArray());

      JObject jsonObject = JObject.Parse(jsonAsString);

      string userResponse = GetResponseText(jsonObject);
      string eventType = (string)jsonObject["eventType"];
    
      // check if the message is a user response message
      if ((userResponse.Length > 0) && (eventType == null))
      {
        string messageId = (string)jsonObject["messageId"];
        string msisdn = (string)jsonObject["senderPhoneNumber"];
        // let the user know their message has been read
        kitchenSinkBot.SendReadMessage(messageId, msisdn);
        HandleUserResponse(userResponse, msisdn);
      }
      await Console.Out.WriteLineAsync(
        $"Message {message.MessageId}: {jsonAsString}");
      return SubscriberClient.Reply.Ack;
    });
  }
}
Mã này là phần trích dẫn từ tác nhân mẫu RBM.

Gói thuê bao dạng đẩy

Với gói thuê bao đẩy, Cloud Pub/Sub sẽ đẩy tin nhắn, sự kiện và các yêu cầu khác vào URL webhook mà bạn chỉ định.

Điều kiện tiên quyết

Trước khi bắt đầu, bạn cần có:

  • Nhân viên hỗ trợ RBM
  • URL điểm cuối webhook đang hoạt động hỗ trợ
    • HTTPS có chứng chỉ SSL hợp lệ
    • POST yêu cầu
    • Khả năng lặp lại tham số để phản hồi yêu cầu xác thực

Thiết lập

  1. Mở Business Communications Developer Console, đăng nhập bằng Tài khoản Google RBM của bạn rồi nhấp vào nhân viên hỗ trợ.
  2. Trong bảng điều hướng bên trái, hãy nhấp vào Các công cụ tích hợp.
  3. Nhấp vào Chỉnh sửa gói thuê bao.
  4. Chọn Đẩy.
  5. Đối với URL điểm cuối webhook, hãy nhập URL của webhook, bắt đầu bằng "https://".
  6. 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 được chỉ định và gửi phản hồi 200 OK bằng giá trị của thông số secret.

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

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

    webhook của bạn phải 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 nội dung là secret: 1234567890.

  7. Trong bảng điều khiển, hãy nhấp vào Xác minh.

    Khi nền tảng RBM xác minh webhook của bạn, hộp thoại Configure your webhook (Định cấu hình webhook của bạn) sẽ đóng lại.

  8. Nhấp vào Lưu.

  9. Thiết lập nhân viên hỗ trợ để nhận tin nhắn từ webhook của bạn:

    • Nếu bạn dùng một tác nhân mẫu với gói thuê bao đẩy, hãy làm theo hướng dẫn trong tệp README của mẫu.
    • Nếu không sử dụng nhân viên hỗ trợ mẫu, hãy định cấu hình cơ sở hạ tầng để chuyển thông báo từ webhook đến nhân viên hỗ trợ.

Node.js

let requestBody = req.body;

if ((requestBody.hasOwnProperty('clientToken')) && (requestBody.hasOwnProperty('secret'))) {
  console.log('RBM webhook verification request');

  // Confirm that the clientToken is the one we are seeing in the RBM console
  if (requestBody.clientToken == CLIENT_TOKEN) {
    console.log('Tokens match, returning secret');
    res.status(200).send('secret: ' + requestBody.secret);
  }
  else {
    // Client tokens did not match - sending permission denied
    console.log('Tokens do not match');
    res.sendStatus(403);
  }
}

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 gói thuê bao đẩy) 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ã base-64 và mã hoá base64 kết quả.
  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 đã được 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 gói thuê bao và thiết lập nhân viên hỗ trợ giao tiếp với Cloud Pub/Sub, 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.