เหตุการณ์คือการแจ้งเตือนที่เอเจนต์ของคุณส่งและรับได้ เหตุการณ์มี 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
ในเพย์โหลดของเหตุการณ์จะระบุสถานะการเปิดตัวใหม่ของเอเจนต์
ค่าที่เป็นไปได้มีดังนี้
| ค่า | สถานะการเปิดตัวของตัวแทน | รายละเอียด |
|---|---|---|
PENDING |
รอดำเนินการ | ระบบได้ส่งคำขอให้ผู้ให้บริการตรวจสอบแล้ว |
LAUNCHED |
เปิดตัวแล้ว | อนุญาตให้ส่งข้อความในผู้ให้บริการที่ระบุ |
REJECTED |
ถูกปฏิเสธในผู้ให้บริการรายหนึ่งๆ | เหตุผลการปฏิเสธระบุไว้ในความคิดเห็น |
SUSPENDED |
ถูกระงับในเครือข่ายของผู้ให้บริการที่ระบุ | เหตุผลในการระงับจะระบุไว้ในความคิดเห็น |
UNLAUNCHED |
ยังไม่ได้เปิดตัว | ตัวแทนที่ไม่ได้เปิดตัวจากผู้ให้บริการทั้งหมดจะได้รับอนุญาตให้แก้ไข |
ฟิลด์ข้อมูลมีออบเจ็กต์ 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 |
UNLAUNCHED |
ยกเลิกการเปิดตัวเอเจนต์ที่ถูกระงับ |
UNLAUNCHED |
PENDING |
เตรียมตัวแทนที่ยังไม่ได้เปิดตัวสำหรับคำขอเปิดตัวใหม่ |
ข้อความหมดอายุแล้ว การเพิกถอนสำเร็จ
ข้อความหมดอายุและถูกเพิกถอนเรียบร้อยแล้ว เหตุการณ์นี้จะเป็น ทริกเกอร์ที่ดีสำหรับกลยุทธ์การรับส่งข้อความสำรอง
{ "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ที่ Webhook - หากข้อความไม่ได้รับการนำส่ง ให้ใช้ 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" }
ผู้ใช้แตะคำตอบที่แนะนำ
เมื่อผู้ใช้แตะคำตอบที่แนะนำ ตัวแทนจะได้รับเหตุการณ์ที่มี ข้อมูลการแจ้งผล Conversion ของคำตอบและข้อความ
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID",
"suggestionResponse": {
"postbackData": "postback_1234",
"text": "Hello there!"
}
}ผู้ใช้แตะการดำเนินการที่แนะนำ
เมื่อผู้ใช้แตะการกระทําที่แนะนํา ตัวแทนของคุณจะได้รับเหตุการณ์ที่มี ข้อมูลการรายงานผล Conversion ของการกระทํา
{
"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"
}วิธีการทำงาน
- ตัวเลือกยกเลิกการสมัครรับข้อมูลจะอยู่ในเมนูแชทเสมอ สำหรับเอเจนต์ที่ใช้เพื่อการโปรโมตและแบบหลายครั้ง ตัวเลือกนี้จะปรากฏในแชทโดยตรงหลังจากมีข้อความที่ยังไม่อ่านจำนวนหนึ่ง (กฎเฉพาะจะแตกต่างกันไปตามประเทศ)
การเลือกยกเลิกการสมัครรับข้อความจะทําให้เกิดการดําเนินการ 2 อย่างพร้อมกัน ได้แก่ Google Messages จะส่งคีย์เวิร์ดเฉพาะประเทศ (เช่น "STOP") ไปยังตัวแทน และ แพลตฟอร์ม RBM จะส่งเหตุการณ์ UNSUBSCRIBE ไปยังเว็บฮุก
ระบบจะกำหนดคีย์เวิร์ดตามรหัสประเทศแบบ 2 ตัวอักษรของหมายเลขโทรศัพท์ของผู้ใช้ ตารางต่อไปนี้แสดงคีย์เวิร์ดสำหรับแต่ละประเทศที่รองรับ
ประเทศ (รหัสประเทศ) คีย์เวิร์ดการยกเลิกการสมัครรับข้อมูล สหรัฐอเมริกา (US), อินเดีย (IN), สหราชอาณาจักร (GB), เยอรมนี (DE) หยุด สเปน (ES), เม็กซิโก (MX) BAJA ฝรั่งเศส (FR) หยุด บราซิล (BR) parar หลังจากที่ผู้ใช้ยกเลิกการสมัครรับข้อความแล้ว การสนทนาจะยังคงอยู่ในกล่องจดหมาย เว้นแต่จะมีการรายงานว่าเป็นสแปม ในกรณีนี้ ระบบจะย้ายการสนทนาไปยังโฟลเดอร์สแปมและข้อความที่ถูกบล็อก
Google จะตรวจสอบรูปแบบข้อความหลังจากที่ผู้ใช้ยกเลิกการสมัครรับอีเมลเพื่อระบุการละเมิดนโยบายและกฎทางธุรกิจ
กฎทางธุรกิจ
- ในฐานะพาร์ทเนอร์ RBM ที่จัดการการสนทนานี้ คุณมีหน้าที่ ปฏิบัติตามคำขอของผู้ใช้ในการยกเลิกการติดตาม
- หากยกเลิกการสมัครรับอีเมลภายในชุดข้อความไม่ได้ คุณ ต้องส่งข้อความรับทราบพร้อมลิงก์โดยตรงไปยัง เว็บไซต์หรือแอปที่ผู้ใช้จัดการค่ากำหนดการสมัครรับอีเมลได้ทันที
- หลังจากที่ผู้ใช้ยกเลิกการสมัครรับข้อมูลแล้ว จะห้ามส่งข้อความที่ไม่จำเป็น
- แต่จะยังอนุญาตให้ส่งข้อความที่จำเป็นได้ ซึ่งรวมถึง
- การตรวจสอบสิทธิ์ เช่น รหัสผ่านที่สามารถใช้งานได้เพียงครั้งเดียว (OTP)
- การแจ้งเตือนเกี่ยวกับบริการที่เฉพาะเจาะจงซึ่งผู้ใช้ได้ขอและ ยินยอม
- การยืนยันคำขอของผู้ใช้ในการยกเลิกการสมัครรับอีเมล พร้อมข้อมูลเพื่อ จัดการค่ากําหนดการสื่อสารเพิ่มเติม
ตัวอย่าง
หากผู้ใช้ยกเลิกการสมัครรับข้อความจากตัวแทนสายการบินที่มี Use Case เป็นแบบใช้ได้หลายครั้ง คุณต้องหยุดส่งข้อความการตลาด อย่างไรก็ตาม คุณสามารถส่งข้อมูลอัปเดตเกี่ยวกับเที่ยวบินได้ หากผู้ใช้ให้ความยินยอมอย่างชัดแจ้งในการรับข้อมูลอัปเดตสำหรับเที่ยวบินนั้นๆ
เหตุผลในการยกเลิกการสมัครรับข้อมูล
เมื่อผู้ใช้ยกเลิกการติดตามเอเจนต์ของคุณ ผู้ใช้จะเลือกเหตุผลจากตัวเลือกต่อไปนี้ได้
- ไม่ได้ลงชื่อสมัครรับข้อมูล
- มีข้อความมากเกินไป
- ไม่สนใจเป็นสมาชิกแล้ว
- สแปม
- อื่นๆ
ปัจจุบันระบบยังไม่ได้แชร์เหตุผลในการยกเลิกการติดตามกับพาร์ทเนอร์หรือผู้ให้บริการ
ผู้ใช้สมัครรับข้อมูลการสนทนาอีกครั้ง
ผู้ใช้สามารถสมัครรับข้อมูลการสนทนาที่ยกเลิกการสมัครรับข้อมูลไปก่อนหน้านี้ใน Google Messages ได้อีกครั้ง
SUBSCRIBE เหตุการณ์นี้บ่งชี้ว่าผู้ใช้ต้องการรับข้อความจากตัวแทนของคุณ ซึ่งรวมถึงเนื้อหาที่ไม่จำเป็น เช่น โปรโมชัน ตัวอย่างเพย์โหลด JSON มีดังนี้
{
"senderPhoneNumber": "PHONE_NUMBER",
"eventType": "SUBSCRIBE",
"eventId": "EVENT_ID",
"agentId": "AGENT_ID"
}วิธีการทำงาน
- ตัวเลือกสมัครรับข้อมูลซึ่งมีให้ใช้งานจากทั้งเมนูแชทและลิงก์ในแชท ช่วยให้ผู้ใช้สมัครรับข้อมูลการสนทนาที่เคยยกเลิกการสมัครไปแล้ว ได้อีกครั้ง
การเลือกติดตามจะทําให้เกิดการกระทํา 2 อย่างพร้อมกัน ได้แก่ Google Messages จะส่งคีย์เวิร์ดเฉพาะประเทศ (เช่น "START") ไปยังตัวแทน และ แพลตฟอร์ม RBM จะส่งเหตุการณ์ SUBSCRIBE ไปยังเว็บฮุก
ระบบจะกำหนดคีย์เวิร์ดที่เฉพาะเจาะจงตามรหัสประเทศแบบ 2 ตัวอักษรของหมายเลขโทรศัพท์ของผู้ใช้ ตารางต่อไปนี้แสดงคีย์เวิร์ดสำหรับแต่ละประเทศที่รองรับ
ประเทศ (รหัสประเทศ) คีย์เวิร์ดการติดตาม สหรัฐอเมริกา (US), อินเดีย (IN), สหราชอาณาจักร (GB), เยอรมนี (DE) เริ่ม สเปน (ES), เม็กซิโก (MX) ALTA ฝรั่งเศส (FR) Démarrer บราซิล (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");