เหตุการณ์คือการแจ้งเตือนที่เอเจนต์ของคุณส่งและรับได้ กิจกรรมมี 3 ประเภท ดังนี้
- เซิร์ฟเวอร์สร้างขึ้น แพลตฟอร์ม RBM จะส่งไปยังตัวแทนของคุณ
- ผู้ใช้สร้างขึ้น: ส่งไปยังตัวแทนโดยอุปกรณ์ของผู้ใช้
- เอเจนต์สร้าง เอเจนต์ส่งถึงผู้ใช้
เหตุการณ์ที่เซิร์ฟเวอร์สร้างขึ้น
แพลตฟอร์ม RBM จะส่งเหตุการณ์เพื่อแจ้งให้ตัวแทนทราบเกี่ยวกับการอัปเดตระดับเซิร์ฟเวอร์ เช่น ข้อความหมดอายุ
ดูตัวเลือกการจัดรูปแบบและค่าได้ที่
ServerEvent
สถานะการเปิดใช้งานของตัวแทนมีการเปลี่ยนแปลง
แพลตฟอร์ม RBM จะส่งAgentLaunchEvent
สำหรับการเปลี่ยนแปลงทุกครั้งในสถานะการเปิดตัวของตัวแทน ตัวอย่างเช่น เมื่อสถานะของตัวแทน
เปลี่ยนจาก PENDING เป็น LAUNCHED หลังจากที่ผู้ให้บริการอนุมัติ คุณจะได้รับ
เหตุการณ์ AgentLaunchEvent เพื่อระบุการเปลี่ยนแปลง ระบบจะส่งเหตุการณ์เหล่านี้สำหรับ
ตัวแทน RBM ทั้งหมด และสำหรับการเปลี่ยนแปลงสถานะการเปิดตัวของผู้ให้บริการทั้งหมด
การกำหนดค่าเว็บฮุค
คุณสามารถใช้Webhook ระดับพาร์ทเนอร์หรือระดับตัวแทน เพื่อรับการแจ้งเตือนเหล่านี้
ข้อกำหนดเบื้องต้น
- กำหนดค่าเว็บฮุค สำหรับการรับส่งข้อความ RBM (นี่เป็นข้อกำหนดสำหรับการรับข้อความของผู้ใช้และ เหตุการณ์ที่ผู้ใช้สร้างขึ้น)
- หากต้องการแยกความแตกต่างระหว่างเหตุการณ์ที่ผู้ใช้สร้างขึ้น
กับเหตุการณ์สถานะการเปิดตัวเอเจนต์ ให้ตรวจสอบเส้นทาง
message.attributes.typeสำหรับค่าagent_launch_event
โครงสร้างเพย์โหลดของเหตุการณ์
ระบบจะส่ง AgentLaunchEvent
เป็นข้อความ Pub/Sub เช่น
{
"message": {
"attributes": {
"business_id": "rbm-chatbot-id@rbm.goog",
"event_type": "REJECTED",
"product": "RBM",
"project_number": "3338881441851",
"type": "agent_launch_event"
},
"data": "....BASE64-encoded-JSON-with-notification...",
"messageId": "14150481888479752",
"message_id": "14150481888479752",
"publishTime": "2025-03-05T18:50:21.88Z",
"publish_time": "2025-03-05T18:50:21.88Z"
},
"subscription": "projects/rbm-partner-gcp/subscriptions/rbm-sub"
}
ฟิลด์ AgentLaunchEvent.LaunchState
ในเพย์โหลดของเหตุการณ์จะระบุสถานะการเปิดตัวใหม่ของเอเจนต์
ค่าที่เป็นไปได้มีดังนี้
| ค่า | สถานะการเปิดตัวของตัวแทน | รายละเอียด |
|---|---|---|
UNLAUNCHED |
ยังไม่ได้เปิดตัว | อนุญาตให้แก้ไขได้ |
PENDING |
รอดำเนินการ | คำขอดังกล่าวได้ถูกส่งไปยังผู้ให้บริการเพื่อตรวจสอบแล้ว |
LAUNCHED |
เปิดตัวแล้ว | ข้อความจะได้รับอนุญาตบนผู้ให้บริการที่กำหนด |
REJECTED |
ถูกปฏิเสธจากผู้ให้บริการรายหนึ่ง | เหตุผลการปฏิเสธระบุไว้ในความคิดเห็น |
SUSPENDED |
ถูกระงับในเครือข่ายของผู้ให้บริการที่ระบุ | เหตุผลการระงับระบุไว้ในความคิดเห็น |
ฟิลด์ข้อมูลประกอบด้วยวัตถุ JSON ที่เข้ารหัส Base64 พร้อมรายละเอียดสถานะการเปิดตัว นี่คือตัวอย่างของ JSON ที่ถอดรหัสแล้ว:
{
"eventId": "rbm-chatbot-id/0a7ed168-676e-4a56-b422-b23434",
"agentId": "rbm-chatbot-id@rbm.goog",
"botDisplayName": "RBM Welcome Bot 7 - RBM Chatbot name",
"brandId": "bd38fbff-392a-437b-a6f2-7f2e43745b56",
"brandDisplayName": "Chatbots brand",
"regionId": "/v1/regions/fi-rcs",
"oldLaunchState": "PENDING",
"newLaunchState": "REJECTED",
"actingParty": "rbm-support@google.com",
"comment": "Carrier has rejected the launch: policy violation",
"sendTime": "2025-03-05T18:50:19.386436Z"
}
ตารางต่อไปนี้แสดงสถานะการเปิดตัวตัวแทนและการดำเนินการที่กระตุ้นสถานะเหล่านั้น:
| สถานะการเปิดตัวเก่า | สถานะการเปิดตัวใหม่ | การกระตุ้นให้เกิดการเปลี่ยนแปลง |
|---|---|---|
PENDING |
LAUNCHED |
ตัวแทนที่กำลังรอการอนุมัติ |
PENDING |
REJECTED |
ตัวแทนที่รอการพิจารณาถูกปฏิเสธ |
LAUNCHED |
SUSPENDED |
ตัวแทนเปิดตัวถูกระงับ |
SUSPENDED |
LAUNCHED |
ตัวแทนที่ถูกระงับการใช้งานจะถูกเปิดใช้งานอีกครั้ง |
SUSPENDED |
TERMINATED |
ตัวแทนที่ถูกระงับถูกยุติแล้ว |
TERMINATED |
LAUNCHED |
เปิดตัวตัวแทนที่ถูกยกเลิกแล้ว |
ข้อความหมดอายุแล้ว การเพิกถอนสำเร็จแล้ว
ข้อความหมดอายุแล้วและถูกเพิกถอนสำเร็จแล้ว เหตุการณ์นี้อาจเป็นตัวกระตุ้นที่ดีสำหรับกลยุทธ์การส่งข้อความสำรองของคุณ
{ "phoneNumber": [phone number of recipient that the original message was intended for] , "messageId": [RCS message ID of the message], "agentId": [bot ID], "eventType": "TTL_EXPIRATION_REVOKED", "eventId": [unique ID generated by the RBM platform], "sendTime": [time at which the server sent this event] }
ข้อความหมดอายุแล้ว เพิกถอนไม่สำเร็จ
ข้อความหมดอายุแล้วแต่ไม่ถูกเพิกถอน
{ "phoneNumber": [phone number of recipient that the original message was intended for] , "messageId": [RCS message ID of the message], "agentId": [bot ID], "eventType": "TTL_EXPIRATION_REVOKE_FAILED", "eventId": [unique ID generated by the RBM platform], "sendTime": [time at which the server sent this event] }
การส่งข้อความไม่มีการรับประกัน
- หากข้อความถูกส่งแล้ว คุณจะได้รับเหตุการณ์
DELIVEREDที่เว็บฮุกของคุณ - หากระบบไม่ส่งข้อความ ให้ใช้ API การเพิกถอนเพื่อส่งคำขอเพิกถอน
หากข้อความมีความเร่งด่วน เช่น OTP หรือการแจ้งเตือนการฉ้อโกง คุณควร ส่งข้อความผ่านช่องทางอื่น เช่น SMS แม้ว่าการดำเนินการนี้จะส่งผลให้ผู้ใช้ได้รับ ข้อความซ้ำก็ตาม
เหตุการณ์ที่ผู้ใช้สร้างขึ้น
เช่นเดียวกับข้อความของผู้ใช้และการตรวจสอบความสามารถ เอเจนต์จะได้รับเหตุการณ์ของผู้ใช้เป็น JSON
สำหรับการจัดรูปแบบและตัวเลือกค่า โปรดดู UserEvent
ผู้ใช้ได้รับข้อความจากตัวแทน
เหตุการณ์นี้บ่งชี้ว่ามีการนำส่งข้อความแล้ว
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "DELIVERED",
"eventId": "EVENT_ID",
"messageId": "MESSAGE_ID",
"agentId": "AGENT_ID"
}ผู้ใช้อ่านข้อความตัวแทน
เหตุการณ์นี้ระบุว่าข้อความได้รับการเปิดหรือได้รับการรับทราบแล้ว
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "READ",
"eventId": "EVENT_ID",
"messageId": "MESSAGE_ID",
"agentId": "AGENT_ID"
}ผู้ใช้เริ่มพิมพ์
เหตุการณ์นี้บ่งชี้ว่าผู้ใช้กำลังพิมพ์
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "IS_TYPING",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}ผู้ใช้ส่งข้อความ
{
"senderPhoneNumber": "PHONE_NUMBER",
"text": "Hi",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}ผู้ใช้ส่งไฟล์
{ "senderPhoneNumber": "PHONE_NUMBER", "userFile": { "payload": { "mimeType": "image/gif", "fileSizeBytes": 127806, "fileUri": "https://storage.googleapis.com/copper_test/77ddb795-24ad-4607-96ae-b08b4d86406a/d2dcc67ab888d34ee272899c020b13402856f81597228322079eb007e8c9", "fileName": "4_animated.gif" } }, "eventId": "EVENT_ID", "agentId": "AGENT_ID" }
ผู้ใช้แตะคำตอบที่แนะนำ
เมื่อผู้ใช้แตะคำตอบที่แนะนำ ตัวแทนของคุณจะได้รับเหตุการณ์พร้อมข้อมูลการโพสต์กลับและข้อความตอบกลับ
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID",
"suggestionResponse": {
"postbackData": "postback_1234",
"text": "Hello there!"
}
}ผู้ใช้แตะการดำเนินการที่แนะนำ
เมื่อผู้ใช้แตะการดำเนินการที่แนะนำ ตัวแทนของคุณจะได้รับเหตุการณ์พร้อมข้อมูลการโพสต์แบ็กของการดำเนินการนั้น
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID",
"suggestionResponse": {
"postbackData": "postback_1234"
}
}ผู้ใช้ยกเลิกการสมัครจากการสนทนา
หากผู้ใช้ไม่ต้องการรับข้อความที่ไม่จำเป็นจากธุรกิจ เช่น โปรโมชัน ก็สามารถยกเลิกการสมัครรับการสนทนา RBM ใน Google Messages ได้
เหตุการณ์ UNSUBSCRIBE ระบุว่าผู้ใช้ได้ยกเลิกการสมัครจากการสนทนากับตัวแทนของคุณและธุรกิจที่ตัวแทนเป็นตัวแทน นี่คือตัวอย่างของเพย์โหลด JSON:
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "UNSUBSCRIBE",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}วิธีการทำงาน
- ตัวเลือกยกเลิกการสมัครรับข้อมูลจะพร้อมใช้งานเสมอในเมนูแชท สำหรับตัวแทนส่งเสริมการขายและตัวแทนใช้งานหลายรายการ ตัวเลือกนี้อาจปรากฏขึ้นโดยตรงในแชทหลังจากมีข้อความที่ยังไม่ได้อ่านจำนวนหนึ่ง (กฎเฉพาะจะแตกต่างกันไปในแต่ละประเทศ)
การเลือกUnsubscribe จะทำให้เกิดการดำเนินการสองอย่างพร้อมกัน: Google Messages จะส่งคำสำคัญเฉพาะประเทศ (เช่น "STOP") ไปยังตัวแทนของคุณ และแพลตฟอร์ม RBM จะส่งเหตุการณ์ UNSUBSCRIBE ไปยังเว็บฮุกของคุณ
คำหลักจะถูกกำหนดโดยรหัสประเทศสองตัวอักษรของหมายเลขโทรศัพท์ของผู้ใช้ ตารางต่อไปนี้แสดงรายการคำหลักสำหรับแต่ละประเทศที่รองรับ
ประเทศ (รหัสประเทศ) คีย์เวิร์ดการยกเลิกการสมัครรับข้อมูล สหรัฐอเมริกา (US), อินเดีย (IN), สหราชอาณาจักร (GB), เยอรมนี (DE) หยุด สเปน (ES), เม็กซิโก (MX) BAJA ฝรั่งเศส (FR) หยุด บราซิล (BR) พาราร์ หลังจากที่ผู้ใช้ยกเลิกการสมัคร การสนทนาจะยังคงอยู่ในกล่องจดหมาย เว้นแต่จะมีการรายงานว่าเป็นสแปม ในกรณีนี้ การสนทนาจะถูกย้ายไปยังโฟลเดอร์สแปมและถูกบล็อก
Google จะตรวจสอบรูปแบบข้อความหลังจากที่ผู้ใช้ยกเลิกการสมัครรับอีเมลเพื่อระบุการละเมิดนโยบายและกฎทางธุรกิจ
กฎเกณฑ์ทางธุรกิจ
- ในฐานะพาร์ทเนอร์ RBM ที่จัดการการสนทนานี้ คุณมีหน้าที่ ปฏิบัติตามคำขอของผู้ใช้ในการยกเลิกการติดตาม
- หากคุณไม่สามารถยกเลิกการสมัครภายในเธรดข้อความได้ คุณต้องส่งข้อความยืนยันทันทีพร้อมลิงก์โดยตรงไปยังเว็บไซต์หรือแอปที่ผู้ใช้สามารถจัดการการตั้งค่าการสมัครของตนได้
- หลังจากที่ผู้ใช้ยกเลิกการสมัครแล้ว จะไม่สามารถส่งข้อความที่ไม่จำเป็นได้
- ข้อความสำคัญยังคงได้รับอนุญาต ซึ่งรวมถึง:
- การตรวจสอบสิทธิ์ เช่น รหัสผ่านครั้งเดียว (OTP)
- การแจ้งเตือนเกี่ยวกับบริการเฉพาะที่ผู้ใช้ร้องขอและยินยอม
- การยืนยันคำขอยกเลิกการสมัครของผู้ใช้ พร้อมข้อมูลสำหรับจัดการการตั้งค่าการสื่อสารเพิ่มเติม
ตัวอย่าง
หากผู้ใช้ยกเลิกการสมัครจากตัวแทนสายการบินที่มีการใช้งานแบบใช้งานหลายอย่าง คุณจะต้องหยุดส่งข้อความทางการตลาด อย่างไรก็ตาม คุณสามารถส่งการอัปเดตเที่ยวบินได้หากผู้ใช้ได้ให้ความยินยอมอย่างชัดแจ้งในการรับการอัปเดตสำหรับเที่ยวบินนั้นๆ
เหตุผลในการยกเลิกการสมัคร
เมื่อผู้ใช้ยกเลิกการสมัครจากตัวแทนของคุณ พวกเขาสามารถเลือกเหตุผลจากตัวเลือกต่อไปนี้:
- ไม่ได้ลงชื่อสมัครรับข้อมูล
- มีข้อความมากเกินไป
- ไม่สนใจเป็นสมาชิกแล้ว
- สแปม
- อื่นๆ
ในปัจจุบัน เหตุผลในการยกเลิกการสมัครจะไม่ได้รับการเปิดเผยให้กับพันธมิตรหรือผู้ให้บริการทราบ
ผู้ใช้สมัครเข้าร่วมการสนทนาอีกครั้ง
ผู้ใช้สามารถสมัครเข้าร่วมการสนทนาที่ยกเลิกไปแล้วใน Google Messages อีกครั้งได้
เหตุการณ์ SUBSCRIBE ระบุว่าผู้ใช้ต้องการรับข้อความจากตัวแทนของคุณ รวมถึงเนื้อหาที่ไม่จำเป็น เช่น โปรโมชัน นี่คือตัวอย่างของเพย์โหลด JSON:
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "SUBSCRIBE",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}วิธีการทำงาน
- ตัวเลือกสมัครสมาชิก ซึ่งมีให้เลือกใช้ทั้งจากเมนูแชทและลิงก์ในแชท ช่วยให้ผู้ใช้สามารถสมัครสมาชิกการสนทนาที่ยกเลิกไปแล้วได้อีกครั้ง
การเลือกสมัครสมาชิกจะกระตุ้นการดำเนินการสองอย่างพร้อมกัน: Google Messages จะส่งคำสำคัญเฉพาะประเทศ (เช่น "เริ่มต้น") ไปยังตัวแทนของคุณ และแพลตฟอร์ม RBM จะส่งเหตุการณ์ SUBSCRIBE ไปยังเว็บฮุกของคุณ
คำหลักที่เฉพาะเจาะจงจะถูกกำหนดโดยรหัสประเทศสองตัวอักษรของหมายเลขโทรศัพท์ของผู้ใช้ ตารางต่อไปนี้แสดงรายการคำหลักสำหรับแต่ละประเทศที่รองรับ
ประเทศ (รหัสประเทศ) คำสำคัญในการสมัครสมาชิก สหรัฐอเมริกา (US), อินเดีย (IN), สหราชอาณาจักร (GB), เยอรมนี (DE) เริ่ม สเปน (ES), เม็กซิโก (MX) ALTA ฝรั่งเศส (FR) เดมาร์เรอร์ บราซิล (BR) começar
กฎธุรกิจ
- ในฐานะพาร์ทเนอร์ RBM ที่จัดการการสนทนานี้ คุณมีหน้าที่ ปฏิบัติตามคำขอของผู้ใช้ในการสมัครรับข้อมูลอีกครั้ง
- การสมัครรับข้อความอีกครั้งมีผลกับข้อความทุกประเภท รวมถึงเนื้อหาที่ไม่จำเป็น เช่น โปรโมชัน
- หากผู้ใช้ส่งข้อความถึงธุรกิจหลังจากยกเลิกการสมัครรับข้อความแล้ว ระบบจะถือว่าเป็นการ ขอสมัครรับข้อความอีกครั้ง
- หากผู้ใช้สมัครรับข้อความอีกครั้งนอกช่องทางการรับส่งข้อความ (เช่น ในเว็บไซต์ของคุณ) คุณในฐานะพาร์ทเนอร์ RBM มีหน้าที่ต้องอัปเดตสถานะของผู้ใช้และส่งข้อความต่อตามนั้น
เหตุการณ์ที่ Agent สร้างขึ้น
ตัวแทนจะส่งเหตุการณ์เพื่อจำลองการโต้ตอบของมนุษย์และรับรองกับผู้ใช้ว่า ตัวแทนของคุณมีส่วนร่วมกับข้อความของผู้ใช้ สำหรับผู้ใช้ เหตุการณ์จะแสดงเป็นการแจ้งเตือนในการสนทนา
ดูตัวเลือกการจัดรูปแบบและค่าได้ที่
phones.agentEvents
ตัวแทนส่งเหตุการณ์ READ
สำหรับผู้ใช้ เหตุการณ์นี้จะปรากฏเป็นใบตอบรับการอ่านสำหรับข้อความที่เฉพาะเจาะจง ซึ่งจะแจ้งให้ผู้ใช้ทราบว่าแพลตฟอร์ม RBM ได้ส่งข้อความของผู้ใช้แล้วและตัวแทนกำลังประมวลผลข้อความ
โค้ดต่อไปนี้จะส่งเหตุการณ์ READ สำหรับข้อความที่มี messageId ที่ตรงกัน
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentEvents?eventId=EVENT_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'eventType': 'READ', 'messageId': 'MESSAGE_ID' }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Send the device an event to indicate that messageId has been read rbmApiHelper.sendReadMessage('+12223334444', messageId);
Java
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send the device an event to indicate that messageId has been read rbmApiHelper.sendReadMessage(messageId, "+12223334444");
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service # Send the device an event to indicate that message_id was read rbm_service.send_read_event('+12223334444', message_id)
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Send the device an event to indicate that messageId has been read rbmApiHelper.SendReadMessage(messageId, "+12223334444");
ตัวแทนส่งเหตุการณ์ IS_TYPING
เหตุการณ์นี้จะปรากฏต่อผู้ใช้เป็นตัวบ่งชี้การพิมพ์และแจ้งให้ผู้ใช้ทราบว่าตัวแทนของคุณกำลังเขียนข้อความ
ข้อความว่า "กำลังพิมพ์" จะหมดอายุหลังจากผ่านไปไม่นาน (ประมาณ 20 วินาที) หรือเมื่ออุปกรณ์ของผู้ใช้ได้รับข้อความใหม่จากตัวแทน
ของคุณ เอเจนต์สามารถส่งเหตุการณ์ IS_TYPING หลายรายการเพื่อรีเซ็ตตัวจับเวลาหมดอายุของตัวบ่งชี้การพิมพ์
โค้ดต่อไปนี้จะส่งเหตุการณ์ IS_TYPING
cURL
curl -X POST "https://REGION-rcsbusinessmessaging.googleapis.com/v1/phones/PHONE_NUMBER/agentEvents?eventId=EVENT_ID&agentId=AGENT_ID" \ -H "Content-Type: application/json" \ -H "User-Agent: curl/rcs-business-messaging" \ -H "`oauth2l header --json PATH_TO_SERVICE_ACCOUNT_KEY rcsbusinessmessaging`" \ -d "{ 'eventType': 'IS_TYPING', }"
Node.js
// Reference to RBM API helper const rbmApiHelper = require('@google/rcsbusinessmessaging'); // Send the device an event to indicate that the agent is typing rbmApiHelper.sendIsTypingMessage('+12223334444', function() { console.log('Typing event sent!'); });
Java
import com.google.rbm.RbmApiHelper; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(); // Send the device an event to indicate that the agent is typing rbmApiHelper.sendIsTypingMessage("+12223334444");
Python
# Reference to RBM Python client helper and messaging object structure from rcs_business_messaging import rbm_service # Send the device an event to indicate that the agent is typing rbm_service.send_is_typing_event('+12223334444')
C#
using RCSBusinessMessaging; … // Create an instance of the RBM API helper RbmApiHelper rbmApiHelper = new RbmApiHelper(credentialsFileLocation, projectId); // Send the device an event to indicate that the agent is typing rbmApiHelper.SendIsTypingMessage(messageId, "+12223334444");