實作活動:女用 Voice 研討會

1. 簡介

在這個研究室中,您將使用 Dialogflow 建構簡單的動作,並瞭解如何與 Google 助理整合。

這些練習經過排序,以反映常見的雲端開發人員體驗:

  1. 建立 Dialogflow v2 虛擬服務專員
  2. 建立實體
  3. 建立意圖
  4. 使用 GCP Cloud 函式設定 Webhook
  5. 使用知識庫匯入常見問題
  6. 測試聊天機器人
  7. 啟用 Google 助理整合功能

建構目標

我們將為 Women in Voice 聚會團體打造 Google 助理應用程式。能夠詢問下一場聚會的時間、文章與預訂有關聚會團體的提示或一般問題。

課程內容

  • 如何使用 Dialogflow v2 建立聊天機器人
  • 如何使用 Dialogflow 建立線性對話
  • 如何利用實體
  • 如何善用知識庫
  • 如何使用 Dialogflow 和 GCP 函式設定 Webhook 執行要求
  • 如何透過 Actions on Google 將應用程式與 Google 助理整合

必要條件

2. 開始設定

在瀏覽器中啟用網路活動

  1. 點選:http://myaccount.google.com/activitycontrols

  1. 確認應用程式活動已啟用

bf8d16b828d6f79a.png

建立 Dialogflow 虛擬服務專員

  1. 開啟:https://console.dialogflow.com

  1. 在左側列的標誌下方,選取 [Create New Agent] (建立新代理程式)。如果您有現有服務專員,請先點選下拉式選單。

1d7c2b56a1ab95b8.png

  1. 指定代理程式名稱:yourname-wiv (使用自己的名稱)
  2. 預設語言為 [英文 - en]
  3. 將時區設為預設時區,請選擇離你最近的時區。
  4. 「請勿」選取 Mega Agent。(有了這項功能,您就可以建立整體代理程式,並在「子」代理程式之間進行自動化調度管理,我們現在不需要這項資訊)。
  5. 按一下 [建立]

382af956cbf308a4.png

設定 Dialogflow

  1. 在左側選單中,按一下專案名稱旁邊的「齒輪」圖示。

1d7c2b56a1ab95b8.png

  1. 輸入以下虛擬服務專員說明:Women in Voice agent
  2. 向下捲動至「Beta 版功能」並切換切換鈕,即可啟用 Beta 版功能。
  3. 向下捲動至「Log Settings」(記錄設定),然後左右切換兩個開關,以記錄 Dialogflow 互動,並在 Google Cloud Stackdriver 中記錄所有互動。稍後需要輸入這個 ID,以便對動作進行偵錯。

e80c17acc3cce993.png

  1. 點選「儲存」
  2. 然後按一下 [完成]

設定 Actions on Google

  1. 在右側面板中點選「瞭解 Google 助理的運作方式」中的「Google 助理」連結。

5a4940338fc351e3.png

隨即開啟:http://console.actions.google.com

注意:請務必使用與 Dialogflow 相同的 Google 帳戶登入。

如果您是第一次使用 Actions on Google,請先填妥這份表單:

3fd4e594fa169072.png

  1. 按一下專案名稱,嘗試在模擬器中開啟動作**。**
  2. 選取選單列中的「開發」

取消勾選「比對使用者的語言設定」。確保 Google 助理預設語言不會取代文字轉語音合成器。

3b6bc284050571f5.png

  1. 點選「儲存」
  2. 在選單列中選取「測試」

dd55b141677932fe.png

  1. 確認模擬工具已設為「English」,然後按一下「Talk to my test-app」

這項操作將以基本 Dialogflow 預設意圖向您問候。也就是說,與 Action on Google 整合的設定可順利運作!

設定 Google Cloud

在本教學課程中,您需要擁有已連結帳單帳戶的 GCP 帳戶。如果你還沒有 Google 帳戶,可以按照下列步驟建立帳戶。

