หลังจากลงทะเบียนกับ Business Messages แล้ว คุณจะได้รับข้อความในนามของตัวแทนทดสอบ คุณอาจรับข้อความสําหรับแบรนด์ที่คุณจัดการหลังจากสร้าง ยืนยัน และเปิดตัวตัวแทนสําหรับแบรนด์เหล่านั้น
เมื่อลูกค้าส่งข้อความถึงตัวแทนที่คุณจัดการ Business Messages จะส่งเพย์โหลด JSON ไปยังเว็บฮุคของคุณที่มีรหัสต่างๆ เนื้อหาข้อความ และข้อมูลตําแหน่ง
ใช้หน้าบันทึกในคอนโซลนักพัฒนาซอฟต์แวร์การสื่อสารทางธุรกิจเพื่อแก้ไขข้อบกพร่องเกี่ยวกับการส่งข้อความ
จัดการข้อความขาเข้า
วิธีที่ตัวแทนจัดการและตอบข้อความจากผู้ใช้จะขึ้นอยู่กับตรรกะธุรกิจของคุณ อย่างไรก็ตาม โดยทั่วไปแล้ว ขั้นตอนในการตอบกลับข้อความของผู้ใช้จะสอดคล้องกัน
ยอมรับข้อความ
หากต้องการตอบรับข้อความที่ได้รับจากเว็บฮุค ให้แสดงการตอบกลับ HTTP ที่ถูกต้องต่อข้อความที่ส่งไปยังเว็บฮุค
หากไม่สามารถส่งข้อความได้เนื่องจากการแสดงผลหมดเวลา ความสามารถในการเข้าถึงของเว็บฮุค การเปลี่ยนเส้นทาง หรือปัญหาเกี่ยวกับสิทธิ์ Google จะจัดเก็บและส่งต่อข้อความโดยพยายามส่งซ้ําเป็นเวลา 7 วันหรือจนกว่าเว็บฮุคจะรับข้อความเรียบร้อยแล้ว
ยืนยันว่าข้อความมาจาก Google
คุณควรยืนยันว่า Google ส่งข้อความก่อนที่จะประมวลผลเนื้อหาของข้อความ
วิธียืนยันว่า Google ส่งข้อความที่คุณได้รับ
- แยกวิเคราะห์ส่วนหัว
X-Goog-Signature
ของข้อความ ซึ่งเป็นสําเนาที่เข้ารหัสฐานของเพย์โหลดของข้อความที่เข้ารหัสฐาน 64 ใช้โทเค็นของไคลเอ็นต์ (ซึ่งจะแสดงเมื่อคุณกําหนดค่าเว็บฮุค) เป็นคีย์ แล้วสร้าง SHA512 HMAC ของไบต์ของเพย์โหลดของข้อความและเข้ารหัสผลลัพธ์เป็น Base64
เปรียบเทียบแฮช
X-Goog-Signature
กับแฮชที่คุณสร้างขึ้น- หากแฮชตรงกัน แสดงว่า Google เป็นผู้ส่งข้อความแล้ว
- หากแฮชไม่ตรงกัน ให้ตรวจสอบกระบวนการแฮชในข้อความที่ดี หากกระบวนการแฮชทํางานอย่างถูกต้องและคุณได้รับข้อความที่คิดว่าเป็นการฉ้อโกงที่ส่งถึงคุณ ติดต่อเรา (คุณต้องลงชื่อเข้าใช้ด้วยบัญชี Google ของ Business Messages)
ดูตัวอย่างการยืนยันข้อความในที่เก็บ GitHub สําหรับ Echo Bots ใน Java, Node.js และ Python
ระบุภาษา
ผู้ใช้สื่อสารจากหลายสถานที่และหลายภาษา Business Messages จะแสดงค่ากําหนดภาษาของผู้ใช้ด้วยช่อง resolvedLocale
และ userDeviceLocale
ซึ่งอิงตามการตั้งค่าภาษาในอุปกรณ์ของผู้ใช้
ดูการแปลและภาษาของ
หากเป็นไปได้ ให้กําหนดเส้นทางข้อความและเขียนการตอบกลับโดยอิงตามค่ากําหนดภาษาของผู้ใช้
กําหนดเส้นทางข้อความตามบริบทของข้อความ
บริบทของข้อความจะเป็นข้อมูลที่ผู้ใช้อาจกําลังมองหา
ตัวอย่างเช่น หากผู้ใช้ส่งข้อความที่มีค่า placeId
ผู้ใช้จะส่งข้อความถึงสถานที่เฉพาะ (ระบุโดย placeId
) และมักจะถามคําถามเจาะจงสถานที่ได้ ในทํานองเดียวกัน หากข้อความมีค่า nearPlaceId
ซึ่งระบุสถานที่ตั้งไว้ใกล้กับผู้ใช้ ผู้ใช้ก็น่าจะต้องการทราบข้อมูลตําแหน่งเฉพาะ แต่ตัวแทนควรยืนยันตําแหน่งที่ผู้ใช้ต้องการแชทก่อนเริ่มสนทนา
ด้วยข้อมูลบริบทของข้อความ ให้กําหนดเส้นทางข้อความไปยังตําแหน่งที่เหมาะสมที่สุดสําหรับการตอบกลับ ดังนี้
- หากข้อความอยู่ในการสนทนาใหม่และเป็นคําถามที่พบบ่อย คุณอาจตอบคําถามด้วยระบบอัตโนมัติได้
- หากระบบอัตโนมัติจัดการคําถามไม่ได้ ให้กําหนดเส้นทางคําถามไปยังตัวแทนแบบเรียลไทม์
- หากภาษาของข้อความไม่ตรงกับภาษาเริ่มต้นของ Agent ให้กําหนดเส้นทางข้อความไปยังตัวแทนแบบเรียลไทม์ที่รองรับภาษาดังกล่าว
- หากคําถามเกี่ยวข้องกับสถานที่ใดสถานที่หนึ่ง ให้กําหนดเส้นทางคําถามไปยังผู้ที่มีข้อมูลเกี่ยวกับสถานที่นั้น
- หากข้อความอยู่ในการสนทนาที่กําลังดําเนินอยู่ ให้กําหนดเส้นทางข้อความไปยังตัวแทนแบบเรียลไทม์ที่มีส่วนร่วมในการสนทนา
ระบุประเภทข้อความที่ผู้ใช้ส่ง
ผู้ใช้สามารถส่งข้อความได้ 3 ประเภท ดังนี้
- โดยข้อความ Text คือคําตอบรูปแบบอิสระ
- ข้อความรูปภาพจะมี URL ที่ลงนามสําหรับรูปภาพที่ผู้ใช้อัปโหลด
- ข้อความคําแนะนําจะรวมข้อมูล Postback และข้อความของการดําเนินการที่แนะนําหรือการตอบกลับที่แนะนําที่ผู้ใช้แตะ
ประมวลผลเนื้อหาข้อความ
หาก Agent ใช้ระบบอัตโนมัติ เนื้อหาของข้อความผู้ใช้จะนําทางตรรกะของ Agent ของคุณและมีคําตอบถัดไปในการสนทนา
วิธีที่ง่ายที่สุดในการระบุความตั้งใจของผู้ใช้คือข้อมูล Postback จากการตอบกลับที่แนะนําหรือการดําเนินการที่แนะนํา ข้อความ Postback จะอ่านได้ง่ายโดยไม่คํานึงถึงข้อความที่เกี่ยวข้องกับคําแนะนํา
หากผู้ใช้ส่งข้อความ SMS ตัวแทนของคุณอาจแยกวิเคราะห์การตอบกลับสําหรับคีย์เวิร์ดที่รองรับ หรือใช้การทําความเข้าใจภาษาธรรมชาติ (เช่น การผสานรวม Dialogflow เพื่อประมวลผลข้อความของผู้ใช้และระบุเส้นทางข้างหน้า
หากตัวแทนไม่รู้ว่าควรตอบกลับข้อความของผู้ใช้อย่างไร ตัวแทนควรตอบกลับสถานะข้อผิดพลาดและพยายามสนทนาต่อด้วยการให้ข้อมูลเพิ่มเติมแก่ผู้ใช้ โดยขอข้อความด้วยวิธีอื่นหรือโดยการส่งการสนทนาไปยังตัวแทนแบบเรียลไทม์
ตอบกลับผู้ใช้
หลังจากที่ตัวแทนระบุคําตอบที่ถูกต้องได้แล้ว ไม่ว่าจะผ่านการทํางานแบบอัตโนมัติหรือผ่านตัวแทนแบบเรียลไทม์ ตัวแทนจะส่งข้อความและสนทนากับผู้ใช้ต่อ
ขณะเขียนคําตอบ ให้พิจารณาภาษาของผู้ใช้ นอกจากนี้ คุณยังปรับแต่งการตอบกลับได้โดยการดึงค่าจากออบเจ็กต์ userInfo
ในแต่ละข้อความที่ได้รับ
ประเภทข้อความ
รหัสต่อไปนี้จะแสดงวิธีที่ตัวแทนได้รับข้อความ
โปรดดูการจัดรูปแบบและข้อมูลค่าใน UserMessage
ข้อความ
วิธีที่ใช้กันมากที่สุดสําหรับผู้ใช้คือการเขียนด้วยข้อความธรรมดา SMS มีรูปแบบดังนี้
{ "agent": "brands/BRAND_ID/agents/AGENT_ID", "conversationId": "CONVERSATION_ID", "customAgentId": "CUSTOM_AGENT_ID", "requestId": "REQUEST_ID", "message": { "messageId": "MESSAGE_ID", "name": "conversations/CONVERSATION_ID/messages/MESSAGE_ID", "text": "MESSAGE_TEXT", "createTime": "MESSAGE_CREATE_TIME", }, "dialogflowResponse": { "autoResponded": "BOOLEAN", "faqResponse": { "userQuestion": "USER_QUESTION", "answers": [{ "faqQuestion": "FAQ_QUESTION", "faqAnswer": "FAQ_ANSWER", "matchConfidenceLevel": "CONFIDENCE_LEVEL", "matchConfidence": "CONFIDENCE_NUMERIC", }], }, }, "context": { "entryPoint": "CONVERSATION_ENTRYPOINT", "placeId": "LOCATION_PLACE_ID", "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES", "userInfo": { "displayName": "USER_NAME", "userDeviceLocale": "USER_LOCALE", }, }, "sendTime": "SEND_TIME", }
โปรดดูตัวเลือกการจัดรูปแบบและค่า
ใน Message
รูปภาพ
นอกจากการส่งข้อความแล้ว ผู้ใช้ยังสามารถส่งรูปภาพให้ตัวแทนในรูปแบบข้อความได้อีกด้วย
Business Messages จะจัดเก็บรูปภาพที่แชร์ไว้เป็นเวลา 7 วันใน URL ที่ลงนามและจะรวม URL เหล่านั้นไว้ในช่อง text
ของเพย์โหลดของข้อความ
หาก Agent มีระบบอัตโนมัติ ให้ตรวจสอบว่าระบบอัตโนมัติรู้วิธีตอบกลับหากผู้ใช้แชร์รูปภาพ สําหรับตัวแทนแบบเรียลไทม์ โปรดตรวจสอบว่ารูปภาพนั้นส่งผ่าน หรือ URL ในข้อความสามารถคลิกได้
...
"message": {
"text": "https://storage.googleapis.com/business-messages-us/936640919331/jzsu6cdguNGsBhmGJGuLs1DS?x-goog-algorithm\u003dGOOG4-RSA-SHA256\u0026x-goog-credential\u003duranium%40rcs-uranium.iam.gserviceaccount.com%2F20190826%2Fauto%2Fstorage%2Fgoog4_request\u0026x-goog-date\u003d20190826T201038Z\u0026x-goog-expires\u003d604800\u0026x-goog-signedheaders\u003dhost\u0026x-goog-signature\u003d89dbf7a74d21ab42ad25be071b37840a544a43d68e67270382054e1442d375b0b53d15496dbba12896b9d88a6501cac03b5cfca45d789da3e0cae75b050a89d8f54c1ffb27e467bd6ba1d146b7d42e30504c295c5c372a46e44728f554ba74b7b99bd9c6d3ed45f18588ed1b04522af1a47330cff73a711a6a8c65bb15e3289f480486f6695127e1014727cac949e284a7f74afd8220840159c589d48dddef1cc97b248dfc34802570448242eac4d7190b1b10a008404a330b4ff6f9656fa84e87f9a18ab59dc9b91e54ad11ffdc0ad1dc9d1ccc7855c0d263d93fce6f999971ec79879f922b582cf3bb196a1fedc3eefa226bb412e49af7dfd91cc072608e98"
}
...
โปรดดูตัวเลือกการจัดรูปแบบและค่า
ใน Message
คำแนะนำ
การตอบกลับที่แนะนําและการดําเนินการที่แนะนําช่วยให้ผู้ใช้ตอบกลับหรือ ดําเนินการด้วยการแตะเพียงครั้งเดียว เมื่อผู้ใช้แตะคําแนะนํา ตัวแทนจะได้รับเพย์โหลดพร้อมกับข้อความคําแนะนําและข้อมูลระบบรายงานผล Conversion
ข้อความคําแนะนํามีรูปแบบต่อไปนี้
{ "agent": "brands/BRAND_ID/agents/AGENT_ID", "conversationId": "CONVERSATION_ID", "customAgentId": "CUSTOM_AGENT_ID", "requestId": "REQUEST_ID", "suggestionResponse": { "message": "conversations/CONVERSATION_ID/messages/MESSAGE_ID", "postbackData": "POSTBACK_DATA", "createTime": "RESPONSE_CREATE_TIME", "text": "SUGGESTION_TEXT", "suggestionType": "SUGGESTION_TYPE", } "context": { "entryPoint": "CONVERSATION_ENTRYPOINT", "placeId": "LOCATION_PLACE_ID", "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES", "userInfo": { "displayName": "USER_NAME", "userDeviceLocale": "USER_LOCALE", }, }, "sendTime": "SEND_TIME", }
โปรดดูตัวเลือกการจัดรูปแบบและค่า
ใน SuggestionResponse
คําขอการตรวจสอบสิทธิ์
คําแนะนําคําขอการตรวจสอบสิทธิ์อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้กับผู้ให้บริการ OAuth เพื่อให้รายละเอียดข้อมูลประจําตัวกับ Agent หรืออนุญาตให้ Agent ดําเนินการแทนผู้ใช้ โปรดดูที่หัวข้อตรวจสอบสิทธิ์ด้วย OAuth
หากผู้ใช้ลงชื่อเข้าใช้ด้วยผู้ให้บริการ OAuth ที่ระบุไว้สําเร็จ ตัวแทนจะได้รับเพย์โหลดพร้อมกับรหัสการให้สิทธิ์ หากผู้ใช้ลงชื่อเข้าใช้ไม่สําเร็จ ตัวแทนจะได้รับเพย์โหลดพร้อมรายละเอียดข้อผิดพลาด
ข้อความคําขอการตรวจสอบสิทธิ์จะมีรูปแบบต่อไปนี้
{ "agent": "brands/BRAND_ID/agents/AGENT_ID", "conversationId": "CONVERSATION_ID", "customAgentId": "CUSTOM_AGENT_ID", "requestId": "REQUEST_ID", "authenticationResponse": { "code": "AUTHORIZATION_CODE", "redirect_uri": "REDIRECT_URI", "errorDetails": { "error": "ERROR", "errorDescription": "ERROR_DESCRIPTION", }, } "context": { "entryPoint": "CONVERSATION_ENTRYPOINT", "placeId": "LOCATION_PLACE_ID", "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES", "userInfo": { "displayName": "USER_NAME", "userDeviceLocale": "USER_LOCALE", }, }, "sendTime": "SEND_TIME", }
โปรดดูตัวเลือกการจัดรูปแบบและค่า
ใน AuthenticationResponse
บริบทของข้อความ
แต่ละข้อความจะมีข้อมูลบริบทเกี่ยวกับตําแหน่งของข้อความ
... "context": { "customContext": "CUSTOM_CONTEXT", "entryPoint": "CONVERSATION_ENTRYPOINT", "placeId": "LOCATION_PLACE_ID", "nearPlaceId": "NEARBY_LOCATION_PLACE_ID", "deflectedPhoneNumber": "DEFLECTED_PHONE_NUMBER", "resolvedLocale": "MATCH_OF_USER_AND_AGENT_LOCALES", "userInfo": { "displayName": "USER_NAME", "userDeviceLocale": "USER_LOCALE", }, "widget": { "url": "WEBSITE_URL", "widgetContext": "WIDGET_CONTEXT", }, }, ...
ช่อง | คำอธิบาย |
---|---|
customContext |
ข้อมูลบริบทที่พาร์ทเนอร์ระบุ |
entryPoint |
แพลตฟอร์มการรับส่งข้อความที่ผู้ใช้เริ่มต้นการสนทนาตามที่กําหนดโดย EntryPoint |
placeId |
ตัวระบุที่ไม่ซ้ํากันจากฐานข้อมูล Google Places สําหรับสถานที่ที่ผู้ใช้ส่งข้อความถึง โดยจะปรากฏในข้อความจากจุดเข้าถึงเฉพาะสถานที่เท่านั้น |
nearPlaceId |
ตัวระบุที่ไม่ซ้ํากันจากฐานข้อมูล Google Places สําหรับสถานที่แรกใน Local Pack ยืนยันสถานที่ที่ผู้ใช้ต้องการแชทด้วยเมื่อได้รับค่า nearPlaceId |
deflectedPhoneNumber |
หมายเลขโทรศัพท์ที่ Business Messages แจ้งผู้ใช้ไม่ให้โทรเมื่อเริ่มการสนทนา |
resolvedLocale |
รายการที่ตรงกันที่คํานวณมากที่สุดของภาษาของผู้ใช้ (รายงานใน ค่าภาษาคือแท็กภาษา IETF BCP 47 ที่มีรูปแบบถูกต้อง |
userInfo.displayName |
ชื่อของผู้ใช้ที่ส่งข้อความ หากผู้ใช้เลือกไม่ใช้การแชร์ข้อมูลประจําตัว ช่องนี้จะว่างเปล่า |
userInfo.userDeviceLocale |
ภาษาของผู้ใช้ซึ่งรายงานโดยอุปกรณ์เป็นแท็กภาษา IETF BCP 47 ที่มีรูปแบบถูกต้อง |
widget.url |
URL ของเว็บไซต์ที่เปิดตัวบทสนทนาขึ้น |
widget.widgetContext |
ค่าแอตทริบิวต์ data-bm-widget-context ของวิดเจ็ตที่ใช้เริ่มการสนทนา |
ประวัติการสนทนา
Google ไม่ได้ให้ประวัติการสนทนา สนทนาตามการสนทนาที่ผ่านมาในลักษณะที่สอดคล้องกับนโยบายความเป็นส่วนตัวและแนวทางปฏิบัติแนะนําเพื่อให้คุณส่งคําตอบล่าสุดไปยังข้อความจากผู้ใช้ได้ในภายหลัง