สร้าง Actions สำหรับ Google Assistant โดยใช้ Actions SDK (ระดับ 2)

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 คุยกับโชคชะตาและโชคชะตา" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมาจะมีลักษณะเหมือนการโต้ตอบต่อไปนี้

dd6f5c61296b8b50.png

eba043f546aa8c51.png

สิ่งที่คุณจะได้เรียนรู้

  • วิธีใช้ช่องเพื่อรวบรวมข้อมูลจากผู้ใช้
  • วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะลงในฉาก
  • วิธีเพิ่ม 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 ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิดโปรเจ็กต์ Actions จาก Codelab ระดับ 1 ในโปรแกรมแก้ไขข้อความ
  2. เปิดไฟล์ custom/scenes/Start.yaml
  3. อัปเดต handler สำหรับ Intent yes เพื่อให้โค้ดตรงกับข้อมูลโค้ดด้านล่าง

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
  1. บันทึกไฟล์

หากต้องการสร้างฉากใหม่ชื่อ Fortune ให้ทำตามขั้นตอนต่อไปนี้

  1. ไปที่โปรเจ็กต์การดำเนินการ Codelab ระดับ 1 ในเทอร์มินัล
  2. สร้างไฟล์ใหม่ชื่อ 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 ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไดเรกทอรีใหม่ชื่อ types:
mkdir custom/types
  1. สร้างไฟล์ใหม่ชื่อ available_options.yaml ในไดเรกทอรี types:
touch custom/types/available_options.yaml
  1. เปิด custom/types/available_options.yaml ในโปรแกรมแก้ไขข้อความ

ประเภทจะได้รับการกำหนดค่าเป็นคู่คีย์-ค่าของข้อมูล โดยที่คีย์คือชื่อของประเภท และค่าเป็นคำพ้องความหมายของคีย์นั้น เมื่อคุณกำหนดคีย์ ระบบจะเพิ่มคีย์เป็นค่าโดยอัตโนมัติ เมื่อใช้ Actions SDK คุณจะแสดงคีย์เป็น entities และใช้ค่าเป็น synonyms

หากต้องการเพิ่มตัวเลือก 3 รายการที่ผู้ใช้เลือกได้ ให้ทำตามขั้นตอนต่อไปนี้

  1. เพิ่ม 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
  1. บันทึกไฟล์

การดำเนินการของคุณเข้าใจว่า available_options เป็นมังกร นักแปล และเข็มทิศ นอกจากนี้ยังจดจำคำพ้องความหมายที่ตรงกันอีก 2-3 รายการได้ด้วย

กำหนดค่าการเติมช่องโฆษณา

ถัดไป คุณต้องกำหนดค่าการเติมช่องโฆษณาในฉาก Fortune หากต้องการกำหนดค่าตรรกะการเติมช่องโฆษณา ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล 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
  1. บันทึกไฟล์

ตอนนี้คุณเพิ่มประเภท available_options ลงในช่องแล้ว ซึ่งจะแจ้งให้การดำเนินการของคุณทราบถึงข้อมูลที่ต้องรวบรวมจากผู้ใช้ (ตัวเลือกความช่วยเหลือ) ก่อนดำเนินการต่อ คุณยังกำหนดค่าพรอมต์ภายในช่องโฆษณา ซึ่งจะเพิ่มลงในคิวพรอมต์เมื่อผู้ใช้ไปถึงขั้นตอนการเติมช่องโฆษณาในฉาก

เมื่อคุณตั้งชื่อช่องโฆษณา chosenOptions ระบบจะอัปเดตช่อง writeSessionsParam ด้วยชื่อเดียวกัน ($session.params.chosenOptions) คุณเข้าถึงพารามิเตอร์นี้ได้โดยใช้ชื่อดังกล่าวในข้อความแจ้งและใน Fulfillment ผ่านไลบรารีของไคลเอ็นต์

เพิ่มเงื่อนไข

