สำรวจใน Dialogflow
คลิกต่อไปเพื่อนำเข้าตัวอย่างบันทึกข้อมูลใน Dialogflow จากนั้นทำตามขั้นตอนด้านล่างเพื่อทำให้ใช้งานได้และทดสอบตัวอย่าง
- ป้อนชื่อตัวแทนและสร้าง Agent ใหม่ใน Dialogflow สำหรับตัวอย่าง
- หลังจากนำเข้า Agent เสร็จแล้ว ให้คลิกไปที่ Agent
- จากเมนูการนำทางหลัก ให้ไปที่การดำเนินการคำสั่งซื้อ
- เปิดใช้ตัวแก้ไขในบรรทัด แล้วคลิกทำให้ใช้งานได้ ซึ่งตัวแก้ไขจะมีโค้ดตัวอย่าง
- จากเมนูการนําทางหลัก ให้ไปที่ Integrations แล้วคลิก Google Assistant
- ในหน้าต่างโมดัลที่ปรากฏ ให้เปิดใช้แสดงตัวอย่างการเปลี่ยนแปลงอัตโนมัติ และคลิกทดสอบเพื่อเปิดเครื่องจำลองการดำเนินการ
- ในเครื่องจำลอง ให้ป้อน
Talk to my test app
เพื่อทดสอบตัวอย่าง
ส่วนหนึ่งของการมอบประสบการณ์ที่ยอดเยี่ยมแก่ผู้ใช้คือ สามารถบันทึกข้อมูลระหว่างการเปลี่ยนการสนทนาหรือการสนทนาหลายรายการกับผู้ใช้รายหนึ่งๆ ซึ่งจะเป็นประโยชน์หากคุณระบุข้อความซ้ำๆ ที่เป็นประโยชน์ในการสนทนาเดียว บันทึกคะแนนของเกมในเซสชันต่างๆ หรือจดจำข้อมูลส่วนเล็กๆ ของผู้ใช้
ข้อกำหนดจะแตกต่างกันไปเล็กน้อยขึ้นอยู่กับว่าคุณต้องบันทึกข้อมูลภายในการสนทนาหนึ่งหรือระหว่างการสนทนา คุณใช้ช่อง conversationToken
ของออบเจ็กต์ AppResponse
เพื่อบันทึกข้อมูลในการสนทนาได้
หากต้องการบันทึกข้อมูลในการสนทนาต่างๆ ให้ทําตามขั้นตอนต่อไปนี้แทน
- ตรวจสอบว่าผู้ใช้ได้รับการยืนยันหรือเป็นผู้มาเยือน
- จัดเก็บหรือเข้าถึงข้อมูลผู้ใช้โดยใช้ช่อง
userStorage
ของออบเจ็กต์AppResponse
การบันทึกข้อมูลระหว่างการเปลี่ยนสถานะของการสนทนา
ช่อง conversationToken
เป็นสตริงที่มีโทเค็นทึบแสงและหมุนเวียนไปยัง "การดำเนินการ" ทุกครั้งที่มีการสนทนา เช่น หากกำหนดค่าเป็น "count=1"
ใน AppResponse
สำหรับการเปิดการสนทนาครั้งแรก AppRequest
ที่การดำเนินการของคุณได้รับสำหรับตาที่ 2 ของการสนทนานั้นจะมี "count=1"
อยู่ใน conversationToken
โทเค็นจะกำหนดค่าเริ่มต้นเป็นสตริงว่างเปล่าในตอนต้นของการสนทนาเสมอ หากใช้ไลบรารีของไคลเอ็นต์ Actions on Google Node.js คุณจะสามารถ
โต้ตอบกับโทเค็นการสนทนาเป็นออบเจ็กต์ JSON โดยใช้ conv.data
โดยที่ conv
คืออินสแตนซ์ของ Conversation
ตัวอย่างต่อไปนี้แสดงวิธีบันทึกตัวนับในช่อง conversationToken
ของ AppResponse
Node.js
conv.data.firstNum = firstNum; conv.ask(`Got it, the first number is ${firstNum}.`); conv.ask(`What's the second number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getConversationData().put("firstNum", firstNum); responseBuilder.add("Got it, the first number is " + firstNum + "."); responseBuilder.add("What's the second number?"); return responseBuilder.build();
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุคที่ใช้ outputContexts
แทน conversationToken
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } }, "outputContexts": [ { "name": "projects/save-data-df-js/agent/sessions/ABwppHGfFkWJdHKPpBEYiGkhdoakWmYj_2sZa4o8pbGG9nj4q5_GfDTtNEXOY34mLX8G4o_d7oZdUW9bnBZC/contexts/_actions_on_google", "lifespanCount": 99, "parameters": { "data": "{\"firstNum\":23}" } } ] }
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุค
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Got it, the first number is 23." } }, { "simpleResponse": { "textToSpeech": "What's the second number?" } } ] } } } ], "conversationToken": "{\"data\":{\"firstNum\":23}}" }
ดูคู่มือแนวทางปฏิบัติแนะนำเกี่ยวกับแสดงข้อความแจ้งที่เป็นประโยชน์และล้มเหลวเป็นตัวอย่างการใช้งานที่นำไปปฏิบัติได้จริง
การบันทึกข้อมูลในการสนทนาต่างๆ
ช่อง userStorage
ของออบเจ็กต์ AppResponse
เป็นสตริงที่มีโทเค็นทึบที่การดำเนินการบันทึกไว้ในการสนทนาต่างๆ ของผู้ใช้บางราย เช่น เกมจะบันทึกคะแนนสูงสุดของผู้ใช้ใน userStorage
ได้และใช้ค่านั้นในข้อความต้อนรับทุกครั้งที่ผู้ใช้เริ่มการสนทนาใหม่
การกำหนดและการจัดการสถานะการยืนยันผู้ใช้
สถานะการยืนยันของผู้ใช้อาจมีค่าเป็น GUEST
หรือ VERIFIED
เมื่อเริ่มต้นการสนทนา Actions on Google จะตั้งสถานะการยืนยันของผู้ใช้ตามสัญญาณบอกสถานะต่างๆ เมื่อการสนทนาเริ่มต้นขึ้น ตัวอย่างเช่น ผู้ใช้ที่เข้าสู่ระบบ Google Assistant ในอุปกรณ์เคลื่อนที่มีสถานะการยืนยันเป็น VERIFIED
เหตุผลที่อาจทำให้ผู้ใช้มีสถานะการยืนยันเป็น GUEST
มีดังนี้
- ผู้ใช้ปิดผลการค้นหาเฉพาะบุคคลไว้
- ผู้ใช้ปิดใช้กิจกรรมบนเว็บและแอป โปรดทราบว่าผู้ใช้บางคน อาจปิดใช้การตั้งค่านี้ในระดับโดเมน
- หากอุปกรณ์เปิดใช้ Voice Match และจับคู่ไม่สำเร็จหรือผู้ใช้เรียกใช้ Assistant โดยไม่ใช้เสียง (เช่น กด Google Home ค้างไว้)
- ผู้ใช้ไม่ได้ลงชื่อเข้าใช้
ตรวจสอบสถานะการยืนยันของผู้ใช้ทุกครั้งก่อนจัดเก็บข้อมูลด้วย userStorage
หรือเริ่มขั้นตอนการลิงก์บัญชีเพื่อป้องกันไม่ให้ผู้ใช้ที่เป็นผู้มาเยือนโต้ตอบกับฟีเจอร์ที่ทำงานไม่สำเร็จ
หากใช้ไลบรารีของไคลเอ็นต์ Actions on Google สำหรับ Node.js
คุณจะอินเทอร์เฟซกับพื้นที่เก็บข้อมูลของผู้ใช้เป็นออบเจ็กต์ JSON ได้โดยใช้
conv.user.storage
โดยที่ conv
คืออินสแตนซ์ของ Conversation
ตัวอย่างต่อไปนี้แสดงวิธีบันทึกตัวนับในช่อง userStorage
ของ AppResponse
Node.js
app.intent('Save Sum', (conv) => { if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); } });
Java
@ForIntent("Save Sum") public ActionResponse saveSum(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build(); }
Node.js
if (conv.user.verification === 'VERIFIED') { conv.user.storage.sum = conv.data.sum; conv.close(`Alright, I'll store that for next time. See you then.`); } else { conv.close(`I can't save that right now, but we can add ` + `new numbers next time!`); }
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); Integer sum = ((Double) request.getConversationData().get("sum")).intValue(); String verificationStatus = request.getUser().getUserVerificationStatus(); if (verificationStatus.equals("VERIFIED")) { responseBuilder.getUserStorage().put("sum", sum); responseBuilder.add("Alright, I'll store that for next time. See you then."); } else { responseBuilder.add("I can't save that right now, but we can add new numbers next time!"); } responseBuilder.endConversation(); return responseBuilder.build();
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุค
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] }, "userStorage": "{\"data\":{\"sum\":68}}" } } }
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุค
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I'll store that for next time. See you then." } } ] } }, "conversationToken": "{\"data\":{\"firstNum\":23,\"sum\":68}}", "userStorage": "{\"data\":{\"sum\":68}}" }
ดูตัวอย่างการใช้งานจริงได้ในคู่มือแนวทางปฏิบัติแนะนำในการปรับเปลี่ยนการสนทนาในแบบของคุณตามค่ากำหนดของผู้ใช้
หมายเหตุทางกฎหมาย: การขอความยินยอมก่อนเข้าถึง userStorage
บางประเทศมีกฎระเบียบที่กำหนดให้นักพัฒนาแอปต้องขอความยินยอมจากผู้ใช้ก่อนจึงจะเข้าถึงหรือบันทึกข้อมูลบางอย่าง (เช่น ข้อมูลส่วนบุคคล) ใน userStorage
ได้ หากคุณดำเนินธุรกิจในประเทศใดประเทศหนึ่งเหล่านี้ และต้องการเข้าถึงหรือบันทึกข้อมูลดังกล่าวใน userStorage
คุณต้องใช้เครื่องมือช่วยยืนยันเพื่อขอความยินยอมจากผู้ใช้และขอความยินยอมก่อน จึงจะเริ่มจัดเก็บข้อมูลดังกล่าวใน userStorage
ได้
การหมดอายุของพื้นที่เก็บข้อมูลของผู้ใช้
เมื่อ Assistant จับคู่ข้อมูลประจำตัวกับผู้ใช้ได้ เนื้อหาของ userStorage
ไม่มีวันหมดอายุ และมีเพียงผู้ใช้หรือการดำเนินการเท่านั้นที่จะล้างได้
เมื่อ Assistant จับคู่ข้อมูลประจำตัวกับผู้ใช้ไม่ได้ ระบบจะล้างเนื้อหาของ userStorage
เมื่อสิ้นสุดการสนทนา ต่อไปนี้คือกรณีที่ Assistant ไม่สามารถจับคู่ข้อมูลประจำตัวกับผู้ใช้
- ตั้งค่า Voice Match แล้วแต่ไม่มีการจับคู่ที่ตรงกัน
- ผู้ใช้ปิดใช้ข้อมูลส่วนตัว
ล้างเนื้อหาของช่อง userStorage
คุณล้างเนื้อหาในช่อง userStorage
ของการดำเนินการได้โดยตั้งค่าช่อง resetUserStorage
ของ AppResponse
เป็นจริง หากคุณตั้งค่า userStorage
เป็นสตริงว่างเปล่า ค่าของ userStorage
จะไม่เปลี่ยนแปลงในบทสนทนาถัดไป วิธีนี้ช่วยให้คุณหลีกเลี่ยงการส่ง userStorage
กลับไปทั้งฉบับได้ในกรณีที่เนื้อหาไม่เปลี่ยนแปลง
หากใช้ไลบรารี Actions On Google Client สำหรับ Node.js
คุณจะตั้งค่า conv.user.storage
เป็น {}
ได้ (ออบเจ็กต์ว่างเปล่า)
Node.js
app.intent('Forget Number', (conv) => { conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`); });
Java
@ForIntent("Forget Number") public ActionResponse forgetNumber(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build(); }
Node.js
conv.user.storage = {}; conv.ask(`Alright, I forgot your last result.`); conv.ask(`Let's add two new numbers. What is the first number?`);
Java
ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.getUserStorage().clear(); responseBuilder.add("Alright, I forgot your last result."); responseBuilder.add("Let's add two new numbers. What is the first number?"); return responseBuilder.build();
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุค
{ "payload": { "google": { "expectUserResponse": true, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] }, "userStorage": "{\"data\":{}}" } } }
JSON
โปรดทราบว่า JSON ด้านล่างอธิบายการตอบสนองของเว็บฮุค
{ "expectUserResponse": true, "expectedInputs": [ { "possibleIntents": [ { "intent": "actions.intent.TEXT" } ], "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Alright, I forgot your last result." } }, { "simpleResponse": { "textToSpeech": "Let's add two new numbers. What is the first number?" } } ] } } } ], "userStorage": "{\"data\":{}}" }
ในฐานะผู้ใช้ คุณจะดูเนื้อหาของช่อง userStorage
ในการดำเนินการที่คุณเรียกใช้ได้ คุณยังสามารถนำข้อมูลผู้ใช้ที่จัดเก็บไว้ออกจากการดำเนินการนั้นๆ ได้โดยทำให้บริการเลิกจดจำคุณ
- เปิดแอป Assistant ในโทรศัพท์
- แตะไอคอนลิ้นชัก
- ในแท็บสำรวจ ให้ค้นหาการดำเนินการที่ต้องการดูหรือล้างพื้นที่เก็บข้อมูลของผู้ใช้ แล้วแตะการดำเนินการเพื่อเปิดหน้ารายละเอียด
- เลื่อนลงไปที่ด้านล่างของหน้า
- หากต้องการดูเนื้อหาของช่อง
userStorage
ให้แตะ [ดูข้อมูลที่จัดเก็บไว้] - หากต้องการนำข้อมูลผู้ใช้ที่จัดเก็บไว้ออก ให้แตะหยุด $action ไม่ให้จดจำฉัน
- หากต้องการดูเนื้อหาของช่อง