使用 Actions SDK 為 Google 助理建構動作 (第 2 級)

1. 總覽

透過 Google 助理開發人員平台,您可以建立可擴充 Google 助理 (虛擬個人助理) 功能的軟體,支援超過 10 億部裝置,包括智慧音箱、手機、汽車、電視和耳機等。使用者可以透過 Google 助理對話處理生活大小事,例如購買雜貨或預約行程。開發人員可以使用 Google 助理開發人員平台,輕鬆建立及管理使用者和第三方執行服務之間的順暢有效對話體驗。

本程式碼研究室涵蓋使用 Google 助理進行開發的中級概念,並以「使用 Actions SDK 建構 Google 助理 (第 1 級)」程式碼研究室中的「動作」為建構基礎。強烈建議您先完成等級 1 的程式碼研究室,再開始本程式碼研究室。

您在本程式碼研究室中建構的動作,會根據使用者選擇的輔助方式,在神話般的格林菲堡 (Gryffinberg) 上根據他們選擇的助力,研究他們追求的目標。

建構項目

在本程式碼研究室中,您將使用下列函式建構複雜的對話動作:

  • 向使用者收集資料,並根據值修改對話提示。
  • 回覆後續問題,進一步延續對話。
  • 建立遊戲迴圈,方便使用者在收到隨機對戰後再次與動作互動。

開始建構前,只要在支援 Google 助理的裝置上說出「Ok Google,跟命運和財富」,即可在支援 Google 助理的裝置上與即時動作互動。此動作為回訪者執行此動作的預設路徑,看起來會像這樣:

dd6f5c61296b8b50.png

eba043f546aa8c51.png

課程內容

  • 如何使用運算單元向使用者收集資料
  • 如何使用條件在場景中加入邏輯
  • 如何新增遊戲迴圈
  • 如何新增支援路徑

軟硬體需求

使用本程式碼研究室的必備條件包括:

強烈建議您熟悉 JavaScript (ES6),但這並非強制規定,但有助於瞭解本程式碼研究室的執行要求程式碼。

選用:取得程式碼範例

您可以選擇從 Actions Builder 程式碼研究室第 1 級 GitHub 存放區取得完整的第 1 級專案程式碼,以便依照本程式碼研究室的說明操作。您也可以在這個 GitHub 存放區中查看完整的第 2 層專案程式碼。

2. 繼續建構對話式介面

在第一個程式碼研究室中,您已成功透過單一場景 Start 建立簡單的對話動作。

在本程式碼研究室中,您將擴充動作的對話。在以下各節中,您將設定動作執行以下操作:

  • 當使用者想聽好自己的命運時,轉換至新的 Fortune 場景
  • 詢問使用者想在歷程中選擇哪項援助
  • 根據使用者的選擇提供量身打造的財富

轉換至 Fortune 場景

在本節中,執行以下操作:

  • Start 場景中移除現有提示,藉此回應使用者並結束對話
  • 定義從 Start 場景到 Fortune 場景的轉場效果
  • 建立 Fortune 場景

如要修改 Start 場景並在 Fortune 場景中新增轉場效果,請按照下列步驟操作:

  1. 在文字編輯器中,開啟第 1 級程式碼研究室中的 Actions 專案。
  2. 開啟 custom/scenes/Start.yaml 檔案。
  3. 請更新 yes 意圖的 handler,讓程式碼與下列程式碼片段相符:

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. 前往終端機中的程式碼研究室等級 1 Actions 專案。
  2. scenes 目錄中建立名為 Fortune.yaml 的新檔案:
touch custom/scenes/Fortune.yaml

您將在下一節編輯這個檔案。

定義 Fortune 場景的對話邏輯

在本程式碼研究室中,您將設定 Fortune 場景,要求使用者:「選擇什麼來輔助您完成任務、龍、譯者或指南針?」您可以使用名為「運算單元填充」的功能來收集使用者必要資訊,再繼續操作。

您的動作為下列三種輔助運轉:龍、譯者和指南針。如要設定動作以便在使用者輸入的內容中識別這三個選項,您必須建立新的類型

您可以在場景的運算單元填充階段使用類型,定義要向使用者提供的資訊。當 NLU 引擎在使用者輸入內容中偵測到運算單元相符項目時,就會擷取該運算單元做為型別參數,讓您可以在場景中使用該參數執行邏輯。

