Fulfillment จะกำหนดอินเทอร์เฟซแบบสนทนาสำหรับโปรเจ็กต์ Actions ของคุณเพื่อรับ ข้อมูลจากผู้ใช้และตรรกะเพื่อประมวลผลอินพุตและดำเนินการตามการดำเนินการในที่สุด
ภาพรวม
การดำเนินการตามคำสั่งซื้อจะได้รับคำขอจาก Assistant, ดำเนินการตามคำขอ และ ตอบสนอง คำขอและกระบวนการตอบกลับนี้ช่วยผลักดัน การสนทนาไปข้างหน้าได้จนกว่าคุณจะทำตามคำขอเริ่มต้นของผู้ใช้
ขั้นตอนต่อไปนี้อธิบายวิธีสร้าง Fulfillment โดยใช้การดำเนินการ SDK ที่มี Node.js หรือไลบรารีไคลเอ็นต์ Java/Kotlin ดังนี้
- เริ่มต้นออบเจ็กต์ ActionsSdkApp
- สร้างฟังก์ชันเพื่อจัดการคำขอในตรรกะการดำเนินการตามคำสั่งซื้อ
กำลังสร้างกล่องโต้ตอบ
เริ่มต้นออบเจ็กต์ ActionsSdkApp
อินสแตนซ์ของโค้ดต่อไปนี้
ActionsSdkApp
และตั้งค่า Node.js แบบ Boilerplate สำหรับ 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 ที่ทริกเกอร์
วิธีจัดการคำขอ
ใช้ตรรกะที่จำเป็นในการประมวลผลอินพุตของผู้ใช้
เรียกใช้ฟังก์ชัน
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 ที่ทริกเกอร์แล้ว ให้ใช้ 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 app.intent.action.MAIN
โดยปกติคุณจะไม่
ต้องดำเนินการประมวลผลข้อมูลอินพุตจากผู้ใช้ หากแพ็กเกจการดำเนินการของคุณมี
ดำเนินการต่างๆ และครอบคลุมกรณีการใช้งานมากมาย คุณควรแนะนำผู้ใช้โดยบอก
ให้พวกเขาทำสิ่งเหล่านี้ได้
- เรียกใช้ฟังก์ชัน
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");