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

1. ภาพรวม

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

Codelab นี้ครอบคลุมแนวคิดระดับกลางสำหรับการพัฒนาด้วย Google Assistant และต่อยอดจาก Action ที่สร้างขึ้นใน Codelab สร้าง Actions สำหรับ Google Assistant โดยใช้ Actions SDK (ระดับ 1) เราขอแนะนำอย่างยิ่งให้คุณทำ Codelab ระดับ 1 ให้เสร็จก่อนที่จะเริ่มทำ Codelab นี้

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

สิ่งที่คุณจะสร้าง

ในโค้ดแล็บนี้ คุณจะได้สร้างแอ็กชันการสนทนาที่ซับซ้อนซึ่งมีฟังก์ชันต่อไปนี้

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

ก่อนเริ่มสร้าง คุณสามารถโต้ตอบกับการดำเนินการที่ใช้งานจริงในอุปกรณ์ที่พร้อมใช้งาน Google Assistant ได้โดยพูดว่า "Ok Google คุยกับ Fate and Fortune" เส้นทางเริ่มต้นผ่านการดำเนินการนี้สำหรับผู้ใช้ที่กลับมาจะมีลักษณะเป็นการโต้ตอบต่อไปนี้

dd6f5c61296b8b50.png

eba043f546aa8c51.png

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

  • วิธีใช้ช่องเพื่อรวบรวมข้อมูลจากผู้ใช้
  • วิธีใช้เงื่อนไขเพื่อเพิ่มตรรกะลงในฉาก
  • วิธีเพิ่ม Game Loop
  • วิธีเพิ่มเส้นทางที่สนับสนุน

สิ่งที่คุณต้องมี

ข้อกำหนดเบื้องต้นสำหรับ Codelab นี้มีดังนี้

  • IDE/โปรแกรมแก้ไขข้อความที่คุณเลือก
  • เทอร์มินัลเพื่อเรียกใช้คำสั่งเชลล์โดยติดตั้ง NodeJS, npm และ git
  • เว็บเบราว์เซอร์ เช่น Google Chrome
  • โปรเจ็กต์ Actions Codelab ระดับ 1 ที่เสร็จสมบูรณ์

เราขอแนะนำอย่างยิ่งให้มีความคุ้นเคยกับ JavaScript (ES6) เพื่อให้เข้าใจโค้ดการดำเนินการตามคำสั่งสำหรับ Codelab นี้ แม้ว่าจะไม่จำเป็นก็ตาม

ไม่บังคับ: รับโค้ดตัวอย่าง

คุณเลือกรับโค้ดโปรเจ็กต์ระดับ 1 ที่สมบูรณ์ได้จากที่เก็บ GitHub ของ Codelab ระดับ 1 ของ Actions Builder เพื่อให้คุณทำตาม Codelab นี้ได้ นอกจากนี้ คุณยังดูโค้ดโปรเจ็กต์ระดับ 2 ทั้งหมดได้ในที่เก็บ Github นี้

2. สร้างอินเทอร์เฟซแบบสนทนาต่อไป

ใน Codelab แรก คุณได้สร้าง Conversational Action อย่างง่ายที่มีฉากเดียว Start

ใน Codelab นี้ คุณจะได้ขยายการสนทนาของ Action ในส่วนต่อไปนี้ คุณจะกำหนดค่า Action ให้ทำสิ่งต่อไปนี้

  • เปลี่ยนไปใช้Fortuneฉากใหม่เมื่อผู้ใช้ต้องการฟังคำทำนาย
  • ถามผู้ใช้ว่าต้องการเลือกความช่วยเหลือใดสำหรับการเดินทาง
  • แสดงคำทำนายที่ปรับแต่งตามตัวเลือกของผู้ใช้

เปลี่ยนไปใช้และสร้างFortuneฉาก

ในส่วนนี้ คุณจะทำสิ่งต่อไปนี้

  • นำพรอมต์ที่มีอยู่ออกจากฉาก Start ซึ่งตอบกลับผู้ใช้และจบการสนทนา
  • กำหนดการเปลี่ยนจากฉาก Start ไปยังฉาก Fortune
  • สร้างFortuneฉาก

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

  1. เปิดโปรเจ็กต์ Actions จากโค้ดแล็บระดับ 1 ในโปรแกรมแก้ไขข้อความ
  2. เปิดไฟล์ custom/scenes/Start.yaml
  3. อัปเดต handler สำหรับเจตนา 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. ไปที่โปรเจ็กต์ Actions ของ Codelab ระดับ 1 ในเทอร์มินัล
  2. สร้างไฟล์ใหม่ชื่อ Fortune.yaml ในไดเรกทอรี scenes
touch custom/scenes/Fortune.yaml

คุณจะแก้ไขไฟล์นี้ได้ในส่วนถัดไป

กำหนดตรรกะการสนทนาสำหรับฉาก Fortune

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

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

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

สร้างประเภท available_options

ในส่วนนี้ คุณจะสร้างประเภทใหม่ที่ชื่อ available_options ซึ่งจะระบุตัวเลือก 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. บันทึกไฟล์

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

กำหนดค่าการป้อนข้อมูลในช่อง

จากนั้นคุณต้องกำหนดค่าการป้อนข้อมูลช่องในฉาก 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 ลงในช่องแล้ว ซึ่งจะบอก Action ว่าคุณต้องรวบรวมข้อมูลใดจากผู้ใช้ (ตัวเลือกความช่วยเหลือของผู้ใช้) ก่อนดำเนินการต่อ นอกจากนี้ คุณยังกำหนดค่าพรอมต์ภายในช่อง ซึ่งจะเพิ่มลงในคิวพรอมต์เมื่อผู้ใช้ไปถึงขั้นตอนการกรอกข้อมูลในช่องของฉาก

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

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

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

