{"skill":{"slug":"xiaolongxia-feishu-card","displayName":"Feishu Card","summary":"飞书互动卡片发送技能（国际版 Feishu 兼容）。当需要发送格式丰富的飞书卡片消息时使用。支持标题、Markdown 内容、颜色主题。关键：必须使用 schema 2.0 格式 + 双重 JSON stringify，否则国际版飞书（Feishu）无法渲染。","description":"---\nname: feishu-card\ndescription: 飞书互动卡片发送技能（国际版 Feishu 兼容）。当需要发送格式丰富的飞书卡片消息时使用。支持标题、Markdown 内容、颜色主题。关键：必须使用 schema 2.0 格式 + 双重 JSON stringify，否则国际版飞书（Feishu）无法渲染。\n---\n\n# 飞书互动卡片发送技能\n\n## 核心要点（必读）\n\n飞书卡片有新旧两种格式：\n- **旧版 components 格式**：部分版本不兼容，显示\"请升级至最新版本客户端\"\n- **schema 2.0 格式**：✅ 推荐，飞书 7.x 均支持\n\n统一用 schema 2.0 即可，不管飞书是中文界面还是英文界面都能用。\n\n## 关键：双重 JSON.stringify\n\n```python\nimport json\n\ncard = { ... }  # 卡片对象\ncontent = json.dumps(json.dumps(card))  # 必须 dumps 两次！\n```\n\n一次 stringify 不够，飞书 API 的 `content` 字段要求是 JSON 字符串。\n\n## 卡片结构（schema 2.0）\n\n```json\n{\n  \"schema\": \"2.0\",\n  \"header\": {\n    \"title\": {\n      \"tag\": \"plain_text\",\n      \"content\": \"标题文字\"\n    },\n    \"template\": \"blue\"\n  },\n  \"body\": {\n    \"elements\": [\n      {\n        \"tag\": \"markdown\",\n        \"content\": \"**加粗** 普通文字\\n\\n支持换行\"\n      }\n    ]\n  }\n}\n```\n\n### header.template 颜色选项\n- `blue` — 蓝色（默认推荐）\n- `green` — 绿色\n- `red` — 红色\n- `orange` — 橙色\n- `purple` — 紫色\n- `grey` — 灰色\n\n### body.elements 支持的 tag\n- `markdown` — Markdown 文本（支持 **加粗**、*斜体*、`代码`、链接）\n- `hr` — 分割线：`{\"tag\": \"hr\"}`\n- `note` — 底部备注\n\n## 发送方式\n\n### 方法一：用脚本（推荐）\n\n```bash\npython3 /root/.openclaw/workspace/skills/feishu-card/scripts/send_card.py \\\n  --open-id \"ou_xxxx\" \\\n  --title \"标题\" \\\n  --content \"**内容** 支持 Markdown\" \\\n  --template \"blue\"\n```\n\n### 方法二：用 message tool\n\n直接调用 `message` tool，`msg_type` 需要写 `interactive`，`content` 需要双重 stringify（先序列化卡片对象，再序列化整个字符串）。\n\n### 方法三：curl（手动）\n\n```bash\nAPP_SECRET=$(cat /root/.openclaw/openclaw.json | python3 -c \"import json,sys; d=json.load(sys.stdin); print(d['channels']['feishu']['appSecret'])\")\nTOKEN=$(curl -s -X POST \"https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"app_id\\\":\\\"cli_a9f5877b3378dbd8\\\",\\\"app_secret\\\":\\\"$APP_SECRET\\\"}\" \\\n  | python3 -c \"import json,sys; print(json.load(sys.stdin)['tenant_access_token'])\")\n\npython3 -c \"\nimport json\ncard = {\n    'schema': '2.0',\n    'header': {'title': {'tag': 'plain_text', 'content': '标题'}, 'template': 'blue'},\n    'body': {'elements': [{'tag': 'markdown', 'content': '内容'}]}\n}\nprint(json.dumps(json.dumps(card)))\n\" | xargs -I{} curl -s -X POST \\\n  \"https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=open_id\" \\\n  -H \"Authorization: Bearer $TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"receive_id\\\":\\\"ou_xxxx\\\",\\\"msg_type\\\":\\\"interactive\\\",\\\"content\\\":{}}\"\n```\n\n## 已知信息（猫南北账号）\n\n- **open_id**: `ou_22f2eefd5abe63e0cd67f4882cec06d4`\n- **app_id**: `cli_a9f5877b3378dbd8`\n- **app_secret**: 从 `/root/.openclaw/openclaw.json` 读取\n- **客户端版本**: 飞书 7.62.6，schema 2.0 验证通过\n\n## 排错\n\n| 现象 | 原因 | 解决 |\n|------|------|------|\n| \"请升级至最新版本客户端\" | 用了旧版 components 格式 | 换成 schema 2.0 |\n| code 400 JSON parse error | content 没有双重 stringify | `json.dumps(json.dumps(card))` |\n| 消息发出但内容为空 | schema 字段缺失 | 确保 `\"schema\": \"2.0\"` |\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":820,"installsAllTime":0,"installsCurrent":0,"stars":0,"versions":1},"createdAt":1772624007477,"updatedAt":1778995189251},"latestVersion":{"version":"1.0.0","createdAt":1772624007477,"changelog":"- Initial release of the 飞书互动卡片发送技能 (Feishu interactive card sending skill), supporting the international version of Feishu.\n- Enables sending rich-format interactive card messages using schema 2.0, compatible with both Chinese and English Feishu interfaces.\n- Requires double JSON.stringify of the card content to ensure rendering on international Feishu.\n- Provides documentation, card structure examples, supported tags, color themes, and troubleshooting guidance.\n- Supports sending methods via Python script, direct message tool call, or manual curl command.","license":null},"metadata":null,"owner":{"handle":"dadaniya99","userId":"s178e9wg39md2mzzgdd57zvhyd83y6sg","displayName":"dadaniya99","image":"https://avatars.githubusercontent.com/u/254098635?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1780089755187}}