From c136db147ef8424927766f84d722408f4ccffcbf Mon Sep 17 00:00:00 2001 From: xiaobian-bot Date: Fri, 3 Apr 2026 16:34:44 +0800 Subject: [PATCH] Auto sync skills to SkillHub: 2026-04-03 16:34:44 --- skills/README.md | 58 +++++++++ skills/lark-send-message-as-bot.vala/SKILL.md | 118 ++++++++++++++++++ .../vala_users_list.md | 62 +++++++++ skills/lark_wiki_operate_as_bot.vala/SKILL.md | 75 +++++++++++ skills/test_sync.txt | 1 + 5 files changed, 314 insertions(+) create mode 100644 skills/README.md create mode 100644 skills/lark-send-message-as-bot.vala/SKILL.md create mode 100644 skills/lark-send-message-as-bot.vala/vala_users_list.md create mode 100644 skills/lark_wiki_operate_as_bot.vala/SKILL.md create mode 100644 skills/test_sync.txt diff --git a/skills/README.md b/skills/README.md new file mode 100644 index 0000000..5591059 --- /dev/null +++ b/skills/README.md @@ -0,0 +1,58 @@ +# skills/ - 技能定义目录 + +存放数字员工的专项技能,**每个技能是一个独立子目录**,内含相关的说明文档、配置和资源文件。 + +## 用途 + +- 定义数字员工具备的专项能力(如数据分析、报表生成、日程管理等) +- 为 agent 提供结构化的任务执行指引 +- 支持按需加载,只在相关场景下启用特定技能 +- 每个技能目录可包含多个文件,便于组织复杂技能所需的模板、示例和配置 + +## 目录结构规范 + +``` +skills/ +├── data-analysis/ # 数据分析技能 +│ ├── README.md # 技能说明(触发条件、执行流程) +│ ├── templates/ # 分析模板(SQL、图表模板等) +│ └── examples/ # 示例输入输出 +├── report-generation/ # 报表生成技能 +│ ├── README.md +│ └── templates/ +├── schedule-management/ # 日程管理技能 +│ └── README.md +└── README.md +``` + +## 技能目录模板 + +每个技能目录下的 `README.md` 建议包含: + +```markdown +# 技能名称 + +## 触发条件 +(什么场景下启用此技能) + +## 执行步骤 +(具体的操作流程) + +## 依赖工具 +(需要调用的工具列表) + +## 所需凭证 +(列举此技能运行所需的凭证名称和用途,具体值从 secrets.md 读取) + +## 输出规范 +(输出格式和存放位置) + +## 相关文件 +(本目录下的模板、配置等文件说明) +``` + +## 安全规范 + +- **技能文件中禁止包含实际的密钥、密码、Token 等敏感信息** +- 技能可以在「所需凭证」章节列举需要提供哪些凭证,但具体值统一存储在 `secrets.md` 中 +- 技能中的脚本如需使用凭证,应通过环境变量注入,不得硬编码 diff --git a/skills/lark-send-message-as-bot.vala/SKILL.md b/skills/lark-send-message-as-bot.vala/SKILL.md new file mode 100644 index 0000000..29ea329 --- /dev/null +++ b/skills/lark-send-message-as-bot.vala/SKILL.md @@ -0,0 +1,118 @@ +--- +name: lark-send-message-as-bot +description: | + 以 Bot 身份通过飞书发送消息。支持两种目标: + (1) 给个人用户发私聊消息(基于 user_id) + (2) 给群组发消息(基于 chat_id) + 当 agent 需要主动推送消息、通知用户、向群组发送信息时使用。 + 触发场景:发消息、通知某人、推送到群、Bot 发消息、主动消息。 +--- + +# 以 Bot 身份发送飞书消息 + +## 前置条件 + +- Bot 应用的凭证已配置在 `/root/.openclaw/credentials//config.json` +- 目标用户必须在 Bot 应用的**可用范围**内(开发者后台配置) +- 目标群必须已将 Bot 添加为群成员 + +## 发送消息 + +### 获取 tenant_access_token + +所有发送操作前先获取 token: + +```bash +APP_ID=$(jq -r '.apps[0].appId' /root/.openclaw/credentials//config.json) +APP_SECRET=$(jq -r '.apps[0].appSecret' /root/.openclaw/credentials//config.json) + +TOKEN=$(curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \ + -H "Content-Type: application/json" \ + -d "{\"app_id\":\"$APP_ID\",\"app_secret\":\"$APP_SECRET\"}" \ + | jq -r '.tenant_access_token') +``` + +token 有效期 2 小时,同一批操作复用即可。 + +### 给个人用户发消息 + +使用 `receive_id_type=user_id`,`receive_id` 填租户级员工 ID: + +```bash +curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=user_id" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "receive_id": "", + "msg_type": "text", + "content": "{\"text\":\"消息内容\"}" + }' +``` + +### 给群组发消息 + +使用 `receive_id_type=chat_id`,`receive_id` 填群 ID: + +```bash +curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{ + "receive_id": "", + "msg_type": "text", + "content": "{\"text\":\"消息内容\"}" + }' +``` + +## 消息类型 + +`msg_type` 和 `content` 对应关系: + +| msg_type | content 格式 | 示例 | +|----------|-------------|------| +| text | `{"text":"纯文本"}` | 普通文本消息 | +| post | `{"zh_cn":{"title":"标题","content":[[{"tag":"text","text":"正文"}]]}}` | 富文本(支持 @、链接、图片) | +| interactive | 卡片 JSON | 消息卡片 | + +富文本 post 支持的 tag:`text`、`a`(链接)、`at`(@用户)、`img`(图片)。 + +## ID 查询方式 + +### 查询 user_id + +通过 Bot 所在群的成员列表获取(指定 `member_id_type=user_id`): + +```bash +LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/ \ + lark-cli im chat.members get \ + --params '{"chat_id":"<群的chat_id>","member_id_type":"user_id"}' \ + --as bot +``` + +返回结果中 `member_id` 即为 `user_id`。 + +> **注意:** 不要使用 `open_id` 跨应用发消息,`open_id` 是应用级别的,不同 Bot 看到的同一用户 open_id 不同。`user_id` 是租户级唯一标识,所有 Bot 通用。 + +### 查询 chat_id + +列出 Bot 所在的所有群: + +```bash +LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/ \ + lark-cli im chats list --params '{}' --as bot --page-all +``` + +返回结果中每个群的 `chat_id` 和 `name` 一一对应。 + +## 常见错误 + +| 错误码 | 含义 | 解决方式 | +|-------|------|---------| +| 230013 | Bot has NO availability to this user | 在开发者后台将该用户加入应用的可用范围 | +| 230001 | Bot is not in the chat | 将 Bot 添加到目标群 | + +## 安全规则 + +- 发送前必须确认用户意图,禁止未经确认自动发送 +- 禁止在终端明文输出 `appSecret` 或 `accessToken` +- `` 根据当前 agent 身份确定(如 xiaokui、xiaoxi、xiaoban 等),参考 `lark-action-as-bot` 技能的凭证目录表 diff --git a/skills/lark-send-message-as-bot.vala/vala_users_list.md b/skills/lark-send-message-as-bot.vala/vala_users_list.md new file mode 100644 index 0000000..9138321 --- /dev/null +++ b/skills/lark-send-message-as-bot.vala/vala_users_list.md @@ -0,0 +1,62 @@ +# MAKEE Interactive 全员姓名-租户user_id对照表 +总人数:57人 + +| 姓名 | 租户通用 user_id | +|--------|---------------------| +| 刘庆逊 | cb2815b4 | +| 刘彦江 | 1da2afbf | +| 胡晓阳 | 2c856846 | +| 张钟月 | 63943ebf | +| 黄挥伟 | 8g42f9b4 | +| 俞欣宜 | aef91f7c | +| 崔竞月 | gfd413g1 | +| 李玉 | 329g7c88 | +| 李雷 | 738edg1b | +| 李若松 | 4aagb443 | +| 范威 | fd47b979 | +| 李文俊 | 4agg3b17 | +| 杨振宇 | b4f341ca | +| 王计 | 43872bc9 | +| 胡陈辰 | gc64176a | +| 吴敬兴 | f4f87c6f | +| 庞鸿潇 | 1f5b7ef9 | +| 毋益飞 | eggbg21g | +| 江涛 | 3d7g1e8f | +| 李承龙 | d8cb7f2a | +| 梁晨 | d245ccg9 | +| 王增礼 | 65cb43f9 | +| 张骜 | 6e7c9b45 | +| 魏亭亭 | cbg55d99 | +| 张沄菥 | 张沄菥 | +| 俞凯歌 | 42fge393 | +| 曲慧萌 | 8c654e1e | +| 何彬君 | d4a56ebg | +| 李应瑛 | 58fd6864 | +| 王虹茗 | af61e4gc | +| 安君仪 | 5412bd9c | +| 童瑶 | gc9f72ff | +| 王祺 | b87ac848 | +| 王欢 | 95g5d89f | +| 张昆鹏 | 7f5cd711 | +| 宋莉 | b4cdf55a | +| 武钰涵 | 8ag94eff | +| 孙时敏 | da6f5fcf | +| 张路 | 742e5117 | +| 遇庭翰 | gcb23689 | +| 林逸瀚 | fbdc565b | +| 王胤鑫 | 5f3bfbe9 | +| 李丹 | ea523c46 | +| 朱源 | 5g8c9355 | +| 梁音 | g52gb2a3 | +| 刘亚伟 | 5f96bf7e | +| 王珞 | 9e4b5fa6 | +| 刘兴冉 | 76e67fc7 | +| 郭少甫 | adfd767f | +| 傅硕 | ff52b224 | +| 徐思清 | 1df37bdd | +| Kala | a893ca1b | +| 姜小龙 | bc227c85 | +| 许悦 | ae8b8b7f | +| 刘新玉 | 7gc796ga | +| 布雪松 | a6ge7741 | +| 章铭暄 | 222ec715 | diff --git a/skills/lark_wiki_operate_as_bot.vala/SKILL.md b/skills/lark_wiki_operate_as_bot.vala/SKILL.md new file mode 100644 index 0000000..679ea45 --- /dev/null +++ b/skills/lark_wiki_operate_as_bot.vala/SKILL.md @@ -0,0 +1,75 @@ +--- +name: lark_wiki_operate_as_bot +version: 1.0.0 +description: "飞书知识库Bot身份操作专用技能,统一使用Bot身份遍历目录、读取知识库文档内容,禁止触发用户身份授权" +metadata: + requires: + permissions: ["wiki:node:retrieve", "docx:document:readonly"] +--- + +# lark_wiki_operate_as_bot 技能规范 + +## 核心规则(强制执行) +1. **身份限制**:所有知识库操作**永远使用Bot身份**执行,绝对不触发任何用户身份授权弹窗 +2. **文档范围限制**:仅支持读取飞书知识库(`/wiki/`开头的链接)文档,**不支持读取用户私有个人文档**(`/doc/`/`/sheet/`等非wiki开头的个人路径) +3. **权限告知规则**: + - 收到非知识库文档链接:直接回复「我仅支持读取飞书知识库(Wiki)文档,暂不支持读取个人私有文档,请提供知识库链接」 + - Bot无权限访问目标知识空间:回复「当前Bot无访问该知识空间权限,请将Bot应用添加为该知识空间成员并授予查看权限后重试」 + +## 适用场景 +- 遍历知识库目录下的子文档/子目录 +- 读取知识库文档内容 +- 批量导出知识库文档 +- 所有知识库相关的查询、读取操作 + +## 完整执行链路 + +### 步骤1:链接解析 +- 从用户提供的链接中提取`wiki_token`:例如链接`https://xxx.feishu.cn/wiki/XXXXXXX`中的`XXXXXXX`即为`wiki_token` +- 若链接不含`/wiki/`路径,直接按非知识库文档规则回复 + +### 步骤2:获取节点基础信息 +```bash +LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli wiki spaces get_node --params '{"token":""}' --as bot +``` +返回结果中提取关键信息: +- `space_id`:知识空间ID +- `obj_token`:文档真实ID(若节点为文档) +- `has_child`:是否为目录(含子节点) +- `obj_type`:节点类型(docx/sheet/bitable等) + +### 步骤3:遍历目录子节点(仅当has_child=true时) +#### 3.1 获取Bot租户访问凭证 +```bash +curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \ + -H "Content-Type: application/json" \ + -d '{"app_id":"cli_xxx","app_secret":"xxx"}' \ + | jq -r '.tenant_access_token' +``` +得到`tenant_access_token`(有效期2小时) + +#### 3.2 调用Wiki V2接口获取子节点列表 +```bash +curl -s -X GET "https://open.feishu.cn/open-apis/wiki/v2/spaces//nodes?parent_node_token=" \ + -H "Authorization: Bearer " +``` +返回子节点完整列表(名称、链接、类型等) + +### 步骤4:读取文档内容(仅当节点为文档时) +```bash +LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli docs +fetch --doc --as bot +``` + +## 权限要求 +### 1. 应用权限(飞书开发者后台配置) +| 权限名称 | Scope | 类型 | +|---------|-------|------| +| 获取知识空间节点信息 | `wiki:node:retrieve` | 只读 | +| 查看文档内容 | `docx:document:readonly` | 只读 | + +### 2. 知识空间配置 +需要将Bot应用添加到目标知识空间的成员列表,授予至少「可查看」权限 + +## 异常处理 +- 接口返回`99991401`(无权限):按权限不足规则回复用户 +- 接口返回`404`:检查`wiki_token`/`space_id`是否正确,确认链接为有效知识库链接 diff --git a/skills/test_sync.txt b/skills/test_sync.txt new file mode 100644 index 0000000..5290833 --- /dev/null +++ b/skills/test_sync.txt @@ -0,0 +1 @@ +test sync to skillhub \ No newline at end of file