ในส่วนนี้ คุณจะเพิ่มเงื่อนไข 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. บันทึกไฟล์

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

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

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

  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 ในช่องอินพุต แล้วกด Enter
  3. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด 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. บันทึกไฟล์

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

ในขั้นตอนนี้ แอ็กชันควรให้คำทำนายที่ปรับแต่งสำหรับผู้ใช้ตามตัวเลือกที่ผู้ใช้เลือก

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

  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 ในช่องป้อนข้อมูล แล้วกด Enter
  3. พิมพ์ "ใช่" ในช่องป้อนข้อมูล แล้วกด 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. บันทึกไฟล์

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

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

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

  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 ในช่องป้อนข้อมูล แล้วกด Enter
  3. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. คลิก พิมพ์ หรือพูดว่า dragon

b299e9fed9aedb69.png

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

เพิ่มความตั้งใจและเปลี่ยนไปที่ฉาก Again

ในส่วนนี้ คุณจะเพิ่มเจตนา yes และ no ลงในฉาก Again เพื่อให้ Action เข้าใจว่าผู้ใช้ต้องการเลือกตัวเลือกใหม่หรือไม่ นอกจากนี้ คุณยังเพิ่มทรานซิชันที่เหมาะสมสำหรับความตั้งใจ yes และ no ได้ด้วย เจตนา yes จะเปลี่ยนไปเป็นฉาก Fortune ส่วนเจตนา 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. บันทึกไฟล์

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

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

หากต้องการทดสอบ 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 ในช่องป้อนข้อมูล แล้วกด Enter
  3. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
  5. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด Enter

5d0690332efe2e29.png

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

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

  1. คลิก พิมพ์ หรือพูดตัวเลือกใดตัวเลือกหนึ่ง
  2. พิมพ์ No ในช่องป้อนข้อมูล แล้วกด Enter

คุณควรได้รับข้อความแจ้ง End conversation: "ฉันยินดีที่คุณพอใจกับตัวเลือกของคุณ ขอให้โชคดีกับการผจญภัย ลาก่อน"

4. เพิ่มเส้นทางที่สนับสนุน

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

ในส่วนนี้ คุณจะกำหนดค่า Action เพื่อให้เข้าใจเมื่อผู้ใช้พูดว่า "magic", "money", "horse" หรือ "phone" และเพื่อแจ้งให้ผู้ใช้เลือกจาก 3 ตัวเลือกเดิมอีกครั้งเมื่อเลือกตัวเลือกเหล่านี้ หากต้องการกำหนดค่าตรรกะนี้ คุณต้องสร้าง type ใหม่ที่มีตัวเลือกอื่นๆ เหล่านี้และเจตนาใหม่ other_option ซึ่งจะตรงกันเมื่อผู้ใช้พูดตัวเลือกใดตัวเลือกหนึ่ง นอกจากนี้ คุณยังต้องใส่คำอธิบายประกอบวลีการฝึกภายในother_optionเจตนาเพื่อระบุและแยกพารามิเตอร์เจตนา

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

สร้างประเภท unavailable_options

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

หากต้องการสร้าง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. บันทึกไฟล์

สร้างเจตนา other_option

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

หากต้องการสร้างและกำหนดค่าเจตนา 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. บันทึกไฟล์

เพิ่มความตั้งใจ other_option ไปยังFortune ฉาก

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

หากต้องการเพิ่มเจตนา 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ฉาก ระบบจะจับคู่other_optionเจตนาและเพิ่มพรอมต์ลงในคิวพรอมต์ เนื่องจากไม่ได้ระบุการเปลี่ยนฉากไว้ ลูปการเรียกใช้ฉากจึงดำเนินต่อไปโดยการประเมินขั้นตอนเงื่อนไขอีกครั้ง จากนั้นช่อง chosenOptions จะเพิ่มพรอมต์ลงในคิวพรอมต์ และระบบจะส่งคิวพรอมต์ไปยังผู้ใช้

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

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

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

  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 ในช่องป้อนข้อมูล แล้วกด Enter
  3. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. พิมพ์ magic ในช่องป้อนข้อมูล แล้วกด Enter

3a42c33eca435f32.png

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

เพิ่มแฮนเดิล unavailable_options

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

หากต้องการเพิ่มตัวแฮนเดิล unavailable_options ลงในฉาก Fortune ให้ทำตามขั้นตอนต่อไปนี้

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

Fortune.yaml

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

อัปเดตและติดตั้งใช้งานการดำเนินการตามคำสั่งซื้อ

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

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

  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)

ตัวแฮนเดิลการอัปเดต

หากต้องการอนุญาตให้ Action ใช้ unavailable_options ให้เพิ่มตัวแฮนเดิล unavailable_options ไปยัง webhooks/ActionsOnGoogleFulfillment.yaml

  1. เพิ่มชื่อตัวแฮนเดิล unavailable_options ลงใน ActionsOnGoogleFulfillment.yaml โดยทำดังนี้

ActionsOnGoogleFulfillment.yaml

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

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

ตอนนี้ Action ของคุณควรปรับพรอมต์ตามว่าตัวเลือกของผู้ใช้จาก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 ในช่องอินพุต แล้วกด Enter
  3. พิมพ์ Yes ในช่องป้อนข้อมูล แล้วกด Enter หรือคลิกชิปคำแนะนำใช่
  4. พิมพ์ magic ในช่องป้อนข้อมูล แล้วกด Enter จากนั้นพิมพ์ horse ในช่องป้อนข้อมูล แล้วกด Enter

54ee24c5c3c56e.png

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

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

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

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

cae526c647f8d40f.png

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

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

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

6. ยินดีด้วย

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

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

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

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

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

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

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

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