通用飞书互动卡片渲染引擎。用户提供数据源(多维表格/docx文档/wiki/口头描述)和目标群聊,自动将结构化数据渲染为飞书 message card 并推送。 解决消息推送到群猴,带有md格式代码问题。 使用示例:(示例内容根据实际使用情况修改) ``` 1. 读取飞书表信息(url:https://acnjpi84uexx.feishu.cn/docx/H9PtdXn7HoeIOrcyaVqnHG)。 2. 整理表中的内容,分析项目运营过程中的风险问题。 3. 调用 feishu-card-rend
飞书互动卡片渲染引擎是一项面向实际任务的技能,主要用于模板引擎,不是规则手册;拿到数据 → 选模板 → 填内容 → 推送;
模板名 : dashboard | comparison | text_analysis | notice;数据格式 见各模板 Python 文件中的 docstring;validat。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。该技能适合用于一次性任务,也可以接入自动化工作流,与其他技能或上层代理配合完成更完整的业务链路;在组合使用时,应明确每一步的输入输出关系,并避免不同步骤之间出现参数冲突。
模板引擎,不是规则手册。 拿到数据 → 选模板 → 填内容 → 推送。用户管内容和意图,技能管展示好看。
feishu-card-renderer/
├── SKILL.md ← 本文档
├── scripts/
│ ├── build_card.py ← 核心:模板 + 数据 → 卡片 JSON
│ ├── validate_card.py ← 校验:卡片 JSON 合法性检查
│ └── push_card.py ← 封装:输出 message 工具调用参数
└── templates/
├── __init__.py
├── dashboard.py ← 模板 A:数据看板
├── comparison.py ← 模板 B:对比分析
├── text_analysis.py ← 模板 C:文本分析
└── notice.py ← 模板 D:简讯通知
# 从 JSON 文件读取数据(推荐,避免 shell 转义问题)
python scripts/build_card.py --template dashboard --data-file ./data.json
# 直接传 JSON 字符串(简单场景)
python scripts/build_card.py --template notice --data '{"title":"通知","body":"内容"}'
# 从 stdin 读取
echo '{"title":"...","rows":[...]}' | python scripts/build_card.py --template dashboard
# 格式化输出
python scripts/build_card.py --template dashboard --data-file ./data.json --pretty
模板名:dashboard | comparison | text_analysis | notice
数据格式见各模板 Python 文件中的 docstring。
python scripts/validate_card.py --card-file ./card.json
python scripts/validate_card.py --card '{"schema":"2.0",...}'
cat card.json | python scripts/validate_card.py
校验通过 → {"valid": true, "errors": [], "warnings": []}(exit 0)
校验失败 → {"valid": false, "errors": [...], "warnings": [...]}(exit 1)
校验规则覆盖所有「关键约束」节的踩坑经验,包括:
python scripts/push_card.py --chat-id oc_xxx --card-file ./card.json
输出标准 message 工具调用 JSON,AI 直接传参即可,无需手动拼 target/channel/card 字段。
读取数据源 → 结构化数据 → build_card.py → validate_card.py → push_card.py → message 工具
1. 读取飞书数据源(url: {链接})。
2. {展示意图,描述需求}。
3. 调用 feishu-card-renderer 渲染并推送卡片到群 chat:{chat_id}。
4. 发完卡片后回复 NO_REPLY,不要输出任何其他文字。
| 占位符 | 说明 | 示例 |
|---|---|---|
{链接} |
完整 URL,技能自动识别类型 | /base/...?table=... / /docx/... / /wiki/... |
{展示意图,描述需求} |
想怎么看这批数据(可选) | 「总结问题」「只看未完成」「全量列表」 |
{chat_id} |
目标群 | oc_a48a53d3294b1d821287202ada93e7a0 |
缺参数就问,不猜。
确认参数 → 识别来源 → 读取数据 → 选模板 → 构建卡片 → 校验 → 推送 → NO_REPLY
↑ ↑
build_card.py push_card.py
↓
validate_card.py
按 URL 特征自动路由:
| URL 特征 | 数据源 | 读取工具 |
|---|---|---|
/base/{token}?table={id} |
多维表格 | feishu_bitable_list_fields → list_records |
/docx/{token} |
飞书文档 | feishu_doc read(含表格解析) |
/wiki/{token} |
知识库节点 | feishu_wiki get 拿到 obj_token 后同上 |
| 口头描述 | 直接内容 | 结构化后走卡片构建 |
多维表字段自适应(不硬编码列名):按「名称/负责人/状态/分类/优先级/日期/描述」语义匹配。
适用:多维表、任务表、统计表等有明确行列的数据
骨架:
header(title) → column_set(概览指标:总数、完成率、待办数等) → hr → table(明细数据) → hr → markdown(一句话结论)
概览指标用 column_set 双栏 / 三栏,纯 markdown 文字,不带复杂格式。
明细用 table 组件,状态列用 options 类型带颜色标签。
适用:两组或多组数据对比、前后变化、差异分析
骨架:
header(title) → markdown(背景一句话) → hr → table(对比明细:列=对比维度) → hr → markdown(结论)
适用:散文、报告、议论文等无表格的长文
骨架:
header(title) → markdown(核心提炼 2-3 句) → hr → 中间区:有对比用 table,无可提炼为 markdown 块 → hr → markdown(关键引用/佐证) → hr → markdown(作者意图一句话)
适用:纯文字消息、公告、提醒
骨架:
header(title) → markdown(正文) → markdown(补充/行动指引)
| 数据特征 | 模板 |
|---|---|
| 有明确行列、≥3 条同构记录 | A:数据看板 |
| 两组或多组对照 | B:对比分析 |
| 长文本、无表格 | C:文本分析 |
| 纯文字通知 | D:简讯 |
空白数据 → 卡片只放「📊 暂无数据」→ NO_REPLY。
{
"schema": "2.0",
"config": { "wide_screen_mode": true },
"header": {
"title": { "tag": "plain_text", "content": "表格标题" }
},
"body": {
"elements": [
{
"tag": "table",
"page_size": 10,
"columns": [
{ "data_type": "text", "display_name": "列名", "name": "col" },
{ "data_type": "options", "display_name": "状态", "name": "status" }
],
"rows": [
{ "col": "值", "status": [{ "color": "green", "text": "已完成" }] }
]
}
]
}
}
要点:
"schema": "2.0",表格组件放在 body.elements中page_size有效范围为 1 ~ 10(原 1.0 中可设 15 但超出限制会被截断)header_style在 2.0 中不再单独存在,可通过 header.title自定义样式颜色语义:
| 语义 | color |
|---|---|
| 完成/正常 | green |
| 进行中 | blue |
| 待处理 | grey |
| 等待/暂停 | orange |
| 阻塞/失败 | red |
| 做法 | 原因 |
|---|---|
table 优先于 markdown 表格 |
飞书卡片 markdown 不渲染表格 |
column_set 内只用纯文本 |
markdown 表格在 column_set 中管道符原样显示 |
日期不用 date data_type |
实测 400 错误 |
不用 template_id + 变量 |
模板无变量定义,内容会被静默忽略 |
推送用 message + card |
不用外部脚本 |
| 2.0 卡片仅支持飞书客户端 ≥ V7.20 | 低于此版本会显示"请升级客户端" |
markdown 块禁用 # / ## |
飞书卡片 markdown 不支持 heading,## 会原样显示成 ## 文字 |
替代方案:用 **粗体** 或 — 分隔 |
例如 **标题一** 替代 ## 标题一 |
note 标签禁用 |
schema 2.0 不兼容,会 400 错误;用 markdown 块替代 |
message 工具:
action: send
channel: feishu
target: chat:{chat_id}
card: {完整卡片 JSON(2.0 格式)}
推送成功 → NO_REPLY。不要输出任何其他文字。
相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习