เมื่อเพิ่มช่องที่ต้องใช้ตัวเลือกความช่วยเหลือของผู้ใช้แล้ว คุณสามารถเพิ่มเงื่อนไขเพื่อตรวจสอบว่าได้รับข้อมูลของช่องแล้วก่อนที่ผู้ใช้จะสนทนาต่อได้

ในส่วนนี้ คุณต้องเพิ่มเงื่อนไข scene.slots.status == "FINAL" ซึ่งจะตรวจสอบว่าการกรอกช่องเสร็จสมบูรณ์ เมื่อเติมช่องโฆษณาทั้งหมดแล้ว เงื่อนไขจะเพิ่มพรอมต์ (You picked $session.params.chosenOptions.) ลงในคิวพรอมต์

หากต้องการกำหนดค่าเงื่อนไข scene.slots.status == "FINAL" ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล conditionalEvents ที่ด้านบนของไฟล์ Fortune.yaml ดังนี้

Fortune.yaml

conditionalEvents:
- condition: scene.slots.status == "FINAL"
  handler:
    staticPrompt:
      candidates:
      - promptResponse:
          firstSimple:
            variants:
            - speech: You picked $session.params.chosenOptions.
  1. บันทึกไฟล์

ทดสอบการดำเนินการในเครื่องมือจำลอง

ถึงตอนนี้ คุณได้กำหนดตัวเลือกที่ผู้ใช้ควรเลือกเพื่อเติมช่องโฆษณาแล้ว หลังจากได้รับข้อมูลนี้จากผู้ใช้แล้ว การดำเนินการของคุณควรมีข้อความแจ้งที่อ้างอิงตัวเลือกเฉพาะที่ผู้ใช้ได้เลือกไว้

หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. คลิกหรือพิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือจะคลิกชิปคำแนะนำใช่ก็ได้

a899d45c542668f6.png

  1. คลิก พิมพ์ หรือพูดว่า dragon คุณควรได้รับข้อความที่ระบุว่า "คุณเลือกมังกร"

ในส่วนถัดไป ให้คุณปรับแต่งข้อความแจ้งสำหรับการช่วยเหลือแต่ละอย่างที่ผู้ใช้สามารถเลือกได้

ปรับแต่งพรอมต์โดยใช้เงื่อนไข

ในส่วนนี้ คุณจะเพิ่มเงื่อนไขสำหรับแต่ละตัวเลือกที่ผู้ใช้สามารถเลือก และเพิ่มข้อความแจ้งที่กำหนดเองสำหรับแต่ละเงื่อนไขได้

ปรับแต่งดวงชะตาในdragon

หากต้องการอัปเดตเงื่อนไขและปรับแต่งข้อความแจ้งเมื่อผู้ใช้เลือก "มังกร" ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. แทนที่ข้อมูล 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.
  1. บันทึกไฟล์

ตอนนี้เมื่อผู้ใช้พูดว่า "มังกร" หรือคำที่ฟังคล้ายๆ กัน การดำเนินการของคุณจะมีโชคลาภขึ้นอยู่กับการเลือกนั้น ถัดไป คุณจะต้องเพิ่มตัวเลือก 2 รายการที่เหลือ

ปรับแต่งคำทำนายtranslatorและcompass

หากต้องการเพิ่มเงื่อนไขและปรับแต่งข้อความแจ้งเมื่อผู้ใช้พูดว่า "นักแปล" หรือ "เข็มทิศ" ให้ทำตามขั้นตอนต่อไปนี้

  1. ในไฟล์ 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.
  1. บันทึกไฟล์

ทดสอบการดำเนินการในเครื่องมือจำลอง

ในขั้นนี้ การดำเนินการของคุณควรที่จะระบุคำทำนายที่กำหนดเองสำหรับผู้ใช้ตามตัวเลือกที่ผู้ใช้เลือก

หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. พิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. คลิก พิมพ์ หรือพูดว่า Translator

29e17f950bd0dd71.png

คุณจะได้รับดวงชะตาที่เหมาะสมสำหรับ "นักแปล" ตัวเลือก