一般來說,帳單帳戶需要提供信用卡等付款方式。我們可以利用研討會的抵免額來略過這項程序。

  1. 前往這個網址並登入

gcpcredits.com/wivnl

  1. 按一下:按這裡取得抵免額
  2. 按一下 [接受並]繼續

大功告成!您已建立一筆 $25 美元的帳單帳戶,金額應足以長時間使用 Cloud Functions。

啟用 Google Sheets API

如果您的代理程式需要靜態意圖回應以外的內容 (例如從網路服務、資料庫或試算表擷取資料),則您必須使用執行要求將網路服務連結至代理程式。連結網路服務後,即可根據使用者表達內容執行動作,並將動態回應傳回給使用者。

舉例來說,如果使用者想要接收網誌或書籍小費,您的網路服務可以登記資料庫,並回覆使用者想閱讀的文章。

在這個教學課程中,我們不會使用資料庫,而是使用 Google 試算表。工作表更新後,Google 助理動作也會一併更新。真棒!

  1. 在新的瀏覽器分頁中開啟這份 Google 試算表 (如果尚未開啟):
  2. https://docs.google.com/spreadsheets/d/1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY/edit#gid=1240329448
  3. 重要事項複製這份工作表。按一下「檔案」>建立副本
  4. 試算表複製完成後,按一下「共用」
  5. 我們必須授予 Dialogflow 服務帳戶編輯權限。方法是開啟 Dialogflow >「設定」(設定齒輪圖示)。
  6. 向下捲動至「Google 專案」
  7. 複製服務帳戶 (電子郵件地址) 地址。如下所示:dialogflow-<someid>@<my-gcp-project>.iam.gserviceaccount.com

8bc778a04efb3dd2.png

  1. 將這個服務帳戶貼到 Google 試算表的「共用」彈出式視窗中,然後授予「編輯」權限。

e296b9c069c2028e.png

  1. 接著,請記下你正在使用的工作表 ID。

f9061a3724086bf7.png

    The Sheets URL will look something like this:

https://docs.google.com/spreadsheets/d/1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o/edit#gid=1240329448

    But we are only interested in the Sheet id, which is the part between:

https://docs.google.com/spreadsheets/d//edit#gid=1240329448 (不含斜線)。

    So it will look something like this: **1fPd8b_z19U7ZzAaY327QhYoogn6q8c1rpGSNF8KIR_o**

    **Write this Sheet ID down**, or copy it to Notepad. In the Webhook steps we will use this again.
  1. 在另一個瀏覽器分頁中開啟;http://console.cloud.google.com.(如果您有更多 Google Cloud 專案,請啟用新的 Dialogflow 專案:yourname-wiv)。- 在搜尋列中搜尋:Google Sheets API

8b42de259eb40547.png

  1. 按這裡,然後點選頂端的「啟用」Google Sheets API 按鈕。

4b41a64a6cd5a37e.png

3. 自訂實體

實體是指應用程式或裝置對其執行動作的物件。您可將其視為參數 / 變數。在本活動中,我們會詢問:

"我想掌握有關

聊天機器人

/ 我想掌握有關

聲音*"*

無論你選擇的是聊天機器人、Voice 或兩者,這項資訊都會從自訂實體收集,並做為我向網路服務要求的參數。

如要進一步瞭解 Dialogflow 實體,請參閱本文

建立 Channel 實體

  1. 在 Dialogflow 控制台中,按一下選單項目:[Entities] (實體)
  2. 按一下「建立實體」
  3. 實體名稱:tech (必須全部為小寫)
  4. 使用同義詞指定選項。(您可透過 Tab 鍵存取介面)。
  • Chatbots - Chatbots, Chat, Web
  • Voice - Voice, Voicebots, Voice Assistants
  • Both - Both, All

f9b213472a75915b.png

5**.**按一下藍色儲存按鈕旁的選單按鈕,切換至「原始編輯」模式。

e294b49b123e034f.png

  1. 請注意,您也可以輸入 CSV 格式的所有實體。如果需要建立大量實體,這項功能就很實用。
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"

6cfaa328bcd2bad3.png

  1. 按一下「儲存」

4. 意圖

Dialogflow 使用意圖來分類使用者的意圖。意圖包含訓練詞組,這是使用者可能會向代理程式說的內容範例。

舉例來說,如果使用者想知道想知道下次活動何時可能會問:

「下一場聚會是什麼時候?」

當使用者撰寫或說出特定內容時 (稱為「使用者運算式」),Dialogflow 會將使用者表達內容與代理程式中最相符的意圖進行比對。比對意圖的作業也稱為「意圖分類」

進一步瞭解 Dialogflow 意圖

修改預設歡迎意圖

建立新的 Dialogflow 代理程式時,系統會自動建立兩個預設意圖。預設歡迎意圖是您與代理程式開始對話時進入的第一個流程。「預設備用意圖」是指在代理程式無法理解您,或無法將意圖與您剛剛說的內容配對時,您所使用的流程。

  1. 按一下意圖 >預設歡迎意圖

如果是 Google 助理,系統會自動以預設歡迎意圖自動啟動。這是因為 Dialogflow 正在監聽歡迎事件。不過,您也可以說出輸入的其中一個訓練詞組來叫用意圖。

17610dbd5450e53.png

以下是預設歡迎意圖的歡迎訊息:

使用者

代理程式

「Ok Google,說出「<你的名稱>-WIV」

「你好,我是女性 Voice 的虛擬服務專員 Anna」。「你可以詢問我想知道的見面會、《女用 Voice》或閱讀提示。你想知道哪些資訊?」

  1. 向下捲動至「回應」
  2. 清除所有簡訊回應。
  3. 在預設分頁中建立下列 3 個回應。(請在每一行中按一下 [新增回應] > [文字] 或 SSML 回應:)
  • 大家好,我是 Voice in Voice 的虛擬服務專員 Anna。
  • 你可以詢問我「聚會」、「女用 Voice」或閱讀提示的相關資訊。
  • 您想瞭解什麼資訊?

設定應類似於這張螢幕截圖。

a0078ea79188dcb3.png

  1. 先前的輸出內容用於聊天機器人,我們可以稍微修改輸出內容,特別是 Google 助理。我們會使用 SSML (語音合成標記語言) 來建立句子中的停頓點。按一下「Google 助理」分頁標籤。
  • 「不要」啟用預設切換鈕,以免重複使用聊天機器人訊息。
  • 按一下 [新增回應]>簡要回覆
  • 新增下列文字版本:

Hey there, I'm Anna, the virtual agent of Women in Voice.

You can ask me for information about meetups, Women in Voice or a reading tip. What would you like to know?

  • 然後點選「自訂音訊輸出」
  • 並新增下列 SSML 版本:

<speak><p><s>Hey there, I'm Anna, the virtual agent of Women in Voice.</s><s>

You can ask me for information about meetups, Women in Voice or a reading tip.</s></p><break time="500ms"/><p><s> What would you like to know?</s></p></speak>

設定應類似於這張螢幕截圖。

62f0f58753463fbe.png

  1. 點選「儲存」

如要進一步瞭解 Actions on Google 的 SSML,請參閱這篇文章

  1. 我們來測試這項意圖。首先,我們要在 Dialogflow 模擬器中進行測試。

類型:Hello。系統應會傳回這則訊息。

12d40056fbd25dfe.png

  1. 現在,請切換回 Actions on Google 控制台。

(您可能會想保留在其他分頁中)。

按一下「與我的測試應用程式交談」。然後聆聽新的歡迎訊息

