本页介绍了如何构建 Google Chat 应用,该应用可以使用 Dialogflow 理解自然语言并以自然语言做出回应。本指南使用 Dialogflow CX,它与 Google Chat 直接集成。您还可以按照 Dialogflow ES Google Chat 指南,使用 Dialogflow ES 构建 Dialogflow ES Google Chat 应用。
例如,假设有一款聊天应用可帮助用户租车。用户可能会写“I'd like to rent a car”。聊天应用可能会回答“您想在哪个地点取车?”之类的问题,从而开始与用户进行类似人类的对话,在此过程中,聊天应用在预订租车服务的同时,还能理解并以人类语音进行回答。
这只是一个示例。Dialogflow Chat 应用适用于各种互动场景。如果需要自然的人类语音,则需要 Dialogflow Chat 应用。预建代理可帮助您快速入门,并展示 Dialogflow 的功能,例如:
- 预订航班
- 安排医生预约
- 订购外卖
- 回答有关零售产品目录的问题,例如商品是否有其他颜色
-
图 1. 为 Dialogflow Chat 应用选择预建代理。 -
图 2. 在 Dialogflow CX 中测试代理,以确保代理的逻辑和配置按预期运行。该图显示了一组按顺序排列的主题页面,这些页面涉及对话中的特定步骤,例如为租车设置取车和还车地点,并配置连接这些页面的逻辑。对话在模拟器中进行测试。 -
图 3. 在 Google Cloud 控制台的 Chat API 配置页面中,配置 Chat 应用以使用 Dialogflow CX 代理处理响应。 -
图 4. 在 Google Chat 中使用 Dialogflow Chat 应用就预订租车事宜进行对话。
目标
- 设置环境。
- 创建并部署 Dialogflow CX 代理。
- 创建并部署由 Dialogflow CX 代理提供支持的 Chat 应用。
- 测试 Chat 应用。
前提条件
- 拥有 Google Workspace 商务版或企业版账号,且有权访问 Google Chat。
- 启用了结算功能的 Google Cloud 项目。如需检查现有项目是否已启用结算功能,请参阅验证项目的结算状态。如需创建项目并设置结算,请参阅创建 Google Cloud 项目。
架构
下图展示了使用 Dialogflow 构建的聊天应用的架构:
在上图中,与 Dialogflow Chat 应用互动的用户的信息流如下:
- 用户通过私信或 Chat 聊天室在 Chat 中向 Chat 应用发送消息。
- Dialogflow 虚拟代理位于 Google Cloud 中,会接收并处理消息以生成响应。
- (可选)使用 Dialogflow Webhook,Dialogflow 代理可以与外部第三方服务(例如项目管理系统或工单工具)进行交互。
- Dialogflow 代理会向 Chat 中的 Chat 应用服务发送响应。
- 回答会发送到 Chat 聊天室。
设置环境
在使用 Google API 之前,您需要在 Google Cloud 项目中启用它们。 您可以在单个 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 代理后,请按以下步骤将其转换为聊天应用:
在 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
。 - 在功能下,选择加入聊天室和群组对话。
- 在连接设置下,选择 Dialogflow。
- 在 Dialogflow 设置下,选择 Dialogflow CX。
- 在代理或环境资源名称中,粘贴您在创建 Dialogflow CX 代理末尾复制的 Dialogflow CX 代理名称。
- 面向网域中的特定人员和群组提供此 Chat 扩展应用,然后输入您的电子邮件地址。
- 在日志下,选择将错误记录到 Logging。
- 在应用名称中,输入
点击保存。
Chat 应用已准备就绪,可以接收和回复 Chat 中的消息。
测试 Chat 应用
在 Google Chat 中向 Dialogflow CX Chat 应用发送消息,以测试该应用。
使用您在添加自己为可信测试人员时提供的 Google Workspace 账号打开 Google Chat。
- 点击 发起新聊天。
- 在添加 1 位或多位用户字段中,输入您的 Chat 应用的名称。
从结果中选择您的 Chat 应用。系统会打开私信对话。
在与应用来往的新私信中,输入
Hello
并按enter
。Dialogflow Chat 应用会通过自我介绍来做出响应。
- 通过进行测试对话示例来完成测试。
测试对话示例
如需在 Dialogflow CX 控制台或 Google Chat 中测试 Dialogflow CX Chat 应用,请进行以下对话。 此说明有助于您了解 Dialogflow CX 代理如何解读用户的自然语言,以及在对话的每个步骤中生成自己的自然语言回答。此示例对话基于名为 Travel: car rental 的预构建代理。
对话框 | 说明 |
---|---|
最终用户:你好 代理:你好!我是虚拟租车代理。我可以帮您开始新的租车预订。今天需要我做些什么? |
|
最终用户:我想租车。 代理:您想在哪里取车? |
|
最终用户:拉斯维加斯 代理:好的,您的取货地点是拉斯维加斯。 客服人员:您的下车地点是否与上车地点不同? |
|
最终用户:可以。我会在洛杉矶还车。 代理:好的,您的下车地点是洛杉矶。 代理:您想在什么日期和时间取车? |
|
最终用户:我想在 3 月 5 日中午取车。 代理:您想在什么日期和时间送来车辆? |
|
最终用户:3 月 15 日中午。 客服人员:请确认: 您将于 2024 年 3 月 5 日 12:00:00 在拉斯维加斯取车, 并于 2024 年 3 月 15 日 12:00:00 在洛杉矶还车 这样没问题吧? |
|
最终用户:好的,谢谢。 代理:太棒了!现在,我们来选择车辆。 代理:您想要经济型车辆还是豪华型车辆? |
|
最终用户:请选择经济配送。 代理:Would you like the Cymbal Car or the Cymbal Truck? |
|
最终用户:Cymbal Truck。 代理:Cymbal 卡车的价格为每天 50.33 美元。 可容纳 4 人,并配备 AM/FM 收音机。 要继续付款吗? 最终用户:好的,请继续。 |
|
代理:What card type will you be using? 最终用户:Altostrat 代理:请输入卡号。 最终用户:1234 1234 1234 1234 代理:卡上的姓名是什么? 最终用户:Charlie 代理:What is the billing street address? 最终用户:1800 Amphibious Blvd. Mountain View, CA 代理:账单邮政编码是什么? 最终用户:94045 代理:您将于 2024 年 3 月 5 日 12:00:00 在拉斯维加斯取走 Cymbal Car,并于 2024 年 3 月 15 日 12:00:00 还车。此行程的总费用为 175.38 美元。 代理:感谢您向我们租车,祝您度过愉快的一天! |
|
从 Dialogflow 发送卡片消息
Dialogflow 可以通过文本或卡片消息进行回答。如需使用卡片消息进行响应,请在履行中将其指定为自定义载荷。
以下 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 代理的查询输入对应于聊天消息中argumentText
字段的值。如果消息包含斜杠命令,则系统会改用text
字段的值。 - 对于
CARD_CLICKED
事件,发送给 Dialogflow 代理的查询输入格式为CARD_CLICKED.functionName
,其中functionName
对应于附加到互动卡片元素(例如按钮)的 Action 对象中function
字段的值。 - 每次 Chat 互动事件的完整 JSON 载荷都会作为查询参数中的自定义载荷发送到 Dialogflow,并且可以通过查询
WebhookRequest.payload
字段的值,使用 Dialogflow webhook 进行访问。
- 系统支持以下互动事件类型:
- 响应斜杠命令和从卡片或对话框接收数据时的注意事项:
- 当 Dialogflow Chat 应用收到包含斜杠命令的消息时,查询输入仅包含
text
字段的值。text
字段以斜杠命令的名称(例如/command
)开头,您可以使用该字段配置 Dialogflow 代理的 intent 来检测斜杠命令。 - 如果 Dialogflow 代理需要处理 Chat 互动事件 JSON 载荷,则可以使用 Dialogflow 网络钩子来检查查询参数中的自定义载荷。
- 如需显示来自 Dialogflow 代理的对话框,请使用单个自定义 JSON 载荷进行响应,该载荷包含一条包含
DIALOG
操作响应的消息。 - 为了处理从卡片输入的数据,Dialogflow 代理可以检测以文本
CARD_CLICKED
开头的意图,并使用包含相应 action 的单个自定义 JSON 载荷进行响应。
- 当 Dialogflow Chat 应用收到包含斜杠命令的消息时,查询输入仅包含
- 不支持链接预览。
- 如果 Dialogflow 代理只回复一条消息,则该消息会同步发送到 Google Chat。如果 Dialogflow 代理使用多条消息进行响应,则会通过在 Chat API 中对
spaces.messages
资源调用create
方法,将所有消息异步发送到 Chat,每条消息调用一次。 - 将 Dialogflow CX 与 Chat 集成时,必须在同一 Google Cloud 项目中设置 Dialogflow 代理和 Chat 应用。如果您需要在不同的 Cloud 项目中设置 Dialogflow 和 Chat,则可以设置中间服务器来帮助建立连接。如需了解具体操作方法,请参阅 GitHub 上针对 Dialogflow CX 的聊天集成示例。
问题排查
当 Google 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:如需了解如何构建 Dialogflow CX 数据存储区代理,请参阅 Codelab
- 打造理想聊天方式:构建内置 Gemini 的 Google Chat 应用中的反馈聊天应用。 Codelab:如需了解如何构建 Dialogflow CX 对话式代理,请参阅 Codelab
- Dialogflow ES 是将 Dialogflow 与 Chat 扩展应用搭配使用的另一种方式。