Token导航 LogoToken导航

Agent Skill · 效率

feishu-robot-protocol(飞书机器人协议)

feishu-robot-protocol 用于补充效率相关能力,适合在 OpenClaw 中需要让 Agent 承接效率相关任务时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

feishu-robot-protocol 是效率类 Agent Skill,可用宿主为 OpenClaw,通过ClawHub获取,权限为权限未标注;许可证为 MIT-0,第三方扫描有提醒项,按安装量在效率类的 21,003 个 Skill 里排第 6,699。

总安装 8,984周安装 367GitHub Stars 公开资料未说明下载 2,877核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
MIT-0
版本
0.2.1

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:feishu-robot-protocol(飞书机器人协议)
来源仓库:https://github.com/skyfate/feishu-robot-protocol
安装命令:
openclaw skills install feishu-robot-protocol
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 OpenClaw 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

ClawHubOpenClaw
openclaw skills install feishu-robot-protocol

这个 Skill 是做什么的

效率类 Skill 把重复的整理、汇总、转换工作交给助手完成,减少手工复制粘贴。

定义飞书机器人身份消息协议,实现多机器人间统一发送者身份识别和用户身份消息回复,支持群组用户映射管理和定时更新。

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 OpenClaw;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 openclaw skills install feishu-robot-protocol;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    权限没有明确标注,第一次使用时只给一个无关紧要的任务,观察它到底读了哪些文件和网络。

常见问题

6 条

feishu-robot-protocol 怎么安装?

在终端执行 openclaw skills install feishu-robot-protocol。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

feishu-robot-protocol 支持哪些 AI 工具?

公开资料标注支持 OpenClaw。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

feishu-robot-protocol 需要什么权限?

权限级别没有明确标注。第一次使用时建议只给无关紧要的任务,观察它实际读写了哪些内容。

feishu-robot-protocol 是免费的吗?

来源标注的许可证是 MIT-0。本站不代收任何费用,也不托管安装包;能否商用、要不要署名,以许可证原文为准。

feishu-robot-protocol 用的人多吗?

公开数据是累计安装 8,984 次,近一周安装 367 次,下载 2,877 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

feishu-robot-protocol 安全吗?

第三方扫描有提醒项,说明存在需要人工确认的行为。安装前请打开源码看清它读了什么、联网到哪里。

值得选的地方和要先想清楚的地方

值得选的地方

  • 专注 OpenClaw 一种宿主,触发方式和使用习惯不用来回切换。
  • 许可证明确为 MIT-0,商用和分发边界好判断。

先想清楚的地方

  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 OpenClaw,想直接扩展它能力的人。
  • 需要处理效率类任务、又不想每次都手写提示词的人。

不太适合

  • 需要厂商级技术支持和 SLA 的生产系统。

效率类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
github

GitHub 代码协作 · OpenClaw

7,632,918545需要联网MIT-0通过
nano-pdf

Nano PDF 文档 · OpenClaw

4,249,476231需要联网MIT-0通过
auto-updater

自动更新程序 · OpenClaw

2,964,063386操作浏览器MIT-0通过
video-frames

视频帧 · OpenClaw

2,621,304112需要联网MIT-0通过
gemini

Gemini 助手 · OpenClaw

2,547,39648需要联网MIT-0有提醒
feishu-robot-protocol

飞书机器人协议 · 本页

8,984—权限未标注MIT-0有提醒

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Skill: 飞书机器人身份消息协议 v2

概述

本技能定义了飞书机器人之间的双层消息通信协议,解决机器人之间无法相互@触发 mention 事件的问题。

核心概念

1. 双层消息机制

机器人主动 @另一个机器人(或多人)时,需要发送两条消息:

格式说明【发送者->接收者1,接收者2...】:

  • -> 前面是发信人
  • -> 后面是收信人,多个用逗号分隔

多人场景:

  • 第一条:【发送者->接收者1,接收者2...】
  • 第二条:@所有接收者

示例(@两个人):

  • 第一条:<at user_id="ou_A">A</at><at user_id="ou_B">B</at> 【发送者->A,B】
  • 第二条:<at user_id="ou_A">A</at><at user_id="ou_B">B</at> [图钉]【发送者->A,B】[图钉]

第1步:用机器人身份发送(message 工具)

<at user_id="接收者ID">接收者</at> 📌【发送者->接收者】📌
消息正文
  • message 工具只支持 emoji 📌,不支持 [图钉] 占位符
  • 群里所有人都能看到是机器人发的
  • 有【】格式标识发送者和接收者