修改預設備用意圖

  1. 按一下意圖 >預設備用意圖
  2. 向下捲動至「回應」
  3. 清除所有簡訊回應。
  4. 在預設分頁中,請逐行建立下列回應,讓各選項在選項間切換:
  • Sorry, can you repeat this?
  • I didn't understand you. You can ask me questions about Women in Voice, a book or article tip or when the next meetup will be.

bdecc217bafff97b.png

  1. 點選「儲存」

請注意,如果你未輸入 Google 助理輸出內容,系統會採用預設輸出方式。

建立停止意圖

  1. 按一下「Intents」選單項目。
  2. 點選「建立意圖」
  3. 輸入意圖名稱:Stop Intent
  4. 按一下「新增訓練詞組」
  • No
  • That's it
  • Bye
  • I don't want that
  • Goodbye
  • It's ok for now
  • Quit
  • I want to stop
  • Close this
  • End the conversation

7ec6455cabdf7e36.png

  1. 向下捲動至「回應」。>新增回覆
  2. 新增下列文字選項:
  • Alright! Hopefully we will see you at one of our meetups!
  • No problem. See you at one of our meetups!
  1. 切換切換鈕:將這項意圖設為對話結束。這麼做可確保系統在比對出這項意圖後,就會關閉 Google 助理動作。

ba532398680d457d.png

  1. 按一下 [儲存]

建立 Meetup 意圖

Meetup 意圖會包含以下對話內容:

使用者

代理程式

「下一場聚會是什麼時候?」

"下一場聚會將於 <日期><time>位於<location>。主題會是「<topic>」。揚聲器是:<speakers>。你可以透過我們的電子報報名。」

  1. 按一下「Intents」選單項目。
  2. 點選「建立意圖」
  3. 輸入意圖名稱:Meetup Intent (請務必使用大寫 M 和大寫 I。- 如果拼寫出不同的意圖,後端服務將無法運作!)
  4. 按一下「新增訓練詞組」
  • When is the next meetup?
  • Do you have any events?
  • Which events are in the planning?
  • Are there meetup events soon?
  • I would love to attend a meetup
  • Can I join a virtual meetup?
  • When will you get together?
  • Can I join?
  • What does your calendar look like?
  1. 按一下「執行要求」>「執行要求」啟用執行要求

7eb73ba04d76140e.png

  1. 翻轉「Enable Webhook call for this intent」切換鈕。

748a82d9b4d7d253.png

  1. 按一下「儲存」

建立提示意圖

小費意圖會包含對話中的以下部分:

使用者

代理程式

「我想獲得閱讀提示。」

「你想要進一步瞭解聊天機器人、語音,還是兩者?」

「語音服務」

"好的,以下是今日的秘訣!<type>&lt;title&gt;<author>。需要其他書籍或文章的小秘訣嗎?此外,我可以協助你進一步瞭解聚會或我們的活動。需要什麼協助嗎?」

  1. 再次按一下「Intents」(意圖) 選單項目。
  2. 點選「建立意圖」
  3. 輸入意圖名稱:Tip Intent (請務必使用大寫 L 和大寫 I。- 如果拼寫出不同的意圖,後端服務將無法運作!)
  4. 按一下 [新增訓練詞組],並新增下列內容:
  • Can I get a tip for an article?
  • I would like to receive a reading tip
  • Any book tips?
  • What's nice to read?
  • I want to learn more about Chatbots, what should I read?
  • What are nice blogs?
  • Do you have book suggestions?
  • I want to receive information about Both
  • Can I have Chatbots reading tip
  • I would like to read more about Voice
  • Voice please
  • Both are okay.
  • Reading tip
  • Tip
  • Blog
  • Article
  • Book
  • Book suggestions
  • Yes
  • Yeah
  • Another tip
  • Yes one more
  1. 向下捲動至「動作和參數」
  2. tech 標示為 quired

7cdf7fdf5d2c3fbe.png

點選「定義提示」,然後輸入以下內容:

  • Do you want to read more about Chatbots, Voice or Both?
  1. 按一下「執行要求」>「執行要求」啟用執行要求

