本页介绍了如何构建一个 Google Chat 应用,该应用可以使用 Dialogflow 理解自然语言并以自然语言做出回应。本指南使用 Dialogflow CX,该平台可直接与 Google Chat 集成。您还可以按照 Dialogflow ES Google Chat 指南使用 Dialogflow ES 构建 Dialogflow ES Google Chat 应用。
例如,假设某个聊天应用可帮助用户租车。用户可能会写“我想租一辆车”。聊天应用可能会回答一个问题,例如“您想在哪个地点取车?”,从而开始与用户进行类似人类的对话,在此过程中,聊天应用在预订租车服务的同时,能够理解并以人类语音进行回答。
这只是一个示例。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 Chat 的 Google Workspace 商务版或企业版账号。
- 启用了结算功能的 Google Cloud 项目。如需检查现有项目是否已启用结算功能,请参阅验证项目的结算状态。如需创建项目并设置结算,请参阅创建 Google Cloud 项目。
架构
下图展示了使用 Dialogflow 构建的聊天应用的架构:
在上图中,用户与 Dialogflow Chat 应用互动时,信息流如下所示:
- 用户在 Chat 中通过私信或 Chat 聊天室向 Chat 应用发送消息。
- 位于 Google Cloud 中的 Dialogflow 虚拟代理会接收并处理消息,以生成回答。
- (可选)使用 Dialogflow Webhook,Dialogflow 代理可以与外部第三方服务(例如项目管理系统或工单工具)进行交互。
- Dialogflow 代理会向 Chat 中的 Chat 应用服务发送响应。
- 回答会发送到 Chat 聊天室。
设置环境
在使用 Google API 之前,您需要在 Google Cloud 项目中启用它们。 您可以在单个 Google Cloud 项目中开启一个或多个 API。在 Google Cloud 控制台中,启用 Google Chat API 和 Dialogflow API。
确认您要在正确的云项目中启用 API,然后点击下一步。
确认您要启用正确的 API,然后点击启用。
创建 Dialogflow CX 智能体
Dialogflow CX 智能体是一种能够与最终用户实时对话的虚拟客服。它是一个自然语言理解模块,能够理解人类语言的细微差别。Dialogflow 可以在对话过程中将最终用户输入的文字转换为应用和服务可以理解的结构化数据。您可以设计并构建 Dialogflow 代理来处理您的系统所需的各种对话。
Dialogflow 代理类似于呼叫中心的人工客服人员。您需要训练这两个模型来处理预期的对话场景,并且您的训练不需要过于明确。
以下是创建 Dialogflow CX 智能体的方法:
在 Dialogflow CX 控制台中,打开 Dialogflow CX 控制台。依次点击 菜单 > Dialogflow CX。
选择 Google Cloud 项目。如需查找您的项目,您可能需要点击全部,然后搜索该项目。
现在,您可以选择预建代理,也可以创建自己的代理。如果您希望稍后详细探索代理自定义功能,请选择一个预建代理,这些代理也有助于了解代理可以执行哪些操作。
如需选择预建代理,请按以下步骤操作:
- 点击使用预构建的代理。
选择一个预构建的代理。在本指南中,选择旅游:租车。
智能体根据其使用的功能数量和对话逻辑的复杂程度分为初级、中级或高级。选择中级或高级代理可能需要进行特定于代理的自定义和设置,包括在 Google Cloud 控制台中启用功能和 API。
点击以智能体形式导入。
如需创建自己的代理,请按以下步骤操作:
- 点击 Create agent。
- 选择自动生成以创建数据存储区代理,或选择自行构建以创建其他类型的代理。
如需详细了解代理构建流程,请参阅创建 Dialogflow CX 智能体。
配置基本代理设置:
点击创建。Dialogflow CX 开始创建代理,然后显示代理的默认初始流。
您可以视需要自定义代理。如需详细了解 CX 智能体自定义流程,请参阅创建 Dialogflow CX 智能体。
最佳实践是测试代理:
- 点击 Test agent。
- 选择在环境中测试代理。
- 在“环境”中,选择草稿。
- 在“Flow”(流程)中,选择 Default Start Flow(默认初始流程)。
- 在“页面”中,选择起始页。
- 在与代理对话撰写栏中,输入
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。 - 在功能下,选择加入聊天室和群组对话。
- 在连接设置下,选择 Dialogflow。
- 在 Dialogflow 设置下,选择 Dialogflow CX。
- 在代理或环境资源名称中,粘贴您在创建 Dialogflow CX 智能体末尾复制的 Dialogflow CX 智能体名称。
- 面向您网域中的特定人员和群组提供此聊天应用,然后输入您的电子邮件地址。
- 在日志下,选择将错误记录到 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 的预构建代理。
| Dialog | 说明 |
|---|---|
|
最终用户:你好 代理:你好!我是虚拟租车代理。我可以帮助您开始预订新租车。How can I assist you today? |
|
|
最终用户:我想租一辆车。 智能体:您想在哪个地点取车? |
|
|
最终用户:拉斯维加斯 代理:好的,您的取货地点是拉斯维加斯。 Agent: Is your drop off location different from your pickup location? |
|
|
最终用户:是。我会在洛杉矶还车。 客服人员:好的,您的送货地点是洛杉矶。 客服人员:您想在什么日期和时间取车? |
|
|
最终用户:我想在 3 月 5 日中午取车。 代理:您想在什么日期和时间还车? |
|
|
最终用户:3 月 15 日中午。 客服人员:请确认: 您将于 2024 年 3 月 5 日 12:00:00 在拉斯维加斯取车, 并于 2024 年 3 月 15 日 12:00:00 在洛杉矶还车 这样没问题吧? |
|
|
最终用户:好的,谢谢。 客服人员:太棒了!现在,我们来选择车辆。 智能体:您想要经济型车辆还是豪华型车辆? |
|
|
最终用户:请选择经济配送。 智能体:您想要 Cymbal Car 还是 Cymbal Truck? |
|
|
最终用户:Cymbal Truck。 客服人员:Cymbal 卡车的价格为每天 50.33 美元。 可容纳 4 人,并配备 AM/FM 收音机。 要继续付款吗? 最终用户:好的,请继续。 |
|
|
客服人员:您将使用哪种类型的卡? 最终用户:Altostrat 代理:请输入卡号。 最终用户:1234 1234 1234 1234 代理:卡上的姓名是什么? 最终用户:Charlie 客服人员:账单街道地址是什么? 最终用户:1800 Amphibious Blvd. Mountain View, CA 代理:账单邮政编码是什么? 最终用户:94045 智能体:您将于 2024-03-05 12:00:00 在拉斯维加斯取 Cymbal Car,并于 2024-03-15 12:00:00 还车。此行程的总费用为 175.38 美元。 客服人员:感谢您向我们租车,祝您度过愉快的一天! |
|
从 Dialogflow 发送卡片消息
Dialogflow 可以通过文本或卡片消息进行回答。如需使用卡片消息进行响应,请在 fulfillment 中将其指定为自定义载荷。
以下 JSON 展示了如何在履单中以自定义载荷的形式发送卡片消息:
json
{ "hostAppDataAction": { "chatDataAction": { "createMessageAction": {
"message": { "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"
}}
}]}}]}]
}
}]}
}}}}
限制和注意事项
- 将 Google Chat 应用与 Dialogflow 搭配使用时,聊天事件对象具有以下限制和注意事项:
- 应用首页活动:目前尚不支持
APP_HOME活动。 - Dialogflow 查询输入:作为查询输入发送给 Dialogflow 代理的文本取决于事件类型:
MESSAGE:聊天消息中argumentText字段的值。APP_COMMAND:字符串"APP_COMMAND_PAYLOAD"。ADDED_TO_SPACE:字符串"ADDED_TO_SPACE_PAYLOAD"。REMOVED_FROM_SPACE:字符串"REMOVED_FROM_SPACE_PAYLOAD"。CARD_CLICKED:字符串"BUTTON_CLICKED_PAYLOAD"。WIDGET_UPDATED:字符串"WIDGET_UPDATED_PAYLOAD"(用于自动补全)。
- 完整事件载荷:聊天互动事件的完整 JSON 载荷会通过
WebhookRequest.payload字段发送到 Dialogflow。您可以在 Dialogflow webhook 中访问此信息。如需了解详情,请参阅 Dialogflow CX webhook 请求文档。
- 应用首页活动:目前尚不支持
- 在响应命令和从卡片或对话框接收数据时,请注意以下事项:
- 如果 Dialogflow 智能体需要处理 Chat interaction event JSON 载荷,则可以使用 Dialogflow webhook 检查查询参数中的自定义载荷。
- 如需显示来自
Dialogflow 代理的对话框,请使用
包含
导航
pushCard的RenderActions对象来响应单个自定义 JSON 载荷。 - 如需处理从卡片输入的数据,您可以使用 Dialogflow webhook,并使用包含相应 action 的单个自定义 JSON 载荷进行响应。
- 不支持链接预览。
- 如果 Dialogflow 代理只回复一条消息,则该消息会同步发送到 Google Chat。如果 Dialogflow 代理回复了多条消息,则会通过在 Chat API 中对
spaces.messages资源调用create方法,将所有消息异步发送到 Chat。每条消息调用一次该方法。 - 将 Dialogflow CX 与 Chat 集成时,Dialogflow 代理和 Chat 应用必须在同一 Google Cloud 项目中设置。如果您需要在不同的云项目中设置 Dialogflow 和 Chat,则可以设置中间服务器来促成连接。如需了解具体操作方法,请参阅 GitHub 上针对 Dialogflow CX 的聊天集成示例。
问题排查
如需调试 Chat 应用,请先查看错误日志。由于此应用使用 Dialogflow,因此您可以使用多种日志记录和问题排查资源:
Google Workspace 附加组件日志:查询日志,获取有关 Chat 应用行为的详细信息,包括其与 Chat 的互动。请参阅查询 Google Workspace 加购项的日志。
Google Chat 应用错误:如需了解一般的 Chat 应用错误消息和修复方法,请参阅排查和修复 Chat 应用错误。
Dialogflow CX Cloud Logging:确保在 Dialogflow 代理设置中启用 Cloud Logging,以捕获详细的执行日志,包括来自代理和网络钩子互动的错误。如需了解如何启用和配置此功能,请参阅 Dialogflow CX 智能体设置文档。您可以在 Google Cloud 控制台的 Logs Explorer 中查看这些日志。
Dialogflow CX 对话记录:查看过往互动,了解对话流程并确定问题发生的位置。请参阅对话记录。
Dialogflow 一般问题排查:如需排查更广泛的 Dialogflow 问题,请参阅 Dialogflow CX 问题排查指南。
清理
为避免系统因本教程中使用的资源而向您的 Google Cloud 账号收取费用,我们建议您删除云项目。
- 在 Google Cloud 控制台中,前往管理资源页面。依次点击 菜单 > IAM 和管理 > 管理资源。
- 在项目列表中,选择要删除的项目,然后点击删除图标 。
- 在对话框中输入项目 ID,然后点击关停以删除项目。
相关主题
- Dialogflow CX 采用状态机方法来设计 Dialogflow 代理,让您可以清晰明确地控制对话,从而提供更好的最终用户体验和开发工作流程。构建 Dialogflow Chat 应用时,我们建议使用 Dialogflow CX。
- 如需详细了解如何构建和配置 CX 智能体,请参阅 Dialogflow CX 智能体。
- 如需查看有关如何构建和配置代理的详细演练,请参阅创建 Dialogflow CX 代理。
- Codelab:如需了解如何构建 Dialogflow CX 数据存储区代理,请参阅 Codelab 使用 Gemini 构建 Google Chat 应用中的知识聊天应用。
- Codelab:如需查看如何构建 Dialogflow CX 对话智能体的示例,请参阅 Codelab 打造理想聊天方式:构建内置 Gemini 的 Google Chat 应用中的反馈聊天应用。
- Dialogflow ES 是将 Dialogflow 与聊天应用搭配使用的另一种方式。
非插件的 Chat 应用:构建 Dialogflow CX Google Chat 应用
如果您正在构建或维护非 Google Workspace 插件的 Chat 应用,请注意以下配置、载荷和事件差异。
配置非插件的 Dialogflow CX Chat 应用
在 Google Cloud 控制台中配置 Google Chat API 时:
- 取消选中将此 Chat 扩展应用作为 Google Workspace 插件构建。系统会打开一个对话框,要求您确认。在该对话框中,点击停用。
- 完成其余 Dialogflow CX 配置设置,然后点击保存。
从非插件的 Dialogflow CX Chat 应用发送卡片消息
在不是插件的 Chat 应用中,在 fulfillment 的 Dialogflow 自定义载荷中指定顶级 cardsV2 对象:
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"
}
}
}
]
}
}
]
}
]
}
}]
}
非插件的 Dialogflow CX Chat 应用的限制和注意事项
- 聊天互动事件具有以下支持和注意事项:
- 系统支持以下互动事件类型:
MESSAGEADDED_TO_SPACECARD_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 以检测斜杠命令。 - 如需在非插件的 Chat 应用中显示来自 Dialogflow 代理的对话框,请使用单个自定义 JSON 载荷进行响应,该载荷包含一条包含
DIALOG操作响应的消息。 - 如需处理从非插件 Chat 应用中的卡片输入的数据,Dialogflow 代理可以检测以文本
CARD_CLICKED开头的意图,并使用包含相应 action 的单个自定义 JSON 载荷进行响应。
- 当不是插件的 Dialogflow Chat 应用收到包含斜杠命令的消息时,查询输入仅包含