1. ก่อนเริ่มต้น
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีสร้างแชทบอทค้าปลีกด้วย Dialogflow CX ซึ่งเป็นแพลตฟอร์ม AI แบบสนทนา (CAIP) สำหรับสร้าง UI แบบสนทนา Dialogflow CX สามารถใช้เอเจนต์เสมือน เช่น แชทบอท บอทเสียง เกตเวย์โทรศัพท์ และรองรับหลายช่องทางในกว่า 50 ภาษา
Codelab นี้จะแนะนำวิธีสร้างแชทบอทเว็บไซต์สำหรับธุรกิจค้าปลีก ธุรกิจสมมติที่เรากำลังสร้างแชทบอทให้มีชื่อว่า G-Records G-Records เป็นค่ายเพลงร็อกที่ตั้งอยู่ในแคลิฟอร์เนีย ค่ายเพลงนี้มีศิลปินร็อก 4 วง ได้แก่ Alice Googler, G's N' Roses, The Goo Fighters และ The Google Dolls G-Records ขายสินค้าของวงดนตรีให้กับแฟนเพลงร็อกทุกคน
เมื่อสิ้นสุด Codelab นี้ คุณจะใช้แชทบ็อตเพื่อสั่งเสื้อหรือเพลง หรือถามเกี่ยวกับคำสั่งซื้อได้

สิ่งที่คุณจะได้เรียนรู้
คุณจะได้เรียนรู้ประโยชน์ของ Dialogflow CX เมื่อเทียบกับ Dialogflow ES ด้วยการลงมือทำ ซึ่งรวมถึงแนวคิดต่อไปนี้
- วิธีสร้างเอเจนต์เสมือน Dialogflow CX ภายใน Google Cloud
- ดูวิธีสร้างโฟลว์
- ดูวิธีสร้างเอนทิตี
- ดูวิธีสร้าง Intent
- ดูวิธีสร้างหน้าเว็บและหน้าเปลี่ยนผ่านด้วยตัวแฮนเดิลสถานะ
- ดูวิธีเปลี่ยนหน้าด้วยเส้นทางที่มีเจตนา
- ดูวิธีย้ายหน้าเว็บที่มีพารามิเตอร์และเส้นทางแบบมีเงื่อนไข
- ดูวิธีแสดงผลการตอบกลับแบบมีเงื่อนไขด้วยฟังก์ชันของระบบ
- ดูวิธีสร้างข้อความสำรอง
- ดูวิธีใช้เครื่องจำลอง
- ดูวิธีสร้างกรณีทดสอบและความครอบคลุมของการทดสอบ
การออกแบบเอเจนต์ Dialogflow CX สุดท้ายจะมีลักษณะดังนี้

สิ่งที่คุณต้องมี
- คุณจะต้องมีข้อมูลประจำตัวของ Google / อีเมล Gmail เพื่อสร้าง Agent ของ Dialogflow CX
- สิทธิ์เข้าถึง Google Cloud
2. การตั้งค่าสภาพแวดล้อม
สร้างโปรเจ็กต์ Google Cloud
เนื่องจาก Dialogflow CX ทำงานใน Google Cloud คุณจึงต้องสร้างโปรเจ็กต์ Google Cloud โปรเจ็กต์จะจัดระเบียบทรัพยากร Google Cloud ทั้งหมด โดยประกอบด้วยชุดผู้ทำงานร่วมกัน, API ที่เปิดใช้ (และทรัพยากรอื่นๆ), เครื่องมือตรวจสอบ, ข้อมูลการเรียกเก็บเงิน รวมถึงการตรวจสอบสิทธิ์และการควบคุมการเข้าถึง
เมื่อสร้างโปรเจ็กต์ใหม่ คุณจะต้องป้อนชื่อโปรเจ็กต์ และคุณจะต้องลิงก์กับบัญชีสำหรับการเรียกเก็บเงินและองค์กรที่มีอยู่
บัญชีสำหรับการเรียกเก็บเงินใช้เพื่อกำหนดว่าใครเป็นผู้ชำระเงินสำหรับชุดทรัพยากรที่กำหนด และลิงก์กับโปรเจ็กต์อย่างน้อย 1 โปรเจ็กต์ได้ ระบบจะเรียกเก็บเงินค่าใช้งานโปรเจ็กต์จากบัญชีสำหรับการเรียกเก็บเงินที่ลิงก์ไว้ ในกรณีส่วนใหญ่ คุณจะกำหนดค่าการเรียกเก็บเงินเมื่อสร้างโปรเจ็กต์ ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบเกี่ยวกับการเรียกเก็บเงิน ตรวจสอบว่าได้เปิดใช้การเรียกเก็บเงินสำหรับโปรเจ็กต์ Cloud แล้ว

เปิดใช้ Dialogflow API
หากต้องการใช้ Dialogflow คุณจะต้องเปิดใช้ Dialogflow API สำหรับโปรเจ็กต์
- เลือกโปรเจ็กต์ที่ต้องการเปิดใช้ API แล้วคลิกต่อไป
- ยุบเมนู API และบริการ แล้วคลิกสร้างข้อมูลเข้าสู่ระบบ
- คลิกข้อมูลแอปพลิเคชัน
- ตอบว่าไม่ ฉันไม่ได้ใช้ เนื่องจากคุณไม่ได้ใช้ Kubernetes Engine, App Engine หรือ Cloud Functions ในตอนนี้
- คลิกเสร็จสิ้น

สร้าง Agent ของ Dialogflow CX ใหม่
หากต้องการสร้างเอเจนต์ Dialogflow CX ใหม่ ให้เปิดคอนโซล Dialogflow CX ก่อน โดยทำดังนี้
- เลือกโปรเจ็กต์ Google Cloud ที่สร้างไว้ก่อนหน้านี้
- คลิกสร้างเอเจนต์
กรอกแบบฟอร์มสำหรับการตั้งค่าพื้นฐานของตัวแทน
- คุณเลือกชื่อที่แสดงได้
- เลือกสถานที่ตั้งเป็น us-central1
- เลือกเขตเวลาที่ต้องการ
- เลือก en - English เป็นภาษาเริ่มต้น
คลิกสร้าง

เอาล่ะ ทุกอย่างพร้อมแล้ว ในที่สุดเราก็พร้อมที่จะเริ่มสร้างโมเดลเอเจนต์เสมือนแล้ว
3. ขั้นตอน
กล่องโต้ตอบที่ซับซ้อนมักเกี่ยวข้องกับหัวข้อการสนทนาหลายหัวข้อ ในกรณีของแชทบอทที่เราสร้างขึ้นสำหรับ G-Records เพื่อขายสินค้าของวงดนตรี เราจะมีกล่องโต้ตอบเกี่ยวกับแคตตาล็อกผลิตภัณฑ์ การชำระเงิน สถานะคำสั่งซื้อ และคำถามเกี่ยวกับการดูแลลูกค้า เราสามารถแยกหัวข้อการสนทนาเหล่านี้ออกเป็นโฟลว์ได้

โฟลว์ช่วยให้ทีมทำงานในเส้นทางการสนทนาแต่ละเส้นได้ แนวทางปฏิบัติที่ดีคือการลดความซับซ้อนของโฟลว์เพื่อให้พอดีกับหน้าจอและมีความเป็นโมดูลมากขึ้น
โฟลว์เป็นแนวคิดใหม่สำหรับ Dialogflow CX Dialogflow Essentials มีแนวคิดเกี่ยวกับ Mega Agent ซึ่งคล้ายกับโฟลว์ อย่างไรก็ตาม คุณจะใช้โฟลว์บ่อยกว่ามาก
ในภายหลังใน Lab นี้ เราจะใช้ตัวแฮนเดิลสถานะที่สามารถจบโฟลว์ (เพื่อให้ระบบข้ามกลับไปยังโฟลว์ถัดไปหรือก่อนหน้า) หรือคุณจะจบเซสชันของเอเจนต์ทั้งหมดก็ได้
มาสร้างโฟลว์กันเลย
การสร้างโฟลว์
- ใน Dialogflow CX ให้คลิกไอคอน + > สร้างโฟลว์
- ระบุชื่อ:
Catalogแล้วกด Enter

สร้างโฟลว์ Catalog แรกแล้ว ตอนนี้ให้สร้างโฟลว์อื่นๆ ดังนี้
Order ProcessMy OrderCustomer Care

ในแล็บนี้ เราจะตั้งค่าตัวแฮนเดิลสถานะของหน้าในภายหลัง เพื่อให้มั่นใจว่าในที่สุดแล้วภาพจะออกมาเป็นแบบนี้

เครื่องมือจำลอง
คุณทดสอบเอเจนต์เสมือนได้ที่ด้านขวาของคอนโซล Dialogflow CX โดยใช้โปรแกรมจำลองในตัว คุณสามารถทดสอบการสนทนาตั้งแต่ต้นหรือจากโฟลว์ใดโฟลว์หนึ่งก็ได้
- คลิกปุ่มทดสอบเอเจนต์ที่ด้านขวาบนของหน้าจอ
- ในช่อง "พูดคุยกับตัวแทน" ให้เขียนว่า
Helloตัวแทนเสมือนจะตอบกลับด้วยข้อความต้อนรับเริ่มต้นว่า สวัสดี คุณต้องการความช่วยเหลือในเรื่องใด

มาแก้ไขข้อความต้อนรับเริ่มต้นนี้กัน
ขั้นตอนการเริ่มต้นเริ่มต้น
มาเริ่มต้นด้วยการสร้างเส้นทาง Intent ที่จะทริกเกอร์เมื่อคุณทักทายตัวแทนเสมือน
- ในแถบด้านข้างสร้าง > โฟลว์ทางด้านซ้าย ให้คลิกโฟลว์เริ่มต้นเริ่มต้น แล้วเลือกโหนดทรีเริ่มต้น
ซึ่งจะเปิดหน้าเริ่มต้น ระบบจะเลือกหน้าแรกโดยอัตโนมัติในส่วนแถบด้านข้างสร้าง > หน้าเว็บ
- ใน Start > Routes ให้คลิก Default Welcome Intent
ความตั้งใจจะจัดหมวดหมู่ความตั้งใจของผู้ใช้ปลายทางสำหรับการสนทนา 1 รอบ ใน Dialogflow CX เจตนาสามารถเป็นส่วนหนึ่งของตัวแฮนเดิลสถานะเพื่อกำหนดเส้นทางหน้าหรือการดำเนินการตามคำสั่งที่ใช้งานอยู่ถัดไป
- นำรายการ Agent says ทั้งหมดออก แล้วเพิ่มข้อความใหม่นี้
Welcome, I am the virtual agent of G-Records, a fictional rock label. You can order artists merchandise, ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?
นอกจากนี้ เรายังต้องมีปุ่มตอบกลับด่วน / ชิปคำแนะนำเพื่อปรับปรุงการสนทนาด้วย
- คลิกเพิ่มตัวเลือกกล่องโต้ตอบ > เพย์โหลดที่กำหนดเอง แล้วใช้ข้อมูลโค้ดด้านล่าง
- ใช้ข้อมูลโค้ดด้านล่างเป็นเพย์โหลดที่กำหนดเอง แล้วกดบันทึก
ดูข้อมูลเพิ่มเติมเกี่ยวกับเพย์โหลดที่กำหนดเองได้ในเอกสารประกอบ
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}