這次,我們不會將回應寫死。回應將來自 Cloud 函式!因此,請翻轉「Enable Webhook call for this intent」切換鈕。

按一下「執行要求」>「執行要求」啟用執行要求

7eb73ba04d76140e.png

  1. 翻轉「Enable Webhook call for this intent」切換鈕。

748a82d9b4d7d253.png

  1. 按一下「儲存」

5. 知識連接器

知識連接器可與已定義的意圖互補。專家會剖析知識文件,找出自動回覆。(例如 CSV 檔案、線上網站或 PDF 檔案的常見問題或文章)。如要設定知識庫,您必須定義一或多個知識庫 (即知識文件集合)。

進一步瞭解知識連接器

我們來試試。

  1. 選取「en」標記,在頂端選單中選取英文。
  2. 選取選單中的「Knowledge」(Beta 版)

e0a3d2e03dd1076c.png

  1. 按一下右側藍色按鈕:Create Knowledge Base
  2. 輸入知識庫名稱;按一下「Women in Voice」,然後點選「儲存」
  3. 按一下「建立第一個連結」連結。

9b2ca6b25c4100ab.png

  1. 開啟視窗後,

請使用下列設定:

文件名稱:Women in Voice 常見問題表

知識類型:常見問題

Mime 類型:CSV

  1. 我們需要這份工作表中的資料,確認你已開啟資料工作表,然後選取「常見問題」分頁標籤
  2. 選取「檔案」>下載 >CSV

e7f0066408fc1721.png

  1. 返回 Dialogflow,按一下「Upload File from Computer」,然後選取您下載的 CSV 檔案。按一下「建立」

已建立知識庫:

64513e2e484dda31.png

  1. 按一下「新增回應」

建立下列答案,然後按一下「儲存」

$Knowledge.Answer[1]

  1. 按一下「查看詳細資料」

當中會顯示您在 Dialogflow 中實作的所有常見問題。

這太簡單了!

請注意,您也可以連結至線上 HTML 網站,查看常見問題,將常見問題匯入代理程式。你甚至可以上傳含有一段文字的 PDF 檔案,Dialogflow 會提出問題。

  1. 按一下 Dialogflow 選單中的「Knowledge (Beta 版)」,返回所有知識庫連接器。
  2. 知識庫的強度和弱點都可能改變,只要您知道常見問題的勝出組合為何都勝過個人意圖,這個做法就很合理。因為我們沒有太多意圖,所以讓我們的知識庫更強大。將資源調度率變更為 -0.2。拖曳滑桿後,滑桿就會自動儲存數值。

現在常見問題應該會顯示為「額外項目」新增至代理程式,就在意圖流程旁邊。知識庫常見問題無法訓練模型。因此,以截然不同的方式提問,可能會因為沒有使用自然語言理解 (機器學習模型) 而成為相符項目。因此,有時建議你將常見問題轉換成意圖。

6. Webhook 執行要求

建立 Google Cloud 函式

  1. 請在另一個瀏覽器分頁中前往 http://console.cloud.google.com
  2. 選取左選單中的「Cloud Functions」
  3. 按一下「建立函式」

bf2441ba1271a95e.png

  1. 指定下列設定:
  • 名稱:dialogflow
  • 分配的記憶體:256MiB
  • 觸發條件:HTTP
  • 將網址複製到剪貼簿。
  • 選取「Inline Editor」(內嵌編輯器)
  • 執行階段:NodeJS 8
  • 要執行的函式:dialogflow
  1. 請確定已勾選這個驗證核取方塊:

317140d44ec3299c.png

61ecb8f57a6fd21b.png

  1. 以下是 package.json 的內容。複製此項目並貼到編輯器的 package.json 分頁中。

這段程式碼會將正確的 npm 程式庫載入 Google Cloud:

{
 "name": "dialogflow",
 "description": "Cloud Functions",
 "engines": {
   "node": "8"
 },
 "dependencies": {
   "request": "^2.85.0",
   "request-promise": "^4.2.5",
   "dialogflow-fulfillment": "^0.6.1",
   "actions-on-google": "^2.2.0",
   "googleapis": "^48.0.0",
   "moment": "^2.24.0"
 },
 "devDependencies": {
   "eslint": "^5.12.0",
   "eslint-plugin-promise": "^4.0.1",
   "ngrok": "^3.2.7"
 },
 "private": true
}
  1. 以下是 index.js 的內容。複製此項目並貼到編輯器的「index.js」分頁中。

這段程式碼會與 googleapis 程式庫整合,以便從 Google 試算表擷取資料。會運用 actions-on-google 程式庫,在 Google 助理裝置上顯示資訊卡。並使用程式庫 dialogflow-fulfillment 將 Dialogflow 意圖分類。而且會利用程式庫的「時刻」來處理日期和時間物件。

/* jshint esversion: 8 */
'use strict';

process.env.DEBUG = 'dialogflow:debug';

const ACCOUNTS_SHEET_ID = '1UWx3WYVCrqz0D4uJ_pO56WeqEPa9rQDG1cfc_H11kgY';

const {
 BasicCard,
 Button,
} = require('actions-on-google');

const {google} = require('googleapis');
const moment = require('moment');
moment.locale('nl');
const { WebhookClient } = require('dialogflow-fulfillment');
var books;
var meetups;

const SHEETS_SCOPE = 'https://www.googleapis.com/auth/spreadsheets.readonly';

/**
* Authenticates the Sheets API client for read-only access.
*
* @return {Object} sheets client
*/
async function getSheetsClient() {
   // Should change this to file.only probably
   const auth = await google.auth.getClient({
       scopes: [SHEETS_SCOPE],
   });
   return google.sheets({version: 'v4', auth});
}

/**
* Return a natural spoken date
* @param {string} date in 'YYYY-MM-DD' format
* @returns {string}
*/
var getSpokenDate = function(date){
   let datetime = moment(date, 'YYYY-MM-DD');
   return `${datetime.format('D MMMM')}`;
};


/* When the tipIntent Intent gets invoked.  */
function tipIntent(agent) {
 var par = agent.parameters.tech;
   var selection = [];
   //console.log(par);
   //console.log(books);
    for(var i = 0; i<books.length; i++){
     if(books[i][2].toLowerCase() == par.toLowerCase()) {
         selection.push(books[i]);
       }
   }
    var random = Math.floor(Math.random() * selection.length);
   var booktip = selection[random];
   //console.log(selection[random]);

   let spokenText = `<p><s>Alright, here's the tip of the day!</s></p><p>The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.</p>`;
   let writtenText = `Alright, here's the tip of the day! The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`;
   //console.log(booktip[8]);
    if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
       let conv = agent.conv();
       conv.ask(`<speak>${spokenText}</speak>`);
       conv.ask(new BasicCard({
           title: `Tip of the day!`,
           subtitle: `${par}`,
           text: `The ${booktip[6]} ${booktip[0]} of ${booktip[1]}.`,
           buttons: new Button({
               title: 'Read',
               url: `${booktip[8]}`,
           })
       }));
       conv.ask(`<speak><p><s>Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?</s></p></speak>`);
       // Add Actions on Google library responses to your agent's response
       agent.add(conv);
   } else {
       agent.add(writtenText + ' Do you want another book or article tip? Also, I can tell you more about meetups or what we do. How can I help?');
   }
}


