Loading...
Loading...
Build and send Feishu interactive message cards (buttons, selects, status indicators). Handles card callback events from WebSocket. Use when sending morning briefings, alerts, confirmations, or any message that benefits from user interaction via buttons instead of text replies.
npx skill4agent add alextangson/feishu_skills feishu-cardPOST /open-apis/im/v1/messages?receive_id_type=chat_id{
"receive_id": "<chat_id>",
"msg_type": "interactive",
"content": "<card_json_string>"
}content{
"config": { "wide_screen_mode": true },
"header": {
"title": { "tag": "plain_text", "content": "Card Title" },
"template": "blue"
},
"elements": [
{ "tag": "div", "text": { "tag": "lark_md", "content": "**Bold** and `code` supported" } },
{ "tag": "hr" },
{ "tag": "action", "actions": [
{ "tag": "button", "text": { "tag": "plain_text", "content": "Confirm" }, "type": "primary", "value": { "action": "confirm" } },
{ "tag": "button", "text": { "tag": "plain_text", "content": "Adjust" }, "type": "default", "value": { "action": "adjust" } }
]}
]
}| Template | Color | Use For |
|---|---|---|
| Blue | Normal briefings, info |
| Green | Success, completed |
| Red | Alerts, failures |
| Orange | Warnings, degraded |
| Purple | Special, creative |
| Teal | Skill/tech results |
| Grey | Low priority, FYI |
| Element | Tag | Purpose |
|---|---|---|
| Rich text | | Markdown-like content |
| Divider | | Visual separator |
| Action buttons | | Clickable actions |
| Select menu | | Dropdown selection |
| Note/footer | | Small gray footer text |
| Column set | | Multi-column layout |
| Image | | Inline image |
lark_mdlark_md**bold***italic*~~strikethrough~~[link text](url)<at id=ou_xxx>name</at>\n{
"header": { "title": { "tag": "plain_text", "content": "Confirmation Required" }, "template": "orange" },
"elements": [
{ "tag": "div", "text": { "tag": "lark_md", "content": "**Question**: Description of what needs confirming" } },
{ "tag": "action", "actions": [
{ "tag": "button", "text": { "tag": "plain_text", "content": "Yes, proceed" }, "type": "primary", "value": { "action": "confirm", "context": "unique_id" } },
{ "tag": "button", "text": { "tag": "plain_text", "content": "No, cancel" }, "type": "danger", "value": { "action": "cancel", "context": "unique_id" } }
]}
]
}STATUS (2026-02-10): WebSocket currently does NOT subscribe toevents. Buttons on cards are display-only for now. Use the text fallback approach below until card callback support is added.card.action.trigger
im.message.receive_v1card.action.triggercard.action.triggeraction.valuevalueoperator.open_idtokenaction.valuePATCH /open-apis/im/v1/messages/:message_idprimaryvaluelark_mdmsg_type: interactivecard.action.triggerFEISHU_API_HANDBOOK.mddaily-briefingops-rhythmn8n-opsskill-labfeishu-sync