3. เพิ่ม Game Loop

ในส่วนนี้ คุณจะกำหนดค่า Action เพื่อให้ผู้ใช้เลือกตัวเลือกอื่นและได้ยินผลรางวัลที่แตกต่างออกไปหลังจากทำการเลือก การเปลี่ยนแปลงนี้คล้ายกับข้อความ "อยากเล่นอีกไหม" ในช่วงท้ายเกม หากต้องการสร้างลูปนี้ คุณสามารถใช้ Intent yes และ no ที่สร้างขึ้นก่อนหน้านี้ซ้ำ แล้วเพิ่มลงในฉากใหม่ที่ชื่อว่า Again

สร้างฉาก Again รายการ

ในส่วนนี้ คุณจะได้สร้างฉาก Again ใหม่และเพิ่มพรอมต์ที่ถามผู้ใช้ว่าต้องการเลือกตัวเลือกอื่นหรือไม่

หากต้องการสร้างและกำหนดค่าฉาก Again ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ใหม่ชื่อ Again.yaml ในไดเรกทอรี scenes:
touch custom/scenes/Again.yaml
  1. เปิด custom/scenes/Again.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล 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"
  1. บันทึกไฟล์

เพิ่มการเปลี่ยนจาก Fortune เป็นฉาก Again

หลังจากที่ผู้ใช้ได้รับโชคชะตาแล้ว การสนทนาจะต้องเปลี่ยนไปเป็นฉาก Again ใหม่

หากต้องการเพิ่มการเปลี่ยนจากฉาก Fortune ไปยังฉาก Again ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่ม 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
  1. บันทึกไฟล์

ทดสอบการดำเนินการในเครื่องมือจำลอง

ในขั้นตอนนี้ การดำเนินการของคุณควรระบุข้อความแจ้งต่อไปนี้แก่ผู้ใช้หลังจากได้รับโชคชะตาว่า "นี่คือสิ่งที่ฉันเห็นสำหรับคุณ คุณต้องการเลือกตัวเลือกอื่นและสำรวจอนาคตอื่นด้วยไหม"

หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. พิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. คลิก พิมพ์ หรือพูดว่า dragon

b299e9fed9aedb69.png

คุณจะได้รับคำทำนายสำหรับตัวเลือกมังกรและพรอมต์ Again

เพิ่ม Intent และเปลี่ยนไปใช้โหมด Again

ในส่วนนี้ คุณจะเพิ่ม Intent ของ yes และ no ลงในฉาก Again เพื่อให้การดำเนินการของคุณเข้าใจว่าผู้ใช้ต้องการเลือกตัวเลือกใหม่หรือไม่ คุณเพิ่มการเปลี่ยนที่เหมาะสมสำหรับ Intent yes และ no ด้วย Intent yes จะเปลี่ยนเป็นฉาก Fortune ขณะที่ Intent no จะเปลี่ยนเป็นโหมดของระบบ End conversation

หากต้องการเพิ่ม Intent และทรานซิชันลงในฉาก Again ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Again.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล 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
  1. บันทึกไฟล์

ทดสอบการดำเนินการในเครื่องมือจำลอง

การดำเนินการของคุณควรเข้าใจว่าผู้ใช้ต้องการเลือกตัวเลือกใหม่หรือสิ้นสุดการสนทนา

หากต้องการทดสอบ Intent yes ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. พิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
  5. พิมพ์ Yes ในช่องป้อนข้อมูลแล้วกด Enter

5d0690332efe2e29.png

คุณควรได้รับข้อความแจ้ง "คุณเลือกอะไรเพื่อช่วยเรื่องภารกิจ มังกร นักแปล หรือเข็มทิศ"

หากต้องการทดสอบ Intent no ให้ทำตามขั้นตอนต่อไปนี้

  1. คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
  2. พิมพ์ 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 ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ใหม่ชื่อ unavailable_options.yaml ในไดเรกทอรี types:
touch custom/types/unavailable_options.yaml
  1. เปิด custom/types/unavailable_options.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล 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
  1. บันทึกไฟล์

สร้าง Intent other_option

ถัดไป ให้สร้าง Intent ชื่อ other_option และเพิ่มวลีการฝึกที่มีตัวเลือกในประเภท unavailable_options ระบบจะจับคู่ความตั้งใจนี้เมื่อผู้ใช้เลือกตัวเลือกที่อยู่ในประเภท unavailable_options

หากต้องการสร้างและกำหนดค่า Intent other_option ให้ทำตามขั้นตอนต่อไปนี้

  1. สร้างไฟล์ใหม่ชื่อ other_option.yaml ในไดเรกทอรี intents:
touch custom/intents/other_option.yaml
  1. เปิด custom/intents/other_option.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล 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 ช่วยให้คุณดึงชื่อของตัวเลือกและใช้ตัวเลือกนั้นในพรอมต์ได้ ซึ่งจะทำได้ในส่วนต่อไปนี้

  1. บันทึกไฟล์

เพิ่ม Intent other_option ใน Fortune ฉาก

ตอนนี้คุณมี Intent other_option ที่จัดการผู้ใช้ได้ซึ่งระบุตัวเลือกที่ไม่ใช่หนึ่งในตัวเลือกเดิม ในส่วนนี้ คุณเพิ่ม Intent other_option ลงในฉาก Fortune คุณใช้พารามิเตอร์ Intent เพื่อปรับแต่งข้อความแจ้งตามข้อมูลจากผู้ใช้ได้

หากต้องการเพิ่ม Intent other_option ในโหมด Fortune ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มข้อมูล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
  1. บันทึกไฟล์

นิพจน์ $intent.params.chosenUnavailableOption จะหมายถึงออบเจ็กต์พารามิเตอร์ Intent และ $intent.params.chosenUnavailableOption.original หมายถึงค่าของออบเจ็กต์นั้น พร็อพเพอร์ตี้ original คืออินพุตดิบที่ผู้ใช้ระบุ

เมื่อผู้ใช้พูดตัวเลือกที่ระบุไว้ในประเภท unavailable_options ระหว่างโหมด Fortune ระบบจะจับคู่ Intent ของ other_option และเพิ่มพรอมต์ลงในคิวพรอมต์ เนื่องจากไม่ได้ระบุการเปลี่ยน ลูปการดำเนินการของฉากจะดำเนินต่อไปด้วยการประเมินขั้นตอนเงื่อนไขอีกครั้ง จากนั้นสล็อต chosenOptions จะเพิ่มพรอมต์ไปยังคิวพรอมต์ และระบบจะส่งคิวพรอมต์ไปยังผู้ใช้

ทดสอบการดำเนินการในเครื่องมือจำลอง

การดำเนินการของคุณควรตอบสนองอย่างเหมาะสมเมื่อผู้ใช้เลือกตัวเลือกใดตัวเลือกหนึ่งที่ระบุไว้ในประเภท unavailable_options และระบุตัวช่วยที่ผู้ใช้เลือก จากนั้น การดำเนินการของคุณควรแสดงข้อความแจ้งอีกครั้งให้ผู้ใช้เลือกตัวเลือกใดตัวเลือกหนึ่งจากเดิม (มังกร นักแปล หรือเข็มทิศ)

หากต้องการทดสอบการดำเนินการในเครื่องมือจำลอง ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. พิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. พิมพ์ magic ในช่อง Input แล้วกด Enter

3a42c33eca435f32.png

คุณอาจพบว่าข้อความแจ้งไม่ถูกต้องเมื่อผู้ใช้เลือก "magic" เนื่องจาก "a" วางไว้ก่อนหน้า คุณแก้ไขปัญหานี้ในส่วนต่อไปนี้

เพิ่มเครื่องจัดการ unavailable_options

ในการวาง "a" ก่อนตัวเลือกที่เหมาะสมจากประเภท unavailable_options คุณสามารถกำหนดค่าเครื่องจัดการเหตุการณ์ในตรรกะการดำเนินการตามคำสั่งซื้อเพื่อตรวจสอบว่าตัวเลือกที่ผู้ใช้เลือกต้องมี "a" หรือไม่ ข้างหน้า ก่อนอื่น คุณต้องกำหนดค่าการดำเนินการให้เรียกใช้เครื่องจัดการจากฉาก Fortune

หากต้องการเพิ่มเครื่องจัดการ unavailable_options ในโหมด Fortune ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด custom/scenes/Fortune.yaml ในโปรแกรมแก้ไขข้อความ
  2. อัปเดตไฟล์ Fortune.yaml ด้วยข้อมูล intentEvents ต่อไปนี้

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. บันทึกไฟล์

อัปเดตและทำให้ Fulfillment ใช้งานได้

เมื่อกำหนดค่าการดำเนินการให้เรียกใช้เครื่องจัดการเหตุการณ์ unavailable_options แล้ว คุณจะอัปเดตตัวแฮนเดิลใน Fulfillment และติดตั้งใช้งานได้

หากต้องการอัปเดตการดำเนินการตามคำสั่งซื้อ ให้ทำตามขั้นตอนต่อไปนี้

  1. เปิด webhooks/ActionsOnGoogleFulfillment/index.js ในโปรแกรมแก้ไขข้อความ
  2. เพิ่มโค้ดต่อไปนี้ลงใน 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);
});
  1. เพิ่มโค้ดต่อไปนี้ในส่วน const app = conversation({debug:true});

index.js

const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
  1. บันทึกไฟล์

ทำความเข้าใจโค้ด

ตัวแฮนเดิล unavailable_options จะดำเนินการต่อไปนี้

  • รับข้อมูล option จากออบเจ็กต์ conv และกำหนด option ให้กับพร็อพเพอร์ตี้ original ซึ่งเป็นอินพุตดิบจากผู้ใช้
  • กำหนด optionKey ให้กับพร็อพเพอร์ตี้ resolved ซึ่งเป็นคีย์สำหรับประเภท unavailable_options
  • ตรวจสอบว่า optionKey เป็นหนึ่งในตัวเลือกที่ต้องใช้ "a" หรือไม่ หากมี จะสร้างข้อความโดยเพิ่ม "a"
  • เพิ่มข้อความผ่าน conv.add(message)

อัปเดตตัวจัดการ

หากต้องการอนุญาตให้การดำเนินการใช้ unavailable_options ให้เพิ่มเครื่องจัดการ unavailable_options ลงใน webhooks/ActionsOnGoogleFulfillment.yaml

  1. เพิ่มชื่อตัวแฮนเดิล unavailable_options ไปยัง ActionsOnGoogleFulfillment.yaml:

ActionsOnGoogleFulfillment.yaml

handlers:
- name: greeting
- name: unavailable_options
inlineCloudFunction:
  executeFunction: ActionsOnGoogleFulfillment
  1. บันทึกไฟล์

ทดสอบการดำเนินการในเครื่องมือจำลอง

การดำเนินการของคุณควรปรับข้อความแจ้งตามการเลือกของผู้ใช้จากประเภท unavailable_options ว่าต้องใช้ "a" หรือไม่ อยู่ก่อนแล้ว

หากต้องการทดสอบการดำเนินการ ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้
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
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. คลิกหรือพิมพ์ Talk to my test app ในช่อง Input แล้วกด Enter
  3. พิมพ์ Yes ในช่อง Input แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. พิมพ์ magic ในช่อง Input แล้วกด Enter จากนั้นพิมพ์ horse ในช่อง Input แล้วกด Enter

54ee24c5c3c56e.png

การดำเนินการควรเพิ่มสัญลักษณ์ "a" บทความก่อนหน้า "ม้า" ขณะสร้างข้อความแจ้งโดยไม่มี "a" บทความเกี่ยวกับ "เวทมนตร์" ตัวเลือก