function meetupIntent(agent) {
 let conv = agent.conv();
 let record;
  console.log(meetups);
  for(var i = 0; i<meetups.length; i++){
   let d = moment(meetups[i][0], 'YYYY-MM-DD');
   let today = moment(new Date());

   if(moment(d).isSameOrAfter(today)) {
     // the i event is not in the past
     record = meetups[i];
     console.log(record);
     break; 
   }
 }
  let date = getSpokenDate(record[0]);
 let spokenText1 = `The next meetup will be ${date} at ${record[1]} in ${record[3]}.`;
 let spokenText2 = `The topic will be <emphasis level="moderate">${record[2]}.</emphasis>`;
 let spokenText3 = `You can register via our newsletter.`;
  let writtenText = `${spokenText1} The topic will be ${record[2]}. ${spokenText3}`;

 if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
   conv.ask(`<speak>${spokenText1} ${spokenText2} ${spokenText3}</speak>`);
   conv.ask(new BasicCard({
     title: `Meetup`,
     subtitle: `${record[2]}`,
     text: `${record[0]} ${record[1]} - ${record[3]}`,
     buttons: new Button({
       title: 'Register',
       url: `http://www.meetup.com`
     })
   }));
   conv.ask('<speak><p><s>Is there anything else I can help you with?</s></p></speak>');
   agent.add(conv);
 } else {
   agent.add(`${writtenText} Is there anything else I can help you with?`);
 }
}

exports.dialogflow = async (request, response) => {
 var agent = new WebhookClient({ request, response });

 console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
 console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
  const client = await getSheetsClient();   
 const allBooks = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Books&Blogs!A:I',
 });
 const allEvents = await client.spreadsheets.values.get({
   spreadsheetId: ACCOUNTS_SHEET_ID,
   range: 'Meetups!A:D',
 });
  books = allBooks.data.values;
 meetups = allEvents.data.values;
 books.shift();
 meetups.shift();

 var intentMap = new Map();
 intentMap.set('Tip Intent', tipIntent);
 intentMap.set('Meetup Intent', meetupIntent);
 agent.handleRequest(intentMap);
};

b130ee596061832c.png

  1. 按一下「環境變數、網路、逾時等」連結

e81c29549f696937.png

  1. 選取「Dialogflow Integrations」服務帳戶。

(根據預設,這個帳戶是使用 GAE App Engine 服務帳戶,但這個帳戶應與您在 Google 試算表內共用的服務帳戶,在本教學課程的第一步中相同。)

61ecb8f57a6fd21b.png

  1. 部署 Cloud 函式之前。我們會變更 index.js 分頁中的一行程式碼。第 3 行程式碼:

const ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';

在第一個步驟中,我們在記事本中把這個鍵寫入記事本。因此,請複製這個 ID 並貼到程式碼中。

  1. 現在我們已做好萬全準備。按一下 [Create] (建立) 按鈕。請稍候,系統正在部署無伺服器函式。

在 Dialogflow 中啟用執行要求

  1. 切換回 Dialogflow
  2. 按一下主選單中的「Fulfillment」
  3. 啟用「Webhook」切換鈕。
  4. 輸入已複製到剪貼簿的 Cloud 函式網址。

例如:https://us-central1-leeboonstra-wiv-uhtefa.cloudfunctions.net/dialogflow

  1. 按一下 [儲存]

89dfd437c6689538.png

  1. 我們來測試 Webhook,看看程式碼是否正常運作,並直接在 Dialogflow 模擬工具中測試流程。

297e8f7ed1b9e801.png

7. Actions on Google

Actions on Google 是 Google 助理的開發平台,Gemini 可讓第三方開發「動作」,也就是為 Google 助理提供擴充功能的小工具。

您必須叫用 Google 動作,方法是要求 Google 開啟或對應用程式說話。

這項操作會開啟動作、變更語音,選擇保留「母語」Google 助理範圍。換句話說,您在此階段要求服務專員的所有資訊都必須由您建立。你無法自行執行動作,突然要求 Google 助理提供 Google 天氣資訊 (如果這是想取得的資訊)請先保留 (關閉) 目前動作 (應用程式) 的範圍。

在 Google 助理模擬工具中測試動作

我們來測試下列對話:

使用者

Google 助理

「Ok Google,和我的測試應用程式交談。」

