本页面介绍如何设置网络钩子,以使用外部触发器将异步消息发送到 Chat 聊天室。例如,您可以配置一个监控应用,以在服务器出现故障时通知 Chat 上的值班人员。如需使用 Chat 应用发送同步消息,请参阅发送消息。
对于此类架构设计,用户无法与 webhook 或连接的外部应用进行交互,因为通信是单向的。网络钩子不是对话式的。 它们无法响应或接收来自用户的消息或 Chat 应用互动事件。如需响应消息,请构建 Chat 应用,而不是网络钩子。
虽然从技术上讲,网络钩子并不是 Chat 应用(即网络钩子使用标准 HTTP 请求来连接应用),但为简单起见,本页面将其称为 Chat 应用。每个网络钩子只能在注册它的 Chat 聊天室中使用。传入的网络钩子适用于私信,但仅适用于所有用户启用 Chat 应用的情况。您无法将网络钩子发布到 Google Workspace Marketplace。
下图显示了连接到 Chat 的 webhook 的架构:
在上图中,Chat 应用具有以下信息流:
- Chat 应用逻辑从外部第三方服务(例如项目管理系统或工单工具)接收信息。
- Chat 应用逻辑托管在云端或本地系统中,该系统可以使用网络钩子网址将消息发送到特定 Chat 聊天室。
- 用户可以从该特定 Chat 聊天室中的 Chat 应用接收消息,但无法与 Chat 应用交互。
前提条件
Python
- 有权访问 Chat 的 Google Workspace 帐号。您的 Google Workspace 组织必须允许用户添加和使用传入的网络钩子。
- Python 3.10.7 或更高版本。
httplib2
库。如有必要,请运行以下命令行界面 (CLI) 命令,以使用pip
安装该库:pip install httplib2
一个现有的 Chat 聊天室。
Node.js
- 有权访问 Chat 的 Google Workspace 帐号。您的 Google Workspace 组织必须允许用户添加和使用传入的网络钩子。
- 已安装 Node.js 和 npm。
- 一个现有的 Chat 聊天室。
Java
- 有权访问 Chat 的 Google Workspace 帐号。您的 Google Workspace 组织允许用户添加和使用传入的网络钩子。
- Java 11 或更高版本。
- Apache Maven
- 一个现有的 Chat 聊天室。
Apps 脚本
- 有权访问 Chat 的 Google Workspace 帐号。您的 Google Workspace 组织允许用户添加和使用传入的网络钩子。
- 一个现有的 Chat 聊天室。
创建网络钩子
如需创建网络钩子,请在要接收消息的 Chat 聊天室中注册该网络钩子,然后编写用于发送消息的脚本。
注册传入的网络钩子
- 在浏览器中,打开 Chat。 您无法通过 Chat 移动应用配置网络钩子。
- 转到要添加网络钩子的聊天室。
- 在聊天室标题旁边,点击 “展开”箭头,然后点击应用和集成。
点击
Add webhook。在 Name 字段中,输入
Quickstart Webhook
。在头像网址字段中,输入
https://developers.google.com/chat/images/chat-product-icon.png
。点击保存。
如需复制网络钩子网址,请点击
更多,然后点击 复制链接。
编写网络钩子脚本
示例 webhook 脚本通过向 webhook 网址发送 POST
请求,将消息发送到注册 webhook 的空间。Chat API 会返回一个 Message
实例作为响应。
选择一种语言,了解如何创建网络钩子脚本:
Python
在您的工作目录中,创建一个名为
quickstart.py
的文件。在
quickstart.py
中,粘贴以下代码:将
url
变量的值替换为您在注册网络钩子时复制的网络钩子网址。
Node.js
在您的工作目录中,创建一个名为
index.js
的文件。在
index.js
中,粘贴以下代码:将
url
变量的值替换为您在注册网络钩子时复制的网络钩子网址。
Java
在您的工作目录中,创建一个名为
pom.xml
的文件。在
pom.xml
中,复制并粘贴以下内容:在您的工作目录中,创建以下目录结构
src/main/java
。在
src/main/java
目录中,创建一个名为App.java
的文件。在
App.java
中,粘贴以下代码:将
URL
变量的值替换为您在注册网络钩子时复制的网络钩子网址。
Apps 脚本
在浏览器中,转到 Apps 脚本。
点击 New Project
粘贴以下代码:
将
url
变量的值替换为您在注册网络钩子时复制的网络钩子网址。
运行 webhook 脚本
在 CLI 中,运行以下脚本:
Python
python3 quickstart.py
Node.js
node index.js
Java
mvn compile exec:java -Dexec.mainClass=App
Apps 脚本
- 点击运行。
运行代码时,webhook 将向您注册它的空间发送一条消息。
发起或回复消息串
在消息请求正文中指定
spaces.messages.thread.threadKey
。根据您是发起还是回复线程,使用以下threadKey
值:如果启动线程,请将
threadKey
设置为任意字符串,但请记下此值,以便向线程发布回复。如果是回复某个线程,请指定在启动该线程时设置的
threadKey
。例如,如需向初始消息使用MY-THREAD
的线程发布回复,请设置MY-THREAD
。
定义未找到指定的
threadKey
时的线程行为:回复消息串或发起新消息串。将
messageReplyOption=REPLY_MESSAGE_FALLBACK_TO_NEW_THREAD
参数添加到网络钩子网址。传递此网址参数会导致 Chat 使用指定的threadKey
查找现有会话。如果找到消息,则该消息会回复该消息串。如果找不到任何消息,消息会启动与该threadKey
对应的新线程。您可以回复会话或不执行任何操作。将
messageReplyOption=REPLY_MESSAGE_OR_FAIL
参数添加到网络钩子网址。传递此网址参数会导致 Chat 使用指定的threadKey
查找现有会话。如果找到消息,则该消息会回复该消息串。如果未找到任何消息,则不会发送消息。
如需了解详情,请参阅
messageReplyOption
。
以下代码示例启动或回复某个消息会话: