实操:Women in Voice 研讨会

1. 简介

在本实验中,您将使用 Dialogflow 构建一个简单的操作,并学习如何将其与 Google 助理相集成。

练习按如下顺序排列,以反映常见的云开发者体验:

  1. 创建 Dialogflow v2 代理
  2. 创建实体
  3. 创建意图
  4. 使用 GCP Cloud Functions 函数设置 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

  1. 指定代理名称:yourname-wiv(使用您自己的名称)
  2. 选择 English - en 作为默认语言。
  3. 选择离您最近的时区作为默认时区。
  4. 请勿选择 Mega Agent。(借助此功能,您可以创建一个总体代理,该代理可以在“子级”代理之间进行编排。我们目前不需要该资源。)
  5. 点击创建

382af956cbf308a4

配置 Dialogflow

  1. 点击左侧菜单中项目名称旁边的齿轮图标。

1d7c2b56a1ab95b8

  1. 输入以下代理说明:Women in Voice 代理
  2. 向下滚动到 Beta 版功能,然后将开关切换到开启状态,以启用 Beta 版功能。
  3. 向下滚动到 Log Settings(日志设置),将两个开关切换为“记录 Dialogflow 的互动”以及记录 Google Cloud Stackdriver 中的所有互动。我们稍后需要使用它,以便调试操作。

e80c17acc3cce993.png

  1. 点击保存
  2. 点击完成

配置 Actions on Google

  1. 在右侧面板中,点击了解它在 Google 助理中的工作原理中的 Google 助理链接。

5a4940338fc351e3

此操作将打开:http://console.actions.google.com

注意:请务必使用 Dialogflow 所用的同一 Google 账号登录。

初次使用 Actions on Google,您需要先填写此表单:

3fd4e594fa169072

  1. 点击项目名称,尝试在模拟器中打开您的操作**。**
  2. 在菜单栏中选择 开发

取消选中匹配用户的语言设置。为了确保文字转语音合成器不会被 Google 助理默认语言所取代。

3b6bc284050571f5

  1. 点击保存
  2. 在菜单栏中选择 Test

dd55b141677932fe.png

  1. 确保模拟器设置为 English,然后点击 Talk to my test-app

该操作将使用基本的 Dialogflow 默认 intent 向您致以问候。这意味着,您成功设置了与 Action on Google 的集成!

配置 Google Cloud

在本教程中,您将需要一个带有结算账号的 GCP 账号。如果您还没有账号,可以按照以下步骤创建一个。

通常情况下,结算账号会要求提供信用卡等付款方式。对于本次研讨会,我们可以使用可以跳过此过程的研讨会积分。

  1. 导航到此网址并登录

gcpcredits.com/wivnl

  1. 点击:点击此处访问您的赠金
  2. 点击“接受并继续

大功告成!这样您就创建了一个价值 25 美元的结算账号,该金额应该足以支持长时间使用 Cloud Functions。

启用 Google Sheets API

如果代理需要的不仅仅是静态 intent 响应(例如,从网络服务、数据库或表格提取数据),您需要使用 fulfillment 将网络服务连接到代理。通过连接网络服务,您可以根据用户表达执行操作,并将动态响应发送回用户。

例如,如果用户想要接收博客或图书提示,您的 Web 服务可以检查数据库,并响应用户要阅读的文章。

在本教程中,我们将使用 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

  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

  1. 点击此选项,然后点击顶部的启用 Google Sheets API 按钮。

4b41a64a6cd5a37e

3. 自定义实体

实体是您的应用或设备对其执行操作的对象。可以将其视为参数 / 变量。在操作中,我们会要求:

“我想获得关于

聊天机器人

/ 我想阅读关于

voice*"*

无论您说的是聊天机器人、Voice,还是二者兼有,系统都会从自定义实体中收集这些信息,并将其用作我向网络服务发送的请求中的参数。

详细了解 Dialogflow 实体

创建频道实体

  1. 在 Dialogflow 控制台中点击菜单项实体
  2. 点击创建实体
  3. 实体名称:tech(请确保全为小写)
  4. 使用同义词指定选项。(您可以使用 Tab 键在界面中导航。)
  • Chatbots - Chatbots, Chat, Web
  • Voice - Voice, Voicebots, Voice Assistants
  • Both - Both, All

f9b213472a75915b.png

5**。**点击蓝色保存按钮旁边的菜单按钮,切换到 **Raw Edit** 模式。

e294b49b123e034f.png

  1. 请注意,您也可以输入 CSV 格式的所有实体。当您需要创建大量实体时,这非常方便。
"Chatbots","Chatbots","Chat","Web"
"Voice","Voice","Voicebots","Voice Assistants"
"Both","Both","All"

6cfaa328bcd2bad3

  1. 点击保存

4. intent

Dialogflow 使用意图对用户的意图进行分类。意图包含训练短语,即用户可能对代理说的话的示例。

例如,想要知道谁想知道下一次事件何时发生的用户可能会问:

“下一次聚会是什么时候?”

当用户输入或说出某些内容(称为“用户表述”)时,Dialogflow 会将用户表述与代理中的最佳意图进行匹配。匹配 intent 也称为“意图分类”

详细了解 Dialogflow intent

修改默认欢迎 intent

创建新的 Dialogflow 代理时,系统会自动创建两个默认意图。默认欢迎意图是您与代理开始对话时到达的第一个流程。默认后备意图 (Default Fallback Intent) 是当代理无法理解您的指令或无法将某个意图与您刚刚说过的内容相匹配时您获得的流程。

  1. 点击意图 >默认欢迎意图

如果是 Google 助理,则会自动以“默认欢迎 intent”启动。这是因为 Dialogflow 正在监听欢迎事件。但是,您也可以通过说出其中一个输入的训练短语来调用 intent。

17610dbd5450e53.png

以下是“默认欢迎意图”的欢迎消息:

用户

客服人员

“Ok Google,跟 <您的姓名>-WIV 交谈”

“你好,我是 Women in Voice 的虚拟客服

  1. 向下滚动到响应
  2. 清除所有文本响应。
  3. 在默认标签页中,创建以下 3 个响应。(点击 添加响应 > 文本 或 SSML 响应,对于每个新行:)
  • 大家好,我叫 Anna,是 Women in Voice 的虚拟客服。
  • 你可以让我了解有关聚会、“Women in 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. 我们来测试此 intent。首先,我们可以在 Dialogflow 模拟器中进行测试。

类型:Hello。它应该返回此消息。

12d40056fbd25dfe

  1. 现在,切换回 Actions on Google 控制台。

(您可能想将其保存在另一个标签页中。)

点击“与我的测试应用对话”。并收听新的欢迎信息。

修改默认后备 intent

  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 助理的输出内容,系统会采用默认设置。

创建停止 intent

  1. 点击意图菜单项。
  2. 点击创建意图
  3. 输入 intent 名称: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. 切换开关:将此 intent 设为对话结束。这将确保在匹配此 intent 后,它会关闭 Google 助理操作。

ba532398680d457d.png

  1. 点击保存

创建聚会意图

聚会意图将包含对话的这一部分:

用户

客服人员

“下一次聚会是什么时候?”

“下一次聚会定在 <date>在<time>位于<location>。主题是<topic>。演讲者是:<speakers>。您可以通过我们的简报报名。”

  1. 点击意图菜单项。
  2. 点击创建意图
  3. 输入 intent 名称:Meetup Intent(请确保使用大写的 M 和大写的 I。- 如果 intent 的拼写形式不同,后端服务将不起作用!)
  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. 点击 Fulfillment >启用 Fulfillment

7eb73ba04d76140e

  1. 切换为此 intent 启用网络钩子调用开关。

748a82d9b4d7d253

  1. 点击保存

创建提示 intent

提示 intent 将包含对话的这一部分:

用户

客服人员

“我想要阅读提示。”

“您是想详细了解聊天机器人、Voice 还是两者兼顾?”

“Voice”

“好的,下面是今日提示!<type>&lt;title&gt;<author>的作者。想了解其他图书或文章提示吗?此外,我还可以向您详细介绍聚会或我们的工作内容。您需要什么帮助?”

  1. 再次点击意图菜单项。
  2. 点击创建意图
  3. 输入 intent 名称:Tip Intent(请务必大写 L 和 I。- 如果 intent 的拼写形式不同,后端服务将不起作用!)
  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. 技术标记为同等

7cdf7fdf5d2c3fbe.png

点击 Define Prompt,然后输入以下内容:

  • Do you want to read more about Chatbots, Voice or Both?
  1. 点击 Fulfillment >启用 Fulfillment

这次,我们不会对响应进行硬编码。响应将来自 Cloud Functions 函数!因此,请翻转为此 intent 启用网络钩子调用开关。

