1. 總覽
Google 助理開發人員平台可讓你建立軟體,將 Google 助理 (虛擬個人助理) 的功能拓展至超過 10 億個裝置,包括智慧型揚聲器、手機、汽車、電視、耳罩式耳機等。使用者會透過 Google 助理參與對話,完成各項工作,例如購買食品雜貨或叫車。開發人員可以使用 Google 助理開發人員平台,輕鬆建立並管理能滿足使用者需求的第三方服務,享受輕鬆愉快的對話體驗。
本程式碼研究室涵蓋使用 Google 助理進行開發的中級概念,並以第 1 級程式碼研究室中建立的動作為基礎。強烈建議您先完成第 1 級程式碼研究室,再開始本計畫。
您在這個程式碼研究室中建立的動作,可以根據使用者選擇的輔助,告知他們他們在神秘之地 Gryffinberg 的任務。
建構項目
在這個程式碼研究室中,您可以使用下列函式建立精密的對話動作:
- 從使用者收集資料,並根據對話價值修改對話提示
- 透過後續問題回覆,進一步提升對話品質
- 建立遊戲迴圈,讓使用者在收到《財富》後就能再次與「動作」互動
在開始建構之前,您可以先說出「Ok Google,與 Fate 和 Fortune」對支援 Google 助理的裝置進行即時「操作」互動。回訪者在「此動作」中的預設路徑看起來會像這樣:
課程內容
軟硬體需求
此程式碼研究室的必備條件如下:
- 網路瀏覽器,例如 Google Chrome
- 已完成的程式碼研究室第 1 級 動作專案 ( 使用 Actions Builder 第 1 級建立「Google 助理」的「動作」)
我們極力建議您熟悉 JavaScript (ES6),以便瞭解這個程式碼研究室的執行代碼。
2. 繼續建構對話式介面
在第一個程式碼研究室中,您建立了了一個簡單的對話動作,其中包含單一場景 Start
。
在這個程式碼研究室中,你可以延長動作的對話。在下列各節中,您可以將動作設為執行以下作業:
- 在使用者嘗試收聽自己的命運時,轉換至新的
Fortune
場景 - 向使用者詢問他們想為旅程選擇了哪些援助
- 根據使用者的選擇提供不同的幸運
建立Fortune
情境
在本節中,您會建立 Fortune
場景並定義使用者在對話中轉換的方式。
如要建立名為 Fortune
的新場景,請按照下列步驟操作:
- 開啟程式碼研究室 1 級操作專案。
- 按一下導覽列中的 [開發]。
- 按一下「場景」下方的 [開始] 場景。
- 按一下 [yes] (是) 意圖 ([當「是」符合項目時] 方塊) 即可開啟選項。
- 清除 [傳送提示] 即可移除提示。
- 在「轉換」部分中,按一下下拉式選單,按一下文字方塊,然後輸入
Fortune
。 - 按一下 [新增]。這會建立名為
Fortune
的新場景。它也在用於聽取他們的負幣的情況下添加了Start
場景中的Fortune
場景。
定義 Fortune
情境的對話邏輯
在這個程式碼研究室中,您設定了 Fortune
場景以詢問使用者:「您選擇什麼方式來協助您完成任務、龍、翻譯器或指南針部署;繼續進行前,您可以先使用版位填滿功能向使用者收集必要資訊。
你的動作提供 3 種藥房的命運:龍、譯者和指南針。如要設定動作以識別使用者輸入內容中的三個選項,您必須建立新的類型。
您可使用一個場景版位供應階段中的類型來定義使用者需要的資訊。當 NLU 引擎偵測到使用者輸入內容中的運算單元比對時,就會擷取輸入類型的版位,方便您在場景中運用該邏輯進行邏輯。
建立「available_options
」類型
在本節中,您會建立一個名為 available_options
的新類型,指定使用者可按照提示選擇三種選項 (龍、譯者和指南針)。此外,您也可以為這些選項定義一些同義詞,以因應使用者所說的內容相似。在後續部分,您將 available_options
類型新增至版位,以指定您想取得使用者的選擇。
如要建立 available_options
類型,請按照下列步驟操作:
- 在導覽列中,按一下 [類型]。
- 按一下 [+] (加號) 並輸入
available_options
,然後按下Enter
。 - 按一下
available_options
開啟選項。
類型設定為鍵/值組合資訊,其中「key」是類型的名稱,而「values」則是該鍵的同義詞。在您定義鍵時,系統會自動將該鍵新增為值。
如要新增使用者可選擇的三個選項,請按照下列步驟操作:
- 捲動至「新增項目」部分。
- 在 [New entry] 欄位中輸入
dragon
,然後按下Enter
。這項操作會建立dragon
鍵。 - 在「新增值」欄位中輸入「
hydra
」,然後按下Enter
即可將該值新增為值 (匿名)。然後,針對「lizard
」值重複這個步驟。 - 請新增其他索引鍵和對應的值:
translator | translator
、communicator
、machine
、decoder
、translate
compass | compass
、direction
、guide
- 按一下 [儲存]。
你的動作現在可以瞭解 available_options
是龍、譯者和指南針,也能辨識出幾個同義詞。
設定運算單元供應
接著,您需要在 Fortune
場景中設定版位供應作業。如要設定運算單元填充邏輯,請按照下列步驟操作:
- 在導覽列的「場景」下方,按一下 [幸運金]。
- 在
Fortune
場景中,按一下「+」(加號) 來插入版位。 - 在 [輸入版位名稱] 欄位中,新增
chosenOptions
做為運算單元名稱。 - 在 [Select type] (選取類型) 下拉式清單中,選取 [
available_options
] 做為版位類型。 - 勾選 [這個版位為必填] 核取方塊。
- 選取 [傳送提示],然後新增下列訊息和建議方塊:
candidates:
- first_simple:
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'
- 按一下 [儲存]。
您已經將 available_options
類型加入時段中,如此一來,您的動作就可以取得您需要的資訊 (使用者提供的輔助資訊),然後再繼續。您也可以在版位內設定提示,當使用者到達場景的填充階段時,系統就會將該提示加入提示佇列中。
請注意,當您將版位命名為 chosenOptions
時,[自訂版位值寫入名稱] 欄位會更新為相同的名稱 ($session.params.chosenOptions
)。您可以在 Action Builder 中,以這個名稱來使用這個參數,也可透過用戶端程式庫取得執行要求。
設定 scene.slots.status == "FINAL"
條件
新增版位後,條件 scene.slots.status == "FINAL"
就會自動加到條件清單中。
條件 scene.slots.status == "FINAL"
會檢查版位供應情況是否完成。當所有運算單元已填入完畢時,條件可以觸發 Webhook、轉換至新的場景,或者在提示佇列中新增提示。
在這個部分中,您會設定 scene.slots.status == "FINAL"
,在運算單元填入完成後,於提示佇列中新增提示。
如要將此提示新增至 FINAL
條件,請按照下列步驟操作:
- 按一下
scene.slots.status == "FINAL"
開啟選項視窗。 - 選取 [傳送提示],然後新增下列提示:
candidates:
- first_simple:
variants:
- speech: You picked $session.params.chosenOptions.
- 按一下 [儲存]。
在模擬工具中測試您的操作
在這個階段,您已定義了要讓使用者填補版位。從使用者取得這項資訊後,您的動作應提示他們參照他們選擇的特定選項。
如要測試動作,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在 [輸入] 欄位中按一下或輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。(您也可以按一下 [是] 建議方塊)。
- 點擊、輸入或說出
dragon
。您應該會看到以下提示:“您挑選了龍。
在下一個部分中,您可以自訂使用者可以選取的每一項提示。
使用條件自訂提示
在本節中,您可以為使用者為每個選項新增條件,以及為每個條件新增自訂提示。
自訂 dragon
運勢
如要更新條件並自訂使用者選擇「龍狀」的提示,請按照下列步驟操作:
- 按一下導覽列中的 [開發]。
- 在導覽列中,按一下 [Fortune] 場景。
- 按一下
scene.slots.status == "FINAL"
開啟選項視窗。 - 將條件陳述式更新為:
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
- 選取 [傳送提示]。
- 在程式碼編輯器中,按照下列指示更新提示:
candidates:
- first_simple:
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.
- 按一下 [儲存]。
現在,當使用者說出「“dragt;dragon”」或類似內容時,您的「動作」會根據選取的項目提供變化。接著,請新增其餘兩個選項。
自訂 translator
運勢
如要新增條件,並在使用者選擇「翻譯工具」時自訂提示,請按照下列步驟操作:
- 按一下「條件」旁邊的 [+]。
- 將
scene.slots.status == "FINAL" && session.params.chosenOptions == "translator"
新增至 else if 欄位。 - 選取 [傳送提示]。
- 在程式碼編輯器中新增下列提示:
candidates:
- first_simple:
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 subsequent journeys across the
earth. After its work is done, it retires honorably to a premier
location in the Gryffinberg History Museum.
- 按一下 [儲存]。
自訂 compass
運勢
如要新增條件,並在使用者選擇「指南針」時自訂提示,請按照下列步驟操作:
- 按一下「條件」旁邊的 [+] (加號)。
- 將
scene.slots.status == "FINAL" && session.params.chosenOptions == "compass"
新增至 else if 文字方塊。 - 選取 [傳送提示]。
- 在程式碼編輯器中新增下列提示:
candidates:
- first_simple:
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.
- 按一下 [儲存]。
在模擬工具中測試您的操作
此時,您的動作應根據使用者選取的選項,提供自訂幸運金。
如要測試動作,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在「輸入」欄位中輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。您也可以點選 [是] 建議方塊。 - 點擊、輸入或說出
Translator
。
您應該會看到適當的「翻譯者」選項。
3. 新增遊戲迴圈
在這個部分中,您可以設定動作,讓使用者選取另一個選項,並在做出選擇後聽到不同的運勢。這項變更與遊戲結束時的「你想要再玩一次升級設定」訊息類似。如要建構這個迴圈,您可以重複使用先前建立的 yes
和 no
意圖,並將這些意圖新增至名為 Again
的新場景。
建立Again
情境
在這個部分中,您會建立一個新的 Again
場景並新增提示,詢問使用者是否想選取其他選項。
如要建立 Again
場景,請按照下列步驟操作:
- 按一下導覽列中的 [開發]。
- 按一下「場景」下方的 [+] (加號)。
- 輸入「
Again
」並按下Enter
。 - 按一下導覽列中的
Again
場景。 - 按一下「輸入時」旁邊的 [+] (加號)。
- 選取 [傳送提示],然後新增下列提示和建議方塊:
candidates:
- first_simple:
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
場景,請按照下列步驟操作:
- 按一下 [Fortune] 場景。
- 按一下第一個條件 (
scene.slots.status == "FINAL" && session.params.chosenOptions == "dragon"
) 開啟選項視窗。 - 捲動畫面並選取「轉換」下方的「
Again
」。 - 按一下 [儲存]。
- 按一下第二個條件以開啟選項視窗。
- 捲動畫面並選取「轉換」下方的「
Again
」。 - 按一下 [儲存]。
- 按一下第三個條件以開啟選項視窗。
- 捲動畫面並選取「轉換」下方的「
Again
」。 - 按一下 [儲存]。
在模擬工具中測試您的操作
此時,您的動作應在使用者收到幸運時提供下列提示:"這是我看到的。您是否想要選擇其他選項,並探索其他未來發展?
如要測試動作,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在「輸入」欄位中輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。您也可以點選 [是] 建議方塊。 - 點擊、輸入或說出
dragon
。
您應會收到拖曳選項和 Again
提示的幸運星。
新增意圖並轉換至 Again
個場景
在本節中,您將在 Again
場景中加入 yes
和 no
意圖,讓動作瞭解使用者是否想要選擇新選項。您也可以為 yes
和 no
意圖新增適當的轉場效果。yes
意圖會轉換為 Fortune
場景,而 no
意圖會轉換為 End conversation
系統場景。
如要在 Again
場景中新增意圖和轉場效果,請按照下列步驟操作:
- 按一下導覽列中的 [開發]。
- 按一下
Again
場景。 - 按一下「使用者意圖處理」旁邊的 [+] (加號)。
- 在意圖下拉式選單中選取 [yes] (是)。
- 從 [轉換] 下拉式選單中選取
Fortune
。 - 按一下 [儲存]。
- 按一下「使用者意圖處理」旁邊的 [+] (加號)。
- 在意圖下拉式選單中選取 [no] (否)。
- 從 [轉換] 下拉式選單中選取 [結束會話群組]。
- 選取 [Send 提示],然後在程式碼編輯器中新增下列提示:
candidates:
- first_simple:
variants:
- speech: >-
It pleases me that you are satisfied with your choice. Best of luck on your quest. Farewell.
- 按一下 [儲存]。
在模擬工具中測試您的操作
你的動作現在應瞭解使用者是否想選擇新選項,或結束對話。
如要測試 yes
意圖,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在「輸入」欄位中輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。您也可以點選 [是] 建議方塊。 - 點選、輸入或說出其中一個選項。
- 在「輸入」欄位中輸入
Yes
,然後按下Enter
。
您應該會看到以下提示:「你該選擇什麼方式來協助你完成任務、龍、翻譯譯者或指南針;
如要測試 no
意圖,請按照下列步驟操作:
- 點選、輸入或說出其中一個選項。
- 在輸入欄位中輸入
No
,然後按下Enter
。
您應該會收到 End conversation
提示:" 希望您滿意我們的選擇。祝你順利完成任務。Farewell.“
4. 新增支援路徑
現在,您已經建立了大多數動作在您主要採取動作的主要路徑。不過,使用者可以透過 Fortune
場景中的提示回答「你該選擇什麼方式來協助你完成任務、龍、翻譯器或指南針部署,但該選項並非系統提供的選項。
在這個部分中,您可以設定動作來瞭解使用者選擇「魔法」、「金錢」或「電話」的時機,並在使用者選擇其中一個選項時提示他們選用其中一個選項。設定這項邏輯時,您必須建立一個新的 type
,其中包含其他這些選項和新意圖 other_option
,當使用者符合其中一個選項時就會配對。您也必須在 other_option
意圖中加上註解,以識別並擷取意圖參數。
當「Google 助理」的自然語言處理 (NLU) 引擎在使用者輸入時偵測到參數比對,就會擷取該值做為類型參數,方便您在場景中執行邏輯。在這個程式碼研究室中,您可以設定動作來擷取使用者選擇的輔助程式,並在提示中參照該選擇。
建立「unavailable_options
」類型
您現在可以建立包含多種不同選項的 unavailable_options
類型,讓動作可在使用者輸入內容中找出這些資料。
如要建立 unavailable_options
類型,請按照下列步驟操作:
- 按一下導覽列中的 [開發]。
- 在「類型」下方,按一下 [+] (加號)。
- 輸入「
unavailable_options
」並按下Enter
。 - 按一下
unavailable_options
開啟選項。 - 在「新增項目」區段中輸入下列項目和對應的值:
|
|
|
|
|
|
|
|
鍵值組應如下所示:
- 按一下 [儲存]。
建立other_option
意圖
接著,建立名為「other_option
」的意圖,並新增包含「unavailable_options
」類型選項的訓練詞組。當使用者選取 unavailable_options
類型中包含的選項時,這項意圖就會相符。
如要建立和設定 other_option
意圖,請按照下列步驟操作:
- 按一下「自訂意願」下方的 [+] (加號)。
- 輸入「
other_option
」並按下Enter
。 - 按一下
other_option
開啟視窗。 - 新增下列訓練詞組,然後在每個詞組後按下
Enter
:
I want to use spells
I really really want to use a phone
magic!
cash
I want to ride a horse
- 在「新增意圖參數」區段中,將參數名稱更新為
chosenUnavailableOption
。 - 按一下 [儲存]。
當您輸入訓練詞組時,Action Builder 能從 unavailable_options
類型中識別 spells
、phone
、magic
、cash
和 horse
,並自動反白顯示 (註解) 這些字詞。動作製作工具會自動在「新增意圖參數」區段中新增意圖參數,如下圖所示。
意圖參數可讓您擷取選項名稱,並在提示中使用該選項。
將 other_option
個意圖新增至 Fortune
個場景
現在您有一個意圖 other_option
,可以處理使用者指定的選項不是原始的其中一個選項。在本節中,您將 other_option
意圖新增至 Fortune
場景中。您可以利用意圖參數,根據使用者的輸入內容來自訂提示。
如要將 other_option
意圖新增至 Fortune
場景,請按照下列步驟操作:
- 按一下 [Fortune] 場景。
- 按一下「使用者意圖處理」旁邊的 [+] (加號)。
- 從意圖下拉式選單中選取
other_option
。 - 選取 [傳送提示],然後新增下列提示:
candidates:
- first_simple:
variants:
- speech: >-
I have seen the future and a $intent.params.chosenUnavailableOption.original
will not aid you on your journey.
運算式 $intent.params.chosenUnavailableOption
參照意圖參數物件,$intent.params.chosenUnavailableOption.original
則參照該物件的值。original property
是指使用者指定的原始輸入內容。
- 按一下 [儲存]。
如果使用者在 Fortune
場景中以 unavailable_options
類型列出選項,系統會比對 other_option
意圖,並在提示佇列中新增提示。由於未指定 轉換,所以系統會重新評估條件階段,繼續執行場景執行迴圈。chosenOptions
版位隨即會在提示佇列中加入提示,並將提示佇列傳送給使用者。
在模擬工具中測試您的操作
當使用者選取 unavailable_options
類型中列出的其中一種選項時,您的動作應適當回應,並指出使用者選取了哪些輔助項目。接著,您的動作應提示使用者挑選其中一個原始選項 (龍、譯者或指南針)。
如要在模擬工具中測試動作,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在「輸入」欄位中輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。您也可以點選 [是] 建議方塊。 - 在「輸入」欄位中輸入
magic
,然後按下Enter
。
您可能會注意到,當使用者選擇「魔法」時,提示訊息似乎並不準確;原因 是 「a」下列各節說明瞭這個問題。
新增 unavailable_options
處理常式
如要將「a」文章置於 unavailable_options
類型適用的選項之前,您可以在執行邏輯中設定事件處理常式,以檢查使用者選擇的選項是否需要「a」。首先,您必須設定動作,才能在主控台中呼叫處理常式。
如要新增 unavailable_options
處理常式,請按照下列步驟操作:
- 按一下導覽列中的 [開發]。
- 按一下
Fortune
場景。 - 在「使用者意圖處理」下方,按一下 [當其他條件相符時] 即可開啟視窗。
- 取消勾選 [傳送提示] 核取方塊。
- 勾選 [Call your Webhook] 核取方塊。
- 在事件處理常式的文字方塊中輸入
unavailable_options
。
- 按一下 [儲存]。
更新及部署執行要求
您已經將動作設定為呼叫 unavailable_options
事件處理常式,現在可以在執行要求中更新並部署處理常式。
如要更新出貨設定,請按照下列步驟操作:
- 按一下導覽列中的 [Webhook]。
- 在
greeting
處理常式下加入下列程式碼:
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();
中加入以下程式碼:
const optionsNeedA = new Set();
optionsNeedA.add('horse').add('phone');
- 按一下 [儲存執行要求]。
- 按一下 [Deploy Fulfillment] (部署執行要求)。部署作業完成後,編輯器上方會顯示「您的 Cloud Function 部署為最新版本」訊息。
瞭解程式碼
unavailable_options
處理常式會執行下列作業:
- 從
conv
物件取得option
資料,並將option
指派至original
屬性,也就是使用者的原始輸入內容 - 將
optionKey
指派給resolved
屬性,這是unavailable_options
類型的金鑰 - 檢查
optionKey
是否為需要「a」的任一選項;如果是的話,請以加上「a」來建構訊息。 - 透過「
conv.add(message)
」新增訊息
在模擬工具中測試您的操作
您的動作現在應根據使用者在 unavailable_options
類型中做出的選擇是否需要「a」來調整提示。
如要測試動作,請按照下列步驟操作:
- 按一下導覽列中的 [測試]。
- 在 [輸入] 欄位中按一下或輸入
Talk to my test app
,然後按下Enter
。 - 在「輸入」欄位中輸入
Yes
,然後按下Enter
。您也可以點選 [是] 建議方塊。 - 在「輸入」欄位中輸入
magic
,然後按下Enter
。 - 在「輸入」欄位中輸入
horse
,然後按下Enter
。
您的動作應加入「a」的前面;「建立」時,則建立提示訊息時不要選取「a」;
清除專案 [建議]
為了避免產生可能的費用,建議您移除不需要使用的專案。如要刪除您在這個程式碼研究室中建立的專案,請按照下列步驟操作:
- 如要刪除 Cloud 專案和資源,請完成關閉 (刪除) 專案一節中所列步驟。
- 選用:如要立即從 Actions 主控台移除專案,請參閱刪除專案。如果您未完成這個步驟,專案約在 30 天後就會自動移除。
5. 恭喜!
你現在已經介紹了建立「Google 助理」動作所需的必備技能。
說明
- 如何使用 Node.js 執行資料庫開發對話動作
- 如何使用版位向使用者收集資料
- 如何使用條件為場景新增邏輯
- 如何新增遊戲迴圈
- 如何新增支援路徑
瞭解詳情
探索下列資源,進一步瞭解如何建構 Actions for Google 助理:
- 開發 Google 助理動作專用說明文件
- Actions on Google GitHub 頁面:範例程式碼和程式庫
- 專為 Google 助理開發人員推出的 Reddit 官方社群
- 對話設計指南,瞭解對話動作的最佳做法與規範
在 Twitter 上追蹤 @ActionsOnGoogle,即可隨時掌握最新公告,同時透過 Tweet 將訊息張貼至 #AoGDevs,藉此分享您的創意內容!
意見回饋問卷調查
離開前,請填寫一份簡短的問卷調查,讓我們瞭解您的使用體驗。