自定义机器人使用指南
利用 n8n 打造飞书 RSS 推送机器人
文章目录
- 自定义机器人使用指南
- 注意事项
- 功能介绍
- 在群组中添加自定义机器人
- 操作步骤
- 邀请自定义机器人进群。
- – 进入目标群组,在群组右上角点击更多按钮,并点击 设置。
- – 在右侧 设置 界面,点击 群机器人。
- – 在 群机器人 界面点击 添加机器人。
- – 在 添加机器人 对话框,找到并点击 自定义机器人。
- – 设置自定义机器人的头像、名称与描述,并点击 添加。
- 获取自定义机器人的 webhook 地址,并点击 完成。
- 测试调用自定义机器人的 webhook 地址,向所在群组发送消息。
- – 用任意方式向 webhook 地址发起一个 HTTP POST 请求。
- – 命令执行后,进入自定义机器人所在群组查看测试消息。
- 邀请自定义机器人进群。
- 后续步骤
- 操作步骤
- 为自定义机器人添加安全设置
- 方式一:设置自定义关键词
- – 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
- – 在 安全设置 区域,选择 自定义关键词。
- – 在输入框添加关键词。
- – 点击 保存,使生效配置。
- 方式二:设置 IP 白名单
- – 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
- – 在 安全设置 区域,选择 IP 白名单。
- – 在输入框添加 IP 地址。
- – 点击 保存,使配置生效。
- 方式三:设置签名校验
- – 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
- – 在 安全设置 区域,选择 签名校验。
- – 点击 复制,复制秘钥。
- – 点击 保存,使配置生效。
- – 计算签名字符串。
- Java 示例代码
- Go 示例代码
- Python 示例代码
- – 获取签名字符串。
- 注意:在n8n中用crypto模块获取签名字符串(配置方法❤❤❤)
- HMAC 的正确用法是:
- 但是飞书提供的代码是:
- 第一个参数key变成了timestamp和secret的拼接(用换行符),第二个参数msg为空。
- 所以我们节点配置如下:
- 完整工作流json代码如下:
- 方式一:设置自定义关键词
- 删除自定义机器人
- 支持发送的消息类型说明
- 发送文本消息
- 发送富文本消息
- 发送群名片
- 发送图片
- 发送飞书卡片
- 常见问题
- 如何实现 @ 指定人、@ 所有人?
- 如何获得 @ 指定人时所需要的 open_id?
- 自定义机器人能响应用户消息吗?
- 如何撤回自定义机器人发送的消息?
自定义机器人是一种只能在当前群聊中使用的机器人。该类机器人无需经过租户管理员审核,即可在当前群聊中通过调用 webhook 地址的方式完成消息推送。本文主要介绍自定义机器人的使用方式。
- 自定义机器人只能在当前群聊内使用,同一个自定义机器人无法添加到其他群聊。
- 你需要具备一定的服务端开发基础,通过请求调用自定义机器人的 webhook 地址,实现消息推送功能。
- 自定义机器人在添加至群组后即可使用,无需租户管理员审核。该特性提升了开发机器人的便携性,但出于租户数据安全考虑,也限制了自定义机器人的使用场景,自定义机器人不具有任何数据访问权限。
- 如果你希望实现机器人群管理、获取用户信息等能力,建议参考开发卡片交互机器人,通过机器人应用实现。自定义机器人和机器人应用的能力对比,请参见能力对比。
- 自定义机器人的频率控制和普通应用不同,为单租户单机器人 100 次/分钟,5 次/秒。建议发送消息尽量避开诸如 10:00、17:30 等整点及半点时间,否则可能出现因系统压力导致的 11232 限流错误,导致消息发送失败。
- 发送消息时,请求体的数据大小不能超过 20 KB。
企业存在给特定群组自动推送消息的场景,例如,推送监控报警、销售线索、运营内容等。在该类场景下,你可以在群组中添加自定义机器人,自定义机器人默认提供 webhook,通过服务端调用 webhook 地址,即可将外部系统的消息通知即时推送到群组中。自定义机器人也包含了 自定义关键词、IP 白名单 和 签名 三种维度的安全配置,便于控制 webhook 的调用范围。
操作步骤
邀请自定义机器人进群。
– 进入目标群组,在群组右上角点击更多按钮,并点击 设置。
– 在右侧 设置 界面,点击 群机器人。
– 在 群机器人 界面点击 添加机器人。
– 在 添加机器人 对话框,找到并点击 自定义机器人。
– 设置自定义机器人的头像、名称与描述,并点击 添加。
获取自定义机器人的 webhook 地址,并点击 完成。
机器人对应的 webhook 地址 格式如下:
请妥善保存好此 webhook 地址,不要公布在 Gitlab、博客等可公开查阅的网站上,避免地址泄露后被恶意调用发送垃圾消息。
测试调用自定义机器人的 webhook 地址,向所在群组发送消息。
– 用任意方式向 webhook 地址发起一个 HTTP POST 请求。
你需要具备一定的服务端开发基础,通过服务端 HTTP POST 请求方式调用 webhook 地址。以 curl 指令为例,请求示例如下。你可以通过 macOS 系统的终端,或者 Windows 系统的控制台应用,执行以下命令进行测试。
macOS
Windows(cmd)
Windows(PowerShell)
示例命令说明:
- 请求方式:POST
- 请求头:Content-Type: application/json
- 请求体:
- webhook 地址: 为示例值,你在实际调用时需要替换为自定义机器人真实的 webhook 地址。
向自定义机器人发送请求时,支持发送文本、富文本、群名片以及消息卡片等多种消息类型。各类消息类型的请求说明,参见支持发送的消息类型说明。
执行命令后:
- 请求体内容格式是否与各消息类型的示例代码一致。
- 请求体大小不能超过 20 K。
如果请求体格式错误,则会返回以下信息。
你可以通过以下说明,检查请求体是否存在问题。
如果请求成功,命令行将会回显以下信息。
– 命令执行后,进入自定义机器人所在群组查看测试消息。
后续步骤
成功添加自定义机器人后,推荐你为自定义机器人添加安全设置,以保证机器人接收请求的安全性。具体操作参见下文为自定义机器人添加安全设置。
在群组中添加自定义机器人后,你可以为机器人添加安全设置。安全设置用于保护自定义机器人不被恶意调用,例如,当 webhook 地址因保管不当而泄露后,可能会被恶意开发者调用发送垃圾信息。通过添加安全设置,只有在符合安全设置条件的情况下,才可以成功调用机器人。
目前提供的安全设置方式如下:
我们强烈建议为自定义机器人添加安全设置,以提高安全性。在同一个自定义机器人中,你可以设置一个或多个方法。
- 自定义关键词:只有包含至少一个关键词的消息,可以成功发送。
- IP 白名单:只有在白名单内的 IP 地址,可以成功请求 webhook 发送消息。
- 签名校验:设置签名。发送的请求必须通过签名校验,才可以成功请求 webhook 发送消息。
方式一:设置自定义关键词
– 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
你也可以在群组设置中打开机器人列表。
– 在 安全设置 区域,选择 自定义关键词。
– 在输入框添加关键词。
最多可以同时设置 10 个关键词,多个关键词之间使用回车键间隔。设置后,只有包含至少一个关键词的消息才会被成功发送。
例如,关键词设置了 应用报警 与 项目更新,则请求 webhook 发送的消息内容需要至少包含 应用报警 或 项目更新 其中一个关键词。
设置关键词后,如果发送请求时自定义关键词校验失败,则会返回以下信息。
– 点击 保存,使生效配置。
注意:自定义关键词只对 text、title 这类文本参数值生效。例如,发送富文本消息时包含超链接标签 ,则自定义关键词只过滤 text 参数值,不会过滤 href 参数值。
(看不懂啥意思!)
方式二:设置 IP 白名单
– 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
你也可以在群组设置中打开机器人列表。
– 在 安全设置 区域,选择 IP 白名单。
– 在输入框添加 IP 地址。
支持添加 IP 地址或地址段,最多可设置 10 个,使用回车键间隔。支持段输入,例如 或 。设置后,机器人 webhook 地址只处理来自 IP 白名单范围内的请求。
设置 IP 白名单后,白名单之外的 IP 地址请求 webhook 时会校验失败,并返回以下信息。
– 点击 保存,使配置生效。
方式三:设置签名校验
– 在群组名称右侧点击机器人图标,打开机器人列表,找到自定义机器人并点击进入配置页面。
你也可以在群组设置中打开机器人列表。
– 在 安全设置 区域,选择 签名校验。
选择签名校验后,系统已默认提供了一个秘钥。你也可以点击 重置,更换秘钥。
– 点击 复制,复制秘钥。
– 点击 保存,使配置生效。
– 计算签名字符串。
设置签名校验后,向 webhook 发送请求需要签名校验来保障来源可信。所校验的签名需要通过时间戳与秘钥进行算法加密,即将当做签名字符串,使用 HmacSHA256 算法计算空字符串的签名结果,再进行 Base64 编码。其中,timestamp是指距当前时间不超过 1 小时(3600 秒)的时间戳,时间单位:s。例如,。
本文提供了以下不同语言的代码示例,用于计算获得签名字符串。
Java 示例代码
Go 示例代码
Python 示例代码
– 获取签名字符串。
以 Java 示例代码为例,获取当前时间戳以及密钥后,运行程序获得签名字符串。
获取签名字符串后,在向 webhook 发送请求时,需要加上时间戳(timestamp)和签名字符串(sign)字段信息。示例配置如下所示。
如果发送请求时校验失败,你可以通过以下说明排查问题。
所使用的时间戳距离发送请求的时间已间隔 1 小时以上,签名已过期。
服务器时间与标准时间有较大偏差,导致签名过期。请注意检查、校准你的服务器时间。
签名不匹配导致的校验不通过,将返回以下信息。
注意:在n8n中用crypto模块获取签名字符串(配置方法❤❤❤)
HMAC 的正确用法是:
但是飞书提供的代码是:
第一个参数key变成了timestamp和secret的拼接(用换行符),第二个参数msg为空。
所以我们节点配置如下:
完整工作流json代码如下:
向自定义机器人 webhook 地址发送 POST 请求时,支持推送的消息格式有 文本、富文本、图片消息 以及 群名片 等,本章节介绍各消息类型的请求格式与展示效果。
发送文本消息
请求消息体示例
参数说明
- 参数 msg_type 值为对应消息类型的映射关系,文本消息的 msg_type 对应值为 text。
参数 content 包含消息内容,文本消息的消息内容参数说明如下表所示。
文本消息的 @ 用法
- @ 单个用户时,user_id字段需填入用户的 Open ID 或 User ID,且必须是有效值(仅支持 @ 自定义机器人所在群的群成员),否则取名字展示,并不产生实际的 @ 效果。
在外部群聊中,仅支持使用 Open ID @ 单个用户,不支持 User ID。
- @ 所有人时,必须满足所在群开启 @ 所有人功能。
文本消息 @ 用法示例
发送富文本消息
富文本消息是指包含文本、超链接、图标等多种文本样式的复合文本信息。
请求消息体示例
参数 content 包含消息内容,文本消息的消息内容参数说明如下表所示。
zh_cn、en_us 字段说明表。
超链接标签:a
@ 标签:at
– @ 单个用户时,user_id字段必须是有效值(仅支持 @ 自定义机器人所在群的群成员)。
– @ 所有人时,填 all。
user_name string 否 Jian Li 用户名称。
图片标签:img
发送群名片
参数说明
发送图片
请求消息体示例
参数说明
发送飞书卡片
飞书卡片是一种轻量的消息推送应用,可由按钮、图片等多种组件搭建而成。了解飞书卡片,参考飞书卡片概述。了解如何使用自定义机器人发送由搭建工具搭建的卡片模板(template),n8n 工作流 教程参考使用自定义机器人发送飞书卡片。
在飞书卡片中如果需要 @ 某一用户,则需要注意:自定义机器人仅支持通过 Open ID 或 User ID 实现 @ 用户,暂不支持email、union_id等其他方式。
发送卡片时,需要将消息体的 content 字符串替换为 card 结构体,并对整个请求消息体进行 JSON 转义。
请求消息体示例
以上消息体压缩并转义的结果如下所示,你可将其放入 CURL 命令中的请求体中查看效果:
如何实现 @ 指定人、@ 所有人?
你可以在机器人发送的普通文本消息(text)、富文本消息(post)、消息卡片(interactive)中,使用 at 标签实现 @ 人效果。具体请求示意如下:
在普通文本消息(text)中 @ 人、@ 所有人
at标签说明
请求体示意
在富文本消息(post)中 @ 人、@所有人:
at标签说明
请求体示意
在消息卡片 (interactive) 中@人、@所有人
可以使用消息卡片Markdown内容中的at人标签,标签示意如下
请求体中的 card 内容示意:
如何获得 @ 指定人时所需要的 open_id?
自定义机器人不需要租户管理员审核即可向所在的群(包括外部群)发送消息。这一开发上的灵活性也限制自定义机器人不具有任何数据访问权限,否则会在管理员不知情的条件下,泄露租户的隐私信息.
基于这个前提,自定义机器人本身不能调用接口获取用户的 open_id,或直接通过用户的邮箱、手机号来 @ 人(恶意开发者可能用这种方式扫出群成员的头像、姓名等隐私信息)。因此,你可以开发一个机器人应用,使用以下受管控的方案获得用户的open_id,然后参考 怎么实现机器人 @ 人,在自定义机器人推送的消息中 @ 人。
方案一:通过邮箱或手机号反查用户的open_id
你需要创建一个自建应用。
为应用申请权限。
通过手机号或邮箱获取用户 ID(contact:user.id:readonly),并创建应用版本,提交发版审核。
在版本发布审核通过后,调用通过手机号或邮箱获取用户 ID接口,即可通过用户的手机号或邮箱获取用户的open_id。
方案二:解析用户发送给机器人的带 @ 人内容的消息,获取目标用户的 open_id
你需要创建一个自建应用。
完成以下应用配置操作。
为应用申请权限:获取用户发给机器人的单聊消息(im:message.p2p_msg)、获取与发送单聊、群组消息(im:message)。
订阅 消息与群组 分类下的接收消息事件。
为这个自建应用创建应用版本,提交发版审核。
在版本审核发布后,你可以在同机器人的单聊中发送 @ 某用户的消息。解析接收消息事件的返回内容,其中的消息体内上报了被 @ 用户的open_id信息。
自定义机器人能响应用户消息吗?
不能,自定义机器人只能用于在群聊中自动发送通知,不能响应用户 @ 机器人的消息。如需实现机器人接收响应用户消息的功能,建议使用应用机器人。
如何撤回自定义机器人发送的消息?
自定义机器人自身无法撤回自己发送的消息,必须由群聊内的群主或管理员进行撤回。撤回方式:
方式二:调用撤回消息接口,以群聊的群主或管理员身份调用该接口撤回消息。
发布者:Ai探索者,转载请注明出处:https://javaforall.net/287213.html原文链接:https://javaforall.net