- ทดสอบ Intent ต้อนรับในโปรแกรมจำลองได้เลย
คุณอาจสงสัยว่าทำไมถึงไม่เห็นเนื้อหาที่สมบูรณ์ เนื่องจากเนื้อหาที่สมบูรณ์ เช่น ชิปคำแนะนำ จะขึ้นอยู่กับการผสานรวม ขั้นตอนต่อไปนี้ต้องใช้บัญชีสำหรับการเรียกเก็บเงิน แต่คุณสามารถข้ามได้หากไม่มี
- ในแถบด้านข้างซ้ายมือ ให้คลิกจัดการ > การผสานรวม
- เลือก Dialogflow Messenger แล้วคลิกเชื่อมต่อ
- คลิกเปิดใช้ในป๊อปอัป

ป๊อปอัปอีกรายการจะปรากฏขึ้น คราวนี้เป็นโค้ด JavaScript สำหรับการผสานรวมที่คุณวางในเว็บไซต์เพื่อผสานรวมคอมโพเนนต์ Dialogflow Messenger ในเว็บไซต์ได้ เนื่องจากเรายังไม่มีเว็บไซต์ เราจะทดสอบเอเจนต์เสมือนในเครื่องมือโดยตรง

- คลิกลิงก์ลองใช้เลย
- คลิกไอคอนแชทบอทที่ด้านขวาล่างเพื่อเปิดหน้าต่างแชท เขียนว่า
Helloเพื่อเริ่มการสนทนา

ในตอนนี้ เมื่อคุณคลิกชิปคำแนะนำ ตัวแทนเสมือนจะไม่เข้าใจสิ่งที่คุณต้องการ เนื่องจากตัวแทนเสมือนของเรายังไม่สลับสถานะ เราทำได้ใน Dialogflow CX ด้วยหน้าเว็บ มาต่อกันที่แล็บ โดยเราจะสร้างเอนทิตีและเจตนากันก่อน
4. ประเภทเอนทิตี
ประเภทเอนทิตีใช้เพื่อควบคุมวิธีดึงข้อมูลจากอินพุตของผู้ใช้ปลายทาง ประเภทเอนทิตีของ Dialogflow CX คล้ายกับประเภทเอนทิตีของ Dialogflow ES มาก Dialogflow มีเอนทิตีของระบบที่กำหนดไว้ล่วงหน้าซึ่งสามารถจับคู่ข้อมูลทั่วไปหลายประเภทได้ เช่น มีเอนทิตีของระบบสำหรับการจับคู่วันที่ เวลา สี อีเมล และอื่นๆ นอกจากนี้ คุณยังสร้างเอนทิตีที่กำหนดเองเพื่อจับคู่ข้อมูลที่กำหนดเองได้ด้วย
มาเริ่มด้วยการเตรียมเอนทิตีที่กำหนดเองทั้งหมดก่อนที่เราจะออกแบบหน้าเว็บในโฟลว์ได้ เราจะสร้างเอนทิตีต่อไปนี้

การสร้างเอนทิตี
มาสร้างเอนทิตีศิลปินกัน
- คลิกจัดการ > ประเภทเอนทิตี
- คลิก + สร้าง
- ชื่อที่แสดง:
Artist - เอนทิตี:
The Google Dolls(มีคำพ้องความหมาย:Google Dolls)The Goo Fighters(มีคำพ้องความหมาย:Goo Fighters)G's N' Roses(มีคำพ้องความหมาย:Gs and Roses)Alice Googler- คลิกตัวเลือกขั้นสูง แล้วเลือกการจับคู่แบบคร่าวๆ (หากคุณสะกดชื่อวงดนตรีผิด ระบบก็อาจยังจับคู่กับเอนทิตีที่ถูกต้องได้)
- ในตัวเลือกขั้นสูง ให้เลือกปกปิดข้อมูลในบันทึกด้วย (หากคุณสะกดชื่อวงดนตรีผิด ระบบจะแก้ไขชื่อในบันทึก)
- คลิกบันทึก
นอกจากนี้ เรายังต้องมีเอนทิตีสำหรับรายการสินค้าด้วย
- คลิกจัดการ > ประเภทเอนทิตี
- คลิก + สร้าง
- ชื่อที่แสดง:
Merch - เอนทิตี:
T-shirtLongsleeve(มีคำพ้องความหมาย:Longsleeve shirt)Tour MovieDigital Album(มีคำพ้องความหมาย:MP3 Album,MP3)CD(มีคำพ้องความหมายDisc,Physical CD)
- คลิกบันทึก
นอกจากนี้ เรายังต้องการเอนทิตีสำหรับอัลบั้มด้วย
- คลิกจัดการ > ประเภทเอนทิตี
- คลิก + สร้าง
- ชื่อที่แสดง:
Album - เอนทิตี:
LiveGreatest Hits(มีคำพ้องความหมาย:Hits)
- คลิกบันทึก
นอกจากนี้ เรายังต้องมีเอนทิตีสำหรับขนาดเสื้อผ้าด้วย
- คลิกจัดการ > ประเภทเอนทิตี
- คลิก + สร้าง
- ชื่อที่แสดง:
ShirtSize - เอนทิตี:
XS(มีคำพ้องความหมาย:Extra Small)S(มีคำพ้องความหมาย:Small)M(มีคำพ้องความหมาย:Medium)L(มีคำพ้องความหมาย:Large)XL(มีคำพ้องความหมาย:Extra Large)2XL(มีคำพ้องความหมาย:Extra Extra Large)3XL
- คลิกบันทึก
และเอนทิตีสำหรับหมายเลขคำสั่งซื้อ ซึ่งโดยปกติจะเป็นตัวอักษรและตัวเลขคละกัน 4 หลักและตัวเลข 3 หลัก (เช่น ABCD123)
- คลิกจัดการ > ประเภทเอนทิตี
- คลิก + สร้าง
- ชื่อที่แสดง:
OrderNumber - เอนทิตีนิพจน์ทั่วไป
- เอนทิตี: [A-Z]{4}[0-9]{3}
- คลิกบันทึก
การกำหนดค่าเอนทิตีควรมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
@ศิลปิน: 
@Merch: 
@อัลบั้ม: 
@ShirtSize: 
@OrderNumber: 
เมื่อเตรียมเอนทิตีที่กำหนดเองแล้ว เราก็เตรียมความตั้งใจได้ มาทำแล็บต่อกันเลย
5. Intent
เจตนาจะจัดหมวดหมู่ความตั้งใจของผู้ใช้ปลายทางสำหรับการสนทนา 1 รอบ เราได้ลดความซับซ้อนของโฟลว์ใน Dialogflow CX อย่างมากแล้ว จึงไม่ใช่บล็อกการสร้างสำหรับการควบคุมการสนทนาอีกต่อไป Dialogflow CX ใช้เจตนาเพื่อจับคู่สิ่งที่ผู้ใช้พูดเท่านั้น ใน Dialogflow ES คุณต้องเชื่อมโยงทุกอย่างกับ Intent (พารามิเตอร์ เหตุการณ์ การดำเนินการตามคำสั่ง ฯลฯ) เจตนาใน Dialogflow CX มีเพียงวลีการฝึก จึงนำกลับมาใช้ใหม่ได้ และจะไม่ควบคุมการสนทนาอีกต่อไป ดังนั้นกระบวนการสร้าง Intent จึงไม่ซับซ้อน
วลีการฝึกใน Intent สามารถใช้เอนทิตีเพื่อดึงข้อมูลอินพุต "ตัวแปร" ได้ จึงเป็นเหตุผลที่ควรสร้างประเภทเอนทิตีล่วงหน้า ซึ่งเป็นสิ่งที่เราทำในหน้าก่อนหน้าของขั้นตอนใน Lab
การสร้าง Intent
มาเริ่มด้วยการเตรียมความตั้งใจทั้งหมดก่อนที่เราจะออกแบบหน้าเว็บในโฟลว์ได้
- คลิกจัดการ > ความตั้งใจ
- คลิก + สร้าง
ใช้รายละเอียดต่อไปนี้
- ชื่อที่แสดง
redirect.artists.overview - คำอธิบาย
Artists overview: The bands supported by the label

เลื่อนลงและสร้างวลีการฝึกต่อไปนี้
Which bands are signed?Which bandsWhich artistsWhich artists are part of the record labelWho is part of the labelFrom which bands can I buy merchandiseBand merchandiseWhich music do you have?I would like to know who are signed to the labelWho are supported by the labelFrom who can I buy shirtsWhat music can I orderCan I get an overview of all the artists