第2步:用用户身份发送(feishu_im_user_message send) 两种格式可选:

格式1:富文本 post

内容:{"zh_cn":{"content":[[{"tag":"at","user_id":"ou_接收者ID","name":"接收者"},{"tag":"text","text":" 📌【发送者->接收者】或【发送者->接收者1,接收者2...】📌"}]]}}
格式:post(必须使用 emoji 📌,[图钉] 不会显示)

格式2:纯文本 text(推荐)

内容:<at user_id="ou_接收者ID">接收者</at> [图钉]【发送者->接收者】或【发送者->接收者1,接收者2...】[图钉]
格式:text(使用飞书占位表情 [图钉] 或 emoji 📌 都可以)
  • 优先使用此格式(第二条消息)
  • 如果发送失败,再使用富文本 post 格式
  • 第一条消息根据情况自行决定(可text可post)
  • 触发 mention 事件
  • 被 @的机器人收到通知

2. 用户名-ID 映射表

维护映射文件,按群分组记录用户名和用户 ID 的对应关系。

文件位置: ~/.openclaw/workspace/feishu-user-map.md

格式:

## 群组:龙虾池塘 (chat_id)

| 用户名 | 用户ID (open_id) | 类型 | 更新时间 |
|--------|------------------|------|----------|
| saber | ou_xxx | bot | 2026-03-14T09:00:00+08:00 |
| Excalibur | ou_xxx | bot | 2026-03-14T09:00:00+08:00 |
| Qilin | ou_xxx | bot | 2026-03-14T09:00:00+08:00 |

## 全局配置

- **ID过期时间**:21600 秒(6小时)

3. 消息格式

第1条(机器人身份):

<at user_id="接收者ID">接收者</at> 📌【发送者->接收者】📌
消息正文
  • message 工具只支持 emoji 📌,不支持 [图钉] 占位符

第2条(用户身份):

{"zh_cn":{"content":[[{"tag":"at","user_id":"ou_qilin","name":"Qilin"},{"tag":"text","text":" 📌【发送者->Qilin】📌"}]]}}

发送消息流程

主动 @另一个机器人

  1. 第1步(机器人身份):
// 使用 message 工具发送
await message({
    action: 'send',
    channel: 'feishu',
    message: '<at user_id="接收者ID">接收者</at> 【发送者->接收者】或【发送者->接收者1,接收者2...】\
消息正文',
    target: 'chat:群ID'
});
  1. 第2步(用户身份,用 feishu_im_user_message 发送富文本):
// 使用 feishu_im_user_message 发送富文本
// 注意:[📌] 用 emoji 字符 📌 代替
await feishu_im_user_message({
    action: 'send',
    msg_type: 'post',
    content: '{"zh_cn":{"content":[[{"tag":"at","user_id":"ou_接收者ID","name":"接收者"},{"tag":"text","text":" 📌【发送者->接收者】或【发送者->接收者1,接收者2...】📌"}]]}}',
    receive_id: '群ID',
    receive_id_type: 'chat_id'
});

接收者处理流程

当收到 mention 事件时:

1. 解析发送者

优先检查: 是否有符合以下条件的消息?

  • 内容包含 @接收者 和 📌【发送者->接收者】或【发送者->接收者1,接收者2...】📌
  • 是用户发送的(sender_type = user)
  • msg_type 是 post
  • 有引用(reply_to 字段)

如果有: 解析引用指向的第一条消息,获取【】里的发送者

如果没有: 往上回溯,找到最近一条满足:

  • 【发送者->接收者】或【发送者->接收者1,接收者2...】格式匹配
  • 发送者是当前消息的发送者

2. 回复(也是两步)

第1步(机器人身份):

<at user_id="原发送者ID">原发送者</at> 【接收者->原发送者】
回复内容

第2步(用户身份):

{"zh_cn":{"content":[[{"tag":"at","user_id":"ou_原发送者ID","name":"原发送者"},{"tag":"text","text":" 📌【接收者->原发送者】📌"}]]}}
(引用第1条消息)

示例

场景:saber让 Excalibur 找 Qilin 讨论

发送方(saber):

  1. 第1条(Excalibur 机器人):
   <at user_id="ou_qilin">Qilin</at> 【Excalibur->Qilin】
   saber有事找你
  1. 第2条(saber用户):
   {"zh_cn":{"content":[[{"tag":"at","user_id":"ou_qilin","name":"Qilin"},{"tag":"text","text":" 📌【Excalibur->Qilin】📌"}]]}}
   (引用第1条)