建立「available_options」類型

在本節中,您將建立名為 available_options 的新類型,該類型指定使用者能選擇的三個選項 (拖曳、平移和指南針)。此外,您也可以定義這些選項的幾個同義詞,以便在使用者說類似的文字時派上用場。在後續章節中,您會將 available_options 類型新增至版位,指定您想要取得的使用者選項。

如要建立 available_options 類型,請按照下列步驟操作:

  1. 建立名為 types 的新目錄:
mkdir custom/types
  1. types 目錄中建立名為 available_options.yaml 的新檔案:
touch custom/types/available_options.yaml
  1. 在文字編輯器中開啟 custom/types/available_options.yaml

類型已設為資訊的鍵/值組合,其中「鍵」是類型名稱,「值」則是該鍵的同義詞。定義索引鍵時,該索引鍵會自動新增為值。使用 Actions SDK 時,您會以 entities 表示鍵,值則以 synonyms 表示。

如要新增使用者可選擇的三個選項,請按照下列步驟操作:

  1. available_options.yaml 檔案中新增下列 entitiessynonyms

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 是龍、譯者和指南針,也可以辨識一些對應的同義詞。

設定運算單元填充

接下來,您需要在 Fortune 場景中設定運算單元填充。如要設定運算單元填充邏輯,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Fortune.yaml
  2. Fortune.yaml 檔案中加入下列 slots 資料:

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)。您可以在提示中或透過用戶端程式庫,在執行要求中使用該名稱來存取此參數。

新增條件

新增的運算單元需要使用者選擇援助的時段後,您就可以加入「condition」(條件),檢查是否已取得運算單元資料,使用者才能繼續對話。

在本節中,您要新增條件 scene.slots.status == "FINAL",這會檢查運算單元填充是否完成。所有版位都填入後,條件會在提示佇列中新增提示 (You picked $session.params.chosenOptions.)。

如要設定 scene.slots.status == "FINAL" 條件,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Fortune.yaml
  2. Fortune.yaml 檔案頂端新增 conditionalEvents 資料:

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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「輸入」欄位中點選或輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「Input」欄位中輸入 Yes,然後按下 Enter 鍵。或者,您也可以按一下「是」建議方塊。

a899d45c542668f6.png

  1. 按一下、輸入或說出dragon。您應該會收到「您挑選了龍」的提示。

在下一節中,您將針對使用者可選取的各項工具自訂提示。

運用條件自訂提示

在本節中,您將為使用者可選擇的每一個選項新增條件,並為每個條件新增自訂提示。

自訂「dragon」財富

如要更新條件並自訂使用者選擇「拖曳」時的提示,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Fortune.yaml
  2. Fortune.yaml 檔案中的 conditionalEvents 資料替換為下列程式碼片段:

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. 儲存檔案。

現在,當使用者說出「dragon」或類似類似字詞時,您的動作就會根據該選項提供財富。接下來,您必須新增其餘兩個選項。

自訂「translator」和「compass」運勢

如要新增條件,並自訂使用者說出「翻譯」或「指南針」的提示,請按照下列步驟操作:

  1. custom/scenes/Fortune.yaml 檔案的 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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「Input」欄位中輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「輸入內容」欄位中輸入「是」,然後按下 Enter 鍵。您也可以按一下「是」建議方塊。
  4. 按一下、輸入或說出Translator

29e17f950bd0dd71.png

您應該會收到「翻譯者」的合適財富如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇

3. 新增遊戲迴圈

在這個部分中,您將設定動作,讓使用者可以在做出選擇後聆聽不同的運勢。這項變更類似於遊戲結束時顯示「要再玩一次嗎?」訊息。如要建構這個迴圈,您可以重複使用先前建立的 yesno 意圖,並將這些意圖新增至名為 Again 的新場景。

建立 Again 個場景

在本節中,您將建立新的 Again 場景,並新增提示,詢問使用者是否要選取其他選項。

如要建立並設定 Again 場景,請按照下列步驟操作:

  1. scenes 目錄中建立名為 Again.yaml 的新檔案:
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. 儲存檔案。

新增從 FortuneAgain 場景的轉場效果

使用者收到好運後,對話必須轉換至新的 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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「Input」欄位中輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「Input」欄位中輸入 Yes,然後按下 Enter 鍵。您也可以按一下「是」建議方塊。
  4. 按一下、輸入或說出dragon

b299e9fed9aedb69.png

您應該會收到龍選項的財富和 Again 提示。

新增意圖和轉場效果至 Again 個場景

在本節中,您將 yesno 意圖新增至 Again 場景,讓動作瞭解使用者是否要選擇新選項。您也為 yesno 意圖新增適當的轉場效果。yes 意圖會轉換至 Fortune 場景,而 no 意圖會轉換至系統場景 End conversation

如要在 Again 場景中新增意圖和轉場效果,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Again.yaml
  2. Again.yaml 檔案的頂端 (位於 OnEnter 上方) 新增 intentEvents 資料:

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. 儲存檔案。

在模擬工具中測試動作

您的動作現在應可瞭解使用者是想選擇新選項或結束對話。

如要測試 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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「Input」欄位中輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「Input」欄位中輸入 Yes,然後按下 Enter 鍵。您也可以按一下「是」建議方塊。
  4. 點選、輸入或說出其中一個選項。
  5. 在輸入欄位中輸入 Yes,然後按下 Enter 鍵。

5d0690332efe2e29.png

您應該會收到「任務、龍、譯者或指南針嗎?」提示訊息。

如要測試 no 意圖,請按照下列步驟操作:

  1. 點選、輸入或說出其中一個選項。
  2. 在輸入欄位中輸入 No,然後按下 Enter 鍵。

您應該會收到 End conversation 提示:「很抱歉,您對你的選擇感到滿意。祝你好運。再會。」

4. 新增輔助路徑

您現在已建立了大多數使用者在動作中採取的主要路徑。然而,使用者可能會回應 Fortune 情境中的提示:「你選擇什麼來協助你完成任務、龍、譯者或指南針?,而不是系統提供的選項。

在這個部分中,您將設定動作,讓使用者知道自己在說出「magic」、「money」、「horse」或「phone」時,讓系統在使用者選擇其中一個選項時,再次提示他們從原本的三個選項中選擇。如要設定這個邏輯,您必須建立新的 type,其中包含這些其他選項,以及當使用者說出其中一個選項時比對的新意圖 other_option。此外,您也必須在 other_option 意圖中為訓練詞組加註,以識別並擷取「意圖參數」

Google 助理的自然語言處理引擎偵測到使用者輸入內容中的參數符合時,就會擷取該值做為型別參數,讓您可以在場景中使用該參數執行邏輯。在本程式碼研究室中,您將設定動作,擷取使用者選擇的輔助資訊,並在提示中參照該選擇。

建立「unavailable_options」類型

您現在可以建立包含各種不同選項的 unavailable_options 類型,讓動作能識別使用者輸入內容中的資料。

如要建立 unavailable_options 類型,請按照下列步驟操作:

  1. types 目錄中建立名為 unavailable_options.yaml 的新檔案:
touch custom/types/unavailable_options.yaml
  1. 在文字編輯器中開啟 custom/types/unavailable_options.yaml
  2. unavailable_options.yaml 檔案中加入下列 synonyms 資料:

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. intents 目錄中建立名為 other_option.yaml 的新檔案:
touch custom/intents/other_option.yaml
  1. 在文字編輯器中開啟 custom/intents/other_option.yaml
  2. other_option.yaml 檔案中加入下列 parameters 資料和 trainingPhrases 資料:

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)

在上一節中指定的無法使用選項,您必須在訓練詞組中手動為訓練詞組加註。意圖參數 chosenUnavailableOption 可讓您擷取選項名稱,並在提示中使用該選項,您將在下一節進行。

  1. 儲存檔案。

other_option 意圖新增至 Fortune 個場景

現在您已擁有 other_option 意圖,可處理使用者指定非原始選項以外的選項。在本節中,您會將 other_option 意圖新增至 Fortune 場景。只要使用意圖參數,就能根據使用者輸入內容自訂提示。

如要將 other_option 意圖新增至 Fortune 場景,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Fortune.yaml
  2. conditionalEvents 資料與 slots 資料之間新增下列 intentEvents 資料:

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.params.chosenUnavailableOption.original 則參照該物件的值。original 屬性是指使用者指定的原始輸入內容。

