钉钉消息样式 Skill 提升钉钉消息的视觉效果和交互体验,支持智能格式选择、模板库、@提醒。
官方文档:https://open.dingtalk.com/document/development/robot-message-type
支持的消息类型
类型 | 图片 | 按钮 | @提醒
----|----|----|----
text | ❌ | ❌ | ✅
markdown | ❌ | ❌ | ✅
link | ✅ | ❌ | ❌
actionCard | ✅ | ✅ | ❌
feedCard | ✅ | ❌ | ❌
⚠️ 注意:Webhook 方式不支持纯图片(image)类型,需要图片请使用 Link 或 FeedCard
快速开始
# 文本消息
python3 ~/.copaw/skills/dingtalk-message-style/scripts/send_dingtalk.py text "内容"
# Markdown(支持表格)
python3 .../send_dingtalk.py markdown "标题" "### 内容\n| 列1 | 列2 |\n|-----|-----|\n| A | B |"
# Link 卡片(带图片)
python3 .../send_dingtalk.py link "标题" "描述" "图片URL" "跳转URL"
# 单按钮 ActionCard
python3 .../send_dingtalk.py action "标题" "描述" "按钮标题" "按钮URL"
# 多按钮 ActionCard(横向排列)
python3 .../send_dingtalk.py action_multi "标题" "描述" '[{"title":"按钮1","actionURL":"url1"},{"title":"按钮2","actionURL":"url2"}]' --btn-orientation 1
# 多图文 FeedCard
python3 .../send_dingtalk.py feed '[{"title":"标题1","picURL":"图片1","messageURL":"链接1"}]'
# @所有人
python3 .../send_dingtalk.py markdown "标题" "内容 @所有人" --at-all
# @指定手机号
python3 .../send_dingtalk.py markdown "标题" "内容 @138xxxx" --at-mobiles "138xxxx,139xxxx"
# @指定用户ID
python3 .../send_dingtalk.py text "内容" --at-user-ids "user1,user2"
# 查看模板列表
python3 ~/.copaw/skills/dingtalk-message-style/scripts/smart_send.py --list
# 商品推荐
python3 .../smart_send.py --template goods_recommend --vars '{"商品名":"iPhone","价格":"5999","亮点":"最新款","描述":"性能强劲","图片URL":"...","商品链接":"..."}'
# 任务报告
python3 .../smart_send.py --template task_report --vars '{"时间":"2026-03-18","任务表格":"|任务|状态|\\n|A|✅|","完成数":"1","总数":"1","总结":"完成"}'
# 降价提醒
python3 .../smart_send.py --template price_alert --vars '{"商品名":"iPhone","原价":"6999","现价":"5999","降幅":"1000","图片URL":"...","商品链接":"..."}'
模板库
模板 | 类型 | 说明
----|----|----
goods_recommend | Link | 单商品推荐
goods_list | FeedCard | 多商品列表
price_alert | Link | 降价提醒
task_report | Markdown | 任务报告
order_status | Markdown | 订单状态
daily_summary | Markdown | 每日总结
meeting_notice | ActionCard | 会议通知
confirm_action | ActionCard | 操作确认
alert_notify | Markdown | 告警通知
shopping_cart | Markdown | 购物车提醒
智能格式选择
自动根据内容选择最佳格式:
from smart_send import SmartSender
# 多商品 → FeedCard
sender = SmartSender()
sender.add_product("商品1", "图片1", "链接1", "¥99")
sender.add_product("商品2", "图片2", "链接2", "¥199")
sender.analyze_and_send()
# 自动选 FeedCard
# 单商品+图片+链接 → Link
sender = SmartSender()
sender.add_product("商品", "图片", "链接", "¥99", "描述")
sender.analyze_and_send()
# 自动选 Link
# 内容+@提醒 → Markdown
sender = SmartSender()
sender.set_title("告警")
sender.set_content("CPU超过90%")
sender.at(mobiles=["138xxxx"], at_all=False)
sender.analyze_and_send()
# 自动选 Markdown
按钮排列方向
ActionCard 多按钮支持两种排列:
# 竖直排列(默认)
--btn-orientation 0
# 横向排列
--btn-orientation 1
图片链接处理
淘宝图片 URL 需去掉 _.webp 后缀:
# 自动处理
fix_taobao_image_url(url)
# xxx.jpg_.webp → xxx.jpg
Markdown 支持的语法
语法 | 支持 | 说明
----|----|----
标题 | # | ✅ 支持 h1-h6
粗体 | ** | ✅
引用 | > | ✅
链接 | []() | ✅
代码 | ` | ✅
列表 | - | ✅
图片 | ![]() | ❌ 请用 Link/FeedCard
文件结构
~/.copaw/skills/dingtalk-message-style/
├── SKILL.md
├── _meta.json
├── scripts/
│ ├── send_dingtalk.py # 基础发送
│ └── smart_send.py # 智能发送+模板
└── templates/
└── templates.json # 模板定义
常见问题
Q:为什么图片不显示?
A:Markdown 不支持图片,请用 Link 或 FeedCard 淘宝图片需去掉 _.webp 后缀
Q:如何@所有人?
A:使用 --at-all 参数
Q:如何让按钮横向排列?
A:使用 --btn-orientation 1
版本:1.1.0 | 更新:2026-03-18