ตัวแทน RBM จะได้รับข้อความและเหตุการณ์ผ่านความสัมพันธ์การเผยแพร่/การสมัครใช้บริการกับ Cloud Pub/Sub เมื่อผู้ใช้ส่งข้อความถึงตัวแทนหรือสร้าง เหตุการณ์ แอปรับส่งข้อความของตัวแทนจะส่งข้อมูลไปยังการสมัครใช้บริการ Pub/Sub ของตัวแทน ซึ่งตัวแทนจะเข้าถึงข้อความหรือกิจกรรมได้ โปรดดูหัวข้อรับข้อความ
ประเภทการสมัครใช้บริการ Pub/Sub ของตัวแทนจะกำหนดวิธีที่ตัวแทนรับข้อความ คุณจึงต้องกำหนดค่าการสมัครใช้บริการ Pub/Sub ก่อนที่ตัวแทนจะรับข้อความได้ ตัวแทน RBM รองรับทั้งการสมัครใช้บริการแบบ pull และ push
การสมัครใช้บริการแบบพุล
ด้วยการสมัครใช้บริการแบบพุล ตัวแทนจะติดต่อ Cloud Pub/Sub เพื่อดึงข้อมูลข้อความ เหตุการณ์ และคำขออื่นๆ
ข้อกำหนดเบื้องต้น
ก่อนเริ่มต้น คุณต้องมีตัวแทน RBM
ตั้งค่า
- เปิด Business Communications Developer Console ลงชื่อเข้าใช้ด้วยบัญชี RBM ของ Google แล้วคลิกตัวแทน
- คลิกการผสานที่การนำทางด้านซ้าย
- คลิกแก้ไขการสมัครใช้บริการ
- เลือกพุล แล้วคลิกบันทึก
- กำหนดค่า Agent ให้ใช้การสมัครใช้บริการพุล ดังนี้
- หากคุณใช้ sample Agent ที่มีการสมัครใช้บริการแบบพุล ให้ทำตามวิธีการในไฟล์ README ของตัวอย่าง
- หากคุณไม่ได้ใช้ Agent ตัวอย่าง โปรดดูการรับข้อความโดยใช้ พุล สำหรับโค้ด เพื่อให้ตัวแทนใช้การสมัครใช้บริการแบบพุลได้ คุณอาจต้องใช้รหัสโปรเจ็กต์ของตัวแทน ทั้งนี้ขึ้นอยู่กับภาษาโปรแกรม
ค้นหารหัสโปรเจ็กต์
กลไกการสมัครใช้บริการพุลบางอย่างกำหนดให้คุณต้องระบุรหัสโปรเจ็กต์ Google Cloud Project (GCP) ของตัวแทน รหัสโปรเจ็กต์ของ Agent ฝังอยู่ในชื่อการสมัครใช้บริการพุลที่ตามหลัง project/
- เปิด Business Communications Developer Console ลงชื่อเข้าใช้ด้วยบัญชี RBM ของ Google แล้วคลิกตัวแทน
- คลิกการผสานที่การนำทางด้านซ้าย
- ค้นหาชื่อการสมัครใช้บริการของตัวแทน
- หาส่วนของข้อความระหว่าง
project/
ถึง/
ต่อไปนี้ นี่คือรหัสโปรเจ็กต์ของ Agent ตัวอย่างเช่น หากชื่อการสมัครใช้บริการคือprojects/rbm-growing-tree-bank-nbdjkl6t/subscriptions/rbm-agent-subscription
รหัสโปรเจ็กต์ของ Agent จะเป็น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; }); } }โค้ดนี้ข้อความที่ตัดตอนมาจากตัวแทนตัวอย่าง RBM
การสมัครใช้บริการแบบพุช
เมื่อมีการสมัครใช้บริการพุช Cloud Pub/Sub จะพุชข้อความ เหตุการณ์ และคำขออื่นๆ ไปยัง URL ของเว็บฮุคที่คุณระบุ
ข้อกำหนดเบื้องต้น
ก่อนที่จะเริ่มต้น คุณต้องมีสิ่งต่อไปนี้
- ตัวแทน RBM
- URL ปลายทางของเว็บฮุคแบบสดที่รองรับ
- HTTPS ที่มีใบรับรอง SSL ที่ถูกต้อง
- คำขอ
POST
รายการ - ความสามารถในการสะท้อนพารามิเตอร์ตามคำขอการตรวจสอบ
ตั้งค่า
- เปิด Business Communications Developer Console ลงชื่อเข้าใช้ด้วยบัญชี RBM ของ Google แล้วคลิกตัวแทน
- คลิกการผสานที่การนำทางด้านซ้าย
- คลิกแก้ไขการสมัครใช้บริการ
- เลือกพุช
- สำหรับ URL ปลายทางของเว็บฮุค ให้ป้อน URL ของเว็บฮุคที่ขึ้นต้นด้วย "https://"
กำหนดค่าเว็บฮุคให้ยอมรับคำขอ
POST
ที่มีพารามิเตอร์clientToken
ที่ระบุ และส่งการตอบกลับ200 OK
ที่มีค่าของพารามิเตอร์secret
ตัวอย่างเช่น หากเว็บฮุคได้รับคำขอ POST ที่มีเนื้อหาส่วนเนื้อหาต่อไปนี้
{ "clientToken":"SJENCPGJESMGUFPY", "secret":"1234567890" }
เว็บฮุคควรยืนยันค่า
clientToken
และหากclientToken
ถูกต้อง ให้แสดงผลเป็น200 OK
โดยระบุเนื้อหาเป็นsecret: 1234567890
คลิกยืนยันในคอนโซล
เมื่อแพลตฟอร์ม RBM ยืนยันเว็บฮุคของคุณแล้ว กล่องโต้ตอบกำหนดค่าเว็บฮุคจะปิดลง
คลิกบันทึก
กําหนดค่าตัวแทนให้รับข้อความจากเว็บฮุค ดังนี้
- หากคุณใช้ตัวอย่าง Agent กับการสมัครใช้บริการแบบพุช ให้ทำตามคำแนะนำในไฟล์ README ของตัวอย่าง
- หากคุณไม่ได้ใช้ Agent ตัวอย่าง ให้กำหนดค่าโครงสร้างพื้นฐานเพื่อให้ส่งข้อความจากเว็บฮุคไปยัง Agent ของคุณ
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); } }
ยืนยันข้อความขาเข้า
เนื่องจากเว็บฮุคสามารถรับข้อความจากผู้ส่งทุกคน คุณควรตรวจสอบว่า Google ได้ส่งข้อความขาเข้าก่อนประมวลผลเนื้อหาข้อความ
หากต้องการยืนยันว่า Google ได้ส่งข้อความที่คุณได้รับแล้ว ให้ทำตามขั้นตอนต่อไปนี้
- ดึงข้อมูลส่วนหัว
X-Goog-Signature
ของข้อความ นี่คือสำเนาเพย์โหลดเนื้อหาข้อความที่เข้ารหัสฐาน 64 - Base-64-ถอดรหัสของเพย์โหลด RBM ในองค์ประกอบ
message.body
ของคำขอ - ใช้โทเค็นไคลเอ็นต์ของเว็บฮุค (ซึ่งคุณระบุเมื่อตั้งค่าการสมัครใช้บริการพุช) เป็นคีย์ ให้สร้าง SHA512 HMAC จำนวนไบต์ของเพย์โหลดข้อความที่ถอดรหัสฐาน 64 และเข้ารหัสผลลัพธ์ base64
- เปรียบเทียบแฮช
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);
ขั้นตอนถัดไป
เมื่อคุณกำหนดค่าการสมัครใช้บริการและตั้งค่า Agent ให้สื่อสารกับ Cloud Pub/Sub แล้ว ตัวแทนจะรับข้อความจากอุปกรณ์ทดสอบได้ ส่งข้อความ เพื่อตรวจสอบการตั้งค่า