Fulfillment กำหนดอินเทอร์เฟซการสนทนาสำหรับโปรเจ็กต์ Actions เพื่อรับข้อมูลจากผู้ใช้และตรรกะในการประมวลผลอินพุตและดำเนินการสำเร็จในที่สุด
ภาพรวม
Fulfillment ของคุณได้รับคำขอจาก Assistant จากนั้นจะดำเนินการตามคำขอและตอบกลับ ขั้นตอนการส่งคำขอและการตอบสนองไปมานี้ช่วยกระตุ้นการสนทนาให้เกิดขึ้นอย่างต่อเนื่องจนกว่าคำขอเริ่มต้นของผู้ใช้จะดำเนินการตามคำขอได้ในที่สุด
ขั้นตอนต่อไปนี้อธิบายวิธีสร้าง Fulfillment โดยใช้ Actions SDK ด้วยไลบรารีของไคลเอ็นต์ Node.js หรือ Java/Kotlin
- เริ่มต้นออบเจ็กต์ ActionsSdkApp
- สร้างฟังก์ชันเพื่อจัดการคำขอในตรรกะการดำเนินการตามคำสั่งซื้อ
กล่องโต้ตอบของสิ่งปลูกสร้าง
เริ่มต้นออบเจ็กต์ ActionsSdkApp
โค้ดต่อไปนี้จะสร้างอินสแตนซ์ ActionsSdkApp
และตั้งค่า Node.js บางส่วนสำหรับ Google Cloud Functions:
'use strict'; const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask('Hi!'); }); // More intent handling if needed exports.myFunction = functions.https.onRequest(app);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi!"); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi!" } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
สร้างฟังก์ชันเพื่อจัดการคำขอ
เมื่อผู้ใช้พูดวลี คุณจะได้รับคําขอจาก Google Assistant สร้างฟังก์ชันที่จัดการ Intent ที่ทริกเกอร์เพื่อให้เป็นไปตาม Intent ที่ส่งคำขอ
ที่ Intentวิธีจัดการคำขอ
ใช้ตรรกะที่จำเป็นสำหรับการประมวลผลข้อมูลจากผู้ใช้
เรียกใช้ฟังก์ชัน
conv.ask()
ผ่านการตอบสนองที่คุณต้องการแสดงเป็นอาร์กิวเมนต์
โค้ดต่อไปนี้แสดงวิธีสร้างคำตอบอย่างง่าย
conv.ask(`Hi! Say something, and I'll repeat it.`);
ResponseBuilder responseBuilder = getResponseBuilder(request).add("Hi! Say something, and I'll repeat it."); return responseBuilder.build();
{ "expectUserResponse": true, "expectedInputs": [ { "inputPrompt": { "richInitialPrompt": { "items": [ { "simpleResponse": { "textToSpeech": "Hi! Say something, and I'll repeat it." } } ] } }, "possibleIntents": [ { "intent": "actions.intent.TEXT" } ] } ], "conversationToken": "{\"data\":{}}", "userStorage": "{\"data\":{}}" }
การจัดการ Intent
เมื่อคุณมีฟังก์ชันทั้งหมดในการจัดการ Intent ที่ทริกเกอร์แล้ว ให้ใช้ app.intent
เพื่อกำหนดเครื่องจัดการให้กับ Intent
app.intent('actions.intent.TEXT', (conv) => { // handle text intent. }); app.intent('actions.intent.MAIN', (conv) => { // handle main intent. });
@ForIntent("actions.intent.MAIN") public ActionResponse main(ActionRequest request) { // handle main intent // ... } @ForIntent("actions.intent.TEXT") public ActionResponse text(ActionRequest request) { // handle text intent // ... }
กำลังสิ้นสุดการสนทนา
เมื่อไม่ต้องการให้ผู้ใช้ป้อนข้อมูลใดๆ กลับมาอีกต่อไปและต้องการสิ้นสุดการสนทนา ให้เรียกใช้ฟังก์ชัน conv.close()
ฟังก์ชันนี้จะบอก Google Assistant ให้พูดข้อความตอบกลับไปยังผู้ใช้และสิ้นสุดการสนทนาด้วยการปิดไมโครโฟน
การจัดการ Intent ของคำขอหลัก
เมื่อผู้ใช้เรียกใช้ Intent app.intent.action.MAIN
โดยปกติ คุณจะไม่ต้องประมวลผลการป้อนข้อมูลใดๆ จากผู้ใช้ หากแพ็กเกจการดำเนินการของคุณมีการดำเนินการหลายข้อและครอบคลุม Use Case มากมาย ก็เป็นความคิดที่ดีที่จะปรับเปลี่ยนผู้ใช้โดยบอกถึง 2-3 อย่างที่ผู้ใช้สามารถทำได้
- เรียกใช้ฟังก์ชัน
conv.ask()
ที่ส่งผ่านการตอบกลับของคุณเป็นอาร์กิวเมนต์ Google Assistant จะพูดคำตอบของคุณกับผู้ใช้ แล้วรอให้ผู้ใช้เรียก Intent ในรายการที่ระบุ
ข้อมูลโค้ดต่อไปนี้จะแสดงวิธีจัดการจุดประสงค์ในการต้อนรับที่ไม่ซับซ้อน
// handle the initialTrigger function handleMainIntent(conv, input) { conv.ask(input); }
private ActionResponse handleMainIntent(ResponseBuilder rb, String input) { return rb.add(input).build(); }
สถานะการสนทนา
หากใช้ API เว็บฮุค HTTP/JSON สำหรับการสนทนา คุณจะรักษาสถานะของการสนทนาด้วยออบเจ็กต์รูปแบบ JSON (conversationToken
) ที่ส่งไปมาระหว่างคุณกับ Google Assistant ได้ หากใช้ไลบรารีของไคลเอ็นต์ Node.js คุณจะเขียนและอ่านจากช่อง conv.data
ได้โดยตรง ระบบจะส่งช่องนี้กลับไปมาโดยอัตโนมัติระหว่างคำขอและคำตอบ
conv.data = {something: 10}; let value = conv.data.something;
ResponseBuilder rb = getResponseBuilder(request); rb.getConversationData().put("something", 10); Object value = rb.getConversationData().get("something");