本页介绍了用于创建 Google Chat 应用的常见服务架构方法。如果您有想要集成到 Google Chat 中的现有应用,可以使用或调整现有实现。 如果您要构建新的 Chat 应用,此页面会以几种不同的方式呈现类似的信息,帮助您选择适合自己使用情形的架构:
- 查看概览表格。
- 查看每种架构风格的摘要。
- 查看 Chat 应用逻辑的摘要。
- 查看聊天应用对话模式的摘要。
按功能和特性划分的概览
下表重点介绍了聊天应用的主要特性和功能,以及推荐的 (
) 服务架构风格。在某些情况下,也可以使用这些功能开发其他架构风格,但这些风格不如其他风格( )适合相应的使用情形。特性和功能 |
Web 服务或 HTTP 服务 |
Pub/Sub |
Webhook |
Apps 脚本 |
AppSheet |
Dialogflow |
脚本 |
---|---|---|---|---|---|---|---|
目标观众 |
|||||||
你的球队 |
|||||||
您的组织 |
|||||||
公众 |
|||||||
用户互动 |
|||||||
使用自然语言处理 |
|||||||
消息传递模式 |
|||||||
发送和接收同步消息 |
|||||||
发送和接收同步消息,以及发送异步消息 |
|||||||
仅发送异步消息 |
|||||||
将外部系统中的消息发送到单个 Chat 聊天室 |
|||||||
访问其他服务和系统 |
|||||||
与其他 Google 服务相整合 |
|||||||
在防火墙后通信 |
|||||||
查询或订阅 Chat 事件 |
|||||||
编码和部署样式 |
|||||||
无代码开发 |
|||||||
使用低代码进行开发 |
|||||||
使用您选择的编程语言进行开发 |
|||||||
简化 DevOps |
|||||||
完整的 DevOps 和 CI/CD 管理 |
服务架构风格
本部分介绍了用于创建 Chat 应用的一些最常见的架构方法。
Web 服务或 HTTP 服务
Web 或 HTTP 服务是最常用的部署架构,因为它可以为开发者提供最大的灵活性来构建公开的聊天应用。建议将此架构用于以下用例:
- 聊天应用已部署到 Google Workspace Marketplace 并向公众发布。
- Chat 应用可以发送和接收所有消息传送模式:发送和接收同步消息、发送异步消息,以及从外部系统发送消息。
- 聊天应用使用任何编程语言开发。
- 聊天应用需要完整的 DevOps 和 CI/CD 管理。
- 聊天应用服务在云端或本地服务器中实现。
在此设计中,您将配置 Chat 以使用 HTTP 与远程服务集成,如下图所示:
在上图中,与 HTTP Chat 应用互动的用户的信息流如下所示:
- 用户在 Chat 聊天室中向 Chat 应用发送消息。
- 系统会向 Web 服务器发送 HTTP 请求,该服务器可以是包含 Chat 应用逻辑的云端系统,也可以是本地系统。
- (可选)Chat 应用逻辑可以与外部第三方服务(例如项目管理系统或工单工具)互动。
- 网络服务器会向 Chat 中的 Chat 应用服务发送 HTTP 响应。
- 响应会传递给用户。
- Chat 应用可以选择调用 Chat API 来异步发布消息或执行其他操作。
此架构可让您灵活使用系统中已有的现有库和组件,因为这些聊天应用可以使用不同的编程语言进行设计。您可以通过不同方式实现此架构。在 Google Cloud 上,您可以使用 Cloud Functions、Cloud Run 和 App Engine。如需开始使用,请参阅构建 Google Chat 应用。
Pub/Sub
如果 Chat 应用在防火墙后实现,Chat 将无法向其发出 HTTP 调用。一种方法是使用 Pub/Sub,使 Chat 应用实现能够订阅包含来自 Chat 的消息的主题。Pub/Sub 是一种异步消息传递服务,可将生成消息的服务与处理这些消息的服务分离开来。建议将此架构用于以下用例:
- Chat 应用是在防火墙后构建的。
- Chat 应用接收有关 Chat 聊天室的事件。
- Chat 应用已部署到您的组织。
- Chat 应用可以发送和接收同步消息,也可以发送异步消息。
- 聊天应用使用任何编程语言开发。
- 聊天应用需要完整的 DevOps 和 CI/CD 管理。
下图展示了使用 Pub/Sub 构建的聊天应用的架构:
在上图中,用户与 Pub/Sub Chat 应用互动时,信息流如下所示:
用户在 Chat 中通过私信或聊天室向 Chat 应用发送消息,或者 Chat 聊天室中发生 Chat 应用已有效订阅的事件。
Chat 将消息发送到 Pub/Sub 主题。
应用服务器(包含 Chat 应用逻辑的云端或本地系统)订阅 Pub/Sub 主题,以便通过防火墙接收消息。
Chat 应用可以选择调用 Chat API 来异步发布消息或执行其他操作。
如需开始使用,请参阅将 Pub/Sub 用作 Chat 应用的端点。
Webhook
您可以使用对 Chat Webhook 网址的调用来创建只能向特定 Chat 聊天室发送消息的 Chat 应用。建议将此架构用于以下使用情形:
- Chat 应用已部署到您的团队。
- Chat 应用将外部系统中的消息发送到单个 Chat 聊天室。
在此架构中,Chat 应用仅限于特定 Chat 聊天室,并且不允许用户互动,如下图所示:
在上图中,聊天应用的信息流如下:
- 聊天应用逻辑从外部第三方服务(例如项目管理系统或工单工具)接收信息。
- Chat 应用逻辑托管在云端或本地系统中,该系统可以使用 webhook 网址向特定 Chat 聊天室发送消息。
- 用户可以在该特定 Chat 聊天室中接收来自 Chat 应用的消息,但无法与 Chat 应用互动。
此类 Chat 应用无法在其他 Chat 群组中共享或与其他团队共享,也无法发布到 Google Workspace Marketplace。建议 Chat 应用使用传入 Webhook 来报告提醒或状态,或者用于某些类型的 Chat 应用原型设计。
如需开始使用,请参阅使用网络钩子向 Chat 发送消息。
Apps 脚本
您可以完全使用 JavaScript 创建 Chat 应用逻辑。Google Apps 脚本是一个用于开发 Chat 应用的低代码开发平台。Apps 脚本会处理授权流程和用于用户身份验证的 OAuth 2.0 令牌。您可以使用 Apps 脚本构建公开的 Chat 应用,但由于每日配额和限制,我们不建议这样做。
建议将此架构用于以下使用情形:
- Chat 应用已部署到您的团队或组织。
- Chat 应用可以发送和接收所有消息传送模式:发送和接收同步消息、发送异步消息,以及从外部系统发送消息。
- 聊天应用需要简化的 DevOps 管理。
此架构适用于还与其他 Google Workspace 和 Google 服务(例如 Google 表格、Google 幻灯片、Google 日历、Google 云端硬盘、Google 地图和 YouTube)集成的 Chat 应用,如下图所示:
在上图中,用户与 Apps 脚本聊天应用互动时,信息流如下所示:
- 用户通过私信或 Chat 聊天室向 Chat 应用发送消息。
- 在 Google Cloud 中实现的 Apps 脚本 Chat 应用逻辑会接收消息。
- 聊天应用逻辑可以选择性地与 Google Workspace 服务(例如 Google 日历或 Google 表格)或其他 Google 服务(例如 Google 地图或 YouTube)集成。
- Chat 应用逻辑会将响应发送回 Chat 中的 Chat 应用服务。
- 响应会传递给用户。
如需开始使用,请参阅使用 Apps 脚本构建 Chat 应用。
AppSheet
您可以使用 AppSheet 无需编写代码即可创建网域共享的 Chat 扩展应用。您可以使用自动配置模式并按照模板构建常见的 Chat 应用操作,从而简化开发流程。不过,聊天应用不支持部分 AppSheet Web 应用功能。
建议将此架构用于以下使用情形:
- Chat 应用已部署到您和您的团队。
- Chat 应用可以发送和接收同步消息,也可以发送异步消息。
- 聊天应用需要简化的 DevOps 管理。
下图展示了使用 AppSheet 构建的聊天应用的架构:
在上图中,用户与 AppSheet Chat 应用互动时,信息流如下所示:
- 用户通过私信或 Chat 聊天室在 Chat 中向 Chat 应用发送消息。
- 在 Google Cloud 中实现的 AppSheet Chat 应用逻辑会接收消息。
- (可选)Chat 应用逻辑可以与 Google Workspace 服务(例如 Apps 脚本或 Google 表格)集成。
- Chat 应用逻辑会将响应发送回 Chat 中的 Chat 应用服务。
- 响应会传递给用户。
如需开始操作,请参阅使用 AppSheet 构建 Chat 应用。
Dialogflow
您可以使用 Dialogflow 创建 Chat 应用,Dialogflow 是一个自然语言平台,可用于自动对话和动态响应。 建议将此架构用于以下使用情形:
- Chat 应用可以发送和接收同步消息。
- 聊天应用使用自然语言处理技术来响应用户并与用户互动。
下图展示了使用 Dialogflow 构建的聊天应用的架构:
在上图中,与 Dialogflow Chat 应用互动的用户的信息流如下:
- 用户通过私信或 Chat 聊天室在 Chat 中向 Chat 应用发送消息。
- Dialogflow 虚拟代理位于 Google Cloud 中,会接收并处理消息以生成响应。
- (可选)使用 Dialogflow Webhook,Dialogflow 代理可以与外部第三方服务(例如项目管理系统或工单工具)进行交互。
- Dialogflow 代理会向 Chat 中的 Chat 应用服务发送响应。
- 回答会发送到 Chat 聊天室。
如需开始操作,请参阅构建 Dialogflow Google Chat 应用。
命令行应用或脚本
您可以创建命令行应用或脚本,用于向 Chat 发送消息或执行其他操作(例如创建聊天室或管理聊天室成员),而无需让用户直接在 Chat 中调用 Chat 应用或对 Chat 应用做出响应。建议在以下使用情形下采用此架构:
- 聊天应用使用任何编程语言开发。
- Chat 应用只能发送异步消息。
下图展示了此架构:
在上图中,Chat 应用的信息流如下:
- Chat 应用会调用 Chat API 来发送消息或执行其他操作。
- 聊天会话执行所请求的操作。
- (可选)Chat 应用会在 CLI 中输出确认消息。
Chat 扩展应用逻辑实现
Chat 不会限制您实现 Chat 应用逻辑的方式。您可以创建固定语法命令解析器,使用高级 AI 和语言处理库或服务,订阅并响应事件,或者执行适合您特定目标的任何其他操作。
处理用户互动
聊天应用可以通过多种方式与用户互动。用户互动是指用户为调用或与 Chat 应用互动而采取的任何操作。
命令解析器
由命令驱动的 Chat 应用会检查 Chat 应用互动事件的载荷,然后从该内容中提取命令和参数。例如,请参阅响应 Google Chat 应用命令。
另一种方法是对消息进行分词,提取命令,然后引用一个将命令映射到每个命令的处理函数的数据字典。
基于对话的界面
基于对话框的应用通过显示基于卡片的对话框来响应 Chat 应用互动事件,用户可以在其中与 Chat 应用互动,例如填写表单或请求操作。
每次用户在对话框中执行操作时,系统都会向 Chat 应用发送新的互动事件,该应用可以通过更新对话框或发送消息来做出响应。
自然语言处理
许多聊天应用实现都使用自然语言处理 (NLP) 来确定用户在询问什么。实现 NLP 的方法有很多种,您可以选择自己喜欢的方式来实现 NLP。
您可以在聊天应用实现中使用 Dialogflow ES 或 Dialogflow CX 聊天集成来使用 NLP,从而创建虚拟客服以实现自动对话和动态响应。
主动向 Chat 发出请求
聊天应用还可以向 Chat 发送消息或其他请求,这些消息或请求不是由 Chat 中的直接用户互动触发的。相反,这些 Chat 应用可以被触发,例如通过第三方应用触发,或使用来自用户的命令行调用触发,但用户无法在 Chat 中直接与这些 Chat 应用互动。
非互动式 Chat 应用使用 Chat API 向 Chat 发送消息或其他类型的请求。
对话模式
您应考虑希望 Chat 应用如何与用户互动。以下部分介绍了聊天应用可能实现的对话模式。
调用和响应(同步)
在同步调用和响应模式下,Chat 应用会一对一地响应用户的消息。用户向 Chat 应用发送一条消息后,Chat 应用会返回一条响应,如下图所示:
在上图中,用户与 Chat 应用互动时,信息流如下:
- 用户向 Chat 应用发送同步消息,例如“我的下一个会议是什么?”。
- Chat 应用会向用户发送同步消息,例如“席尔瓦医生,2:30”。
对于此类对话模式,您可以使用 Web 服务、Pub/Sub、Apps 脚本、AppSheet 或 Dialogflow 实现聊天应用架构。
多个响应(异步)
多响应模式可以包含同步和异步消息。此模式的特点是用户与 Chat 应用之间进行双向通信,并且 Chat 应用会生成任意数量的其他消息,如下图所示:
在上图中,用户与 Chat 应用互动时,信息流如下:
- 用户向 Chat 应用发送同步消息,例如“监控流量”。
- Chat 应用会向用户发送一条同步消息以确认请求,例如“监控已开启”。
- 之后,Chat 应用通过调用 REST API 向用户发送一条或多条异步消息,例如“新流量”。
- 用户向 Chat 应用发送一条额外的同步消息,例如“忽略流量”。
- 聊天应用会向用户发送一条同步消息以确认请求,例如“监控已关闭”。
对于此类对话模式,您可以使用 Web 服务、Pub/Sub、Apps 脚本或 AppSheet 实现聊天应用架构。
查询或订阅事件(异步)
在异步事件驱动模式下,Chat 应用通过以下方式接收事件:查询 Chat API,或使用 Google Workspace Events API 创建对 Chat 聊天室或用户的订阅。事件表示 Chat 资源发生了变化,例如发布了新消息或用户加入了聊天室。 事件驱动型 Chat 应用会检查事件载荷,以获取有关已更改的 Chat 资源的数据,然后做出相应响应。
聊天应用可以接收多种类型的事件,包括与聊天室、成员资格、消息和回应相关的事件。当 Chat 应用通过查询 Chat API 或通过有效订阅接收到事件时,该 Chat 应用可以选择生成任意数量的异步响应,并使用 Chat API 将这些响应发送回 Chat。
您可以使用此类逻辑来更新外部系统(例如工单管理系统),或以异步方式向 Chat 聊天室发送消息,例如在新用户加入 Chat 聊天室时发送欢迎消息。
下图展示了一个事件驱动型对话模式示例:
在上图中,Chat 与 Chat 应用之间的互动具有以下信息流:
- Chat 应用订阅 Google Chat 聊天室。
- Chat 应用订阅的聊天室发生更改。
- Chat 应用向 Pub/Sub 中的主题提交事件,它充当订阅的通知端点。该事件包含资源中所发生变化的相关数据。
- Chat 应用处理包含事件的 Pub/Sub 消息,并在必要时采取措施。
对于此类对话模式,您可以使用 Pub/Sub、Web 服务或 Apps 脚本来实现 Chat 应用架构。
如需详细了解如何接收和响应事件,请参阅处理 Google Chat 事件中的事件。
来自 Chat 应用的单向消息
“Chat 应用单向输出”模式允许 Chat 应用向 Chat 聊天室发送异步消息,但不允许用户直接与 Chat 应用互动。此模式不属于对话式或互动式模式,但可用于闹钟报告等用途,如下图所示:
在上图中,与 Chat 应用位于同一空间中的用户的信息流如下:
- Chat 应用通过调用 Chat API 或向网络钩子网址(例如“队列溢出提醒”)发布内容,向用户发送异步消息。
- Chat 应用还可以选择发送其他异步消息。
对于此类对话模式,您可以使用 Web 服务、Webhook、Apps 脚本、AppSheet、命令行应用或脚本来实现聊天应用架构。
向 Chat 应用发送单向消息
“向 Chat 应用发送单向消息”模式允许用户向 Chat 应用发送消息,而 Chat 应用在处理请求时不会做出响应。虽然这种架构在技术上可行,但会导致糟糕的用户体验,因此我们强烈建议不要采用这种模式。
相关主题
- 构建 Google Chat 应用
- 将 Pub/Sub 用作 Chat 应用的端点
- 使用传入的网络钩子向 Chat 发送消息
- 使用 Apps 脚本构建 Chat 应用
- 使用 AppSheet 通过自动化操作发送 Chat 消息
- Dialogflow ES Chat 集成
- Dialogflow CX Chat 集成。