点击 Fulfillment >启用 Fulfillment

7eb73ba04d76140e

  1. 切换为此 intent 启用网络钩子调用开关。

748a82d9b4d7d253

  1. 点击保存

5. 知识连接器

知识连接器是对所定义的意图的补充。它们通过解析知识文档来找出自动响应。(例如,CSV 文件、在线网站甚至 PDF 文件中的常见问题解答或文章!)如需配置知识库,您需要定义一个或多个知识库,即知识文档的集合。

详细了解知识连接器。

我们来试试看。

  1. 选择 en 标记,以在顶部菜单中选择英语。
  2. 在菜单中选择知识(Beta 版)。

e0a3d2e03dd1076c.png

  1. 点击右侧蓝色按钮:Create Knowledge Base
  2. 输入知识库名称;依次点击 Women in Voice保存
  3. 点击 Create the first one(创建首个)链接。

9b2ca6b25c4100ab

  1. 系统会打开一个窗口。

使用以下配置:

文档名称:Women in Voice 常见问题解答表格

知识类型:常见问题解答

MIME 类型:CSV

  1. 我们需要此工作表中的数据,请确保已打开该数据表,然后选择“常见问题解答”标签页
  2. 选择文件 >下载 >CSV 文件

e7f0066408fc1721.png

  1. 返回 Dialogflow,点击从计算机上传文件,然后选择您下载的 CSV 文件。点击创建

已创建知识库:

64513e2e484dda31

  1. 点击添加回复

回答以下问题并点击保存

$Knowledge.Answer[1]

  1. 点击查看详情

系统将显示您在 Dialogflow 中实现的所有常见问题解答。

这很简单!

请注意,您还可以指向包含常见问题解答的在线 HTML 网站,将常见问题解答导入您的代理。您甚至可以上传包含一块文本的 PDF,而 Dialogflow 本身将会提出一些问题。

  1. 点击 Dialogflow 菜单中的知识(Beta 版)以返回到所有知识库连接器。
  2. 知识库的优缺点是可以改变的。当您知道常见问题解答是由于您自己的意图是制胜还是失败时,这才是有道理的。由于我们没有太多意图,因此我们增强一下知识库的能力。将比例更改为 -0.2。拖动该滑块后会自动保存该值。

现在,常见问题解答应被视为“额外内容”可添加到代理中。知识库常见问题解答无法训练模型。因此,以完全不同的方式提问,可能不会得到匹配结果,因为它没有利用自然语言理解(机器学习模型)。因此,有时有必要将常见问题解答转换为意图。

6. 网络钩子执行

创建 Google Cloud Functions 函数

  1. 在另一个浏览器标签页中导航到 http://console.cloud.google.com
  2. 在左侧菜单中选择 Cloud Functions
  3. 点击创建函数

bf2441ba1271a95e.png

  1. 指定以下配置:
  • 名称:dialogflow
  • 分配的内存:256MiB
  • 触发器:HTTP
  • 将网址复制到剪贴板。
  • 选择内嵌编辑器
  • 运行时:NodeJS 8
  • 要执行的函数:dialogflow
  1. 确保选中此身份验证复选框:

317140d44ec3299c

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 intent 进行分类。它利用库的时刻来处理日期和时间对象。