使用者在 Fortune 場景期間說出 unavailable_options 類型中列出的選項時,系統會比對 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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「Input」欄位中輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「Input」欄位中輸入 Yes,然後按下 Enter 鍵。您也可以按一下「是」建議方塊。
  4. 在「Input」欄位中輸入 magic,然後按下 Enter 鍵。

(3a42c33eca435f32.png)

當使用者因「a」而選擇「magic」時,可能會發現提示不正確張貼文章。您將在下列各節中解決這個問題。

新增 unavailable_options 處理常式

如要將「a」文章,在 unavailable_options 類型中的適當選項之前,您可以在執行要求邏輯中設定事件處理常式,檢查使用者選擇的選項是否需要「a」。首先,您必須設定動作,從 Fortune 場景呼叫處理常式。

如要將 unavailable_options 處理常式新增至 Fortune 場景,請按照下列步驟操作:

  1. 在文字編輯器中開啟 custom/scenes/Fortune.yaml
  2. 使用以下 intentEvents 資料更新 Fortune.yaml 檔案:

Fortune.yaml

intentEvents:
- handler:
    webhookHandler: unavailable_options
  intent: other_option
  1. 儲存檔案。

更新及部署執行要求

現在動作已設定為呼叫 unavailable_options 事件處理常式,因此您可以更新並執行執行要求中的處理常式。

如要更新執行要求,請按照下列步驟操作:

  1. 在文字編輯器中開啟 webhooks/ActionsOnGoogleFulfillment/index.js
  2. 將下列程式碼新增至 greeting 處理常式下的 index.js

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 處理常式會執行以下操作:

  • conv 物件取得 option 資料,並將 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. 複製所提供的網址並貼到瀏覽器中。
  2. 在「輸入」欄位中點選或輸入 Talk to my test app,然後按下 Enter 鍵。
  3. 在「Input」欄位中輸入 Yes,然後按下 Enter 鍵。您也可以按一下「是」建議方塊。
  4. 在「Input」欄位中輸入 magic,然後按下 Enter 鍵。然後在「Input」欄位中輸入 horse,然後按下 Enter 鍵。

54ee24c5c3c56e.png

您的動作應加上「a」「馬」之前的文章如果在建構提示時未使用「a」「magic」的文章就是用哪一種烤箱或刀子都可以 那麼預先建構的容器或許是最佳選擇

5. 在 Actions 控制台中以視覺化方式呈現動作

Actions SDK 與名為 Actions Builder 的網頁式 IDE 互通,且這些 IDE 已經整合至 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. 複製所提供的網址並貼到瀏覽器中。
  2. Actions 主控台中,按一下頂端導覽列的「Develop」(開發)
  3. 按一下「Scenes」旁邊的下拉式箭頭,然後點選「Start」。動作的 Start 場景應以視覺化方式呈現,如以下螢幕截圖所示:

cae526c647f8d40f.png

清理專案 [建議]

如要避免產生可能的費用,建議您移除不想使用的專案。如要刪除您在本程式碼研究室中建立的專案,請按照下列步驟操作:

  1. 如要刪除 Cloud 專案和資源,請完成「關閉 (刪除) 專案」一節所列的步驟。
  1. 選用:如要立即將專案從 Actions 主控台中移除,請完成「刪除專案」一節中列出的步驟。如未完成這個步驟,系統將在約 30 天後自動移除專案。

6. 恭喜!

現在您已瞭解使用 Actions SDK 建構 Google 助理 Actions for Google 助理所需的中級技能。

涵蓋內容

  • 如何使用 Node.js 執行要求程式庫開發對話動作
  • 如何使用運算單元向使用者收集資料
  • 如何使用條件在場景中加入邏輯
  • 如何新增遊戲迴圈
  • 如何新增支援路徑

瞭解詳情

您可以探索下列資源,瞭解如何建構適用於 Google 助理的動作:

在 Twitter 上追蹤 @ActionsOnGoogle,以隨時掌握最新公告,並透過 Twitter 發文給 #AoGDevs 分享你的成果!

意見回饋問卷調查

離開前,請先填寫一份簡短的問卷調查,告訴我們你的使用體驗。