1. 總覽
Google 助理開發人員平台可讓您建立軟體,在超過 10 億部裝置上擴充 Google 助理 (虛擬個人助理) 的功能,包括智慧音箱、手機、汽車、電視、耳機等。使用者可以與 Google 助理對話,完成購物或預約車輛等事項。開發人員可以透過 Google 助理開發人員平台,輕鬆建立及管理使用者與第三方服務之間,令人愉悅且有效的對話體驗。
本程式碼研究室涵蓋使用 Google 助理開發的初學者概念,您不必具備平台使用經驗,也能完成本程式碼研究室。在本程式碼研究室中,您將建構簡單的 Google 助理動作,在使用者開始 Gryffinberg 神話世界的冒險時,為他們提供運勢。在 Actions Builder 第 2 級程式碼研究室中,您會進一步建構這項動作,根據使用者的輸入內容自訂運勢。
建構項目
在本程式碼研究室中,您將建構具有下列功能的簡單動作:
- 向使用者傳送問候訊息
- 向使用者提出問題。使用者回答後,動作會根據使用者的選擇做出適當回應
- 提供建議方塊,使用者可點選方塊輸入內容
- 根據使用者是否為回訪者,修改對使用者的問候訊息
完成本程式碼研究室後,您完成的動作會包含下列對話流程:
課程內容
- 如何在 Actions 控制台中建立專案
- 如何在使用者叫用動作後傳送提示
- 如何處理使用者輸入內容並傳回回應
- 如何在 Actions 模擬工具中測試動作
- 如何使用 Cloud Functions 編輯器實作執行要求
軟硬體需求
您的環境必須包含下列工具:
- 網路瀏覽器,例如 Google Chrome
2. 設定
以下各節說明如何設定開發環境及建立 Actions 專案。
檢查 Google 權限設定
如要測試在本程式碼研究室中建構的動作,您必須啟用必要權限,模擬器才能存取動作。如要啟用權限,請按照下列步驟操作:
- 前往「活動控制項」頁面。
- 如果尚未登入 Google 帳戶,請先登入。
- 啟用下列權限:
- 網路和應用程式活動
- 在「網路和應用程式活動」下方,勾選「包括 Chrome 歷史記錄,以及採用 Google 服務的網站、應用程式和裝置上的活動記錄」核取方塊。
建立 Actions 專案
動作專案是動作的容器。如要為本程式碼研究室建立 Actions 專案,請按照下列步驟操作:
- 開啟 Actions 管理中心。
- 按一下 [新專案]。
- 輸入專案名稱,例如
actions-codelab
。(這個名稱僅供內部參考,稍後可以為專案設定外部名稱)。
- 按一下 [Create Project]。
- 在「您要建構哪種動作?」畫面中,選取「自訂」資訊卡。
- 點選 [下一步]。
- 選取「空白專案」資訊卡。
- 按一下「開始建構」。
建立帳單帳戶關聯
如要在本程式碼研究室稍後使用 Cloud Functions 部署服務,您必須將帳單帳戶與 Google Cloud 中的專案建立關聯。
如果尚未將帳單帳戶與專案建立關聯,請按照下列步驟操作:
- 前往 Google Cloud Platform 帳單頁面。
- 按一下「新增帳單帳戶」或「建立帳戶」。
- 輸入您的付款資訊。
- 按一下「開始免費試用」或「提交資訊並啟用計費功能」。
- 前往 Google Cloud Platform 帳單頁面。
- 按一下「我的專案」分頁標籤。
- 在 Codelab 的 Actions 專案旁,點選「動作」下方的三點圖示。
- 按一下「變更帳單」。
- 在下拉式選單中,選取您設定的帳單帳戶。按一下 [設定帳戶]。
如要避免產生費用,請按照本程式碼研究室結尾「清除專案」一節的步驟操作。
3. 發起對話
使用者會透過呼叫與動作展開對話。舉例來說,如果動作名稱為「MovieTime」,使用者可以說出「Ok Google,與 MovieTime 對話」這類句子來叫用動作,其中「MovieTime」是顯示名稱。如要將動作部署至正式環境,必須設定顯示名稱;但如要測試動作,則不需要定義顯示名稱。您可以在模擬器中使用「Talk to my test app」(與我的測試應用程式對話) 片語,叫用動作。
您必須編輯主要叫用,定義使用者叫用動作後會發生的情況。
根據預設,Actions Builder 會在觸發叫用時提供一般提示 (「Start building your Action by defining main invocation.」)。
在下一節中,您將在 Actions 控制台中自訂主要叫用提示。
設定主要叫用
如要修改使用者叫用動作時,動作傳回給使用者的提示,請按照下列步驟操作:
- 按一下導覽列中的「主要叫用」。
- 在程式碼編輯器中,將
speech
欄位中的文字 (Start building your action...
) 替換為下列歡迎訊息:A wondrous greeting, adventurer! Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you're on your way to an epic journey.
- 按一下 [儲存]。
在模擬工具中測試主要叫用
Actions 管理中心提供名為「模擬器」的網頁工具,可供測試動作。這個介面會模擬硬體裝置及其設定,因此您可以與動作對話,就像動作在智慧螢幕、手機、音箱或 KaiOS 上執行一樣。
叫用動作時,系統現在應會以您新增的自訂提示 ("A wondrous greeting, adventurer!..."
) 回應
如要在模擬器中測試動作的主要叫用方式,請按照下列步驟操作:
- 按一下頂端導覽列中的「測試」,前往模擬器。
- 如要在模擬工具中叫用動作,請在「輸入」欄位中輸入
Talk to my test app
,然後按Enter
。
觸發動作的主要叫用時,Google 助理會以自訂的歡迎訊息回應。此時,Google 助理會先說出問候語,然後結束對話。在下一節中,您將修改動作,讓對話繼續進行。
查看事件記錄
在「測試」分頁中,右側面板會顯示事件記錄,以事件記錄的形式顯示對話記錄。每個事件記錄都會顯示該輪對話期間發生的事件。
您的動作目前有一個事件記錄,其中會顯示使用者輸入內容 ("Talk to my test app"
) 和動作的回應。下圖顯示動作的事件記錄:
按一下事件記錄中的向下箭頭,即可查看該輪對話中發生的事件,並依時間順序排列:
userInput
:對應使用者的輸入內容 ("Talk to my test app"
)。interactionMatch
:對應於使用者輸入內容觸發的 Action 主要叫用回應。按一下箭頭展開這個資料列,即可查看您為主要呼叫新增的提示 (A wondrous greeting, adventurer!...
)endConversation
:對應於Main invocation
意圖中選取的轉移,目前會結束對話。(您將在本程式碼研究室的下一節中進一步瞭解轉場效果)。
事件記錄可讓您瞭解動作的運作方式,並在發生問題時提供實用的偵錯工具。如要查看事件詳細資料,請按一下事件名稱旁的箭頭,如下列螢幕截圖所示:
4. 建立動作的對話
定義使用者叫用動作後會發生的情況後,您就可以建構動作對話的其餘部分。繼續進行本程式碼研究室之前,請先熟悉下列用語,瞭解動作的對話運作方式:
動作可以有一個或多個場景,您必須先啟用每個場景,才能執行動作。(您在本程式碼研究室中建構的動作只有一個名為 Start
的場景)。啟動場景最常見的方式是設定動作,讓使用者在場景中符合使用者意圖時,該意圖會觸發轉換至另一個場景並啟動。
舉例來說,假設有一個虛擬動作可向使用者提供動物相關知識。使用者叫用這項動作時,系統會比對 Main invocation
意圖,並觸發轉換至名為 Facts
的場景。這項轉移會啟動 Facts
場景,並向使用者傳送下列提示:Would you like to hear a fact about cats or dogs?
Facts
場景中有名為 Cat
的使用者意圖,內含使用者可能會說的訓練詞組,例如「我想聽聽貓咪的冷知識」或「貓」。使用者要求聽取貓咪相關知識時,系統會比對 Cat
意圖,並觸發轉場效果,切換至名為 Cat fact
的場景。Cat fact
場景會啟動,並向使用者傳送包含貓咪冷知識的提示。
圖 1. 使用 Actions Builder 建構的動作中,一般對話回合的流程
場景、意圖和轉場效果共同構成對話邏輯,並定義使用者在動作對話中可採取的各種路徑。在下一節中,您將建立場景,並定義使用者叫用動作後,如何啟動該場景。
從主要叫用項目轉換至場景
在本節中,您將建立名為 Start
的新場景,向使用者傳送提示,詢問是否要算命。您也會從主要呼叫新增至新的 Start
場景。
如要建立這個場景並加入轉場效果,請按照下列步驟操作:
- 按一下導覽列中的「開發」。
- 按一下側邊導覽列中的「主要叫用」。
- 在「轉場效果」部分中,按一下下拉式選單,然後在文字欄位中輸入
Start
。
- 按一下「Add」。這會建立名為
Start
的場景,並告知動作在向使用者顯示歡迎提示後,要轉換至Start
場景。 - 按一下側邊導覽列中的「場景」,即可顯示場景清單。
- 按一下「場景」下方的「開始」,即可查看
Start
場景。 - 在
Start
場景的「On enter」部分中,按一下「+」。 - 選取「傳送提示」。
- 將
speech
欄位中的句子 (Enter the response that users will see or hear...
) 替換為要詢問使用者的問題:Before you continue on your quest, would you like your fortune told?
- 按一下 [儲存]。
使用者進入Start
場景時,Google 助理會顯示這項提示 (Before you continue on your quest...
)。
新增建議方塊
建議晶片會向使用者提供可點選的建議,供動作處理為使用者輸入內容。在本節中,您會新增建議方塊,為螢幕裝置上的使用者提供支援。
如要將建議方塊新增至 Start
場景的提示,請按照下列步驟操作:
- 在
Start
場景中,按一下「建議」。這項操作會新增單一建議方塊。 - 在
title
欄位中,將Suggested Response
替換為'Yes'
。 - 使用相同格式手動新增名為「
'No'
」的建議晶片。您的程式碼應如下列程式碼片段所示:
suggestions:
- title: 'Yes'
- title: 'No'
- 按一下 [儲存]。
在模擬工具中測試動作
此時,動作應從主要叫用轉換至 Start
場景,並詢問使用者是否要算命。模擬畫面中也應會顯示建議方塊。
如要在模擬器中測試動作,請按照下列步驟操作:
- 按一下導覽列中的「測試」,即可前往模擬器。
- 如要在模擬器中測試動作,請在「輸入內容」欄位中輸入
Talk to my test app
,然後按下Enter
。你的動作應會以Main invocation
提示和新增的Start
場景提示"Before you continue on your quest, would you like your fortune told?"
回應。
以下螢幕截圖顯示這項互動:
- 點選
Yes
或No
建議晶片,即可回覆提示。(你也可以說「是」或「否」,或在「輸入」欄位中輸入Yes
或No
)。
當你回覆提示時,動作會傳送訊息,指出無法理解你的輸入內容:「很抱歉,我沒聽清楚。可以請你再試一次嗎?」由於您尚未設定 Action,讓 Action 瞭解並回覆「是」或「否」輸入內容,因此 Action 會將您的輸入內容與 NO_MATCH
意圖相符。
根據預設,NO_MATCH
系統意圖會提供一般回應,但您可以自訂這些回應,向使用者表示您不瞭解他們輸入的內容。如果 Google 助理無法比對使用者輸入內容,就會在三次後結束與你 Action 的對話。
新增 yes
和 no
意圖
現在使用者可以回應動作提出的問題,因此您可以設定動作來瞭解使用者的回應 (「是」或「否」)。在下列章節中,您將建立使用者意圖,當使用者說「是」或「否」時,系統會比對這些意圖,並將這些意圖新增至 Start
場景。
建立 yes
意圖
如要建立 yes
意圖,請按照下列步驟操作:
- 按一下導覽列中的「開發」。
- 按一下導覽列中的「Custom Intents」(自訂意圖),開啟意圖清單。
- 按一下意圖清單結尾的「+」(加號)。
- 為新意圖命名
yes
並按下Enter
。 - 按一下
yes
意圖,開啟yes
意圖頁面。 - 在「新增訓練詞組」部分中,按一下「輸入詞組」文字方塊,然後輸入下列詞組:
Yes
Y
I would
Tell me
- 按一下 [儲存]。
將 yes
意圖新增至 Start
場景
現在,動作可以瞭解使用者何時表達「是」的意圖。由於使用者正在回應 Start
提示 (「在繼續冒險前,要不要算命?」),因此您可以將 yes
使用者意圖新增至 Start
場景。
如要將這個使用者意圖新增至 Start
場景,請按照下列步驟操作:
- 按一下導覽列中的「開始」場景。
- 在「使用者意圖處理」旁的
Start
場景中,按一下「+」(加號)。 - 在意圖下拉式選單中選取「是」。
- 按一下「傳送提示」,然後將
speech
欄位更新為下列文字:Your future depends on the aid you choose to use for your quest. Choose wisely! Farewell, stranger.
編輯器中的程式碼應如下列程式碼片段所示:
candidates:
- first_simple:
variants:
- speech: >-
Your future depends on the aid you choose to use for your quest. Choose
wisely! Farewell, stranger.
- 在「轉移」部分中,按一下下拉式選單,然後選取「結束對話」。
- 按一下 [儲存]。
在模擬工具中測試 yes
意圖
此時,Action 會瞭解使用者何時想聽取運勢,並傳回適當的回應。
如要在模擬器中測試這項意圖,請按照下列步驟操作:
- 在導覽列中,按一下「測試」。
- 如要在模擬器中測試動作,請在「輸入內容」欄位中輸入
Talk to my test app
,然後按下Enter
。 - 在「Input」欄位中輸入
Yes
,然後按下Enter
鍵。或者,按一下「是」建議晶片。
你的動作會回應使用者,並告知他們運勢取決於所選的輔助工具。由於您為 yes
意圖選取 End conversation
轉移,因此 Action 會結束工作階段。
建立 no
意圖
現在,您需要建立 no
意圖,以便在使用者不想聽取運勢時瞭解並回應。如要建立這項意圖,請按照下列步驟操作:
- 按一下導覽列中的「開發」。
- 按一下導覽列中的「Custom Intents」(自訂意圖),開啟意圖清單。
- 按一下意圖清單結尾的「+」(加號)。
- 為新意圖命名
no
並按下Enter
。 - 按一下「否」,開啟「
no
」意圖」頁面。 - 在「新增訓練詞組」部分中,按一下「輸入詞組」文字方塊,然後輸入下列詞組:
No
N
I don't want
nope
- 按一下 [儲存]。
將 no
意圖新增至 Start
場景
現在,動作可以瞭解使用者何時表達「否」或類似「否」的內容,例如「不要」。您需要在 Start
場景中新增 no
使用者意圖,因為使用者正在回應 Start
提示 (「繼續冒險前,要不要先算算命?」)。
如要為 Start
場景新增這項意圖,請按照下列步驟操作:
- 按一下導覽列中的「開始」場景。
- 在「User intent handling」旁的
Start
場景中,按一下「+」(加號)。 - 在「意圖」部分,從下拉式選單中選取「否」。
- 按一下「傳送提示」。
- 將
speech
欄位更新為下列文字:I understand, stranger. Best of luck on your quest! Farewell.
編輯器中的程式碼應如下列程式碼片段所示:
candidates:
- first_simple:
variants:
- speech: >-
I understand, stranger. Best of luck on your quest! Farewell.
- 在「轉移」部分,從下拉式選單中選取「結束對話」。
- 按一下 [儲存]。
在模擬工具中測試 no
意圖
此時,動作會瞭解使用者不想聽取運勢,並傳回適當的回應。
如要在模擬器中測試這項意圖,請按照下列步驟操作:
- 在導覽列中,按一下「測試」。
- 在「Input」欄位中輸入
Talk to my test app
,然後按下Enter
鍵。 - 在「Input」欄位中輸入
No
,然後按下Enter
鍵。或者,按一下「否」建議方塊。
Action 不會為使用者預測運勢,而是祝他們旅途順利。由於您為 no
意圖選取 End conversation
轉移,因此 Action 會結束工作階段。
5. 實作執行要求
目前動作的回應是靜態的,也就是說,當含有提示的場景啟動時,動作每次都會傳送相同的提示。在本節中,您將實作「執行要求」,其中包含建構動態對話式回應的邏輯。
執行要求會判斷使用者是回訪者還是新使用者,並修改回訪者的 Action 歡迎訊息。如果是回訪使用者,問候訊息會縮短,並感謝使用者回訪:「冒險家,歡迎回來!歡迎回到神秘的格里芬堡!"
在本程式碼研究室中,請使用 Actions 控制台的 Cloud Functions 編輯器編輯及部署執行要求程式碼。
您的動作可以觸發網路鉤子,在叫用期間或場景執行的特定部分發生事件時,通知您的完成情況。觸發 Webhook 時,動作會將要求連同處理事件的處理常式名稱,一併以 JSON 酬載的形式傳送至執行要求。這個處理常式會執行一些邏輯,並傳回對應的 JSON 回應。
建構執行要求
您現在可以在內嵌編輯器中修改完成動作,以便在回訪使用者和新使用者叫用動作時,產生不同的提示。
如要將這項邏輯新增至執行要求,請按照下列步驟操作:
- 按一下導覽列中的「開發」。
- 按一下導覽列中的「Webhook」分頁標籤。
- 勾選「Inline Cloud Functions」核取方塊。
- 按一下「Confirm」(確認)。系統會自動為
index.js
和package.json
檔案新增樣板程式碼。
- 將
index.js
的內容替換為下列程式碼:
index.js
const { conversation } = require('@assistant/conversation');
const functions = require('firebase-functions');
const app = conversation({debug: true});
app.handle('greeting', conv => {
let message = 'A wondrous greeting, adventurer! Welcome back to the mythical land of Gryffinberg!';
if (!conv.user.lastSeenTime) {
message = 'Welcome to the mythical land of Gryffinberg! Based on your clothes, you are not from around these lands. It looks like you\'re on your way to an epic journey.';
}
conv.add(message);
});
exports.ActionsOnGoogleFulfillment = functions.https.onRequest(app);
- 按一下「儲存出貨資訊」。
- 按一下「Deploy Fulfillment」(部署履行)。
請稍候幾分鐘,Cloud Functions 會佈建及部署你的履行服務。程式碼編輯器上方應會顯示「Cloud Function deployment in progress...」(Cloud Functions 部署作業進行中...) 訊息。程式碼成功部署後,訊息會更新為「您的 Cloud Functions 部署作業已是最新版本」。
瞭解程式碼
執行要求會使用 Node.js 適用的 Actions on Google 執行要求資料庫,回應 Google 助理的 HTTP 要求。
在上述程式碼片段中,您定義了 greeting
處理常式,該常式會檢查 lastSeenTime
屬性,判斷使用者是否曾造訪動作。如果未定義 lastSeenTime
,表示使用者是新使用者,且 greeting
處理常式會提供新使用者問候語。
更新主要呼叫,觸發 Webhook
定義 greeting
函式後,您可以在主要叫用意圖中設定 greeting
事件處理常式,讓 Action 知道使用者叫用 Action 時要呼叫這個函式。
如要設定動作來呼叫新的 greeting
處理常式,請按照下列步驟操作:
- 按一下導覽列中的「主要叫用」。
- 清除「傳送提示」。
- 選取「呼叫 Webhook」核取方塊。
- 在文字方塊中新增
greeting
。
- 按一下 [儲存]。
在模擬器中測試更新後的主要叫用
如要在模擬器中測試動作,請按照下列步驟操作:
- 按一下導覽列中的「測試」,即可前往模擬器。
- 在「Input」欄位中輸入
Talk to my test app
,然後按下Enter
鍵。
由於您在本程式碼研究室中已測試過動作,因此並非新使用者,會收到以下簡短的問候語:「冒險家,您好!歡迎回到神秘的格里芬堡!..."
清除專案所用資源 (建議)
為避免產生可能的費用,建議您移除不打算使用的專案。如要刪除在本程式碼研究室中建立的專案,請按照下列步驟操作:
- 如要刪除 Cloud 專案和資源,請完成「關閉 (刪除) 專案」一節列出的步驟。
- 選用:如要立即從 Actions 管理中心移除專案,請完成「刪除專案」一節列出的步驟。如果未完成這個步驟,專案會在約 30 天後自動移除。
6. 恭喜!
您已瞭解如何為 Google 助理建構動作。
涵蓋內容
- 如何使用 Actions 控制台設定 Actions 專案
- 如何將提示新增至主要叫用,讓使用者能與動作展開對話
- 如何使用場景、意圖、轉場效果、建議方塊和完成動作,建立對話式介面
- 如何使用 Actions 模擬器測試動作
瞭解詳情
如要進一步瞭解如何為 Google 助理建構動作,請參閱下列資源:
- 使用 Actions Builder 為 Google 助理設計動作 (第 2 級) 程式碼研究室,繼續建構本程式碼研究室的對話動作
- 開發 Google 助理動作的官方說明文件網站
- Actions on Google GitHub 頁面,提供程式碼範例和程式庫
- 專為使用 Google 助理的開發人員開設的官方 Reddit 社群
- 在 Twitter 上追蹤 @ActionsOnGoogle,掌握最新公告 (使用 #AoGDevs 發布推文,分享您建構的內容)
意見回饋問卷調查
離開前,請填寫簡短的問卷調查,分享你的體驗。