- คลิกบันทึก
- ตอนนี้มาสร้าง Intent อื่นๆ กันต่อ ใช้จินตนาการของคุณเองเพื่อคิดวลีการฝึกเพิ่มเติม แนวทางปฏิบัติแนะนำคือการมีวลีฝึกอย่างน้อย 10 วลีต่อความตั้งใจ เพื่อครอบคลุมวิธีต่างๆ ที่ผู้ใช้อาจเรียกใช้ความตั้งใจนั้น สำหรับวัตถุประสงค์ของแล็บนี้ คุณอาจมีน้อยกว่านี้ก็ได้
โปรดตรวจสอบเรื่องต่อไปนี้
- โปรดทราบว่าเมื่อคุณป้อนวลีการฝึก Dialogflow CX จะใส่คำอธิบายประกอบเอนทิตีโดยอัตโนมัติ หากไม่เป็นเช่นนั้น คุณอาจต้องอัปเดตเอนทิตี (โดยการเพิ่มคำพ้องความหมาย) หรือโดยการใส่คำอธิบายประกอบวลีการฝึกด้วยตนเอง
- วลีการฝึกที่สั้นลง: ระบบ NLU ของ Dialogflow ยังใช้กับวลีการฝึกที่สั้นลงได้ด้วย และเราได้แสดงตัวอย่าง 2 รายการไว้ที่นี่
- การฝึกมากเกินไป: วลีการฝึกมากเกินไปสำหรับเจตนาอาจทำให้เกิดการฝึกมากเกินไปและผลลัพธ์ที่ไม่พึงประสงค์ แนวทางปฏิบัติแนะนำคือการใช้การทดสอบแบบวนซ้ำและแบบเพิ่มทีละน้อย รวมถึงเพิ่มวลีการฝึกในกรณีที่ไม่มีเจตนาที่ตรงกัน
ชื่อที่แสดง | วลีการฝึก |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้เราได้เตรียมองค์ประกอบที่นำกลับมาใช้ใหม่ (โฟลว์ เอนทิตี และความตั้งใจ) แล้ว เราจึงสามารถนำองค์ประกอบเหล่านี้มารวมกันได้โดยการสร้างหน้าเว็บและตัวแฮนเดิลสถานะ
6. หน้าและตัวแฮนเดิลสถานะ
การสนทนา Dialogflow CX (เซสชัน) สามารถอธิบายและแสดงภาพเป็นเครื่องสถานะแบบจำกัด ลองดูตัวอย่างตู้จำหน่ายสินค้าอัตโนมัติ ซึ่งสามารถจำลองเป็นเครื่องสถานะจำกัดได้ โดยมีสถานะดังนี้ รอเหรียญ เลือกลูกอม ให้ลูกอม และเมื่อได้รับชุดอินพุต ระบบจะเปลี่ยนสถานะไปมาระหว่างสถานะเหล่านั้น เช่น การใส่เหรียญจะเปลี่ยนสถานะของตู้หยอดเหรียญจาก "รอเหรียญ" เป็น "เลือกขนม" หน้าคือวิธีที่เราใช้สร้างโมเดลสถานะเหล่านี้สำหรับ Virtual Agent ของ Dialogflow CX
เมื่อผู้ใช้ปลายทางโต้ตอบกับ Dialogflow CX ในการสนทนา การสนทนาจะย้ายจากหน้าหนึ่งไปยังอีกหน้าหนึ่ง ดังนั้นในขณะใดก็ตามจะมีเพียงหน้าเดียวเท่านั้นที่เป็นหน้าปัจจุบัน ระบบจะถือว่าหน้าปัจจุบันใช้งานอยู่ และโฟลว์ที่เชื่อมโยงกับหน้านั้นก็ถือว่าใช้งานอยู่เช่นกัน
สำหรับ Flow แต่ละรายการ คุณจะกำหนดหน้าเว็บจำนวนมากได้ ซึ่งหน้าเว็บที่รวมกันจะจัดการการสนทนาที่สมบูรณ์ในหัวข้อที่ออกแบบ Flow ไว้ได้ ทุกโฟลว์จะมีหน้าเริ่มต้นพิเศษ เมื่อโฟลว์เริ่มทำงานครั้งแรก หน้าเริ่มต้นจะกลายเป็นหน้าปัจจุบัน ในแต่ละรอบการสนทนา หน้าปัจจุบันจะยังคงเหมือนเดิมหรือเปลี่ยนไปเป็นหน้าอื่น แนวคิดนี้จะช่วยให้คุณสร้างเอเจนต์ขนาดใหญ่ที่มีหลายหน้าและมีการสนทนาหลายรอบได้
หน้าเว็บมีการดำเนินการตามคำสั่ง (กล่องโต้ตอบรายการแบบคงที่และ/หรือเว็บฮุก) พารามิเตอร์ และตัวแฮนเดิลสถานะ การควบคุมการสนทนาจะเกิดขึ้นผ่านตัวแฮนเดิลสถานะ ซึ่งช่วยให้คุณสร้างเส้นทางการเปลี่ยนผ่านต่างๆ เพื่อเปลี่ยนไปยังหน้า Dialogflow CX อื่น รวมถึงทําให้เป็นแบบมีเงื่อนไข (สําหรับการแยกสาขาของการสนทนา)
สถานะของการสนทนาจะควบคุมโดยการจัดการการเปลี่ยนเส้นทางระหว่างหน้าต่างๆ ด้วยเส้นทาง 3 ประเภท ได้แก่
- เส้นทางความตั้งใจ: เมื่อควรจับคู่ความตั้งใจ (เช่น การเปลี่ยนหน้าตามสิ่งที่ผู้ใช้ปลายทางพูด) (เส้นสีน้ำเงินในแผนภาพ)
- เส้นทางเงื่อนไข: เมื่อควรตรวจสอบเงื่อนไข (เช่น การเปลี่ยนหน้าตามพารามิเตอร์บางอย่างที่จัดเก็บไว้ในเซสชัน) (เส้นสีส้มในแผนภาพ)
- ตัวแฮนเดิลเหตุการณ์: เมื่อควรจัดการเหตุการณ์สำรองบางอย่าง (เช่น การจัดการเมื่อไม่มีอินพุต ไม่มีรายการที่ตรงกัน เพื่อแยกความแตกต่างของผู้ใช้ปลายทางไปยังเส้นทางเจตนาหรือเงื่อนไข) (เส้นสีเขียวในแผนภาพ)
การพูดในการสนทนา (เช่น เนื้อหาหรือการตอบกลับผู้ใช้) จะกำหนดโดยการดำเนินการตามคำสั่ง ซึ่งอาจเป็นแบบคงที่หรือแบบไดนามิกก็ได้
- การดำเนินการตามคำสั่งแบบคงที่: เมื่อมีการตอบกลับการดำเนินการตามคำสั่งแบบคงที่
- การดำเนินการตามคำสั่งแบบไดนามิก: เมื่อมีการเรียกใช้เว็บฮุคการดำเนินการตามคำสั่งสำหรับคำตอบแบบไดนามิก
สำหรับบ็อตค้าปลีก เราจะสร้างเส้นทางความตั้งใจและให้การตอบกลับการดำเนินการตามคำขอแบบคงที่ ซึ่งจะแสดงต่อผู้ใช้ทันทีที่เปิดใช้งานหน้าเว็บ ต่อมา เราจะสร้างพารามิเตอร์ที่มีเส้นทางเงื่อนไขเพื่อรวบรวมข้อมูลที่คุณจะต้องใช้ในการสั่งซื้อสินค้า
เส้นทางความตั้งใจของหน้าเว็บ
การสร้างหน้าเว็บในโฟลว์เริ่มต้นเริ่มต้น
ต่อไปนี้คือโฟลว์ชาร์ตของโฟลว์การเริ่มต้นเริ่มต้น

มาคลิกด้วยกันเลย
- คลิกสร้าง > โฟลว์เริ่มต้นเริ่มต้น
- คลิกหน้าเริ่มต้น
- คลิกไอคอน + ข้างเส้นทาง
- เพิ่ม redirect.artists.overview
- เลื่อนลงไปที่การเปลี่ยน แล้วเปลี่ยนไปใช้โฟลว์แคตตาล็อก
- คลิกบันทึก
- ทำตามขั้นตอนข้างต้นสำหรับ
redirect.product.overviewและอีก 11 แถวจากตารางนี้
หน้า (ในโฟลว์) | เส้นทาง > ความตั้งใจ | เส้นทาง > เปลี่ยนไปใช้ |
เริ่ม |
| - |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: แคตตาล็อก |
เริ่ม |
| Flow: Customer Care |
เริ่ม |
| Flow: Customer Care |
เริ่ม |
| Flow: Customer Care |
เริ่ม |
| Flow: My Order |
เริ่ม |
| Flow: My Order |
เริ่ม |
| Flow: My Order |
เริ่ม |
| หน้าเว็บ: สิ้นสุดเซสชัน |

ขั้นตอนการเริ่มต้นเริ่มต้นจะทำงานเหมือนกับเมนูตัวเลือกเมื่อโทรหาคอลเซ็นเตอร์ อย่างไรก็ตาม ในตัวแทนเสมือนนี้ ระบบจะฝึกด้วยภาษาธรรมชาติ โดยมีวลีการฝึกใน Intent ดังนั้นการโต้ตอบจึงขับเคลื่อนด้วยการสนทนา ไม่ใช่ตัวเลือก DTMF และมีความเป็นธรรมชาติและเหมือนมนุษย์มากขึ้น

การสร้างหน้าเว็บในโฟลว์แคตตาล็อก
บันทึกการแชทต่อไปนี้เป็นของโฟลว์แคตตาล็อก
> "Hi"
"Welcome, I am the virtual agent of G-Records, a fictional rock label.
You can order artists merchandise, ask questions about your order or shipping,
and I can tell you more which artists are currently signed with us. How can I help?"
> "Which bands are signed with this record label?"
"The following bands are signed with G-Records:
Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
From which of these artists would you like to order merchandise?"
> "Alice Googler"
"You want to rock with Alice Googler merchandise. Awesome!
We sell shirts, music or the tour movie.
Which merchandise item do you want?"
"(Suggestion chips: [Shirts] [Music] [Tour Movie])"
> "I would like to buy a Shirt"
"Do you want a longsleeve or a t-shirt?"
"(Suggestion chips: [T-shirt, Longsleeve, Price?])"
> "What's the price difference?"
"A t-shirt costs $25 and a longsleeve costs $30.
Do you want a longsleeve or a t-shirt?"
> "A t-shirt",
"What shirt size do you want?"
"(Suggestion chips: [XS, S, M, L, XL, 2XL, 3XL])"
> "M"
"A T-shirt of Alice Googler size: M costs $25. Shall I continue to order?"
ข้อความโต้ตอบจะแตกต่างกันเมื่อคุณเลือกเพลงหรือภาพยนตร์ทัวร์ โดยข้อความโต้ตอบสำหรับเพลงจะมีลักษณะดังนี้
> "Music"
"We have a Greatest Hits Album or the Live Album. Which one do you want?"
"(Suggestion chips: [Greatest Hits, Live, Price?])"
> "The Live Album"
"Do you want this album on CD or MP3?"
"(Suggestion chips: [CD, MP3])"
> "What's the price difference?"
"A CD costs $15. The digital album on MP3 costs $10.
Do you want this album on CD or MP3?"
> "Digital Album",
"The Digital Album: Alice Googler - Live costs $10. Shall I continue to order?"
สำหรับภาพยนตร์ทัวร์ บทสนทนาจะมีลักษณะดังนี้
> "Tour Movie"
"The Tour Movie of G's N' Roses costs $25. Shall I continue to order?
ต่อไปนี้คือโฟลว์ชาร์ตของหน้าทั้งหมดภายในโฟลว์แคตตาล็อก

โปรดสังเกตความซับซ้อนของโฟลว์นี้
- ฉันข้ามคำถามเกี่ยวกับศิลปินและถาม"มีสินค้าอะไรบ้าง"ได้ทันที
- จากโฟลว์เริ่มต้นเริ่มต้น ฉันสามารถถามว่า "ฉันต้องการซื้อเสื้อยืด The Google Dolls" หรือ "ฉันต้องการซื้ออะไรบางอย่าง" ซึ่งหมายความว่าเอเจนต์เสมือนจะถามคำถามติดตามผลเพื่อกรอกข้อมูลในช่องสำหรับพารามิเตอร์ที่จำเป็นเหล่านี้ โดยจะนำผู้ใช้ไปยังหน้าผลิตภัณฑ์โดยตรง
- กล่องโต้ตอบราคามาจากหน้า "ราคา" ที่จะนำกลับมาใช้ใหม่
- แม้ว่าบทสนทนาสำหรับภาพยนตร์การแข่งขันจะดูเหมือนเป็นบทสนทนาที่เรียบง่ายที่สุด แต่เราจะทำอะไรพิเศษกับบทสนทนานี้ เราจะนำส่วนนี้ของกล่องโต้ตอบมาใช้ซ้ำ เพื่อให้ผู้ใช้ปลายทางป้อนข้อมูลโดยตรงสำหรับผลิตภัณฑ์อื่นได้ด้วย หากผู้ใช้ป้อนข้อมูลทั้งหมดพร้อมกัน
> "I want The Goo Fighters longsleeve size S."
"The longsleeve of The Goo Fighters size S costs $30. Shall I continue to order?"
มาเริ่มด้วยการเชื่อมต่อหน้าเว็บกันก่อน
- คลิกสร้าง > แคตตาล็อก
- คลิกหน้าเริ่มต้น
- คลิกไอคอน + ข้างเส้นทาง
- เพิ่ม redirect.artists.overview
- เลื่อนลงไปที่การเปลี่ยน เลือกเพจ แล้วเลือก + เพจใหม่
- ใช้ชื่อหน้าเว็บ:
Artist Overviewแล้วกดบันทึก
ตอนนี้มาทำตามขั้นตอนที่เหลือให้เสร็จกัน
- คุณสามารถทำซ้ำขั้นตอนก่อนหน้ากับหน้าเว็บ เจตนา และการดำเนินการตามคำสั่งต่อไปนี้ แทนที่ตารางนี้ หน้าคือหน้าที่คุณจะเลือกในโฟลว์ ส่วนเส้นทาง > เปลี่ยนไปคือโฟลว์หรือหน้าใหม่ที่คุณจะสร้างและเปลี่ยนไป
หน้า (ในโฟลว์) | เส้นทาง > ความตั้งใจ | เส้นทาง > เปลี่ยนไปใช้ |
แคตตาล็อกเริ่มต้น |
| ภาพรวมศิลปิน |
แคตตาล็อกเริ่มต้น |
| ผลิตภัณฑ์ |
แคตตาล็อกเริ่มต้น |
| ภาพรวมของผลิตภัณฑ์ |
แคตตาล็อกเริ่มต้น |
| ภาพรวมของผลิตภัณฑ์ |
แคตตาล็อกเริ่มต้น |
| เสื้อ |
แคตตาล็อกเริ่มต้น |
| เพลง |
แคตตาล็อกเริ่มต้น |
| สิ้นสุดเซสชัน |
แคตตาล็อกเริ่มต้น |
| สิ้นสุดโฟลว์ |
ภาพรวมศิลปิน |
| ภาพรวมของผลิตภัณฑ์ |
มาต่อกันเลยและเพิ่มการดำเนินการตามคำสั่งแบบคงที่กัน
- ในขั้นตอนแคตตาล็อก ให้คลิกหน้าภาพรวมศิลปิน
- คลิกแก้ไขการดำเนินการตามคำสั่งในส่วนการดำเนินการตามคำสั่งของรายการ
- ใช้การดำเนินการตามคำสั่งซื้อแบบคงที่ต่อไปนี้ (ตัวแทนพูด)
The following bands are signed with G-Records: Alice Googler, G's N' Roses, The Goo Fighters and The Google Dolls.
- คลิกบันทึก
- ในขั้นตอนแคตตาล็อก ให้คลิกหน้าภาพรวมผลิตภัณฑ์
- คลิกแก้ไขการดำเนินการตามคำสั่งในส่วนการดำเนินการตามคำสั่งของรายการ
- ใช้การดำเนินการตามคำสั่งซื้อแบบคงที่ต่อไปนี้ (ตัวแทนพูด)
We sell shirts, music or the tour movie.
- คลิกบันทึก
พารามิเตอร์หน้า
พารามิเตอร์ใช้เพื่อบันทึกและอ้างอิงค่าที่ผู้ใช้ปลายทางระบุในระหว่างเซสชัน พารามิเตอร์แต่ละรายการจะมีชื่อและประเภทเอนทิตี @Artist และ @Merch คือพารามิเตอร์ขั้นต่ำที่เราต้องรวบรวมเพื่อทำการสั่งซื้อสินค้า สำหรับเสื้อยืดหรือเสื้อแขนยาว คุณจะต้องรวบรวม @ShirtSize ด้วย และในกรณีที่ต้องการสั่งซื้อเพลง คุณจะต้องมีชื่อ @Carrier และ @Album ด้วย
คุณจะต้องทําเครื่องหมายพารามิเตอร์เหล่านั้นเป็นต้องระบุ และเมื่อจำเป็น คุณจะต้องระบุพรอมต์ที่กำหนดเองเพื่อจดจำผู้ใช้ปลายทาง เพื่อให้คำตอบที่ถูกต้องเพื่อให้ระบบรวบรวมพารามิเตอร์เหล่านี้ได้ Dialogflow CX มีกลไกบางอย่างที่จะช่วยคุณในเรื่องนี้ได้
เช่น คุณอาจระบุข้อความการดำเนินการแบบคงที่ที่กำหนดเองในส่วนพารามิเตอร์ หากต้องระบุพารามิเตอร์ ระบบจะแสดงการดำเนินการตามพารามิเตอร์เหล่านี้ ระบบจะเพิ่มข้อความตอบกลับเหล่านี้ไปยังคิวการตอบกลับ ในระหว่างเทิร์นของเอเจนต์ คุณสามารถเรียกใช้การดำเนินการหลายรายการได้ (และบางครั้งก็ควรทำ) ซึ่งแต่ละรายการอาจสร้างข้อความตอบกลับ Dialogflow จะเก็บคำตอบเหล่านี้ไว้ในคิวการตอบกลับ หากต้องการอ่านเพิ่มเติมเกี่ยวกับวงจรของหน้าเว็บและลำดับการเพิ่มการดำเนินการเหล่านี้ลงในคิวการตอบกลับ โปรดอ่านเอกสารประกอบเกี่ยวกับหน้า Dialogflow CX
การสร้างพารามิเตอร์ในหน้าภาพรวมศิลปิน
มากำหนดพารามิเตอร์หน้าเว็บกัน
- ในขั้นตอนแคตตาล็อก ให้คลิกหน้าภาพรวมศิลปิน
- คลิก + ในบล็อกพารามิเตอร์ เพิ่มพารามิเตอร์ศิลปิน
- ชื่อที่แสดง:
artist - ประเภทนิติบุคคล:
@Artist - ต้องระบุ: ตรวจสอบ
- ปกปิดในบันทึก: ตรวจสอบ
- ตอนนี้เราจะเพิ่มข้อความการดำเนินการตามพารามิเตอร์ที่กำหนดเอง หากตัวแทนเสมือนยังไม่ได้รวบรวมพารามิเตอร์ artist ผู้ใช้ปลายทางจะได้รับการตอบกลับจากตัวแทนนี้ซึ่งเพิ่มลงในคิวการตอบกลับ
From which of these artists would you like to order merchandise?
- เพิ่มตัวเลือกกล่องโต้ตอบที่ 2 ซึ่งมีชิปคำแนะนำที่สมบูรณ์ คลิกเพิ่มตัวเลือกคำพูด แล้วใช้โค้ดนี้ (ใน JSON)
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
คุณสามารถจัดการพรอมต์การดำเนินการแทนต่างๆ ตามจำนวนครั้งที่ผู้ใช้พยายามตอบคำถามเหล่านี้ คุณจะทําเช่นนี้ได้ด้วยตัวแฮนเดิลเหตุการณ์พารามิเตอร์ มีตัวแฮนเดิลเหตุการณ์ในตัวให้เลือกมากมาย เช่น Invalid Parameters, Utterances too long, No input, No input 1st try, 2nd try หรือ No Match ความแตกต่างระหว่าง "ไม่มีอินพุต" กับ "ไม่ตรงกัน" คือ "ไม่มีอินพุต" หมายความว่าผู้ใช้ไม่เคยให้คำตอบ ในขณะที่ "ไม่ตรงกัน" หมายความว่าผู้ใช้ให้คำตอบ แต่ Dialogflow CX ไม่สามารถจับคู่คำตอบนี้กับหน้าเว็บได้
- เลื่อนลงไปที่ส่วนเครื่องจัดการเหตุการณ์แจ้งอีกครั้ง
- คลิกเพิ่มตัวแฮนเดิลเหตุการณ์ แล้วเลือกเหตุการณ์
No-match default - ใช้การดำเนินการตามคำสั่งซื้อด้วยข้อความแบบคงที่ของเหตุการณ์ต่อไปนี้
I missed that. Please, specify the artist. You can choose between: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- คลิกบันทึก
- คลิกเพิ่มตัวแฮนเดิลเหตุการณ์ แล้วเลือกเหตุการณ์
No-input default - ใช้การดำเนินการตามคำสั่งซื้อด้วยข้อความแบบคงที่ของเหตุการณ์ต่อไปนี้
I am sorry, I could understand the artist's name. You can choose between Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from?
- คลิกบันทึก
เส้นทางเงื่อนไขหน้าเว็บ
พารามิเตอร์มีประสิทธิภาพอย่างมากเมื่อใช้ร่วมกับเส้นทางแบบมีเงื่อนไขของหน้า เมื่อเงื่อนไขประเมินเป็นจริง ระบบจะเรียกเส้นทางหน้าเว็บที่เชื่อมโยง เงื่อนไขอาจเป็น พารามิเตอร์เท่ากับค่าที่เฉพาะเจาะจง หรือต้องมีพารามิเตอร์ หรือแบบฟอร์มที่กรอกเสร็จแล้ว และอื่นๆ อีกมากมาย ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์และเงื่อนไขได้ในเอกสารประกอบของ Dialogflow CX
สำหรับตัวแทนเสมือนสำหรับธุรกิจค้าปลีก เราจะต้องรวบรวมลำดับพารามิเตอร์ ดังนั้นเราจึงต้องสร้างเงื่อนไขเพื่อตรวจสอบว่า "แบบฟอร์ม" ได้รับการกรอกข้อมูลครบถ้วนแล้วหรือไม่ แบบฟอร์มคือรายการพารามิเตอร์ที่ควรเก็บรวบรวมจากผู้ใช้ปลายทางสำหรับหน้าเว็บ เอเจนต์เสมือนจะโต้ตอบกับผู้ใช้ปลายทางในการสนทนาหลายรอบจนกว่าจะรวบรวมพารามิเตอร์ของแบบฟอร์มที่จำเป็นทั้งหมดได้ ซึ่งเรียกอีกอย่างว่าพารามิเตอร์หน้าเว็บ
Dialogflow CX จะตั้งค่าพารามิเตอร์ที่ผู้ใช้ปลายทางระบุไว้โดยอัตโนมัติในระหว่างการกรอกแบบฟอร์ม หากต้องการตรวจสอบว่ามีการกรอกแบบฟอร์มที่สมบูรณ์ของหน้าปัจจุบันหรือไม่ ให้ใช้เงื่อนไขต่อไปนี้ $page.params.status = "FINAL"
การสร้างเส้นทางแบบมีเงื่อนไขในหน้าภาพรวมของศิลปิน
มาสร้างเส้นทางแบบมีเงื่อนไขซึ่งจะเปลี่ยนไปหน้าถัดไปเมื่อระบบรู้จักศิลปินกัน
- ในหน้าภาพรวมศิลปิน ให้คลิกไอคอน + ในส่วนเส้นทาง
- เลื่อนลงไปที่ส่วนสภาพ
- เลือกอย่างน้อย 1 รายการ (หรือ)
- จากนั้นเราจะเขียนนิพจน์ที่
- พารามิเตอร์:
$page.params.status - โอเปอเรเตอร์:
= - ค่า:
"FINAL"
- ตอนนี้เราจะสร้างข้อความการดำเนินการแบบคงที่ที่เฉพาะเจาะจงในเส้นทางเพื่อยืนยันตัวเลือกของผู้ใช้ปลายทาง เลื่อนลงไปที่บล็อกการดำเนินการตามคำสั่งซื้อ แล้วเขียนข้อความการดำเนินการตามคำสั่งซื้อต่อไปนี้
$session.params.artist, great choice! Rock on!You want to rock with $session.params.artist merchandise. Awesome!
- เมื่อเงื่อนไขเป็นจริง คุณควรเปลี่ยนไปที่หน้าภาพรวมผลิตภัณฑ์ เลื่อนลงไปที่ส่วนการเปลี่ยน แล้วใช้หน้าต่อไปนี้
Product Overview - คลิกบันทึก

