本页介绍了如何使用 Dialogflow 构建可以理解和响应自然语言的 Google Chat 应用。本指南使用的是与 Google Chat 直接集成的 Dialogflow CX。您还可以按照 Dialogflow ES Google Chat 指南,使用 Dialogflow ES 构建 Dialogflow ES Google Chat 应用。
以一款可帮助用户租车的聊天应用为例用户可能会这样写:“我想租车”。Chat 应用可能会以类似“您想要在哪里取车?”这样的问题进行回应,这会与用户开始类似真人的对话,在预订汽车租赁服务时,Chat 应用能够理解人类语音,并以人类语音做出响应。
这只是一个示例。Dialogflow Chat 应用在所有类型的交互中都非常有用。如果它需要自然的人类语音,则需要 Dialogflow Chat 应用。预建代理可帮助您快速上手,并展示 Dialogflow 的功能,例如:
- 预订航班
- 预约医生
- 订外卖
- 回答有关零售商品清单的问题 例如商品是否有其他颜色可供选择
-
图 2.在 Dialogflow CX 中测试代理,以确保代理的逻辑和配置按预期运行。该图显示了一组连续的主题页面,这些页面涉及对话中的特定步骤(例如为租车设置上车点和还车地点),并配置了连接这些点的逻辑。系统将在模拟器中测试对话。 -
图 3.在 Google Cloud 控制台的 Chat API 配置页面上配置 Chat 应用以使用 Dialogflow CX 代理处理响应。 -
图 4.在 Google Chat 中使用 Dialogflow Chat 应用,讨论租车事宜。
目标
- 设置环境。
- 创建和部署 Dialogflow CX 代理。
- 创建和部署由 Dialogflow CX 代理提供支持的 Chat 应用。
- 测试 Chat 应用。
前提条件
- 一个有权访问 Google Chat 的 Google Workspace 帐号。
- Google Cloud 项目。
- 确保为 Cloud 项目启用结算功能。了解如何验证项目的结算状态。
架构
下图显示了使用 Dialogflow 构建的 Chat 应用的架构:
在上图中,与 Dialogflow Chat 应用交互的用户具有以下信息流:
- 用户在 Chat 中通过私信或 Chat 聊天室向 Chat 应用发送消息。
- 位于 Google Cloud 中的 Dialogflow 虚拟客服会接收和处理消息以生成响应。
- (可选)使用 Dialogflow webhook,Dialogflow 代理可以与外部第三方服务(例如项目管理系统或工单工具)进行交互。
- Dialogflow 代理将响应发送回 Chat 中的 Chat 应用服务。
- 系统会将回复发送到 Chat 聊天室。
设置环境
在使用 Google API 之前,您需要先在 Google Cloud 项目中启用这些 API。您可以在单个 Google Cloud 项目中启用一个或多个 API。在 Google Cloud 控制台中,启用 Google Chat API 和 Dialogflow API。
确认您是在正确的 Cloud 项目中启用 API,然后点击下一步。
确认您启用的 API 正确无误,然后点击启用。
创建 Dialogflow CX 客服
Dialogflow CX 代理是一种虚拟客服,可处理与最终用户的并发对话。它是一个自然语言理解模块,可以理解人类语言的细微差别。Dialogflow 可以在对话过程中将最终用户文本转换为应用和服务可以理解的结构化数据。您可以设计和构建一个 Dialogflow 代理来处理系统所需的对话类型。
Dialogflow 代理就像人类呼叫中心的客服人员。您可以对两者进行训练,以处理预期的对话场景,并且您的训练不需要过于明确。
以下是创建 Dialogflow CX 代理的方法:
在 Dialogflow CX 控制台中,打开 Dialogflow CX 控制台。点击菜单 > Dialogflow CX。
选择一个 Google Cloud 项目。如需查找您的项目,您可能需要点击全部,然后进行搜索。
现在,您可以选择预建代理或创建自己的代理。如果您希望稍后详细了解代理自定义,请选择一个预建代理,这对了解代理的功能也很有帮助。
如需选择预建代理,请按以下步骤操作:
- 点击使用预建代理。
选择预建代理。在本指南中,选择旅行:汽车租赁。
根据代理使用的功能数量以及对话逻辑的复杂程度,我们将代理评为初级、中级或高级。选择中级或高级代理可能需要特定于代理的自定义和设置,包括在 Google Cloud 控制台中启用功能和 API。
点击作为代理导入。
如需创建您自己的代理,请按照下列步骤操作:
- 点击创建代理。
- 选择自动生成可创建数据存储区代理,或选择自行构建以创建其他类型的代理。
如需详细了解代理构建流程,请参阅创建 Dialogflow CX 代理。
配置基本的代理设置:
点击创建。Dialogflow CX 开始创建代理,然后显示代理的默认启动流程。
(可选)自定义代理。如需详细了解代理自定义过程,请参阅创建 Dialogflow CX 代理。
最佳实践是,测试代理:
- 点击 Test agent。
- 选择在环境中测试代理。
- 在“环境”中,选择草稿。
- 在“流”中,选择默认启动流。
- 在“页面”中,选择初始页。
- 在与代理交谈的撰写栏中,输入
Hello
并按 Enter 键。 代理通过自我介绍来进行回应。 - 通过测试示例对话完成测试。
Dialogflow CX 代理已创建。返回到 Dialogflow CX 控制台。 点击菜单 > Dialogflow CX。
在代理下,点击 > 复制名称。请保存此名称,因为您在配置 Chat 应用时使用此名称。
创建一个聊天应用并将其与 Dialogflow 代理连接
创建 Dialogflow CX 代理后,请按照以下步骤将其转换为 Chat 应用:
在 Google Cloud 控制台中,前往 Google Chat API。搜索“Google Chat API”并点击 Google Chat API,然后点击管理。
点击配置并设置 Chat 应用:
- 在应用名称中,输入
Dialogflow App
。 - 在头像网址中,输入
https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
。 - 在说明中,输入
Responds to real human conversation
。 - 在功能下,选择接收 1 对 1 消息和加入聊天室和群组对话。
- 在连接设置下,选择 Dialogflow。
- 在 Dialogflow 设置下,选择 Dialogflow CX。
- 在代理或环境资源名称中,粘贴您在创建 Dialogflow CX 代理末尾复制的 Dialogflow CX 代理名称。
- 将此聊天应用提供给您网域中的特定人员和群组,然后输入您的电子邮件地址。
- 在日志下,选择将错误记录到 Logging。
- 在应用名称中,输入
点击保存。
Chat 应用已准备好接收和回复 Chat 中的消息。
测试 Chat 应用
在 Google Chat 中发送消息以测试 Dialogflow CX Chat 应用。
使用将自己添加为受信任的测试人员时提供的 Google Workspace 帐号打开 Google Chat。
- 点击 发起新对话。
- 在添加一人或多人字段中,输入您的 Chat 应用的名称。
从结果中选择您的 Chat 应用。系统会打开一条私信。
在与应用的新私信对话中,输入
Hello
并按enter
。Dialogflow Chat 应用通过自我介绍来做出响应。
- 通过测试对话示例完成测试。
测试对话示例
如需在 Dialogflow CX 控制台或 Google Chat 中测试 Dialogflow CX Chat 应用,请进行以下对话。该说明可帮助您了解 Dialogflow CX 代理如何解读用户的自然语言,并在对话的每个步骤中生成自己的自然语言响应。此示例对话基于名为“旅行:汽车租赁”的预构建代理。
对话框 | 解释 |
---|---|
最终用户:Hello 代理:Hi!我是虚拟租车代理人。我可以帮你开始新的租车预订。您现在需要什么帮助? |
|
最终用户:我想租车。 代理:Where would you like to take up the vehicle? |
|
最终用户:Las Vegas 代理:Ok, your pickup will be in Las Vegas. 代理:Is your sales off location different from your pickup location? |
|
最终用户:是。我会在洛杉矶还车。 代理:好的,您的下车点将在洛杉矶。 代理:What date and time would you like to Pick up the vehicle? |
|
最终用户:我想在 3 月 5 日中午取车。 代理:What date and time would you like to off the vehicle? |
|
最终用户:3 月 15 日中午。 代理:请确认: You will Picking the vehicle up in Las Vegas 2024-03-05 12:00:00 and put it off in Loswing 2024-03-15 12:00:00 该车辆是否合适? |
|
最终用户:是,谢谢。 代理:Great!现在,让我们选择一辆车。 代理:您想要经济型或豪华车型吗? |
|
最终用户:请尽量经济。 代理:您希望 Cymbal Car or the Cymbal Truck? |
|
最终用户:Cymbal Truck。 代理:The Cymbal Truck is $50.33 per day. 该设备可容纳 4 人,并配有一个 AM/FM 收音机。 要继续付款吗? 最终用户:是的,谢谢。 |
|
代理:What card type will you are using? 最终用户:Altostrat 代理:请输入卡号。 最终用户:1234 1234 1234 1234 代理:What is the name on the card? 最终用户:Charlie 代理:What is the billing street address? 最终用户:1800 Amphibious Blvd. Mountain View, CA 代理:What is the billing ZIP code? 最终用户:94045 代理:You will Picking the Cymbal Car up in Las Vegas, 2024-03-05 12:00:00 and dropping it off, 2024-03-15 12:00:00. 本次行程的总费用为 $175.38。 代理:感谢您与我们租房,并祝您度过愉快的一天! |
|
通过 Dialogflow 发送卡片消息
Dialogflow 可以使用文本或卡片消息进行响应。如需使用卡片消息进行响应,请在 fulfillment 中将其指定为自定义载荷。
以下 JSON 展示了如何将卡片消息作为执行方式中的自定义载荷发送:
json
{
'cardsV2': [{
'cardId': 'createCardMessage',
'card': {
'header': {
'title': 'A card message!',
'subtitle': 'Sent from Dialogflow',
'imageUrl': 'https://developers.google.com/chat/images/chat-product-icon.png',
'imageType': 'CIRCLE'
},
'sections': [
{
'widgets': [
{
'buttonList': {
'buttons': [
{
'text': 'Read the docs!',
'onClick': {
'openLink': {
'url': 'https://developers.google.com/workspace/chat'
}
}
}
]
}
}
]
}
]
}
}]
}
限制和注意事项
- 我们对聊天互动事件的支持较为有限,下面列出了一些注意事项:
- 支持以下互动事件类型:
MESSAGE
ADDED_TO_SPACE
CARD_CLICKED
- 对于
MESSAGE
或ADDED_TO_SPACE
事件,发送到 Dialogflow 代理的查询输入与 Chat 消息中argumentText
字段的值相对应。如果消息包含斜杠命令,则改用text
字段的值。 - 对于
CARD_CLICKED
事件,发送到 Dialogflow 代理的查询输入的格式为CARD_CLICKED.functionName
,其中functionName
对应于附加到交互式卡片元素(如按钮)的 Action 对象的function
字段的值。 - 每个 Chat 互动事件的完整 JSON 载荷将作为查询参数中的自定义载荷发送到 Dialogflow,并可以通过查询
WebhookRequest.payload
字段的值使用 Dialogflow webhook 进行访问。
- 支持以下互动事件类型:
- 响应斜杠命令以及从卡片或对话框接收数据的注意事项:
- 当 Dialogflow Chat 应用收到包含斜杠命令的消息时,查询输入仅包含
text
字段的值。text
字段以斜杠命令的名称开头(例如/command
),您可以使用它来配置 Dialogflow 代理的意图以检测斜杠命令。 - 如果 Dialogflow 代理需要处理 Chat 互动事件 JSON 载荷,则可以使用 Dialogflow webhook 检查查询参数中的自定义载荷。
- 如需显示来自 Dialogflow 代理的对话框,请使用单个自定义 JSON 载荷进行响应,该载荷包含一条包含
DIALOG
操作响应的消息。 - 为了处理从卡片输入的数据,Dialogflow 代理可以检测以文本
CARD_CLICKED
开头的意图,并使用包含相应操作的单个自定义 JSON 载荷进行响应。
- 当 Dialogflow Chat 应用收到包含斜杠命令的消息时,查询输入仅包含
- 不支持链接预览。
- 如果 Dialogflow 代理只响应一条消息,则该消息会同步发送到 Google Chat。如果 Dialogflow 代理返回多条消息,那么系统会针对每条消息对 Chat API 中的
spaces.messages
资源调用create
方法,将所有消息异步发送到 Chat。 - 将 Dialogflow CX 与 Chat 集成时,Dialogflow 代理和 Chat 应用必须在同一 Google Cloud 项目中设置。如果您需要在不同 Cloud 项目中设置 Dialogflow 和 Chat,则可以设置中间服务器来促进连接。如需了解具体方法,请参阅 GitHub 上的此针对 Dialogflow CX 的 Chat 集成示例。
排查问题
当 Google Chat 应用或卡片返回错误时,Chat 界面会显示一条消息,提示“出了点问题”。或“无法处理您的请求”。有时,Chat 界面不显示任何错误消息,但 Chat 应用或卡片会产生意外结果;例如,卡片消息可能不会显示。
虽然 Chat 界面中可能未显示错误消息,但当为 Chat 应用启用错误日志记录时,系统会提供描述性错误消息和日志数据来帮助您修复错误。如需查看、调试和修正错误方面的帮助,请参阅排查和修正 Google Chat 错误。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 帐号产生费用,我们建议您删除 Cloud 项目。
- 在 Google Cloud 控制台中,前往管理资源页面。依次点击菜单 > IAM 和管理 > 管理资源。
- 在项目列表中,选择要删除的项目,然后点击删除 。
- 在对话框中输入项目 ID,然后点击关停以删除项目。
相关主题
- Dialogflow CX 在 Dialogflow 代理设计中采用状态机方法,可让您清晰明确地控制对话,提升最终用户体验和开发工作流。构建 Dialogflow Chat 应用时,我们建议使用 Dialogflow CX。
- 如需详细了解如何构建和配置代理,请参阅 Dialogflow CX 代理。
- 如需查看指导您如何构建和配置代理的详细演示,请参阅创建 Dialogflow CX 代理。
- 使用 Gemini 构建 Google Chat 应用 Codelab 中的 Chat 知识应用。 Codelab:如需查看有关如何构建 Dialogflow CX 数据存储区代理的示例,请参阅
- 使用 Gemini 构建 Google Chat 应用 Codelab 中的反馈 Chat 应用。 Codelab:如需查看有关如何构建 Dialogflow CX 对话代理的示例,请参阅
- Dialogflow ES 是将 Dialogflow 与聊天应用结合使用的另一种方式。