5. แสดงภาพการดำเนินการในคอนโซล Actions

Actions SDK สามารถทำงานร่วมกับ IDE บนเว็บที่เรียกว่า Actions Builder ที่ผสานรวมไว้ในคอนโซล Actions คุณจะพุชระบบไฟล์ในเครื่องไปยังฉบับร่างของการดำเนินการในคอนโซลได้ด้วยคำสั่ง gactions push คอนโซล Actions แสดงภาพการกำหนดค่าของการดำเนินการของคุณ การเห็นการดำเนินการที่แมปแบบเห็นภาพอาจมีประโยชน์ในระหว่างการพัฒนา และไม่ส่งผลต่อเวอร์ชันของการดำเนินการที่มีไว้เพื่อทดสอบ

หากต้องการพุชโปรเจ็กต์ Actions และดูโปรเจ็กต์ในคอนโซล Actions ให้ทำตามขั้นตอนต่อไปนี้

  1. จากนั้นเรียกใช้คำสั่งต่อไปนี้เพื่อพุชโปรเจ็กต์ไปยังคอนโซล 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.
  1. คัดลอก URL ที่ระบุและวางลงในเบราว์เซอร์
  2. ในคอนโซลการดําเนินการ ให้คลิกพัฒนาในแถบนำทางด้านบน
  3. คลิกลูกศรแบบเลื่อนลงถัดจากฉาก แล้วคลิกเริ่ม คุณควรจะเห็นภาพแสดงฉาก Start ของการดำเนินการตามที่แสดงในภาพหน้าจอต่อไปนี้

cae526c647f8d40f.png

ล้างข้อมูลโปรเจ็กต์ [แนะนำ]

ขอแนะนำให้นำโปรเจ็กต์ที่คุณไม่ได้ตั้งใจจะใช้ออกเพื่อหลีกเลี่ยงค่าใช้จ่ายที่อาจเกิดขึ้น ทำตามขั้นตอนต่อไปนี้เพื่อลบโปรเจ็กต์ที่คุณสร้างใน Codelab นี้

  1. หากต้องการลบโปรเจ็กต์และทรัพยากรที่อยู่ในระบบคลาวด์ ให้ทำตามขั้นตอนที่ระบุไว้ในส่วนการปิด (ลบ) โปรเจ็กต์
  1. ไม่บังคับ: หากต้องการนำโปรเจ็กต์ออกจากคอนโซล Actions ทันที ให้ทำตามขั้นตอนที่แสดงในส่วนลบโปรเจ็กต์ หากไม่ทำขั้นตอนนี้ ระบบจะนำโปรเจ็กต์ของคุณออกโดยอัตโนมัติหลังจากผ่านไปประมาณ 30 วัน

6. ยินดีด้วย

ตอนนี้คุณก็ทราบทักษะระดับกลางที่จำเป็นต่อการสร้าง Actions สำหรับ Google Assistant ด้วย Actions SDK แล้ว

สิ่งที่คุณได้ครอบคลุม

  • วิธีพัฒนาการดำเนินการแบบการสนทนาโดยใช้ไลบรารี Fulfillment ของ Node.js
  • วิธีใช้สล็อตเพื่อรวบรวมข้อมูลจากผู้ใช้
  • วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะลงในฉาก
  • วิธีเพิ่ม Game Loop
  • วิธีเพิ่มเส้นทางสนับสนุน

ดูข้อมูลเพิ่มเติม

คุณดูแหล่งข้อมูลเหล่านี้เพื่อศึกษาการสร้าง Actions สำหรับ Google Assistant ได้

ติดตามเราบน Twitter @ActionsOnGoogle เพื่อติดตามประกาศล่าสุดของเรา และทวีตข้อความไปที่ #AoGDevs เพื่อแชร์สิ่งที่คุณสร้าง

แบบสำรวจความคิดเห็น

ก่อนไป โปรดตอบแบบสำรวจสั้นๆ เกี่ยวกับประสบการณ์ที่คุณได้รับ