เหตุการณ์คือการแจ้งเตือนที่เอเจนต์ของคุณส่งและรับได้ กิจกรรมมี 3 ประเภท ดังนี้
- เซิร์ฟเวอร์สร้างขึ้น แพลตฟอร์ม RBM จะส่งไปยังตัวแทนของคุณ
- ผู้ใช้สร้างขึ้น: ส่งไปยังตัวแทนโดยอุปกรณ์ของผู้ใช้
- เอเจนต์สร้าง เอเจนต์ส่งถึงผู้ใช้
เหตุการณ์ที่เซิร์ฟเวอร์สร้างขึ้น
แพลตฟอร์ม RBM จะส่งเหตุการณ์เพื่อแจ้งให้ตัวแทนทราบเกี่ยวกับการอัปเดตระดับเซิร์ฟเวอร์ เช่น ข้อความหมดอายุ
ดูตัวเลือกการจัดรูปแบบและค่าได้ที่
ServerEvent
สถานะการเปิดใช้งานของตัวแทนมีการเปลี่ยนแปลง
แพลตฟอร์ม RBM จะส่ง AgentLaunchEvent
สำหรับการเปลี่ยนแปลงทุกครั้งในสถานะการเปิดตัวของตัวแทน ตัวอย่างเช่น เมื่อสถานะของตัวแทน
เปลี่ยนจาก PENDING
เป็น LAUNCHED
หลังจากที่ผู้ให้บริการอนุมัติ คุณจะได้รับ
เหตุการณ์ AgentLaunchEvent
เพื่อระบุการเปลี่ยนแปลง ระบบจะส่งเหตุการณ์เหล่านี้สำหรับ
ตัวแทน RBM ทั้งหมดเมื่อมีการเปลี่ยนแปลงสถานะการเปิดตัวของผู้ให้บริการทั้งหมด
การกำหนดค่าเว็บฮุค
คุณสามารถใช้เว็บฮุค ระดับพาร์ทเนอร์หรือระดับตัวแทน เพื่อรับการแจ้งเตือนเหล่านี้
ข้อกำหนดเบื้องต้น
- กำหนดค่าเว็บฮุค สำหรับการรับส่งข้อความ 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 |
ระงับ Agent ที่เปิดตัวแล้ว |
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
เหตุการณ์ที่ 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 มีหน้าที่ต้องอัปเดตสถานะของผู้ใช้และส่งข้อความต่อตามนั้น
เหตุการณ์ที่ตัวแทนสร้างขึ้น
ตัวแทนจะส่งเหตุการณ์เพื่อจำลองการโต้ตอบของมนุษย์และรับรองกับผู้ใช้ว่า ตัวแทนของคุณมีส่วนร่วมกับข้อความของผู้ใช้ สำหรับผู้ใช้ เหตุการณ์จะแสดงเป็นการแจ้งเตือนในการสนทนา
ดูตัวเลือกการจัดรูปแบบและค่าได้ที่
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");