「取得測試版應用程式。」

使用者

您的姓名-WIV

-

「你好,我是 Voice in Voice 的虛擬服務專員 Anna。你可以詢問參加聚會、「有聲女」或是閱讀提示的相關資訊。請問你想瞭解什麼資訊?」

我可以提供經營網誌的訣竅嗎?

「你想要進一步瞭解聊天機器人、語音,還是兩者?」

聊天機器人

"好的,以下是今日的秘訣!《Cobus Greyling》報導聊天機器人和隱形容錯的挑戰。想再讀一本書或閱讀秘訣嗎?此外,我可以協助你進一步瞭解聚會或我們的活動。需要什麼協助嗎?」

下一場聚會是什麼時候?

「下一場聚會將於 4 月 29 日下午 6:00 透過虛擬 Hangouts 舉行,主題為線上研討會:使用 Dialogflow 建立 Google Actions!歡迎透過我們的電子報報名。還有其他問題需要我們協助嗎?"

網站網址為何?

「我們的網站:www.womeninvoice.com,還有其他問題需要我協助嗎?」

不,謝謝

「好的。希望你能在我們的聚會上相見!」

  1. 切換回 Google 助理模擬器

開啟: https://console.actions.google.com

  1. 按一下麥克風圖示,並詢問下列事項:

aa43d7f1568c4d80.png

  • Talk to my test app.
  1. 現在,請思考:
  • Can I have a tip for a blog?

這應該會傳回:

「你想要進一步瞭解聊天機器人、語音,還是兩者?」

  • Chatbots

"好的,以下是今日的秘訣!《The Article Chatbots and the Challenge Of Cobus Greylings of Cobus Greyling》(科巴斯 Greyling 無形難題的挑戰)。

需要另本書或文章的小秘訣嗎?此外,我可以協助你進一步瞭解聚會或我們的活動。需要什麼協助嗎?」

  1. 請參考同一個問題的其他版本:
  • "Yes, I want to read more about Voice"

"好的,以下是今日的秘訣!The Book Designing Voice Interfaces:對話體驗的原則,...是貓咪珍珠。

需要另本書或文章的小秘訣嗎?此外,我可以協助你進一步瞭解聚會或我們的活動。需要什麼協助嗎?」

請注意,您之前從未在 Dialogflow 中使用這個訓練詞組。只是找到了正確的意圖

另請注意,由於您提供的資訊足以讓 Dialogflow 繼續進行,因此沒有後續回答問題。

  1. 使用下列詞組繼續進行 Dialogflow:
  • What's the URL for your website
  • Bye

a0bd5578d6833c98.png

發生錯誤?請查看記錄檔!

每次在 Cloud 函式程式碼中使用 console.log() 時,資料都會寫入 GCP 記錄 (Stackdriver)。如要存取這些記錄,請開啟 Cloud 控制台 >記錄:

在第一個下拉式選單中,您可以選取「Cloud Function」對話方塊來篩選記錄。

8. 恭喜

您已成功透過 Dialogflow 建立第一個 Google 助理動作!

您可能已經注意到,您的動作是以與 Google 帳戶連結的「測試模式」執行。請在 iOS 或 Android 手機上的 Nest 裝置或 Google 助理應用程式中使用相同的帳戶。您也可以測試動作。

這是研討會示範不過,如果你是為 Google 助理開發人員打造應用程式,可以提交該項動作申請核准。詳情請參閱這份指南

涵蓋內容

  • 如何使用 Dialogflow v2 建立聊天機器人
  • 如何透過 Dialogflow 建立自訂實體
  • 如何使用 Dialogflow 建立線性對話
  • 如何使用 Dialogflow 和 Google Cloud Functions 設定 Webhook 執行要求
  • 如何透過 Actions on Google 將應用程式與 Google 助理整合

後續步驟

喜歡這個程式碼研究室嗎?快去看看這些實用的研究室功能吧!