使用 Dialogflow ES 构建 Google Chat 加载项

本页介绍了如何构建一个 Google Chat 应用,使其作为 Google Workspace 插件使用 Dialogflow ES 来理解自然语言并做出响应。您还可以使用与 Google Chat 直接集成的 Dialogflow CX,按照 Dialogflow CX Google Chat 指南构建 Dialogflow CX Google Chat 应用。

目标

  • 设置环境。
  • 创建并部署 Dialogflow ES 代理。
  • 创建并部署由 Dialogflow ES 代理提供支持的 Chat 应用。
  • 测试 Chat 应用。

前提条件

架构

下图展示了使用 Dialogflow 构建的聊天应用的架构:

使用 Dialogflow 实现的 Chat 应用的架构。

在上图中,与 Dialogflow Chat 应用互动的用户的信息流如下:

  1. 用户通过私信或 Chat 聊天室在 Chat 中向 Chat 应用发送消息。
  2. 位于 中的 Dialogflow 虚拟代理会接收并处理消息,以生成响应。
  3. (可选)使用 Dialogflow Webhook,Dialogflow 代理可以与外部第三方服务(例如项目管理系统或工单工具)进行互动。
  4. Dialogflow 代理会向 Chat 中的 Chat 应用服务发送响应。
  5. 回答会发送到 Chat 聊天室。

设置环境

在使用 Google API 之前,您需要在 Google Cloud 项目中启用它们。 您可以在单个 Google Cloud 项目中启用一个或多个 API。
  1. 在 Google API 控制台中,启用 Google Chat API 和 Dialogflow API。

    启用 API

  2. 确认您要在正确的 Cloud 项目中启用 API,然后点击下一步

  3. 确认您要启用正确的 API,然后点击启用

创建 Dialogflow ES 代理

如果您当前没有 Dialogflow ES 代理,请执行以下操作:

  1. 转到 Dialogflow ES 控制台
  2. 点击创建代理
  3. 为其命名,然后选择默认语言和时区。
  4. 将其与您的 Cloud 项目相关联。
  5. 点击创建
  6. 根据聊天应用对话流程的需要构建意图和实体。您可以从问候意图开始。
  7. 记下您的项目 ID

如需详细指南,请参阅构建代理

创建聊天应用并将其与 Dialogflow 代理相关联

创建 Dialogflow ES 代理后,请按以下步骤将其转换为聊天应用:

  1. 在 Google API 控制台中,前往 Google Chat API。搜索“Google Chat API”,然后点击 Google Chat API,再点击管理

    前往 Chat API

  2. 点击配置并设置 Chat 应用:

    1. 应用名称中,输入 Dialogflow App
    2. 头像网址中,输入 https://developers.google.com/workspace/chat/images/quickstart-app-avatar.png
    3. 说明中,输入 Responds to real human conversation
    4. 功能下,选择加入聊天室和群组对话
    5. 连接设置下,选择 Dialogflow
    6. Dialogflow 设置下,选择 Dialogflow ES
    7. 面向网域中的特定人员和群组提供此 Chat 扩展应用,然后输入您的电子邮件地址。
    8. 日志下,选择将错误记录到 Logging
  3. 点击保存

Chat 应用已准备就绪,可以接收和回复 Chat 中的消息。

测试 Chat 应用

在 Google Chat 中向 Dialogflow ES Chat 应用发送消息,以测试该应用。

  1. 使用您在添加自己为可信测试人员时提供的 Google Workspace 账号打开 Google Chat。

    前往 Google Chat

  2. 点击 发起新聊天
  3. 添加 1 位或多位用户字段中,输入 Chat 应用的名称。
  4. 从结果中选择您的 Chat 应用。系统会打开一条私信。

  5. 在与应用来往的新私信中,输入 Hello 并按 enter

    Dialogflow Chat 应用会以问候消息进行回复。

文本响应

文本响应作为文本消息发送到 Google Chat。借助此格式,您可以将文本加粗或斜体,只需将文本换成特定的(Markdown 灯)符号即可。

