feishu-card
Feishu Card
构建、发送和更新飞书交互卡片。
优先保持主技能简洁;只有当任务明确需要卡片样例时,再读取 references/ 下的 JSON 模板。
Base URL: https://open.feishu.cn/open-apis/im/v1
何时使用
当用户有这些诉求时直接用:
- 给某个
open_id、chat_id或用户发送交互卡片 - 构建带按钮、备注、分割线的飞书消息卡片
- 把 JSON 卡片作为
interactive消息发出去 - 用户点击卡片按钮后,需要根据回调里的
action.value做处理 - 已经发过卡片,现在要更新同一条消息而不是重发
Token 获取
本 skill 默认复用 feishu-user-auth 提供的系统 token 能力。
优先顺序如下:
- 如果 PATH 里已经有
feishu-auth,直接执行:
feishu-auth system-token
- 如果没有 PATH 命令,就执行安装目录里的 bin:
./.agents/skills/feishu-user-auth/bin/feishu-auth.js system-token
全局安装时:
~/.agents/skills/feishu-user-auth/bin/feishu-auth.js system-token
如果返回的是 JSON,取其中的 accessToken 作为 Authorization: Bearer <token>。
发送卡片
POST /open-apis/im/v1/messages?receive_id_type=open_id
POST /open-apis/im/v1/messages?receive_id_type=chat_id
请求体:
{
"receive_id": "ou_xxx",
"msg_type": "interactive",
"content": "{\"config\":{\"wide_screen_mode\":true},\"header\":{\"title\":{\"tag\":\"plain_text\",\"content\":\"标题\"}},\"elements\":[...]}"
}
关键点:
msg_type必须是interactivecontent必须是“字符串化后的 JSON”,不是对象receive_id_type要和receive_id的类型一致
卡片结构
{
"config": { "wide_screen_mode": true },
"header": {
"title": { "tag": "plain_text", "content": "标题" },
"template": "blue"
},
"elements": [
{
"tag": "div",
"text": { "tag": "lark_md", "content": "**加粗内容**" }
},
{
"tag": "action",
"actions": [
{
"tag": "button",
"text": { "tag": "plain_text", "content": "确认" },
"type": "primary",
"value": { "action": "confirm" }
}
]
}
]
}
常用元素:
div: 文本块hr: 分割线action: 按钮区note: 备注区
回调与更新
用户点击按钮后,回调事件里通常关注:
{
"type": "card.action.trigger",
"action": {
"value": {
"action": "confirm",
"data": "extra_info"
}
}
}
处理完回调后,可更新原卡片消息:
PATCH /open-apis/im/v1/messages/{message_id}
参考模板
仅当任务需要现成模板时,再读取这些文件:
references/card-alert.jsonreferences/card-morning-briefing.jsonreferences/card-skill-test.json
最佳实践
- 按钮必须带
value,否则回调难以识别具体动作。 - 需要改状态时优先更新原卡片,避免重复刷屏。
- 危险操作按钮用
danger类型。 - 发卡片前先确认
receive_id_type和receive_id是否匹配。 - 如果
feishu-auth system-token返回 JSON,不要把整个 JSON 原样塞进请求头,只取accessToken。
More from shuliuzhenhua-sys/shuliu-skills
banana-proxy
Gemini image generation via Banana proxy endpoint.
13douyin-share-info
通过抖音分享链接调用 TikHub Douyin Web API 获取作品基础信息,并固定提取封面、音频、视频下载地址(均取第一个 url_list)。当用户提到“抖音分享链接解析”“根据分享链接取视频信息/封面/音频/播放地址”时使用。
8sora-video
Generate videos using Sora via lnapi.com.
7feishu-user-auth
Use when 用户提到“飞书授权”“OAuth”“Device Flow”“open_id”“重复弹授权窗”“复用 token”“补授权 scope”“飞书 token 存哪儿了”这类场景,需要复用本地已有用户 token、只补缺失 scopes,或排查 token 的实际存储位置。
2ecommerce-images
电商商品图生成工作流技能。接收用户提供的商品原图,按模式生成主图、详情图或两者;详情图按套生成并在执行前询问用户需要几张;默认调用 banana-proxy,失败时回退到 baoyu-image-gen;仅支持用中文风格名选择主图/详情图风格。
1