Menyiapkan Cloud Pub/Sub

Agen RBM menerima pesan dan peristiwa melalui hubungan publikasi/langganan dengan Cloud Pub/Sub. Saat pengguna mengirim pesan ke agen Anda atau membuat peristiwa, aplikasi pesan mereka akan mengirimkan informasi ke langganan Pub/Sub agen Anda, tempat agen Anda dapat mengakses pesan atau peristiwa tersebut. Lihat Menerima pesan.

Pengguna mengirim pesan ke agen

Jenis langganan Pub/Sub agen Anda menentukan cara agen menerima pesan, sehingga Anda perlu mengonfigurasi langganan Pub/Sub sebelum agen dapat menerima pesan. Agen RBM mendukung langganan pull dan push.

Langganan pull

Dengan langganan pull, agen Anda akan menghubungi Cloud Pub/Sub dan mengambil pesan, peristiwa, serta permintaan lainnya.

Prasyarat

Sebelum memulai, Anda memerlukan agen RBM.

Penyiapan

  1. Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
  2. Di navigasi sebelah kiri, klik Integrasi.
  3. Klik Edit langganan.
  4. Pilih Tarik, lalu klik Simpan.
  5. Konfigurasi agen Anda untuk menggunakan langganan pull:
    • Jika Anda menggunakan agen contoh dengan langganan pull, ikuti petunjuk dalam file README contoh.
    • Jika Anda tidak menggunakan agen contoh, lihat Menerima pesan menggunakan Pull untuk kode agar agen Anda dapat menggunakan langganan pull. Bergantung pada bahasa pemrograman, Anda mungkin memerlukan project ID agen Anda.

Menemukan project ID

Beberapa mekanisme langganan pull mengharuskan Anda menentukan project ID Google Cloud Project (GCP) agen Anda. Project ID agen Anda disematkan dalam nama langganan pull setelah project/.

  1. Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
  2. Di navigasi sebelah kiri, klik Integrasi.
  3. Temukan Nama langganan agen Anda.
  4. Temukan segmen teks antara project/ dan / berikut. ID ini adalah project ID agen Anda. Misalnya, jika nama langganan adalah projects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription, project ID agen Anda adalah 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;
    });
  }
}
Kode ini adalah nukilan dari agen sampel RBM.

Langganan push

Dengan langganan push, Cloud Pub/Sub mengirim pesan, peristiwa, dan permintaan lainnya ke URL webhook yang Anda tentukan.

Prasyarat

Sebelum memulai, Anda memerlukan hal berikut:

  • Agen RBM
  • URL endpoint webhook live yang mendukung
    • HTTPS dengan sertifikat SSL yang valid
    • POST permintaan
    • Kemampuan untuk menjalankan echo parameter sebagai respons terhadap permintaan validasi

Penyiapan

  1. Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
  2. Di navigasi sebelah kiri, klik Integrasi.
  3. Klik Edit langganan.
  4. Pilih Push.
  5. Untuk URL endpoint Webhook, masukkan URL webhook, dimulai dengan "https://".
  6. Konfigurasi webhook Anda untuk menerima permintaan POST dengan parameter clientToken yang ditentukan dan mengirim respons 200 OK dengan nilai parameter secret.

    Misalnya, jika webhook Anda menerima permintaan POST dengan konten isi berikut

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

    webhook Anda harus mengonfirmasi nilai clientToken dan, jika clientToken sudah benar, menampilkan respons 200 OK dengan isi secret: 1234567890.

  7. Di konsol, klik Verifikasi.

    Saat platform RBM memverifikasi webhook Anda, dialog Mengonfigurasi webhook akan ditutup.

  8. Klik Save.

  9. Konfigurasi agen Anda untuk menerima pesan dari webhook:

    • Jika Anda menggunakan agen contoh dengan langganan push, ikuti petunjuk dalam file README contoh.
    • Jika Anda tidak menggunakan agen contoh, konfigurasikan infrastruktur untuk meneruskan pesan dari webhook ke agen Anda.

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

Memverifikasi pesan masuk

Karena webhook dapat menerima pesan dari setiap pengirim, Anda harus memverifikasi bahwa Google telah mengirim pesan masuk sebelum memproses konten pesan.

Untuk memverifikasi bahwa Google mengirim pesan yang Anda terima, ikuti langkah-langkah berikut:

  1. Ekstrak header X-Goog-Signature pesan. Ini adalah salinan payload isi pesan berenkode base64.
  2. Dekode base-64 payload RBM di elemen message.body permintaan.
  3. Dengan menggunakan token klien webhook (yang Anda tentukan saat menyiapkan langganan push) sebagai kunci, buat HMAC SHA512 untuk byte pesan yang didekode base-64 dan mengenkode base64 hasilnya.
  4. Bandingkan hash X-Goog-Signature dengan hash yang Anda buat.
    • Jika hash cocok, berarti Anda telah mengonfirmasi bahwa Google yang mengirim pesan.
    • Jika hash tidak cocok, periksa proses hashing pada pesan yang diketahui bagus.

      Jika proses hashing berfungsi dengan benar dan Anda menerima pesan yang Anda yakini dikirimkan kepada Anda secara curang, hubungi kami.

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

Langkah berikutnya

Setelah mengonfigurasi langganan dan menyiapkan agen untuk berkomunikasi dengan Cloud Pub/Sub, agen Anda dapat menerima pesan dari perangkat pengujian Anda. Kirim pesan untuk memvalidasi penyiapan Anda.