/* 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 Functions 函数之前,我们将在 index.js 标签页中更改一行代码。第三行代码:

const ACCOUNTS_SHEET_ID = '1Yo_E8KONgSiUm00ZmTOqtjXCwULmc2JuI3sjxRyvrkE';

在前面的步骤中,我们在“记事本”中记下了这个键。因此,请复制此 ID 并将其粘贴到您的代码中。

  1. 现在,我们已准备就绪。点击创建按钮。请稍等片刻,因为需要部署无服务器函数。

在 Dialogflow 中启用 fulfillment

  1. 切换回 Dialogflow
  2. 点击主菜单中的 Fulfillment
  3. 启用 Webhook 开关。
  4. 输入复制到剪贴板的 Cloud Functions 函数的网址。

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

  1. 点击保存

89dfd437c6689538

  1. 我们来测试 webhook,看看代码能否正常运行,并直接在 Dialogflow 模拟器中测试流程。

297e8f7ed1b9e801

7. Actions on Google

Actions on Google 是一个用于 Google 助理的开发平台。它允许第三方开发“操作”,即提供扩展功能的 Google 助理小程序。

您需要让 Google 打开某个应用或与该应用对话,以调用 Google 操作。

此操作会打开您的操作并更改语音,您就会退出“原生”Google 助理范围。这意味着,从现在开始,您向代理提出的所有要求都需要由您创建。在您自己的操作中,您无法突然向 Google 助理询问 Google 天气信息(如果需要的话);您应先退出(关闭)当前操作(您的应用)的范围。

在 Google 助理模拟器中测试您的 Action

让我们来测试以下对话:

用户

Google 助理

“Hey Google,跟我的测试应用对话。”

“获取应用的测试版。”

用户

您的姓名-WIV

-

“大家好,我是 Women in Voice 的虚拟客服 Anna。你可以让我了解有关聚会、Women in Voice 或阅读提示的信息。您想了解什么?”

我可以提供关于博客的提示吗?

“您是想详细了解聊天机器人、Voice 还是两者兼顾?”

聊天机器人

“好的,下面是今日提示!The Article Chatbots And the Challenge Of Invisible Affordances of Cobus Greyling.(The Article Chatbots And the Challenge Of Invisible Affordances of Cobus Greyling.(文章聊天机器人和 Cobus Greyling 的隐形功能挑战)。您想了解其他图书或文章提示吗?此外,我还可以向您详细介绍聚会或我们的工作内容。您需要什么帮助?”

下一次聚会是什么时候?

“下一次聚会将于 4 月 29 日下午 6:00 通过虚拟环聊举行。主题将是在线研讨会:使用 Dialogflow 创建 Google Actions!您可以通过我们的简报报名。您还需要其他方面的帮助吗?”

您网站的网址是什么?

“您可以访问 www.womeninvoice.com。Is there else I can do for you?”

不用了,谢谢

“好的!希望能在我们的聚会中见到您!”

  1. 切换回 Google 助理模拟器

打开: https://console.actions.google.com

  1. 点击麦克风图标,然后进行下面的问题:

aa43d7f1568c4d80.png

  • Talk to my test app.
  1. 现在,我们来问问:
  • Can I have a tip for a blog?

此时应返回:

“您是想详细了解聊天机器人、Voice 还是两者兼顾?”

  • Chatbots

“好的,下面是今日提示!The Article Chatbots And the Challenge Of Invisible Affordances of Invisible Affordances of Cobus Greyling.

想了解其他图书或文章提示吗?此外,我还可以向您详细介绍聚会或我们的工作内容。您需要什么帮助?”

  1. 我们来试试同一问题的不同版本:
  • "Yes, I want to read more about Voice"

“好的,下面是今日提示!The Book Designing Voice User Interfaces: Principles of Conversational Experiences。...是 Cathy Pearl 的一员。

想了解其他图书或文章提示吗?此外,我还可以向您详细介绍聚会或我们的工作内容。您需要什么帮助?”

请注意,您以前从未在 Dialogflow 中使用过此训练短语。它刚刚匹配了正确的意图。

另请注意,您没有收到后续问题,因为您提供了足够的信息供 Dialogflow 继续操作。

  1. 使用以下短语继续 Dialogflow:
  • What's the URL for your website
  • Bye

a0bd5578d6833c98.png

出现错误?检查日志!

每当您在 Cloud Functions 函数代码中使用 console.log() 时,数据都会写入您的 GCP 日志 (Stackdriver)。您可以打开 Cloud 控制台 >日志记录

在第一个下拉列表中,您可以选择 Cloud Functions 函数 >dialogflow 来过滤日志。

8. 恭喜

您已经使用 Dialogflow 创建了您的第一个 Google 助理操作,太棒了!

您可能已经注意到,您的 Action 是在与您的 Google 账号关联的测试模式下运行的。如果您想使用同一账号登录 Nest 设备或 iOS 或 Android 手机上的 Google 助理应用。您也可以测试自己的操作。

现在是研讨会演示。但是,如果你正在构建真正的 Google 助理应用,则可以提交你的 Action 以供审批。如需了解详情,请阅读本指南。

所学内容

  • 如何使用 Dialogflow v2 创建聊天机器人
  • 如何使用 Dialogflow 创建自定义实体
  • 如何使用 Dialogflow 创建线性对话
  • 如何使用 Dialogflow 和 Google Cloud Functions 设置 webhook 执行方式
  • 如何通过 Actions on Google 将应用引入 Google 助理

后续操作

喜欢此 Codelab?快来看看这些优秀的实验吧!