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.
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
- Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
- Di navigasi sebelah kiri, klik Integrasi.
- Klik Edit langganan.
- Pilih Tarik, lalu klik Simpan.
- 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/
.
- Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
- Di navigasi sebelah kiri, klik Integrasi.
- Temukan Nama langganan agen Anda.
- Temukan segmen teks antara
project/
dan/
berikut. ID ini adalah project ID agen Anda. Misalnya, jika nama langganan adalahprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
, project ID agen Anda adalahrbm-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
- Buka Konsol Developer Business Communications, login dengan Akun Google RBM, lalu klik agen Anda.
- Di navigasi sebelah kiri, klik Integrasi.
- Klik Edit langganan.
- Pilih Push.
- Untuk URL endpoint Webhook, masukkan URL webhook, dimulai dengan "https://".
Konfigurasi webhook Anda untuk menerima permintaan
POST
dengan parameterclientToken
yang ditentukan dan mengirim respons200 OK
dengan nilai parametersecret
.Misalnya, jika webhook Anda menerima permintaan POST dengan konten isi berikut
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
webhook Anda harus mengonfirmasi nilai
clientToken
dan, jikaclientToken
sudah benar, menampilkan respons200 OK
dengan isisecret: 1234567890
.Di konsol, klik Verifikasi.
Saat platform RBM memverifikasi webhook Anda, dialog Mengonfigurasi webhook akan ditutup.
Klik Save.
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:
- Ekstrak header
X-Goog-Signature
pesan. Ini adalah salinan payload isi pesan berenkode base64. - Dekode base-64 payload RBM di elemen
message.body
permintaan. - 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.
- 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.