การสร้างเส้นทางในหน้าภาพรวมผลิตภัณฑ์
ตอนนี้เมื่อทราบวิธีสร้างพารามิเตอร์และเส้นทางแบบมีเงื่อนไขแล้ว เรามาสร้างพารามิเตอร์เพิ่มเติมสำหรับหน้าต่อไปนี้กัน
ภาพรวมของผลิตภัณฑ์
- สร้างพารามิเตอร์
artistในหน้าภาพรวมผลิตภัณฑ์
- ชื่อที่แสดง:
artist - ประเภทนิติบุคคล:
@Artist - ต้องระบุ: ตรวจสอบ
- ปกปิดในบันทึก: ตรวจสอบ
- การดำเนินการตามพรอมต์เริ่มต้น:
From which of these artists would you like to order merchandise?
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- ตัวแฮนเดิลเหตุการณ์ >
No-match default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist do you want to buy merchandise from? - เพย์โหลดที่กำหนดเอง
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- ตัวแฮนเดิลเหตุการณ์ >
No-input default:To buy merchandise you can choose between the following artists: Alice Googler, G's N' Roses, The Google Dolls or The Goo Fighters. Which artist were you trying to mention? - เพย์โหลดที่กำหนดเอง
{
"richContent": [
[
{
"options": [
{
"text": "The Google Dolls"
},
{
"text": "The Goo Fighters"
},
{
"text": "Alice Googler"
},
{
"text": "G's N' Roses"
}
],
"type": "chips"
}
]
]
}
- สร้างพารามิเตอร์
merch
- ชื่อที่แสดง:
merch - ประเภทนิติบุคคล:
@Merch - ต้องระบุ: ตรวจสอบ
- ปกปิดในบันทึก: ตรวจสอบ
- การดำเนินการตามคำสั่ง:
Which merchandise item do you want? - คลิกเพิ่มตัวเลือกกล่องโต้ตอบ > เพย์โหลดที่กำหนดเอง
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- ตัวแฮนเดิลเหตุการณ์ >
No-match default - การดำเนินการตามคำสั่งของตัวแฮนเดิลเหตุการณ์:
We sell Shirts, Music or the Tour movie. Which of these items do you want? - เพย์โหลดที่กำหนดเอง
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- ตัวแฮนเดิลเหตุการณ์ >
No-input default - การดำเนินการตามคำสั่งของตัวแฮนเดิลเหตุการณ์:
I couldn't understand which merchandise item you wanted to buy. You can choose between: Shirts, Music or the Tour movie. Which item do you want? - เพย์โหลดที่กำหนดเอง
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Shirts"
},
{
"text": "Music"
},
{
"text": "Tour movie"
}
]
}
]
]
}
- สร้างเส้นทางที่จะเปลี่ยนไปที่หน้าผลิตภัณฑ์เมื่อมีการระบุ
artistและมีการระบุสินค้าmerch
- เงื่อนไข:
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.artist != null - Expression:
$session.params.merch != null - การดำเนินการตามคำสั่ง:
Alright! $session.params.merch of $session.params.artist, let's go! - การเปลี่ยน: หน้า:
Product
- สร้างเส้นทางเมื่อผู้ใช้พูดว่า "เสื้อ"
- ความตั้งใจ: redirect.shirts
- การเปลี่ยน: หน้า:
Shirts
- สร้างเส้นทางเมื่อผู้ใช้พูดว่า "เพลง"
- ความตั้งใจ: redirect.music
- การเปลี่ยน: หน้า:
Music
- สร้างเส้นทางเมื่อผู้ใช้ขอข้อมูลราคา
- ความตั้งใจ: redirect.price
- การเปลี่ยน: สร้างเพจใหม่:
Price
เมื่อตั้งค่าข้างต้นแล้ว คุณจะเห็นภาพคล้ายกับรูปภาพด้านล่าง โปรดทราบว่าเส้นทางตามความตั้งใจเป็นสีน้ำเงินในแผนภาพ และเส้นทางตามเงื่อนไขเป็นสีส้ม แม้ว่าจะไม่ได้แสดงไว้ แต่ตัวแฮนเดิลเหตุการณ์จะเป็นสีเขียว และเมื่อเส้นทางหลายประเภทเปลี่ยนไปที่หน้าหนึ่ง เส้นจะเป็นสีเทา

ตอนนี้คุณได้เรียนรู้วิธีสร้าง Flows, Entities, Intents และ Pages ด้วย State Handlers เช่น Intent Routes และ Conditional Routes ตาม Parameters ในแล็บนี้ เราจะใช้การแตกแขนงแบบมีเงื่อนไขในการดำเนินการตามคำสั่ง เพื่อให้มีบทสนทนาที่แตกต่างกันตามอินพุต
คุณใช้การกำหนดค่าต่อไปนี้เพื่อสรุปเอเจนต์เสมือนได้
หน้าเสื้อ:
- สร้างการกำหนดค่าต่อไปนี้ในหน้าเสื้อ
- การดำเนินการตามคำขอ:
Do you want a longsleeve or a t-shirt? - เพย์โหลดที่กำหนดเองสำหรับการดำเนินการตามคำขอเข้าร่วม
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
},
{
"text": "Price?"
}
]
}
]
]
}
- สร้างเส้นทางความตั้งใจ:
redirect.priceโดยเปลี่ยนไปที่หน้าPrice - สร้างพารามิเตอร์ต่อไปนี้
- พารามิเตอร์:
merch- ประเภทเอนทิตี:@Merch,RequiredและRedact in log - พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-match default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
You can choose between a t-shirt or a longsleeve. Which of these do you want? - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-input default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
I couldn't understand if you want the t-shirt or the longsleeve. Which of these do you want? - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "T-shirt"
},
{
"text": "Longsleeve"
}
]
}
]
]
}
- คลิกการปฏิบัติตามข้อกำหนดของรายการ แล้วเลื่อนลงไปที่ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ ทุกครั้งที่หน้าเสื้อผ้าใช้งานได้ ระบบจะตั้งค่าพารามิเตอร์หมวดหมู่เป็น shirts
พารามิเตอร์ | ค่า |
|
|
- เพิ่มเส้นทางแบบมีเงื่อนไข
- จับคู่กฎอย่างน้อย 1 ข้อ (หรือ)
- Expression:
$session.params.merch = "T-shirt" - Expression:
$session.params.merch = "Longsleeve" - เปลี่ยนไปหน้าใหม่:
Shirt Size
หน้าการกำหนดราคา:
เนื่องจากข้อความสำหรับราคาจะขึ้นอยู่กับสินค้าหรือหมวดหมู่ที่เลือก (เพลงหรือเสื้อ) เราจะแก้ไขส่วนนี้ในภายหลังในห้องทดลอง เพียงป้อนตัวยึดตำแหน่งก็เพียงพอแล้วในตอนนี้
- สร้างการกำหนดค่าต่อไปนี้ในหน้าราคา
- การดำเนินการตามคำขอ:
PRICE TODO
เนื่องจากคุณขอราคาได้จากที่ต่างๆ ในการสนทนา ระบบจึงควรตอบคำถามและโอนคุณกลับไปยังส่วนก่อนหน้าของกล่องโต้ตอบเพื่อดำเนินการสั่งซื้อต่อ มี 5 จุดในแผนผังบทสนทนาที่คุณสามารถแยกออกไปเพื่อดูข้อมูลราคาได้ (เสื้อ ขนาดเสื้อ เพลง ผู้ให้บริการ และยังรวมถึงการส่งผ่านเส้นทาง Intent โดยตรง) ดังนั้นเราจึงต้องมีเส้นทางแบบมีเงื่อนไขบางอย่างเพื่อย้อนกลับ
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.category = "shirts" - Expression:
$session.params.merch = "null" - เปลี่ยนไปหน้าใหม่:
Shirts
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.category = "shirts" - Expression:
$session.params.size = "null" - เปลี่ยนไปหน้าใหม่:
Shirt Size
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.category = "music" - Expression:
$session.params.album = "null" - เปลี่ยนไปหน้าใหม่:
Music
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.category = "music" - Expression:
$session.params.merch = "null" - เปลี่ยนไปหน้าใหม่:
Carrier
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.category = "null" - เปลี่ยนไปหน้าใหม่:
Product Overview
หน้าขนาดเสื้อ:
- สร้างการกำหนดค่าต่อไปนี้ในหน้าขนาดเสื้อ
- การดำเนินการตามคำขอ:
What shirt size do you want? - เพย์โหลดที่กำหนดเองสำหรับการดำเนินการตามคำขอเข้าร่วม
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- สร้างเส้นทางความตั้งใจ:
redirect.priceโดยมีการเปลี่ยนไปยังหน้าPrice - สร้างพารามิเตอร์ต่อไปนี้
- พารามิเตอร์:
shirtsize- ประเภทเอนทิตี:@ShirtSize-Required,Redact In Log - พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-match default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
Please tell me the shirt size, such as XL. - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-input default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
I couldn't understand the shirt size. What size do you want? - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "XS"
},
{
"text": "S"
},
{
"text": "M"
},
{
"text": "L"
},
{
"text": "XL"
},
{
"text": "2XL"
},
{
"text": "3XL"
}
]
}
]
]
}
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$page.params.shirtsize != "null" - เปลี่ยนไปที่หน้า:
Product
หน้าเพลง:
- สร้างการกำหนดค่าต่อไปนี้ในหน้าเพลง
- การดำเนินการตามคำขอ:
We have a Greatest Hits Album or the Live Album. Which one do you want? - เพย์โหลดที่กำหนดเองสำหรับการดำเนินการตามคำขอเข้าร่วม
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
},
{
"text": "Price?"
}
]
}
]
]
}
- สร้างเส้นทางความตั้งใจ:
redirect.priceโดยเปลี่ยนเส้นทางไปยังหน้า:Price - สร้างพารามิเตอร์ต่อไปนี้
- พารามิเตอร์:
album- ประเภทเอนทิตี:@Album-Required,Redact In Log - พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-match default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
You can choose between Greatest Hits and Live Album. Which of these do you want? - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-input default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
I couldn't understand if you want the album: Greatest Hit or Live. Which of these do you want? - พารามิเตอร์ > เพย์โหลดที่กำหนดเองของการจัดการเหตุการณ์:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Greatest Hits"
},
{
"text": "Live"
}
]
}
]
]
}
- คลิกการดำเนินการตามคำขอ แล้วเลื่อนลงไปที่ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ ทุกครั้งที่หน้าเพลงเปิดใช้งาน ระบบจะตั้งค่าพารามิเตอร์หมวดหมู่เป็น music
พารามิเตอร์ | ค่า |
|
|
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$page.params.album != "null" - เปลี่ยนไปที่หน้า:
Carrier
หน้าของผู้ให้บริการ:
- สร้างการกำหนดค่าต่อไปนี้ในหน้าผู้ให้บริการขนส่ง
- การดำเนินการตามคำขอ:
Do you want this album on CD or MP3? - เพย์โหลดที่กำหนดเองสำหรับการดำเนินการตามคำขอเข้าร่วม
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
},
{
"text": "Price?"
}
]
}
]
]
}
- สร้างเส้นทางความตั้งใจ:
redirect.priceซึ่งเปลี่ยนไปที่หน้าPrice - สร้างพารามิเตอร์ต่อไปนี้
- พารามิเตอร์:
merch- ประเภทเอนทิตี:@Merch-Required,Redact In Log - พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-match default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
Do you want a physical CD or the digital album? - พารามิเตอร์ > การดำเนินการตามตัวแฮนเดิลเหตุการณ์: เพย์โหลดที่กำหนดเอง:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "Digital Album"
}
]
}
]
]
}
- พารามิเตอร์ > ตัวแฮนเดิลเหตุการณ์ >
No-input default - พารามิเตอร์ > การดำเนินการตามคำขอของตัวแฮนเดิลเหตุการณ์:
I couldn't understand if you mean CD or MP3. Which one do you want? - พารามิเตอร์ > การดำเนินการตามตัวแฮนเดิลเหตุการณ์: เพย์โหลดที่กำหนดเอง:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "CD"
},
{
"text": "MP3"
}
]
}
]
]
}
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$page.params.merch != "null" - เปลี่ยนไปที่หน้า:
Product
หน้าผลิตภัณฑ์:
- สร้างพารามิเตอร์ต่อไปนี้
ชื่อที่แสดงของพารามิเตอร์ | ประเภทเอนทิตีพารามิเตอร์ | การตรวจสอบ |
|
| ต้องระบุ ปิดบังในบันทึก |
|
| ต้องระบุ ปิดบังในบันทึก |
- พารามิเตอร์ศิลปินต้องมีข้อความแจ้งเริ่มต้นต่อไปนี้ ซึ่งจะแสดงเมื่อไม่ทราบศิลปิน
You didn't mention which artist you are interested in. You can ask me to buy the $session.params.merch of the artist you like or ask which artists we signed. How can I help?
{
"richContent": [
[
{
"options": [
{
"text": "Which artists?"
}
],
"type": "chips"
}
]
]
}
- นอกจากนี้ ให้เพิ่มตัวแฮนเดิลเหตุการณ์
No-input defaultพร้อมการดำเนินการตามคำสั่ง:I couldn't understand what you just said. Ask me which artists are signed. - และตัวแฮนเดิลเหตุการณ์
No-match defaultที่มีการดำเนินการตามคำสั่งI missed that. Please ask me which artists are signed.
- พารามิเตอร์ merch ต้องมีตัวแฮนเดิลเหตุการณ์แจ้งอีกครั้งด้วย
- เพิ่มตัวแฮนเดิลเหตุการณ์
No-input defaultพร้อมการดำเนินการตามคำสั่ง:I couldn't understand what you just said. Which merchandise item do you want? - และตัวแฮนเดิลเหตุการณ์
No-match defaultที่มีการดำเนินการตามคำสั่งI missed that. Which merchandise item do you want?
เส้นทางถัดไปจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "ภาพยนตร์ทัวร์"
- เพิ่มเส้นทางแบบมีเงื่อนไข
- ตรงกับทุกกฎ (AND)
- Expression:
$session.params.artist != null - Expression:
$session.params.merch = "Tour Movie" - ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ เพิ่มพารามิเตอร์ >
price = 25 - เปลี่ยนไปหน้าใหม่:
Confirmation
เส้นทางถัดไปจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบทราบศิลปินและผู้ใช้เลือก "เสื้อยืด" และเลือกขนาดเสื้อ
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND $session.params.merch = "T-shirt" AND $session.params.shirtsize != null - ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ เพิ่มพารามิเตอร์ >
price = 25 - เปลี่ยนไปที่หน้า:
Confirmation
เส้นทางถัดไปจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "เสื้อแขนยาว" และเลือกขนาดเสื้อ
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND $session.params.merch = "Longsleeve" AND $session.params.shirtsize != null - ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ เพิ่มพารามิเตอร์ >
price = 30 - เปลี่ยนไปที่หน้า:
Confirmation
เส้นทางถัดไปจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "CD" รวมถึงเลือกชื่ออัลบั้ม
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND $session.params.merch = "CD" AND $session.params.album != null - ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ เพิ่มพารามิเตอร์ >
price = 15 - เปลี่ยนไปที่หน้า:
Confirmation
เส้นทางถัดไปจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "อัลบั้มดิจิทัล" และเลือกชื่ออัลบั้ม
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND $session.params.merch = "Digital Album" AND $session.params.album != null - ค่าที่กำหนดล่วงหน้าของพารามิเตอร์ เพิ่มพารามิเตอร์ >
price = 10 - เปลี่ยนไปที่หน้า:
Confirmation
จากนั้นเราจะสร้างเงื่อนไขขั้นสูงด้วยพรอมต์ที่ตรวจหาข้อมูลที่ขาดหายไป เส้นทางถัดไปจะเปลี่ยนกลับไปที่หน้าเพลงเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "CD" หรือ "อัลบั้มดิจิทัล" แต่ไม่ได้เลือกชื่ออัลบั้ม
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND ($session.params.merch = "CD" OR $session.params.merch = "Digital Album") AND $session.params.album = null - การดำเนินการตามคำสั่ง:
I would also need to know which album you would like to buy! - เปลี่ยนไปที่หน้า:
Music
และเส้นทางสุดท้ายจะเปลี่ยนไปที่หน้ายืนยันเมื่อระบบรู้จักศิลปินและผู้ใช้เลือก "เสื้อยืด" หรือ "เสื้อแขนยาว" แต่ไม่ได้เลือกขนาดเสื้อยืด
- เพิ่มเส้นทางแบบมีเงื่อนไข
- นิพจน์ที่กำหนดเอง:
$session.params.artist != null AND ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve") AND $session.params.shirtsize = null - การดำเนินการตามคำสั่ง:
I would also need to know which shirt size you need! - เปลี่ยนไปที่หน้า:
Shirt Size
ในส่วนถัดไปของแล็บ เราจะใช้การดำเนินการตามเงื่อนไขเพื่อแสดงข้อความการดำเนินการต่างๆ ตามอินพุต
7. การตอบกลับแบบมีเงื่อนไข
คำตอบบางอย่างจะแสดงข้อความที่แตกต่างกันตามอินพุต ข้อความจะแยกออกเป็นหลายเส้นทาง ซึ่งเราเรียกว่าคำตอบแบบมีเงื่อนไข ซึ่งอาจเป็นเรื่องที่น่าสนใจเมื่อคุณไม่ได้ใช้การดำเนินการตามคำสั่งของเว็บฮุก ซึ่งมีการกำหนดการตอบกลับแบบมีเงื่อนไขไว้ในแบ็กเอนด์ ตัวอย่างเช่น
if [condition]
[response]
elif [condition]
[response]
elif [condition]
[response]
else
[response]
endif
- ตัวอย่าง [เงื่อนไข] อาจเป็น
$session.params.user-age >= 21โดยจะใช้การจัดรูปแบบที่คล้ายกับเงื่อนไขในเส้นทาง - [คำตอบ] จะใช้การตอบกลับด้วยข้อความแบบคงที่
- คำตอบแบบมีเงื่อนไขจะเริ่มต้นด้วย
ifเสมอ elifและelseเป็นบล็อกที่ไม่บังคับ
นอกจากนี้ Dialogflow CX ยังใช้ฟังก์ชันของระบบในตัวได้ด้วย เช่น หากต้องการจัดรูปแบบวันที่หรือเวลา หรือแสดงเวลาปัจจุบัน ($sys.func.NOW())
มาสรุปขั้นตอนแคตตาล็อกด้วยการแก้ไขหน้าการยืนยันและราคากัน
หน้าการยืนยัน
ตอนนี้เราจะสร้างหน้ายืนยัน โดยมีข้อกำหนดดังนี้
- หากสินค้าเป็น CD หรืออัลบั้มดิจิทัล เราจะแสดงช่องต่อไปนี้ในการยืนยัน ได้แก่ ศิลปิน สินค้า อัลบั้ม และราคา
- หากสินค้าเป็นเสื้อยืดหรือเสื้อแขนยาว เราจะแสดงช่องต่อไปนี้ในการยืนยัน ได้แก่ ศิลปิน สินค้า ขนาด และราคา
- มิฉะนั้น (และหาก merch เป็น Tour Movie) เราจะแสดงช่องต่อไปนี้ในการยืนยัน ได้แก่ ศิลปิน สินค้า และราคา
- คลิกหน้าการยืนยัน
- คลิกแก้ไขการดำเนินการตามคำสั่งซื้อ > คำตอบของตัวแทน > ตัวเลือกเพิ่มกล่องโต้ตอบ > การตอบกลับแบบมีเงื่อนไข:
if ($session.params.merch = "CD" OR $session.params.merch = "Digital Album")
The $session.params.merch: $session.params.artist - $session.params.album costs $$session.params.price. Shall I continue to order?
elif ($session.params.merch = "T-shirt" OR $session.params.merch = "Longsleeve")
A $session.params.merch of $session.params.artist size: $session.params.shirtsize costs $$session.params.price. Shall I continue to order?
elif $session.params.merch = "Tour Movie"
The $session.params.merch of $session.params.artist costs $$session.params.price. Shall I continue to order?
else
It looks like something went wrong with your order. You can say "Reset", to restart the order process.
endif
- Create the following Custom payload:
- Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Yes, confirm"
}
],
"type": "chips"
}
]
]
}
Next, create two intent routes:
confirm.proceed.ordertransitions to:Order ProcessFlow.decline.proceed.ordertransitions toEnd Flow
When the user declines the order, and does not want to proceed the order process, we will have to transition back to the welcome page, but all the parameters have to be cleared. We can do this by specifically setting null to all the possible parameters. You can do this with Parameter presets.
- In the decline.proceed.order intent route, scroll down to Parameter presets and add the following parameters:
Parameter | Value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Notice that we have created an additional parameter called restart. If this parameter is present, the Default Start Flow, should know to continue the conversation by showing a customized message.
- Click on the Default Start Flow, Start Page, and create another Conditional Route:
$session.params.restart = "true"- Fulfillment:
"Welcome back, as the virtual agent of G-Records, I can help you order artists merchandise, you can ask questions about your order or shipping, and I can tell you more which artists are currently signed with us. How can I help?" - Custom payload:
{
"richContent": [
[
{
"type": "chips",
"options": [
{
"text": "Which artists?"
},
{
"text": "Which products?"
},
{
"text": "About my order..."
}
]
}
]
]
}
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day!
Price Page:
Let's also fix the Price TODOs. The price information will be static for now. Click on the Price Page in the Catalog Flow, and use the following entry fulfillment:
- Delete the Agent Says entry fulfillment.
- Create a new Conditional Response:
if $session.params.category = "shirts"
A t-shirt costs $25 and a longsleeve costs $30.
elif $session.params.category = "music"
A CD costs $15. The digital album on MP3 costs $10.
else
A t-shirt costs $25 and a longsleeve costs $30. A CD costs $15 and a digital album on MP3 $10. In case you are interested in the Tour Movie, that one is $25.
endif

Well done, by now you completed the Catalog flow. Your flow should look similar to this diagram:
8. Wrapping up the agent
We are almost at the end of this lab. Let's configure the last flows together, and take in practice all the new things that we have learned.
Creating the My Order Flow
- Go to the My Order Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
My Order Start |
| My Order |
My Order Start |
| My Order Status |
My Order Start |
| My Order Cancellation |
My Order Start |
| End Session |
My Order Start |
| End Flow |
My Order |
| My Order Status |
My Order |
| My Order Cancellation |
Default Start Flow |
| Flow: My Order |
Default Start Flow |
| Flow: My Order |
- Let's create the following entry fulfillment for the My Order Page:
- Entry fulfillment:
I can look up the status of your order, or I can cancel an order.
- In the My Order Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required: checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Fulfillment:
And do you want to Cancel your order, or should I look up the status?
- Click on Add state handler > Event Handlers and create the Event Handler:
No-input default
- Fulfillment:
I'm sorry, what was that? Would you like me to cancel an order or look up the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- Create the Event Handler:
No-match default
- Fulfillment:
Would you like me to cancel an order or lookup the status? - Custom payload:
{
"richContent": [
[
{
"options": [
{
"text": "Status"
},
{
"text": "Cancel"
}
],
"type": "chips"
}
]
]
}
- In the My Order Status Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Status Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been shipped, it can take up to approx 2 weeks before you will receive your items. - Add dialogue option > Text:
Is there anything else I can help you with?
- In the My Order Cancelation Page create the following parameter:
- Displayname:
ordernumber - Entity Type:
@OrderNumber - Required checked
- Initial prompt fulfillment:
What's the order number? For example ABCD123. - Event Handler:
No-match default:To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use? - Event Handler:
No-input default:I missed that. To proceed with your order I will need an order number. Order numbers start with 4 characters and end with 3 numbers, such as ABCD123. Which order number may I use?
- In the My Order Cancelation Page create the following conditional route:
- Customize Expression:
$session.params.ordernumber != null - Fulfillment:
Your order $session.params.ordernumber has been canceled. - Add dialogue option > Text:
Is there anything else I can help you with?
- Test the flow and create the following two test scenarios:
>"About my order"
>"ABCD123"
>"Status"
And:
>"What's the status of order DEFG222"
- Select the Start Page and click on the
redirect.endintent. Create the following fulfillment:Thank you for contacting G-Records! Have a nice day! - Select the Start Page and click on the
redirect.homeintent. Create the following parameter preset:restart = true
Default Negative intents (Fallback)
When you create a virtual agent, a default negative intent is created for you. You can add training phrases to this intent that act as negative examples that will trigger a No-match event. There may be cases where end-user input has a slight resemblance to training phrases in normal intents, but you do not want these inputs to match any normal intents.
- Try in the simulator:
I don't like Alice Googler.
You will see that the virtual agent answers with the Product Overview Page, to continue ordering Alice Googler merchandise. However, your end user does not like that artist. Let's use the Default Negative Intent for this.
- Go to Manage > Intents and select the Default Negative Intent.
- Add the following training phrases that will trigger the No-match event.
I don't like Alice GooglerI am not a fan of G's N' RosesI can't stand the music of the Google Dolls
- Hit Save and test the following sentence in the simulator:
I am really not a fan of the Goo Fighters
This time the No-match event was triggered, you stayed on the Start Page.
Default Fallback Messages
- Click the Default Start Flow, select the
sys.no-input-defaultevent handler.
The No-input fallback basically means: No text or speech answers were detected. Likely no answers were given, or the system couldn't hear it. Therefore, let's make the fallback messages more specific. Use the tab key, to create alternative dialogues:
- Remove all answers, and add these text dialogues:
I'm sorry, I didn't receive an answer. Can you say it again?I missed your answer, can you say it again?Sorry, I didn't hear anything. Can you say it again?I couldn't hear what you were saying, what was that?I'm sorry, I missed your answer. What were you trying to say?
Don't forget to click Save.
- Click the Default Start Flow, select the
sys.no-match-defaultevent handler.
The No Match fallback basically means: Text or speech answers were detected but nothing in Dialogflow CX got matched.
- Remove all answers, and add these text dialogues:
Sorry, I didn't get that. Can you please rephrase?I'm sorry, I don't understand. Can you please rephrase?I don't understand, please rephrase.Sorry, I didn't get that. What was that?I didn't get that, can you please rephrase?
Don't forget to click Save.
- It's advised to repeat these steps for the Catalog, My Order, Order Process and Customer Care flows.
Here's a tip: when creating fallback messages, make them more explicit, by rephrasing the previous question or by mentioning an example. You could create these type of No-match and No-input events on Page level when creating parameters. In our labs, we have already done this.
Creating the Order Process Flow
- Go to the Order Process Flow, and create the following intent transitions:
Page (In Flow) | Routes > Intent | Routes > Transition To |
Order Process Start |
| End Session |
Order Process Start |
| End Flow |
Order Process Start |
| New Page: Shipping Details |
- Let's create the following entry fulfillment for the Shipping Details Page:
- Entry fulfillment:
To complete your order I will first need to collect your shipping details.
- Create the following parameters:
These parameters will make use of built-in system entities. System entity support differs for each language. See the docs for more information.
Parameter Display name | Entity | Required? | Initial prompt fulfillment | No-match default | No-input default |
| @sys.person | Required |
|
|
|
| @sys.person | Required |
|
|
|
| @sys.address | Required |
|
|
|
| @sys.any | Required |
|
|
|
| @sys.geo-city | Required |
|
|
|
| @sys.geo-country | Required |
|
|
|
| @sys.email | Required |
|
|
|
- Create the following conditional route:
- Customize Expression:
$page.params.status = "FINAL" - Transition to new Page:
Payment Details
- Create the following entry fulfillment.
Let's fake it that this virtual agent makes use of Google Pay. Don't worry this tutorial won't make real transactions. Create the following entry dialogues:
- Agent Says:
Alright $session.params.firstname! We will make use of Google Pay, that's connected to your email account: $session.params.email.
- Conditional Response
if $session.params.merch != "Digital Album"
Shipping costs an additional 5 dollars. This will make the total price $$sys.func.TO_TEXT($sys.func.ADD($session.params.price, 5)).
Your merchandise will be shipped to:
$session.params.firstname $session.params.lastname
$session.params.address
$session.params.zipcode $session.params.city
$session.params.country
To continue the order process please explicitly say "I confirm". Do you want to confirm your $session.params.artist $session.params.merch order?
else
The total costs will be: $$session.params.price.
After purchasing the digital album, you will receive an email with the download link.
To continue the order process please explicitly say "I confirm".
Do you want to confirm your $session.params.artist $session.params.merch order?
endif
- สร้างเส้นทางความตั้งใจต่อไปนี้
- ความตั้งใจ:
confirm.proceed.order - ตัวแทนกล่าวว่า
Thank you for your order! Your merchandise will be shipped today! - เพิ่มตัวเลือกบทสนทนา > ข้อความ:
Here's the order number: ABCD123 - เพิ่มตัวเลือกบทสนทนา > ข้อความ:
Have a good day! - การเปลี่ยน:
End Session
- เลือกหน้าเริ่มต้น แล้วคลิกที่ความตั้งใจ
redirect.endสร้างการดำเนินการตามคำสั่งต่อไปนี้Thank you for contacting G-Records! Have a nice day! - เลือกหน้าเริ่มต้น แล้วคลิกที่ความตั้งใจ
redirect.homeสร้างค่าที่กำหนดล่วงหน้าของพารามิเตอร์ต่อไปนี้restart = true
ยอดเยี่ยม! ตอนนี้เรามีแชทบอทของผู้ค้าปลีกในโลกแห่งความเป็นจริงที่ทำงานได้อย่างเต็มรูปแบบแล้ว ในแล็บถัดไป เราจะทดสอบประสิทธิภาพของตัวแทนเสมือน
9. ทดสอบตัวแทนเสมือน
คุณสามารถใช้โปรแกรมจำลองในตัวเพื่อทดสอบบทสนทนาของเอเจนต์เสมือนได้ ข้อดีของการทดสอบโฟลว์ในเครื่องจำลองคือคุณจะเห็นภาพรวมที่ชัดเจนของโฟลว์ หน้าเว็บ พารามิเตอร์ และเหตุการณ์ (DTMF) ที่เครื่องจำลองรวบรวมขณะที่คุณเดินผ่านโฟลว์ ซึ่งทำให้การทดสอบง่ายกว่าการทดสอบในการผสานรวมโดยตรง เนื่องจากระบบจะซ่อนข้อมูลประเภทดังกล่าวจากผู้ใช้ปลายทาง คุณยังสร้างกรณีทดสอบ บันทึก และนำกรณีทดสอบเหล่านั้นมาใช้ซ้ำได้ด้วย ซึ่งเป็นเรื่องที่สมเหตุสมผลอย่างยิ่งเมื่อคุณดูแลรักษาหรือแก้ไขโฟลว์เมื่อเวลาผ่านไป และต้องการให้มั่นใจว่าการเปลี่ยนแปลงของคุณจะไม่ทำให้งานก่อนหน้านี้เสียหาย
นอกจากนี้ คุณยังส่งออกและนำเข้ากรณีทดสอบที่สร้างไว้ก่อนหน้านี้ได้ด้วยการจัดเก็บการทดสอบใน Google Cloud Storage หรือในเครื่อง การส่งออกการทดสอบจะดาวน์โหลดไฟล์ Blob ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องจำลองและกรณีทดสอบได้ที่เอกสารเครื่องจำลอง / กรณีทดสอบ
ก่อนสร้างกรณีทดสอบบางอย่าง เรามาทำให้ส่วนที่เหลือของเอเจนต์เสมือนเสร็จสมบูรณ์กันก่อน
การสร้างโฟลว์การดูแลลูกค้า
- ไปที่โฟลว์การดูแลลูกค้า แล้วสร้างการเปลี่ยนเจตนาต่อไปนี้
หน้า (ในโฟลว์) | เส้นทาง > ความตั้งใจ | เส้นทาง > เปลี่ยนไปใช้ |
Customer Care Start |
| การจัดส่ง |
Customer Care Start |
| เงินคืน |
Customer Care Start |
| การสลับ |
Customer Care Start |
| สิ้นสุดโฟลว์ |
Customer Care Start |
| สิ้นสุดเซสชัน |

- สร้างการดำเนินการตามคำสั่งต่อไปนี้สำหรับหน้าการจัดส่ง
Shipping physical merchandise items can take up to 2 weeks.Is there anything else I can help you with?
- สร้างการดำเนินการตามคำสั่งต่อไปนี้สำหรับหน้าคืนเงิน
We offer free returns and refunds. We provide one free return label for each order. You can use it within 30 days from receiving your order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- สร้างรายการต่อไปนี้สำหรับหน้าการสลับ
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.Is there anything else I can help you with?
- เลือกหน้าเริ่มต้น แล้วคลิกที่ความตั้งใจ
redirect.endสร้างการดำเนินการตามคำสั่งต่อไปนี้Thank you for contacting G-Records! Have a nice day! - เลือกหน้าเริ่มต้น แล้วคลิกที่ความตั้งใจ
redirect.homeสร้างค่าที่กำหนดล่วงหน้าของพารามิเตอร์ต่อไปนี้restart = true
สร้างกรณีทดสอบ
- คลิกปุ่มทดสอบเอเจนต์ทางด้านขวาของหน้าจอ
เมื่อเปิดโปรแกรมจำลองเป็นครั้งแรก คุณจะต้องเลือกสภาพแวดล้อมของเอเจนต์และโฟลว์ที่ใช้งานอยู่ ในกรณีส่วนใหญ่ คุณควรใช้สภาพแวดล้อมฉบับร่างและขั้นตอนการเริ่มต้นเริ่มต้น
- ประเภท:
Hi

- ถาม:
Which artists are signed with your label? - พูดว่า
The Google Dolls - พูดว่า
I am interested in buying a shirt - พูดว่า
A t-shirt - พูดว่า
Medium - ตอนนี้ให้คลิกปุ่มบันทึกกรณีทดสอบ ซึ่งคุณจะเห็นที่ด้านบนของโปรแกรมจำลอง (ข้างลูกศรทำซ้ำและไอคอนถังขยะรีเซ็ต)

- โดยระบุรายละเอียดต่อไปนี้
- ชื่อกรณีทดสอบ:
Buy Google Dolls t-shirt size M - แท็ก: #แคตตาล็อก #เสื้อ #เสื้อยืด #TheGoogleDolls
- คลิกบันทึก
มาสร้างกรณีทดสอบเพิ่มเติมกัน
- ก่อนอื่นให้ล้างกล่องโต้ตอบปัจจุบันโดยคลิกไอคอนรีเซ็ต (ถังขยะ)
- สร้างกรณีทดสอบต่อไปนี้
ซื้อเสื้อยืด Alice Googler โดยทำดังนี้
>"Buy the Alice Googler t-shirt."
>"XL"
- ชื่อกรณีทดสอบ:
Buy the Alice Googler t-shirt - แท็ก:
#catalog, #shirts, #t-shirt, #AliceGoogler
ซื้อเสื้อยืดขนาด M: (โปรดทราบว่าไม่ได้มีการกล่าวถึงชื่อศิลปิน แต่คุณต้องการข้ามหน้าภาพรวมของวงดนตรี ภาพรวมของผลิตภัณฑ์ หน้าเสื้อ และหน้าขนาดเสื้อ)
>"Buy a t-shirt size M"
>"The Google Fighters"
- ชื่อกรณีทดสอบ:
Buy a t-shirt size M - แท็ก:
#catalog, #shirts, #t-shirt, #TheGoogleFighters - คำอธิบาย: (โปรดทราบว่าไม่ได้กล่าวถึงชื่อศิลปิน แต่คุณต้องการข้ามหน้าภาพรวมของวงดนตรี ภาพรวมผลิตภัณฑ์ หน้าเสื้อ และหน้าขนาดเสื้อ)
ซื้อเพลงของ Guns N' Roses (โปรดทราบว่าการดำเนินการนี้จะข้ามหน้าภาพรวมของวงดนตรีและภาพรวมของผลิตภัณฑ์)
>"Purchase music of G's N' Roses"
>"Live"
>"CD"
- ชื่อกรณีทดสอบ:
Purchase music of G's N' Roses - แท็ก:
#catalog, #music, #CD, #GsNRoses, #live - คำอธิบาย: (โปรดทราบว่าการดำเนินการนี้จะข้ามหน้าภาพรวมของวงดนตรีและภาพรวมของผลิตภัณฑ์)
ตรวจสอบข้อมูลราคา
>"Which products"
>"Shirts"
>"What's the price difference?"
>"Longsleeve"
>"What does it cost?"
>"M"
>"The Google Dolls"
>"No"
>"Which bands"
>"The Gooo Fighters"
>"Music"
>"How much does it cost?"
>"Greatest Hits"
>"What's the price difference?"
>"Mp3"
>"No"
>"I want to buy the tour movie"
>"Alice Googler"
>"Yes"
- ชื่อกรณีทดสอบ:
Price info - แท็ก:
#catalog, #music, #tourmovie, #shirts - คำอธิบาย: ทดสอบข้อมูลราคาในจุดต่างๆ ของกล่องโต้ตอบ
ทดสอบกรณีทดสอบที่บันทึกไว้ล่วงหน้า
- เลือกจัดการ > กรณีทดสอบในเมนูหลักของ Dialogflow ทางด้านซ้าย
- เลือกกรณีทดสอบทั้งหมด แล้วกดปุ่มเรียกใช้เหนือตาราง
Dialogflow CX จะเรียกใช้กรณีทดสอบที่เลือกทั้งหมดกับบันทึกที่บันทึกเป็น "กรณีทดสอบที่สมบูรณ์" หากผลลัพธ์เหมือนกับที่คุณบันทึกไว้ แสดงว่าการทดสอบผ่าน - หากมีการเปลี่ยนแปลงในโฟลว์ เช่น หน้าเว็บที่กำหนดค่าไม่ถูกต้อง หรือความตั้งใจที่นำคุณไปยังหน้าเว็บที่ไม่ถูกต้อง การทดสอบจะล้มเหลว

- ในเครื่องจำลอง ให้ถามคำถามต่อไปนี้
How long will shipping take? - จดบันทึกผลลัพธ์และบันทึกกรณีทดสอบเป็น
Shippingพร้อมแท็ก#shipping - ไปที่แผงจัดการ > กรณีทดสอบ แล้วกดปุ่มเรียกใช้ที่ด้านขวาบนของตารางกริดเพื่อเรียกใช้เฉพาะกรณีทดสอบ
Shipping
การทดสอบนี้ควรผ่าน
- กลับไปที่โฟลว์การดูแลลูกค้า เลือกหน้าเริ่มต้น แล้วคลิกส่วนหัวเส้นทาง
ซึ่งจะแสดงหน้าจอที่มีตารางกริดที่แสดงเส้นทางทั้งหมด
- นำ
redirect.shipping.info routeออก - ไปที่แผงจัดการ > กรณีทดสอบ แล้วกดปุ่มเรียกใช้ที่ด้านขวาบนของตารางกริดเพื่อเรียกใช้เฉพาะกรณีทดสอบ
Shipping
การทดสอบนี้ควรล้มเหลว
- คุณสามารถคลิกการทดสอบที่ไม่ผ่านเพื่อดูรายละเอียดของความล้มเหลว
ในกรณีนี้ การทดสอบล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดด้านล่าง
Page: Page mismatch:
Expected: Shipping
Actual: Start Page
เนื่องจากหน้าดังกล่าวไม่ได้อยู่ในขั้นตอนการชำระเงินอีกต่อไป เราคาดหวังว่าจะได้เห็นหน้า Shipping แต่กลับไม่เคยออกจากหน้า Start เลย (หรือผู้ใช้ปลายทางจะได้รับข้อความสำรอง)
กล่าวอีกนัยหนึ่งคือ นี่คือคำขอที่พลาดไป ซึ่งเป็นผลการทดสอบผลลบลวง การทดสอบไม่สำเร็จ เราคาดหวังว่าจะเห็นหน้าการจัดส่ง แต่ไม่มีอะไรเกิดขึ้นหรือระบบแสดงข้อความสำรอง
- กลับไปที่โฟลว์การดูแลลูกค้า แล้วเพิ่ม
redirect.shipping.infoเป็นเส้นทาง Intent ไปยังหน้าเริ่มต้น อย่าลืมเปลี่ยนไปที่หน้าการจัดส่งแล้วกดบันทึก - ในเครื่องจำลอง ให้บันทึกกรณีทดสอบต่อไปนี้
I want to swap my itemบันทึกกรณีทดสอบนี้เป็นSwapping#swapping - เปิดจัดการ > เจตนา > redirect.refund.info แล้วเพิ่มวลีการฝึกต่อไปนี้
I want to swap this item for a refund
หากไม่มีวลีฝึกนั้น เมื่อผู้ใช้ขอเปลี่ยนสินค้าเพื่อรับเงินคืน ระบบจะเรียกใช้ Intent redirect.swapping.info แต่เราไม่ต้องการให้ข้อมูลเกี่ยวกับการเปลี่ยนสินค้า เราต้องการให้ข้อมูลเกี่ยวกับการคืนเงิน
- สร้างกรณีทดสอบที่ถูกต้องต่อไปนี้
I want to swap this item for a refundในเครื่องจำลอง และบันทึกกรณีทดสอบนี้เป็นSwap for Refund#refund - กลับไปที่ Intent Manage > Intents > redirect.refund.info แล้วนำบรรทัด
I want to swap this item for a refundออก - กลับไปที่จัดการ > กรณีทดสอบ เลือกกรณีทดสอบเปลี่ยนเพื่อรับเงินคืน แล้วเรียกใช้
การทดสอบครั้งล่าสุดของคุณล้มเหลวโดยมีข้อความแสดงข้อผิดพลาดด้านล่าง
If you would like to change your item for a different one, please return your unwanted item and place a new order. If your refund is accepted, we will refund the price you paid for your item back to your original payment method.`
Is there anything else I can help you with?
Page: Page mismatch:
Expected: Refund
Actual: Swapping
กล่าวอีกนัยหนึ่งคือ นี่เป็นคำขอที่เข้าใจผิด ซึ่งเป็นผลการทดสอบผลบวกลวง การทดสอบไม่สำเร็จ เราคาดหวังว่าจะเป็นหน้าการคืนเงิน แต่หน้าการสลับกลับใช้งานได้
ความครอบคลุม
ใน Dialogflow CX การทดสอบความครอบคลุมคือมาตรวัดที่ใช้เพื่ออธิบายระดับที่การสนทนาของตัวแทนเสมือน (หน้าเว็บและเจตนา) ดำเนินการเมื่อชุดการทดสอบเฉพาะทำงาน เอเจนต์เสมือนที่มีความครอบคลุมการทดสอบสูง ซึ่งวัดเป็นเปอร์เซ็นต์ จะมีกล่องโต้ตอบที่ดำเนินการระหว่างการทดสอบมากกว่า ซึ่งบ่งบอกว่ามีโอกาสน้อยที่จะมีข้อบกพร่องที่ตรวจไม่พบ (เช่น คำขอที่เข้าใจผิด) เมื่อเทียบกับเอเจนต์เสมือนที่มีความครอบคลุมการทดสอบต่ำ
- หากต้องการดูรายงานความครอบคลุมของการทดสอบสำหรับกรณีทดสอบทั้งหมด ให้คลิกความครอบคลุม
- คลิกแท็บการเปลี่ยนฉาก
ซึ่งจะแสดงความครอบคลุมของการทดสอบสำหรับการเปลี่ยนหน้าทั้งหมด

- คลิกแท็บเจตนา
ซึ่งจะแสดงความครอบคลุมการทดสอบสำหรับความตั้งใจทั้งหมด

ขอแสดงความยินดี ตอนนี้คุณได้สร้างและทดสอบตัวอย่างบอทสำหรับผู้ค้าปลีกที่สมบูรณ์แบบในโลกแห่งความเป็นจริงแล้ว ไปที่หน้า Lab ถัดไปเพื่ออ่านบทสรุปและดูข้อมูลอ้างอิงที่มีประโยชน์กันเลย
10. บทสรุป
Dialogflow CX คือแพลตฟอร์ม AI แบบสนทนา (CAIP) สำหรับสร้างเอเจนต์เสมือน เช่น แชทบ็อตหรือวอยซ์บ็อต Dialogflow CX ช่วยให้ทีมของคุณสร้างประสบการณ์การสนทนาระดับองค์กรได้เร็วขึ้นผ่านเครื่องมือสร้างบ็อตแบบภาพ ความตั้งใจที่นำกลับมาใช้ใหม่ได้ และความสามารถในการจัดการการสนทนาแบบหลายรอบ
ในโค้ดแล็บนี้ คุณได้เรียนรู้วิธีสร้างเอเจนต์เสมือนจริงด้านการค้าปลีกในโลกแห่งความเป็นจริง เราได้กล่าวถึงแนวคิดต่อไปนี้
- ขั้นตอน
- พารามิเตอร์ เอนทิตีที่กำหนดเองและระบบ
- Pages
- ตัวแฮนเดิลสถานะ เช่น เส้นทาง Intent และเส้นทางเงื่อนไข
- ข้อความการดำเนินการแบบคงที่และคำตอบแบบมีเงื่อนไข
- ความตั้งใจสำรอง
- เครื่องจำลอง กรณีทดสอบ และความครอบคลุม

ข้อมูลอ้างอิง
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Dialogflow CX ได้ที่บล็อกและเอกสารประกอบต่อไปนี้