การดำเนินการตามคำสั่งซื้อจะกำหนดอินเทอร์เฟซการสนทนาเพื่อให้การดำเนินการของคุณได้รับ ข้อมูลจากผู้ใช้และตรรกะเพื่อประมวลผลอินพุตและเติมเต็มผลลัพธ์ การดำเนินการ
กำหนดการสนทนาของคุณ
เมื่อคุณกำหนดการทำงานแล้ว คุณสามารถ การสนทนาที่เกี่ยวข้องสำหรับการดำเนินการเหล่านั้น คุณดำเนินการนี้โดย การสร้าง Intent ของ Dialogflow ที่กำหนดไวยากรณ์หรือสิ่งที่ผู้ใช้ต้องการ ที่จะพูดเพื่อเรียก Intent และดำเนินการ Fulfillment ที่เกี่ยวข้อง ความตั้งใจในการทริกเกอร์
คุณสามารถสร้าง Intent ต่างๆ ได้มากเท่าที่ต้องการเพื่อกำหนดการสนทนาทั้งหมด ไวยากรณ์
สร้าง Intent
คลิกเครื่องหมาย + ข้างรายการเมนู Intent ใน Dialogflow การนำทางด้านซ้าย เครื่องมือแก้ไข Intent จะปรากฏขึ้นเพื่อให้คุณป้อนข้อมูลต่อไปนี้
- ชื่อ Intent คือชื่อของ Intent ที่แสดงใน IDE
- บริบทช่วยให้คุณกำหนดขอบเขตการทริกเกอร์ความตั้งใจไปยังกรณีที่เฉพาะเจาะจงได้ อ่านเอกสารประกอบของ Dialogflow เกี่ยวกับบริบท เพื่อดูข้อมูลเพิ่มเติม
- เหตุการณ์จะเรียกใช้ Intent โดยผู้ใช้ไม่จำเป็นต้องพูดอะไร หนึ่ง
เหตุการณ์ตัวอย่างคือ
GOOGLE_ASSISTANT_WELCOME
ซึ่งทำให้ระบบ Assistant เพื่อเรียกใช้การดำเนินการของคุณ เหตุการณ์นี้ใช้ในการดำเนินการ default Action โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับ Intent ของตัวช่วยในตัวในเอกสารประกอบของเรา - วลีการฝึกกำหนดสิ่งที่ผู้ใช้ต้องพูด (ไวยากรณ์) เพื่อทริกเกอร์ ความตั้งใจ พิมพ์วลี 2-3 วลีที่นี่ (5-10) สิ่งที่ผู้ใช้พูดเพื่อเรียกให้แสดง ความตั้งใจ Dialogflow จะจัดการรูปแบบธรรมชาติของตัวอย่างให้โดยอัตโนมัติ วลีที่คุณระบุ
การดำเนินการและพารามิเตอร์จะกำหนดข้อมูลที่จะส่งไปยัง Fulfillment หาก Fulfillment เปิดใช้งานสำหรับ Intent นี้ ซึ่งรวมถึงข้อมูลที่แยกวิเคราะห์จาก ข้อมูลผู้ใช้และชื่อที่คุณสามารถใช้ใน Fulfillment เพื่อตรวจหา เรียกใช้ Intent แล้ว คุณจะใช้ชื่อนี้ในภายหลังเพื่อจับคู่ความตั้งใจกับ ตรรกะการดำเนินการตามคำสั่งซื้อที่สอดคล้องกัน ดูการกระทำและพารามิเตอร์ ในเอกสารประกอบของ Dialogflow เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดการดำเนินการ
คำตอบ คือเครื่องมือสร้างการตอบสนองของ Dialogflow ซึ่งคุณสามารถกำหนด ตอบสนองต่อความตั้งใจนี้โดยตรงใน Dialogflow โดยไม่ต้องเรียกใช้ การดำเนินการตามคำสั่งซื้อ ฟีเจอร์นี้มีประโยชน์สำหรับการตอบกลับแบบคงที่ที่คุณไม่ต้อง การดำเนินการตามคำสั่งซื้อ คุณอาจใช้ตัวเลือกนี้เพื่อส่งข้อความต้อนรับหรือข้อความบอกลาแบบง่ายๆ อย่างไรก็ตาม คุณมักจะใช้ Fulfillment เพื่อตอบกลับผู้ใช้ส่วนใหญ่ Intent
Fulfillment ระบุว่าคุณต้องการเรียกใช้การดำเนินการตามคำสั่งซื้อหรือไม่ เมื่อมีการเรียกใช้ Intent นี้ คุณจะเปิดใช้ตัวเลือกนี้สำหรับ Intent ใน Agent ของ Dialogflow หากต้องการดูรายการนี้ใน Intent คุณต้อง เปิดใช้การดำเนินการตามคำสั่งซื้อสำหรับตัวแทนในเมนูการดำเนินการ
การสร้างคำตอบใน Dialogflow
สำหรับบาง Intent คุณอาจไม่จำเป็นต้องให้ Fulfillment แสดงการตอบกลับ ในกรณีเหล่านี้ คุณสามารถใช้เครื่องมือสร้างคำตอบใน Dialogflow เพื่อสร้าง คำตอบ
ในส่วนคำตอบ ให้ป้อนข้อความตอบกลับที่คุณต้องการกลับไปที่ ผู้ใช้ คำตอบข้อความเริ่มต้นคือคำตอบข้อความ TTS แบบง่ายๆ ที่สามารถทำงาน การผสานรวม Dialogflow หลายรายการ มีการอธิบายคำตอบสำหรับ Google Assistant ในหน้าการตอบกลับ
การสร้างการตอบกลับการดำเนินการตามคำสั่งซื้อ
รหัสการดำเนินการตามคำสั่งซื้อโฮสต์อยู่ในตรรกะการดำเนินการตามคำสั่งซื้อเว็บฮุคสำหรับการดำเนินการ
ตัวอย่างเช่น ในตัวอย่าง Silly Name Maker
ตรรกะนี้พบได้ใน index.js
สําหรับ Cloud Function สำหรับ Firebase
เมื่อมีการทริกเกอร์ Intent ที่ใช้การดำเนินการตามการดำเนินการ คุณจะได้รับคำขอจาก Dialogflow ที่มีข้อมูลเกี่ยวกับความตั้งใจ จากนั้นให้ตอบกลับ โดยการประมวลผลความตั้งใจและแสดงผลการตอบกลับ คำขอนี้และ เว็บฮุคของ Dialogflow เป็นตัวกำหนดการตอบสนอง
เราขอแนะนำให้คุณใช้ไลบรารีของไคลเอ็นต์ Node.js ในการดำเนินการตามคำขอ และแสดงการตอบกลับ กระบวนการทั่วไปในการใช้ไลบรารีของไคลเอ็นต์มีดังนี้
- เริ่มต้นออบเจ็กต์ Dialogflow ออบเจ็กต์นี้จะจัดการฟังคำขอและแยกวิเคราะห์โดยอัตโนมัติ เพื่อประมวลผลสินค้าเหล่านั้นในการดำเนินการตามคำสั่งซื้อ
- สร้างฟังก์ชันเพื่อจัดการคำขอ ฟังก์ชันเหล่านี้จะประมวลผลอินพุตของผู้ใช้และองค์ประกอบอื่นๆ ของ Intent และ สร้างการตอบสนองเพื่อกลับไปยัง Dialogflow
เริ่มต้นออบเจ็กต์ Dialogflow
โค้ดต่อไปนี้จะสร้างอินสแตนซ์ Dialogflow
และทำ Boilerplate
การตั้งค่า Node.js สำหรับ Google Cloud Functions
'use strict'; const {dialogflow} = require('actions-on-google'); const functions = require('firebase-functions'); const app = dialogflow({debug: true}); app.intent('Default Welcome Intent', (conv) => { // Do things }); exports.yourAction = functions.https.onRequest(app);
public class DfFulfillment extends DialogflowApp { private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class); @ForIntent("Default Welcome Intent") public ActionResponse welcome(ActionRequest request) { // Do things // ... }
สร้างฟังก์ชันเพื่อจัดการคำขอ
เมื่อผู้ใช้พูดวลีที่กระตุ้นความตั้งใจ คุณจะได้รับคำขอจาก Dialogflow ที่คุณจัดการด้วยฟังก์ชันในการดําเนินการตามคําสั่งซื้อ ด้วยวิธีนี้ ให้ทำสิ่งต่างๆ ต่อไปนี้
- ใช้ตรรกะที่จำเป็นในการประมวลผลอินพุตของผู้ใช้
- สร้างการตอบสนองเพื่อตอบสนองต่อ Intent ที่ทริกเกอร์ โดยคำนึงถึง แสดงต่อผู้ใช้ของคุณเพื่อสร้างคำตอบที่เหมาะสม โปรดดู ความสามารถสำหรับ ข้อมูลเพิ่มเติมเกี่ยวกับวิธีรองรับคำตอบในแพลตฟอร์มต่างๆ
- เรียกใช้ฟังก์ชัน
ask()
ด้วยการตอบกลับของคุณ
โค้ดต่อไปนี้แสดงวิธีสร้างการตอบกลับ TTS 2 รายการที่จัดการ
ความตั้งใจในการเรียกใช้ (input.welcome
) และ Intent ของกล่องโต้ตอบ (input.number
) ที่
ต้อนรับผู้ใช้สู่การดำเนินการของคุณ และพูดตัวเลขที่ผู้ใช้เคยพูด
Intent ของ Dialogflow โดยใช้ชื่อดังนี้
const app = dialogflow(); app.intent('Default Welcome Intent', (conv) => { conv.ask('Welcome to number echo! Say a number.'); }); app.intent('Input Number', (conv, {num}) => { // extract the num parameter as a local string variable conv.close(`You said ${num}`); });
@ForIntent("Default Welcome Intent") public ActionResponse defaultWelcome(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); rb.add("Welcome to number echo! Say a number."); return rb.build(); } @ForIntent("Input Number") public ActionResponse inputNumber(ActionRequest request) { ResponseBuilder rb = getResponseBuilder(request); Integer number = (Integer) request.getParameter("num"); rb.add("You said " + number.toString()); return rb.endConversation().build(); }
หมายเลขที่ป้อนของ Intent ที่กำหนดเองซึ่งมีร่วมกับโค้ดข้างต้นจะใช้โอเปอเรเตอร์
@sys.number
เอนทิตีที่จะดึงตัวเลขจากเสียงพูดของผู้ใช้ จากนั้น Intent
ส่งพารามิเตอร์ num
ซึ่งมีตัวเลขจากผู้ใช้ไปยังฟังก์ชัน
ใน Fulfillment
แทนที่จะมีเครื่องจัดการแต่ละรายการสำหรับ Intent แต่ละรายการ คุณอาจเพิ่ม ฟังก์ชันสำรอง ในฟังก์ชันสำรอง ให้ตรวจสอบว่าเรียกใช้ Intent ใด และทำสิ่งที่เหมาะสมตามความเหมาะสม
const WELCOME_INTENT = 'Default Welcome Intent'; const NUMBER_INTENT = 'Input Number'; const NUMBER_PARAMETER = 'num'; // you can add a fallback function instead of a function for individual intents app.fallback((conv) => { // intent contains the name of the intent // you defined in the Intents area of Dialogflow const intent = conv.intent; switch (intent) { case WELCOME_INTENT: conv.ask('Welcome! Say a number.'); break; case NUMBER_INTENT: const num = conv.parameters[NUMBER_PARAMETER]; conv.close(`You said ${num}`); break; } });
// you can add a fallback function instead of a function for individual intents @ForIntent("Default Fallback Intent") public ActionResponse fallback(ActionRequest request) { final String WELCOME_INTENT = "Default Welcome Intent"; final String NUMBER_INTENT = "Input Number"; final String NUMBER_ARGUMENT = "num"; // intent contains the name of the intent // you defined in the Intents area of Dialogflow ResponseBuilder rb = getResponseBuilder(request); String intent = request.getIntent(); switch (intent) { case WELCOME_INTENT: rb.add("Welcome! Say a number."); break; case NUMBER_INTENT: Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT); rb.add("You said " + num).endConversation(); break; } return rb.build(); }
การแสดงข้อความแจ้งซ้ำที่ไม่ตรงกัน
เมื่อ Dialogflow ไม่สามารถจับคู่ไวยากรณ์การป้อนข้อมูลใดๆ ที่กำหนดไว้ใน Intent ของคุณ วลีการฝึก ทริกเกอร์ Intent สำรอง โดยปกติ Intent สำรอง แจ้งเตือนผู้ใช้อีกครั้งเพื่อป้อนอินพุตที่จำเป็นสำหรับการดำเนินการของคุณ คุณสามารถ สร้างวลีซ้ำโดยระบุวลีในส่วนคำตอบของ Intent สำรองหรือคุณจะใช้เว็บฮุคเพื่อแสดงคำตอบก็ได้
เมื่อคำตอบของผู้ใช้ไม่ตรงกับวลีการฝึกของการดำเนินการของคุณ Google Assistant จะพยายามจัดการอินพุต ลักษณะการทำงานเช่นนี้ช่วยให้ผู้ใช้เปลี่ยน การทำงานในระหว่างการสนทนา เช่น ผู้ใช้ถามว่า "ภาพยนตร์แนวไหน สัปดาห์นี้เข้าฉายสัปดาห์นี้ไหม" แล้วเปลี่ยนบริบทระหว่างการสนทนา: "อะไรคือ สภาพอากาศวันพรุ่งนี้เป็นอย่างไร" ในตัวอย่างนี้ เนื่องจาก "สภาพอากาศในวันพรุ่งนี้จะเป็นอย่างไร" ไม่ใช่คำตอบที่ถูกต้องสำหรับการสนทนาที่ทริกเกอร์จากพรอมต์เริ่มต้น Assistant จะพยายามจับคู่โดยอัตโนมัติและย้ายผู้ใช้ไปไว้ใน การสนทนาที่เหมาะสม
หาก Assistant ไม่พบการดำเนินการที่เหมาะสมที่ตรงกับข้อมูลที่ผู้ใช้ป้อน ผู้ใช้จะถูกนำกลับไปยังบริบทของการดำเนินการของคุณ
เนื่องจาก Assistant อาจขัดจังหวะการดำเนินการของคุณเพื่อตอบกลับการจับคู่ที่ไม่ตรงกันที่ถูกต้อง อย่าใช้ Intent สำรองเป็นวิธีในการตอบสนองข้อความค้นหาของผู้ใช้ คุณ ควรใช้ Intent สำรองเพื่อแสดงข้อความแจ้งผู้ใช้ซ้ำเพื่อให้ได้รับอินพุตที่ถูกต้องเท่านั้น
วิธีสร้าง Intent สำรอง
- คลิก Intent ในเมนูการนำทางของ Dialogflow
- คลิก ⋮ ข้างสร้างความตั้งใจและเลือก สร้าง Intent สำรอง (หรือมิฉะนั้น ให้คลิก รูปแบบสำรองเริ่มต้น ตั้งใจเพื่อแก้ไข)
ระบุวลีซ้ำเพื่อพูดตอบผู้ใช้ วลีเหล่านี้ควรเป็น พูดคุยอย่างเป็นกันเองและมีประโยชน์มากที่สุดตามบริบทปัจจุบันของผู้ใช้
หากต้องการดำเนินการโดยไม่มีการดำเนินการตามคำสั่งซื้อ: ให้ระบุวลีในพื้นที่คำตอบ ความตั้งใจของคุณ Dialogflow สุ่มเลือกวลีจากรายการนี้มาพูด กลับไปยังผู้ใช้จนกว่าจะมีการเรียกใช้ Intent ที่เฉพาะเจาะจงมากขึ้น
หากต้องการดำเนินการด้วย Fulfillment ให้ทำดังนี้
- สลับเปิดใช้การเรียกเว็บฮุคสำหรับ Intent นี้ในส่วนการดำเนินการตามคำสั่งซื้อของ Intent
- ในตรรกะการดำเนินการตามคำสั่งซื้อ ให้จัดการ Intent สำรองเช่นเดียวกับอื่นๆ Intent ตามที่อธิบายไว้ในสร้างฟังก์ชันเพื่อจัดการคำขอ
ตัวอย่างเช่น ฟังก์ชันต่อไปนี้ใช้ออบเจ็กต์
conv.data
(an เพย์โหลดข้อมูลที่กำหนดเองที่คุณสามารถใช้เพื่อรักษาสถานะ) จาก ไลบรารีของไคลเอ็นต์ Node.js ที่จะจัดเก็บ ตัวนับที่ติดตามจำนวนครั้งที่มีการเรียกใช้ Intent สำรอง หากเป็น ถูกเรียกใช้มากกว่า 1 ครั้ง การดำเนินการจะหยุดลง แม้ว่าจะไม่แสดงใน คุณควรทำให้ Intent อื่นๆ รีเซ็ตตัวนับนี้เป็น 0 เมื่อมีการเรียกใช้ Intent ที่ไม่ใช่วิดีโอสำรอง (โปรดดู ตัวอย่าง Genie เกี่ยวกับตัวเลข เพื่อดูรายละเอียดวิธีดำเนินการ)Node.js app.intent('Default Fallback Intent', (conv) => { conv.data.fallbackCount++; // Provide two prompts before ending game if (conv.data.fallbackCount === 1) { conv.contexts.set(DONE_YES_NO_CONTEXT, 5); conv.ask('Are you done playing Number Genie?'); } else { conv.close(`Since I'm still having trouble, so I'll stop here. ` + `Let's play again soon.`); } });
Java @ForIntent("Default Fallback Intent") public ActionResponse defaultFallback(ActionRequest request) { final String DONE_YES_NO_CONTEXT = "done_yes_no_context"; ResponseBuilder rb = getResponseBuilder(request); int fallbackCount = request.getConversationData().get("fallbackCount") == null ? 0 : (Integer) request.getConversationData().get("fallbackCount"); fallbackCount++; request.getConversationData().put("fallbackCount", fallbackCount); if (fallbackCount == 1) { rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5)); rb.add("Are you done playing Number Genie?"); } else { rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon") .endConversation(); } return rb.build(); }
การใช้บริบท
ใช้บริบทหากต้องการให้ Dialogflow ทริกเกอร์ Intent สำรองเฉพาะในบางโอกาส เท่านั้น การทำเช่นนี้มีประโยชน์ในกรณีที่คุณต้องการ Intent ทางเลือกที่แตกต่างกันสำหรับ สถานการณ์ที่ไม่ตรงกันต่างๆ
- หากคุณไม่ได้ตั้งค่าบริบทใน Intent สำรอง จะถือว่าเป็น Intent สำรองส่วนกลางที่ Dialogflow ทริกเกอร์เมื่อไม่มี Intent อื่น ตรงกัน คุณควรกําหนดค่าไว้เพียงรายการเดียวหากเลือกใช้
หากคุณตั้งค่าบริบทอินพุตใน Intent สำรอง Dialogflow จะทริกเกอร์ Intent สำรองเมื่อข้อมูลต่อไปนี้เป็นจริง
- บริบทปัจจุบันของผู้ใช้เป็นชุดของบริบทที่กำหนดไว้ใน Intent
- ทั้งนี้ไม่มี Intent อื่นที่ตรงกัน
ซึ่งช่วยให้คุณใช้ Intent สำรองหลายรายการที่มีบริบทอินพุตต่างกันเพื่อ ปรับการแสดงข้อความแจ้งที่ไม่ตรงกันต่อสถานการณ์ที่เจาะจง
หากคุณตั้งค่าบริบทเอาต์พุตใน Intent สำรอง คุณจะต้องให้ผู้ใช้อยู่ใน บริบทเดียวกันหลังจากเรียกและประมวลผล Intent สำรอง
โปรดดูข้อมูลเพิ่มเติมที่บริบทของ Dialogflow
การแสดงข้อความแจ้งซ้ำโดยไม่ต้องป้อนข้อมูล
ดูรายละเอียดเกี่ยวกับวิธีดำเนินการที่หน้าการตอบกลับ ที่ต้องจัดการเมื่อผู้ใช้ไม่ได้ป้อนข้อมูลเพิ่มเติมในอุปกรณ์เสียง เช่น Google Home ที่ต้องมีการโต้ตอบอย่างต่อเนื่อง