从外观上看,文本消息响应与 Dialogflow 控制台中的 Default Text Response 相同。不过,原始 API 响应看起来会略有不同。 它还将平台配置设置为 GOOGLE_HANGOUTS,其在构建用于多个集成的代理时可能会很有趣。

"fulfillmentMessages": [
{
   "text": {
   "text": [
        "This is a test."
   ]
},
  "platform": "GOOGLE_HANGOUTS"
},

卡片

卡片响应作为卡片消息发送到 Google Chat。

图片

图片响应作为 Google Chat 图片微件发送到 Google Chat。

自定义负载

如需发送其他类型的 Google Chat 消息,您可以使用自定义载荷

Google Chat 自定义载荷可让您创建更高级的卡片。一张卡可以包含一个或多个部分。每个部分可以有一个标题。您可以查看 Google Workspace 加载项扩展 Chat 卡片参考指南,了解您可以利用此卡片创建的一些组合。但是,使用自定义负载意味着必须提供 JSON 格式。

以下示例展示了用于创建包含卡片的邮件的自定义载荷:

{ "hangouts": { "hostAppDataAction": { "chatDataAction": {
  "createMessageAction": { "message": { "cardsV2": [{
    "cardId": "pizza",
    "card": {
      "header": {
        "title": "Pizza Delivery Customer Support",
        "subtitle": "pizzadelivery@example.com",
        "imageUrl": "https://goo.gl/aeDtrS"
      },
      "sections": [{ "widgets": [{ "textParagraph": {
        "text": " Your pizza is here!"
      }}]}]
    }
  }]}}
}}}}

限制和注意事项

  • 将 Google Workspace 加载项与 Dialogflow 搭配使用时,聊天事件对象存在以下限制和注意事项:
    • 应用首页活动:目前尚不支持 APP_HOME 事件。
    • Dialogflow 查询输入:作为查询输入发送给 Dialogflow 代理的文本取决于事件类型:
      • MESSAGE:聊天消息中 argumentText 字段的值。
      • APP_COMMAND:字符串 "APP_COMMAND_PAYLOAD"
      • ADDED_TO_SPACE:系统会发送默认的欢迎活动
      • REMOVED_FROM_SPACE:字符串 "REMOVED_FROM_SPACE_PAYLOAD"
      • CARD_CLICKED:字符串 "BUTTON_CLICKED_PAYLOAD"
      • WIDGET_UPDATED:字符串 "WIDGET_UPDATED_PAYLOAD"(用于自动补全)。
    • 完整事件载荷:聊天互动事件的完整 JSON 载荷会通过 WebhookRequest.payload 字段发送到 Dialogflow。您可以在 Dialogflow webhook 中访问此信息。如需了解详情,请参阅 Dialogflow ES Webhook 请求文档
  • 响应命令从卡片或对话框接收数据的注意事项:
  • 不支持链接预览
  • 如果 Dialogflow 代理只回复一条消息,则该消息会同步发送到 Google Chat。如果 Dialogflow 代理使用多条消息进行响应,则会通过在 Chat API 中对 spaces.messages 资源调用 create 方法,以异步方式将所有消息发送到 Chat,每条消息调用一次。
  • 将 Dialogflow ES 与 Chat 集成时,必须在同一 Google Cloud 项目中设置 Dialogflow 代理和 Chat 应用。

问题排查

如需调试 Chat 应用,请先查看错误日志。由于此应用使用 Dialogflow,因此您可以使用多种日志记录和问题排查资源:

清理

为避免系统因本教程中使用的资源向您的 账号收取费用,我们建议您删除 Cloud 项目。

  1. 在 Google API 控制台中,前往管理资源页面。依次点击 菜单 > IAM 和管理 > 管理资源

    前往资源管理器

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关停以删除项目。
  • Dialogflow CX 是将 Dialogflow 与 Chat 应用搭配使用的另一种方式。