接收方(Qilin):

  1. 收到 mention 事件
  2. 找到第2条消息(post格式),包含 @Qilin 和 📌【Excalibur->Qilin】📌
  3. 解析引用,找到第1条,获取发送者是 Excalibur
  4. 回复:

- 第1条(Qilin 机器人):

     <at user_id="ou_excalibur">Excalibur</at> 【Qilin->Excalibur】
     好的,什么事?

- 第2条(Qilin 用户):

     {"zh_cn":{"content":[[{"tag":"at","user_id":"ou_excalibur","name":"Excalibur"},{"tag":"text","text":" 📌【Qilin->Excalibur】📌"}]]}}
     (引用第1条)

映射表管理

ID过期刷新机制

配置参数:

  • ID过期时间(秒):默认 21600 秒(6小时)
  • 可在 feishu-user-map.md 中修改

刷新逻辑:

  1. 每次使用映射表时,检查每条记录的"更新时间"
  2. 如果当前时间与更新时间之差 > 过期时间,则重新获取该用户ID
  3. 重新获取方式:从最近的消息历史中查找该用户发送的消息,从 mentions 字段获取最新ID

刷新时机:

  • 发送消息前检查接收者ID是否过期
  • 收到消息时检查发送者ID是否过期

手动触发

在群里发送:查看并记录群的成员名称列表 [数量]

查询函数

// 根据群组和用户名查找信息
function getUserInfoByGroup(chatId, username) {
    const groupMap = loadUserMapByGroup(chatId);
    return groupMap[username];  // 返回 { id: "ou_xxx", type: "user|bot", updatedAt: "ISO时间" }
}

// 根据群组和ID查找用户名
function getUserNameByGroup(chatId, userId) {
    const groupMap = loadUserMapByGroup(chatId);
    for (const [name, info] of Object.entries(groupMap)) {
        if (info.id === userId) return name;
    }
    return null;
}

// 检查ID是否过期,过期则刷新
async function getUserIdWithRefresh(chatId, username) {
    const userInfo = getUserInfoByGroup(chatId, username);
    if (!userInfo) return null;

    const expireSeconds = getExpireSeconds(); // 默认21600
    const now = new Date();
    const updated = new Date(userInfo.updatedAt);
    const diffSeconds = (now - updated) / 1000;

    if (diffSeconds > expireSeconds) {
        // ID过期,需要刷新
        const newId = await refreshUserIdFromHistory(chatId, username);
        if (newId) {
            updateUserId(chatId, username, newId);
            return newId;
        }
    }
    return userInfo.id;
}

// 从历史消息中刷新用户ID
async function refreshUserIdFromHistory(chatId, username) {
    // 获取最近的消息,找到该用户发送的消息
    const messages = await feishu_im_user_get_messages({
        chat_id: chatId,
        page_size: 50
    });

    for (const msg of messages) {
        if (msg.sender.name === username && msg.mentions) {
            for (const mention of msg.mentions) {
                if (mention.name === username) {
                    return mention.id;
                }
            }
        }
    }
    return null;
}

⚠️ 重要前提

本 skill 中所有示例都是示例,不能直接使用!

  • ❌ 不能直接用 ou_接收者ID 这个值
  • ❌ 不能直接用 接收者 这个名字
  • ✅ 必须替换为实际的值(从 feishu-user-map.md 或 mentions 获取)

注意事项

  1. 必须使用 user_id(不是 id)在 @标签中
  2. @标签中必须用 ou_xxx,不能用名字(机器人身份无法解析名字)
  3. @标签中 ou_xxx 不能为空,必须按以下优先级获取:

- 优先从 feishu-user-map.md 查找 - 如果找不到,回溯群里历史消息获取真实 ID - 绝对不能留空! - 绝对不能直接用 skill 样例中的值!

  1. 回复规则:

- 如果消息中有 [图钉]【发送者->接收者】[图钉] 或 📌【发送者->接收者】📌 标记,解析【】并回复给【】中的发送者 - 如果没有标记,按正常逻辑回复@你的人

  1. 第二条消息必须有占位符:[图钉] 或 📌(判断时需同时兼容占位符和 emoji 📌)
  2. 回复时也是两步:机器人身份 + 用户身份 reply
  3. 解析发送者时优先找有引用的用户消息
  4. 如果找不到匹配的引用消息,再回溯查找
  5. 定期刷新ID,防止ID过期导致@失败

平台分布

OpenClaw

82.18%
按下载量换算2,364

安全审计

VirusTotal

可疑

ClawScan

通过

Static analysis

通过

权限和风险

权限未标注

当前来源未能明确判断权限范围,默认进入异常复核队列。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills