1. ภาพรวม
แพลตฟอร์มนักพัฒนาซอฟต์แวร์ของ Google Assistant ช่วยให้คุณสร้างซอฟต์แวร์เพื่อขยายฟังก์ชันการทำงานของ Google Assistant ซึ่งเป็นผู้ช่วยส่วนตัวเสมือนในอุปกรณ์กว่า 1 พันล้านเครื่อง ซึ่งรวมถึงลำโพงอัจฉริยะ โทรศัพท์ รถยนต์ ทีวี หูฟัง และอื่นๆ อีกมากมาย ผู้ใช้มีส่วนร่วมกับ Assistant ในการสนทนาเพื่อทำสิ่งต่างๆ เช่น ซื้อของชำหรือจองรถโดยสาร ในฐานะนักพัฒนาแอป คุณสามารถใช้แพลตฟอร์มสำหรับนักพัฒนาซอฟต์แวร์ Assistant เพื่อสร้างและจัดการประสบการณ์การสนทนาที่น่าประทับใจและมีประสิทธิภาพระหว่างผู้ใช้และบริการสำหรับการดำเนินการตามคำสั่งซื้อของบุคคลที่สามของคุณเองได้อย่างง่ายดาย
Codelab นี้ครอบคลุมแนวคิดระดับกลางสำหรับการพัฒนาด้วย Google Assistant และต่อยอดจาก Action ที่สร้างใน Codelab ของสร้างการทำงานสำหรับ Google Assistant โดยใช้ Actions SDK (ระดับ 1) เราขอแนะนำให้คุณทำ Codelab ระดับ 1 ให้เสร็จสิ้นก่อนที่จะเริ่มขั้นตอนนี้
แอ็กชันที่คุณสร้างใน Codelab นี้จะบอกให้ผู้ใช้ทราบโชคชะตาของภารกิจในดินแดนตำนานที่ชื่อว่า Gryffinberg โดยอิงจากความช่วยเหลือที่พวกเขาเลือก
สิ่งที่คุณจะสร้าง
ใน Codelab นี้ คุณสร้างการดำเนินการแบบการสนทนาที่ซับซ้อนได้ด้วยฟังก์ชันต่อไปนี้
- รวบรวมข้อมูลจากผู้ใช้ และแก้ไขพรอมต์แบบสนทนา ขึ้นอยู่กับค่า
- ตอบด้วยคำถามต่อเนื่องเพื่อต่อยอดการสนทนา
- สร้าง Game Loop เพื่อให้ผู้ใช้โต้ตอบกับแอ็กชันได้อีกครั้งหลังจากได้รับโชค
ก่อนเริ่มสร้าง คุณสามารถโต้ตอบกับแอ็กชันที่กำลังดำเนินอยู่ในอุปกรณ์ที่พร้อมใช้งาน Google Assistant โดยพูดว่า "Ok Google คุยกับโชคชะตาและโชคชะตา" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมาจะมีลักษณะเหมือนการโต้ตอบต่อไปนี้
สิ่งที่คุณจะได้เรียนรู้
- วิธีใช้ช่องเพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะลงในฉาก
- วิธีเพิ่ม Game Loop
- วิธีเพิ่มเส้นทางสนับสนุน
สิ่งที่คุณต้องมี
ข้อกำหนดเบื้องต้นสำหรับ Codelab มีดังนี้
- ตัวแก้ไข IDE/ข้อความที่ต้องการ
- เทอร์มินัลสำหรับเรียกใช้คำสั่ง Shell ที่มีการติดตั้ง NodeJS, npm และ git
- เว็บเบราว์เซอร์ เช่น Google Chrome
- โปรเจ็กต์การดำเนินการ codelab ระดับ 1 ที่เสร็จสมบูรณ์แล้ว
ขอแนะนำอย่างยิ่งให้มีความคุ้นเคยกับ JavaScript (ES6) แม้ว่าจะไม่จำเป็นก็ตาม เพื่อทำความเข้าใจรหัสการดำเนินการตามคำสั่งซื้อสำหรับ Codelab นี้
ไม่บังคับ: รับโค้ดตัวอย่าง
คุณสามารถเลือกรับรหัสโปรเจ็กต์ระดับที่ 1 ที่สมบูรณ์จากที่เก็บของ GitHub ของ Actions Builder Codelab ระดับ 1 เพื่อติดตามไปพร้อมกับ Codelab ได้ นอกจากนี้ คุณยังดูรหัสโปรเจ็กต์ระดับ 2 ที่สมบูรณ์ได้ในที่เก็บของ GitHub
2. สร้างอินเทอร์เฟซการสนทนาต่อไป
ใน Codelab แรก คุณได้สร้างการดำเนินการแบบการสนทนาแบบง่ายๆ ที่มีฉากเดียว นั่นคือ Start
ใน Codelab นี้ คุณจะขยายการสนทนาของการดำเนินการได้ ในส่วนต่อไปนี้ คุณกำหนดค่าการดำเนินการให้ทำสิ่งต่อไปนี้ได้
- เปลี่ยนไปดูฉาก
Fortune
ใหม่เมื่อผู้ใช้ต้องการฟังคำทำนาย - ถามผู้ใช้ว่าต้องการเลือกตัวช่วยใดสำหรับการเดินทาง
- ทำนายดวงชะตาที่ปรับแต่งตามตัวเลือกของผู้ใช้
การเปลี่ยนและสร้างฉาก Fortune
ในส่วนนี้ คุณจะดำเนินการดังต่อไปนี้
- นำข้อความแจ้งที่มีอยู่ออกจากโหมด
Start
ซึ่งจะตอบกลับผู้ใช้และจบการสนทนา - กำหนดการเปลี่ยนจากฉาก
Start
ไปยังฉากFortune
- สร้างฉาก
Fortune
หากต้องการแก้ไขฉาก Start
และเพิ่มการเปลี่ยนไปยังฉาก Fortune
ให้ทำตามขั้นตอนต่อไปนี้
- เปิดโปรเจ็กต์ Actions จาก Codelab ระดับ 1 ในโปรแกรมแก้ไขข้อความ
- เปิดไฟล์
custom/scenes/Start.yaml
- อัปเดต
handler
สำหรับ Intentyes
เพื่อให้โค้ดตรงกับข้อมูลโค้ดด้านล่าง
Start.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I understand, stranger. Best of luck on your quest! Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- บันทึกไฟล์
หากต้องการสร้างฉากใหม่ชื่อ Fortune
ให้ทำตามขั้นตอนต่อไปนี้
- ไปที่โปรเจ็กต์การดำเนินการ Codelab ระดับ 1 ในเทอร์มินัล
- สร้างไฟล์ใหม่ชื่อ
Fortune.yaml
ในไดเรกทอรีscenes
:
touch custom/scenes/Fortune.yaml
คุณจะได้แก้ไขไฟล์นี้ในส่วนถัดไป
กำหนดตรรกะแบบสนทนาสำหรับฉาก Fortune
ใน Codelab นี้ คุณกำหนดค่าฉาก Fortune
ให้ถามผู้ใช้ว่า "คุณจะเลือกอะไรช่วยในการทำภารกิจ มังกร นักแปล หรือเข็มทิศ" คุณสามารถใช้ความสามารถที่เรียกว่าการกรอกช่องเพื่อรวบรวมข้อมูลที่จำเป็นจากผู้ใช้ก่อนดำเนินการต่อ
การดำเนินการของคุณทำนายดวงชะตาสำหรับตัวช่วย 3 อย่าง ได้แก่ มังกร นักแปล และเข็มทิศ หากต้องการกำหนดค่าการดำเนินการเพื่อระบุ 3 ตัวเลือกนี้ในอินพุตของผู้ใช้ คุณต้องสร้างประเภทใหม่
คุณสามารถใช้ประเภทภายในระยะการเติมช่องโฆษณาของฉากเพื่อกำหนดข้อมูลที่ต้องการจากผู้ใช้ เมื่อเครื่องมือ NLU ตรวจพบการจับคู่ช่องในอินพุตของผู้ใช้ ระบบจะแยกช่องเป็นพารามิเตอร์ที่พิมพ์ เพื่อให้คุณใช้ตรรกะกับช่องในฉากได้
สร้างประเภท available_options
ในส่วนนี้ คุณจะได้สร้างประเภทใหม่ชื่อ available_options
ซึ่งระบุ 3 ตัวเลือกที่ผู้ใช้เลือกได้ (มังกร นักแปล และเข็มทิศ) เมื่อได้รับข้อความแจ้ง นอกจากนี้คุณยังต้องกำหนดคำพ้องความหมาย 2-3 คำสำหรับตัวเลือกเหล่านี้เผื่อไว้ในกรณีที่มีผู้ใช้พูดคำที่คล้ายกัน ในส่วนต่อไป คุณจะต้องเพิ่มประเภท available_options
ลงในช่องเพื่อระบุว่าคุณต้องการรับตัวเลือกของผู้ใช้
หากต้องการสร้างประเภท available_options
ให้ทำตามขั้นตอนต่อไปนี้
- สร้างไดเรกทอรีใหม่ชื่อ
types
:
mkdir custom/types
- สร้างไฟล์ใหม่ชื่อ
available_options.yaml
ในไดเรกทอรีtypes
:
touch custom/types/available_options.yaml
- เปิด
custom/types/available_options.yaml
ในโปรแกรมแก้ไขข้อความ
ประเภทจะได้รับการกำหนดค่าเป็นคู่คีย์-ค่าของข้อมูล โดยที่คีย์คือชื่อของประเภท และค่าเป็นคำพ้องความหมายของคีย์นั้น เมื่อคุณกำหนดคีย์ ระบบจะเพิ่มคีย์เป็นค่าโดยอัตโนมัติ เมื่อใช้ Actions SDK คุณจะแสดงคีย์เป็น entities
และใช้ค่าเป็น synonyms
หากต้องการเพิ่มตัวเลือก 3 รายการที่ผู้ใช้เลือกได้ ให้ทำตามขั้นตอนต่อไปนี้
- เพิ่ม
entities
และsynonyms
ต่อไปนี้ในไฟล์available_options.yaml
available_options.yaml
synonym: entities: dragon: synonyms: - dragon - hydra - lizard translator: synonyms: - translator - communicator - machine - decoder - translate compass: synonyms: - compass - direction - guide - navigator matchType: EXACT_MATCH
- บันทึกไฟล์
การดำเนินการของคุณเข้าใจว่า available_options
เป็นมังกร นักแปล และเข็มทิศ นอกจากนี้ยังจดจำคำพ้องความหมายที่ตรงกันอีก 2-3 รายการได้ด้วย
กำหนดค่าการเติมช่องโฆษณา
ถัดไป คุณต้องกำหนดค่าการเติมช่องโฆษณาในฉาก Fortune
หากต้องการกำหนดค่าตรรกะการเติมช่องโฆษณา ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
slots
ต่อไปนี้ลงในไฟล์Fortune.yaml
Fortune.yaml
slots: - commitBehavior: writeSessionParam: chosenOptions name: chosenOptions promptSettings: initialPrompt: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: What do you choose to help you on your quest, a dragon, a translator, or a compass? suggestions: - title: Dragon - title: Translator - title: Compass required: true type: name: available_options
- บันทึกไฟล์
ตอนนี้คุณเพิ่มประเภท available_options
ลงในช่องแล้ว ซึ่งจะแจ้งให้การดำเนินการของคุณทราบถึงข้อมูลที่ต้องรวบรวมจากผู้ใช้ (ตัวเลือกความช่วยเหลือ) ก่อนดำเนินการต่อ คุณยังกำหนดค่าพรอมต์ภายในช่องโฆษณา ซึ่งจะเพิ่มลงในคิวพรอมต์เมื่อผู้ใช้ไปถึงขั้นตอนการเติมช่องโฆษณาในฉาก
เมื่อคุณตั้งชื่อช่องโฆษณา chosenOptions
ระบบจะอัปเดตช่อง writeSessionsParam
ด้วยชื่อเดียวกัน ($session.params.chosenOptions
) คุณเข้าถึงพารามิเตอร์นี้ได้โดยใช้ชื่อดังกล่าวในข้อความแจ้งและใน Fulfillment ผ่านไลบรารีของไคลเอ็นต์
เพิ่มเงื่อนไข
เมื่อเพิ่มช่องที่ต้องใช้ตัวเลือกความช่วยเหลือของผู้ใช้แล้ว คุณสามารถเพิ่มเงื่อนไขเพื่อตรวจสอบว่าได้รับข้อมูลของช่องแล้วก่อนที่ผู้ใช้จะสนทนาต่อได้
ในส่วนนี้ คุณต้องเพิ่มเงื่อนไข scene.slots.status == "FINAL"
ซึ่งจะตรวจสอบว่าการกรอกช่องเสร็จสมบูรณ์ เมื่อเติมช่องโฆษณาทั้งหมดแล้ว เงื่อนไขจะเพิ่มพรอมต์ (You picked $session.params.chosenOptions.
) ลงในคิวพรอมต์
หากต้องการกำหนดค่าเงื่อนไข scene.slots.status == "FINAL"
ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
conditionalEvents
ที่ด้านบนของไฟล์Fortune.yaml
ดังนี้
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: You picked $session.params.chosenOptions.
- บันทึกไฟล์
ทดสอบการดำเนินการในเครื่องมือจำลอง
ถึงตอนนี้ คุณได้กำหนดตัวเลือกที่ผู้ใช้ควรเลือกเพื่อเติมช่องโฆษณาแล้ว หลังจากได้รับข้อมูลนี้จากผู้ใช้แล้ว การดำเนินการของคุณควรมีข้อความแจ้งที่อ้างอิงตัวเลือกเฉพาะที่ผู้ใช้ได้เลือกไว้
หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- คลิกหรือพิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์
Yes
ในช่อง Input แล้วกด Enter หรือจะคลิกชิปคำแนะนำใช่ก็ได้
- คลิก พิมพ์ หรือพูดว่า
dragon
คุณควรได้รับข้อความที่ระบุว่า "คุณเลือกมังกร"
ในส่วนถัดไป ให้คุณปรับแต่งข้อความแจ้งสำหรับการช่วยเหลือแต่ละอย่างที่ผู้ใช้สามารถเลือกได้
ปรับแต่งพรอมต์โดยใช้เงื่อนไข
ในส่วนนี้ คุณจะเพิ่มเงื่อนไขสำหรับแต่ละตัวเลือกที่ผู้ใช้สามารถเลือก และเพิ่มข้อความแจ้งที่กำหนดเองสำหรับแต่ละเงื่อนไขได้
ปรับแต่งดวงชะตาในdragon
หากต้องการอัปเดตเงื่อนไขและปรับแต่งข้อความแจ้งเมื่อผู้ใช้เลือก "มังกร" ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - แทนที่ข้อมูล
conditionalEvents
ด้วยข้อมูลโค้ดต่อไปนี้ในไฟล์Fortune.yaml
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon.
- บันทึกไฟล์
ตอนนี้เมื่อผู้ใช้พูดว่า "มังกร" หรือคำที่ฟังคล้ายๆ กัน การดำเนินการของคุณจะมีโชคลาภขึ้นอยู่กับการเลือกนั้น ถัดไป คุณจะต้องเพิ่มตัวเลือก 2 รายการที่เหลือ
ปรับแต่งคำทำนายtranslator
และcompass
หากต้องการเพิ่มเงื่อนไขและปรับแต่งข้อความแจ้งเมื่อผู้ใช้พูดว่า "นักแปล" หรือ "เข็มทิศ" ให้ทำตามขั้นตอนต่อไปนี้
- ในไฟล์
custom/scenes/Fortune.yaml
ให้เพิ่มเงื่อนไขอีก 2 รายการภายใต้เงื่อนไขdragon
ดังนี้
Fortune.yaml
- condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success.
- บันทึกไฟล์
ทดสอบการดำเนินการในเครื่องมือจำลอง
ในขั้นนี้ การดำเนินการของคุณควรที่จะระบุคำทำนายที่กำหนดเองสำหรับผู้ใช้ตามตัวเลือกที่ผู้ใช้เลือก
หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- พิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
- คลิก พิมพ์ หรือพูดว่า
Translator
คุณจะได้รับดวงชะตาที่เหมาะสมสำหรับ "นักแปล" ตัวเลือก
3. เพิ่ม Game Loop
ในส่วนนี้ คุณจะกำหนดค่า Action เพื่อให้ผู้ใช้เลือกตัวเลือกอื่นและได้ยินผลรางวัลที่แตกต่างออกไปหลังจากทำการเลือก การเปลี่ยนแปลงนี้คล้ายกับข้อความ "อยากเล่นอีกไหม" ในช่วงท้ายเกม หากต้องการสร้างลูปนี้ คุณสามารถใช้ Intent yes
และ no
ที่สร้างขึ้นก่อนหน้านี้ซ้ำ แล้วเพิ่มลงในฉากใหม่ที่ชื่อว่า Again
สร้างฉาก Again
รายการ
ในส่วนนี้ คุณจะได้สร้างฉาก Again
ใหม่และเพิ่มพรอมต์ที่ถามผู้ใช้ว่าต้องการเลือกตัวเลือกอื่นหรือไม่
หากต้องการสร้างและกำหนดค่าฉาก Again
ให้ทำตามขั้นตอนต่อไปนี้
- สร้างไฟล์ใหม่ชื่อ
Again.yaml
ในไดเรกทอรีscenes
:
touch custom/scenes/Again.yaml
- เปิด
custom/scenes/Again.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
onEnter
ต่อไปนี้ในAgain.yaml
:
Again.yaml
onEnter: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: That is what I see for you. Would you like to choose a different option and explore another future? suggestions: - title: "Yes" - title: "No"
- บันทึกไฟล์
เพิ่มการเปลี่ยนจาก Fortune
เป็นฉาก Again
หลังจากที่ผู้ใช้ได้รับโชคชะตาแล้ว การสนทนาจะต้องเปลี่ยนไปเป็นฉาก Again
ใหม่
หากต้องการเพิ่มการเปลี่ยนจากฉาก Fortune
ไปยังฉาก Again
ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่ม
transitionToScene: Again
ลงในแต่ละเงื่อนไขดังที่แสดงในข้อมูลโค้ดต่อไปนี้
Fortune.yaml
conditionalEvents: - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The people of Gryffinberg will be awestruck by the beauty and power of the ancient dragon. Much to your dismay, the townspeople fall into dispute over who will receive the honor of riding the dragon first. You return home from your quest without everlasting glory or a dragon. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "translator" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: With the help of the translator, the rival factions in Gryffinberg are finally able to communicate with each other and resolve their disputes. You will complete your quest to restore peace in the town. The translator will be used on many other journeys across the earth. After its work is done, it retires honorably to a premier location in the Gryffinberg History Museum. transitionToScene: Again - condition: scene.slots.status == "FINAL" && session.params.chosenOptions == "compass" handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: The compass will help you find the mystical and ancient Library of Gryffinberg. Among its infinite stacks of dusty books, you find one entitled "Wisdom of the Ages". By the time you've read the 50,000-page tome, the townspeople have forgotten their problems. You will write a second edition of "Wisdom of the Ages", but have limited commercial success. transitionToScene: Again
- บันทึกไฟล์
ทดสอบการดำเนินการในเครื่องมือจำลอง
ในขั้นตอนนี้ การดำเนินการของคุณควรระบุข้อความแจ้งต่อไปนี้แก่ผู้ใช้หลังจากได้รับโชคชะตาว่า "นี่คือสิ่งที่ฉันเห็นสำหรับคุณ คุณต้องการเลือกตัวเลือกอื่นและสำรวจอนาคตอื่นด้วยไหม"
หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- พิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์
Yes
ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่ - คลิก พิมพ์ หรือพูดว่า
dragon
คุณจะได้รับคำทำนายสำหรับตัวเลือกมังกรและพรอมต์ Again
เพิ่ม Intent และเปลี่ยนไปใช้โหมด Again
ในส่วนนี้ คุณจะเพิ่ม Intent ของ yes
และ no
ลงในฉาก Again
เพื่อให้การดำเนินการของคุณเข้าใจว่าผู้ใช้ต้องการเลือกตัวเลือกใหม่หรือไม่ คุณเพิ่มการเปลี่ยนที่เหมาะสมสำหรับ Intent yes
และ no
ด้วย Intent yes
จะเปลี่ยนเป็นฉาก Fortune
ขณะที่ Intent no
จะเปลี่ยนเป็นโหมดของระบบ End conversation
หากต้องการเพิ่ม Intent และทรานซิชันลงในฉาก Again
ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Again.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
intentEvents
ที่ด้านบนของไฟล์Again.yaml
ให้สูงกว่าOnEnter
Again.yaml
intentEvents: - intent: "yes" transitionToScene: Fortune - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell. intent: "no" transitionToScene: actions.scene.END_CONVERSATION
- บันทึกไฟล์
ทดสอบการดำเนินการในเครื่องมือจำลอง
การดำเนินการของคุณควรเข้าใจว่าผู้ใช้ต้องการเลือกตัวเลือกใหม่หรือสิ้นสุดการสนทนา
หากต้องการทดสอบ Intent yes
ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- พิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์
Yes
ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่ - คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
- พิมพ์
Yes
ในช่องป้อนข้อมูลแล้วกด Enter
คุณควรได้รับข้อความแจ้ง "คุณเลือกอะไรเพื่อช่วยเรื่องภารกิจ มังกร นักแปล หรือเข็มทิศ"
หากต้องการทดสอบ Intent no
ให้ทำตามขั้นตอนต่อไปนี้
- คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
- พิมพ์
No
ในช่องป้อนข้อมูลแล้วกด Enter
คุณควรได้รับข้อความแจ้งเกี่ยวกับ End conversation
ว่า "เราพอใจกับสิ่งที่คุณเลือกแล้ว ขอให้โชคดีกับภารกิจของคุณ ลาก่อน"
4. เพิ่มเส้นทางสนับสนุน
ตอนนี้คุณได้สร้างเส้นทางหลักที่ผู้ใช้ส่วนใหญ่ใช้ในการดำเนินการของคุณแล้ว แต่ผู้ใช้สามารถตอบสนองต่อข้อความแจ้งจากฉาก Fortune
ว่า "คุณจะเลือกอะไรเพื่อช่วยคุณในภารกิจ มังกร นักแปล หรือเข็มทิศ" พร้อมตัวเลือกที่ไม่ใช่หนึ่งในตัวเลือกที่มีให้
ในส่วนนี้ คุณจะกำหนดค่าการดำเนินการให้เข้าใจเมื่อผู้ใช้พูดว่า "magic" "money" "horse" หรือ "phone" และแจ้งให้ผู้ใช้เลือกจากตัวเลือกเดิมจาก 1 ใน 3 ตัวเลือกแรก ในการกำหนดค่าตรรกะนี้ คุณต้องสร้าง type
ใหม่ที่มีตัวเลือกอื่นๆ เหล่านี้และ other_option
ตามความตั้งใจใหม่ ซึ่งจะจับคู่กันเมื่อผู้ใช้พูดตัวเลือกใดตัวเลือกหนึ่ง นอกจากนี้ คุณยังต้องใส่คำอธิบายประกอบวลีการฝึกภายใน Intent other_option
เพื่อระบุและดึงพารามิเตอร์intent
เมื่อเครื่องมือประมวลผลภาษาธรรมชาติของ Assistant ตรวจพบการจับคู่พารามิเตอร์ในอินพุตของผู้ใช้ ระบบจะแยกค่าเป็นพารามิเตอร์ที่พิมพ์ เพื่อให้คุณใช้ตรรกะในฉากหนึ่งๆ ได้ ใน Codelab นี้ คุณจะกำหนดค่าการดำเนินการให้ดึงข้อมูลเครื่องมือที่ผู้ใช้เลือกและอ้างถึงตัวเลือกดังกล่าวในข้อความแจ้ง
สร้างประเภท unavailable_options
ตอนนี้คุณสร้างประเภท unavailable_options
ที่มีตัวเลือกต่างๆ มากมายได้แล้วเพื่อให้การดำเนินการระบุข้อมูลนั้นในอินพุตของผู้ใช้ได้
หากต้องการสร้างประเภท unavailable_options
ให้ทำตามขั้นตอนต่อไปนี้
- สร้างไฟล์ใหม่ชื่อ
unavailable_options.yaml
ในไดเรกทอรีtypes
:
touch custom/types/unavailable_options.yaml
- เปิด
custom/types/unavailable_options.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
synonyms
ต่อไปนี้ลงในไฟล์unavailable_options.yaml
unavailable_options.yaml
synonym: entities: money: synonyms: - money - cash - gold horse: synonyms: - horse - stallion - steed magic: synonyms: - magic - enchanted - spells phone: synonyms: - phone - cell - apps matchType: EXACT_MATCH
- บันทึกไฟล์
สร้าง Intent other_option
ถัดไป ให้สร้าง Intent ชื่อ other_option
และเพิ่มวลีการฝึกที่มีตัวเลือกในประเภท unavailable_options
ระบบจะจับคู่ความตั้งใจนี้เมื่อผู้ใช้เลือกตัวเลือกที่อยู่ในประเภท unavailable_options
หากต้องการสร้างและกำหนดค่า Intent other_option
ให้ทำตามขั้นตอนต่อไปนี้
- สร้างไฟล์ใหม่ชื่อ
other_option.yaml
ในไดเรกทอรีintents
:
touch custom/intents/other_option.yaml
- เปิด
custom/intents/other_option.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
parameters
ต่อไปนี้และข้อมูลtrainingPhrases
ลงในไฟล์other_option.yaml
other_option.yaml
parameters: - name: chosenUnavailableOption type: name: unavailable_options trainingPhrases: - I want to use ($chosenUnavailableOption 'spells' auto=true) - I really really want to use a ($chosenUnavailableOption 'phone' auto=true) - ($chosenUnavailableOption 'magic' auto=true)! - ($chosenUnavailableOption 'cash' auto=true) - I want to ride a ($chosenUnavailableOption 'horse' auto=true)
ในส่วนนี้ คุณจะต้องใส่คำอธิบายประกอบให้กับวลีการฝึกด้วยตนเองด้วยตัวเลือกที่ไม่พร้อมใช้งานซึ่งคุณระบุไว้ในส่วนก่อนหน้า พารามิเตอร์ Intent chosenUnavailableOption
ช่วยให้คุณดึงชื่อของตัวเลือกและใช้ตัวเลือกนั้นในพรอมต์ได้ ซึ่งจะทำได้ในส่วนต่อไปนี้
- บันทึกไฟล์
เพิ่ม Intent other_option
ใน Fortune
ฉาก
ตอนนี้คุณมี Intent other_option
ที่จัดการผู้ใช้ได้ซึ่งระบุตัวเลือกที่ไม่ใช่หนึ่งในตัวเลือกเดิม ในส่วนนี้ คุณเพิ่ม Intent other_option
ลงในฉาก Fortune
คุณใช้พารามิเตอร์ Intent เพื่อปรับแต่งข้อความแจ้งตามข้อมูลจากผู้ใช้ได้
หากต้องการเพิ่ม Intent other_option
ในโหมด Fortune
ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - เพิ่มข้อมูล
intentEvents
ต่อไปนี้ระหว่างข้อมูลconditionalEvents
กับslots
Fortune.yaml
intentEvents: - handler: staticPrompt: candidates: - promptResponse: firstSimple: variants: - speech: I have seen the future and a $intent.params.chosenUnavailableOption.original will not aid you on your journey. intent: other_option
- บันทึกไฟล์
นิพจน์ $intent.params.chosenUnavailableOption
จะหมายถึงออบเจ็กต์พารามิเตอร์ Intent และ $intent.params.chosenUnavailableOption.original
หมายถึงค่าของออบเจ็กต์นั้น พร็อพเพอร์ตี้ original
คืออินพุตดิบที่ผู้ใช้ระบุ
เมื่อผู้ใช้พูดตัวเลือกที่ระบุไว้ในประเภท unavailable_options
ระหว่างโหมด Fortune
ระบบจะจับคู่ Intent ของ other_option
และเพิ่มพรอมต์ลงในคิวพรอมต์ เนื่องจากไม่ได้ระบุการเปลี่ยน ลูปการดำเนินการของฉากจะดำเนินต่อไปด้วยการประเมินขั้นตอนเงื่อนไขอีกครั้ง จากนั้นสล็อต chosenOptions
จะเพิ่มพรอมต์ไปยังคิวพรอมต์ และระบบจะส่งคิวพรอมต์ไปยังผู้ใช้
ทดสอบการดำเนินการในเครื่องมือจำลอง
การดำเนินการของคุณควรตอบสนองอย่างเหมาะสมเมื่อผู้ใช้เลือกตัวเลือกใดตัวเลือกหนึ่งที่ระบุไว้ในประเภท unavailable_options
และระบุตัวช่วยที่ผู้ใช้เลือก จากนั้น การดำเนินการของคุณควรแสดงข้อความแจ้งอีกครั้งให้ผู้ใช้เลือกตัวเลือกใดตัวเลือกหนึ่งจากเดิม (มังกร นักแปล หรือเข็มทิศ)
หากต้องการทดสอบการดำเนินการในเครื่องมือจำลอง ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- พิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์
Yes
ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่ - พิมพ์
magic
ในช่อง Input แล้วกด Enter
คุณอาจพบว่าข้อความแจ้งไม่ถูกต้องเมื่อผู้ใช้เลือก "magic" เนื่องจาก "a" วางไว้ก่อนหน้า คุณแก้ไขปัญหานี้ในส่วนต่อไปนี้
เพิ่มเครื่องจัดการ unavailable_options
ในการวาง "a" ก่อนตัวเลือกที่เหมาะสมจากประเภท unavailable_options
คุณสามารถกำหนดค่าเครื่องจัดการเหตุการณ์ในตรรกะการดำเนินการตามคำสั่งซื้อเพื่อตรวจสอบว่าตัวเลือกที่ผู้ใช้เลือกต้องมี "a" หรือไม่ ข้างหน้า ก่อนอื่น คุณต้องกำหนดค่าการดำเนินการให้เรียกใช้เครื่องจัดการจากฉาก Fortune
หากต้องการเพิ่มเครื่องจัดการ unavailable_options
ในโหมด Fortune
ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
custom/scenes/Fortune.yaml
ในโปรแกรมแก้ไขข้อความ - อัปเดตไฟล์
Fortune.yaml
ด้วยข้อมูลintentEvents
ต่อไปนี้
Fortune.yaml
intentEvents: - handler: webhookHandler: unavailable_options intent: other_option
- บันทึกไฟล์
อัปเดตและทำให้ Fulfillment ใช้งานได้
เมื่อกำหนดค่าการดำเนินการให้เรียกใช้เครื่องจัดการเหตุการณ์ unavailable_options
แล้ว คุณจะอัปเดตตัวแฮนเดิลใน Fulfillment และติดตั้งใช้งานได้
หากต้องการอัปเดตการดำเนินการตามคำสั่งซื้อ ให้ทำตามขั้นตอนต่อไปนี้
- เปิด
webhooks/ActionsOnGoogleFulfillment/index.js
ในโปรแกรมแก้ไขข้อความ - เพิ่มโค้ดต่อไปนี้ลงใน
index.js
ภายใต้เครื่องจัดการgreeting
:
index.js
app.handle('unavailable_options', conv => {
const option = conv.intent.params.chosenUnavailableOption.original;
const optionKey = conv.intent.params.chosenUnavailableOption.resolved;
let message = 'I have seen the future and ';
if(optionsNeedA.has(optionKey)){
message = message + 'a ';
}
message = message + `${option} will not aid you on your journey. `;
conv.add(message);
});
- เพิ่มโค้ดต่อไปนี้ในส่วน
const app = conversation({debug:true});
index.js
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- บันทึกไฟล์
ทำความเข้าใจโค้ด
ตัวแฮนเดิล unavailable_options
จะดำเนินการต่อไปนี้
- รับข้อมูล
option
จากออบเจ็กต์conv
และกำหนดoption
ให้กับพร็อพเพอร์ตี้original
ซึ่งเป็นอินพุตดิบจากผู้ใช้ - กำหนด
optionKey
ให้กับพร็อพเพอร์ตี้resolved
ซึ่งเป็นคีย์สำหรับประเภทunavailable_options
- ตรวจสอบว่า
optionKey
เป็นหนึ่งในตัวเลือกที่ต้องใช้ "a" หรือไม่ หากมี จะสร้างข้อความโดยเพิ่ม "a" - เพิ่มข้อความผ่าน
conv.add(message)
อัปเดตตัวจัดการ
หากต้องการอนุญาตให้การดำเนินการใช้ unavailable_options
ให้เพิ่มเครื่องจัดการ unavailable_options
ลงใน webhooks/ActionsOnGoogleFulfillment.yaml
- เพิ่มชื่อตัวแฮนเดิล
unavailable_options
ไปยังActionsOnGoogleFulfillment.yaml
:
ActionsOnGoogleFulfillment.yaml
handlers: - name: greeting - name: unavailable_options inlineCloudFunction: executeFunction: ActionsOnGoogleFulfillment
- บันทึกไฟล์
ทดสอบการดำเนินการในเครื่องมือจำลอง
การดำเนินการของคุณควรปรับข้อความแจ้งตามการเลือกของผู้ใช้จากประเภท unavailable_options
ว่าต้องใช้ "a" หรือไม่ อยู่ก่อนแล้ว
หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้
gactions deploy preview
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. You can now test your changes in Simulator with this URL: http://console.actions.google.com/project/{project-id}/simulator?disableAutoPreview
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- คลิกหรือพิมพ์
Talk to my test app
ในช่อง Input แล้วกด Enter - พิมพ์
Yes
ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่ - พิมพ์
magic
ในช่อง Input แล้วกด Enter จากนั้นพิมพ์horse
ในช่อง Input แล้วกด Enter
การดำเนินการควรเพิ่มสัญลักษณ์ "a" บทความก่อนหน้า "ม้า" ขณะสร้างข้อความแจ้งโดยไม่มี "a" บทความเกี่ยวกับ "เวทมนตร์" ตัวเลือก
5. แสดงภาพการดำเนินการในคอนโซล Actions
Actions SDK สามารถทำงานร่วมกับ IDE บนเว็บที่เรียกว่า Actions Builder ที่ผสานรวมไว้ในคอนโซล Actions คุณจะพุชระบบไฟล์ในเครื่องไปยังฉบับร่างของการดำเนินการในคอนโซลได้ด้วยคำสั่ง gactions push
คอนโซล Actions แสดงภาพการกำหนดค่าของการดำเนินการของคุณ การเห็นการดำเนินการที่แมปแบบเห็นภาพอาจมีประโยชน์ในระหว่างการพัฒนา และไม่ส่งผลต่อเวอร์ชันของการดำเนินการที่มีไว้เพื่อทดสอบ
หากต้องการพุชโปรเจ็กต์ Actions และดูโปรเจ็กต์ในคอนโซล Actions ให้ทำตามขั้นตอนต่อไปนี้
- จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อพุชโปรเจ็กต์ไปยังคอนโซล Actions
gactions push
คุณควรได้รับเอาต์พุตที่มีลักษณะดังนี้
✔ Done. Files were pushed to Actions Console, and you can now view your project with this URL: https://console.actions.google.com/project/{project-id}/overview. If you want to test your changes, run "gactions deploy preview", or navigate to the Test section in the Console.
- คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
- ในคอนโซลการดําเนินการ ให้คลิกพัฒนาในแถบนำทางด้านบน
- คลิกลูกศรแบบเลื่อนลงถัดจากฉาก แล้วคลิกเริ่ม คุณควรจะเห็นภาพแสดงฉาก
Start
ของการดำเนินการตามที่แสดงในภาพหน้าจอต่อไปนี้
ล้างข้อมูลโปรเจ็กต์ [แนะนำ]
ขอแนะนำให้นำโปรเจ็กต์ที่คุณไม่ได้ตั้งใจจะใช้ออกเพื่อหลีกเลี่ยงค่าใช้จ่ายที่อาจเกิดขึ้น ทำตามขั้นตอนต่อไปนี้เพื่อลบโปรเจ็กต์ที่คุณสร้างใน Codelab นี้
- หากต้องการลบโปรเจ็กต์และทรัพยากรที่อยู่ในระบบคลาวด์ ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนการปิด (ลบ) โปรเจ็กต์
- ไม่บังคับ: หากต้องการนำโปรเจ็กต์ออกจากคอนโซล Actions ทันที ให้ทำตามขั้นตอนที่แสดงในส่วนลบโปรเจ็กต์ หากไม่ทำขั้นตอนนี้ ระบบจะนำโปรเจ็กต์ของคุณออกโดยอัตโนมัติหลังจากผ่านไปประมาณ 30 วัน
6. ยินดีด้วย
ตอนนี้คุณก็ทราบทักษะระดับกลางที่จำเป็นต่อการสร้าง Actions สำหรับ Google Assistant ด้วย Actions SDK แล้ว
สิ่งที่คุณได้ครอบคลุม
- วิธีพัฒนาการดำเนินการแบบการสนทนาโดยใช้ไลบรารี Fulfillment ของ Node.js
- วิธีใช้สล็อตเพื่อรวบรวมข้อมูลจากผู้ใช้
- วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะลงในฉาก
- วิธีเพิ่ม Game Loop
- วิธีเพิ่มเส้นทางสนับสนุน
ดูข้อมูลเพิ่มเติม
คุณดูแหล่งข้อมูลเหล่านี้เพื่อศึกษาการสร้าง Actions สำหรับ Google Assistant ได้
- เอกสารสำหรับการพัฒนา Actions for Google Assistant
- หน้า Actions on Google GitHub สำหรับโค้ดและไลบรารีตัวอย่าง
- ชุมชน Reddit อย่างเป็นทางการสำหรับนักพัฒนาซอฟต์แวร์ที่ทำงานร่วมกับ Google Assistant
- หลักเกณฑ์การออกแบบการสนทนาสำหรับแนวทางปฏิบัติแนะนำและหลักเกณฑ์เกี่ยวกับการดำเนินการแบบการสนทนา
ติดตามเราบน Twitter @ActionsOnGoogle เพื่อติดตามประกาศล่าสุดของเรา และทวีตข้อความไปที่ #AoGDevs เพื่อแชร์สิ่งที่คุณสร้าง
แบบสำรวจความคิดเห็น
ก่อนไป โปรดตอบแบบสำรวจสั้นๆ เกี่ยวกับประสบการณ์ที่คุณได้รับ