钉钉和飞书群机器人消息发送命令
$ npm install ding-bot-cli -g
全局安装后就可以使用dingding
命令了;如果是项目中本地安装,你可以在package.json
的scripts
里直接调用dingding
命令,也可以通过node_modules/.bin/dingding
调用.
dingding <type> <jsonBody> --token [access token] --at [mobiles]
钉钉机器人支持 text
link
markdown
feedCard
actionCard
等类型,飞书机器人支持text
post
image
share_chat
interactive
等类型
另外从v1.1.0
起,还支持一种simpleCard
类型,这是跨钉钉和飞书的一种特殊约定的卡片类型,其结构类型定义如下:
interface SimpleCardBody {
head: { text: string; type: 'success' | 'erroor' | 'default' };
title: { text: string };
list: Array<{ label: string; text: string }>;
actions: Array<{ text: string; url: string }>;
foot: { text: string };
}
与type
对应的消息体,需要是 json 对象类型的字符串。具体消息解构请参考:钉钉机器人消息类型及数据格式、飞书机器人消息类型及数据格式
注意:jsonBody
不要求严格的 json 格式,只要是能解析成js Object
对象的字符串都可以,甚至你还可以插入一些表达式:
# 字符串拼接
$ dingding text '{content: "a" + "b" + "c"}' --token xxx
# 字符串拼接 + 数学运算
$ dingding text '{content: "我今年" + (10 + 15) + "岁了"}' --token xxx
# 调用数组方法
$ dingding text '{content: ["a", "b", "c"].join("-")}' --token xxx
# 对SHELL环境变量进行表达式运算
$ SOME_VARIABLE=a-b-c
$ dingding text "{content: '$SOME_VARIABLE'.replace(/-/g, '')}" --token xxx
默认为发送钉钉机器人消息,可以通过该参数指定为发送飞书机器人消息。
通过该参数指定机器人的 token,该参数不可省略。
对于飞书机器人,该方式仅支持
text
类型消息,其他类型消息要支持@提到的用户请参考飞书文档
通过该参数提供要@的人的手机号或者飞书 openId。传递all
表示@所有人。
钉钉版
# @指定的手机号
$ dingding text '{"content": "msg"}' --token xxx --at '14000000000,14000000001,14000000002'
# @所有人
$ dingding text '{"content": "msg"}' --token xxx --at all
飞书版
# @指定的手机号
$ dingding text '{"text": "msg"}' --token xxx --at 'ou_3ed85486e7a980de26cba6b70fffb0ad,ou_489eiodjjkowee9939930002jdlwkl' --feishu
# @所有人
$ dingding text '{"text": "msg"}' --token xxx --at all --feishu
钉钉版
$ dingding text '{
content: "this is a text message"
}' --token xxx
飞书版
$ dingding text '{
text: "this is a text message"
}' --feishu --token xxx
仅支持钉钉
$ dingding link '{
"text": "这个即将发布的新版本,创始人陈航(花名“无招”)称它为“红树林”。而在此之前,每当面临重大升级,产品经理们 都会取一个应景的代号,这一次,为什么是“红树林”?",
"title": "时代的火车向前开",
"picUrl": "",
"messageUrl": "https://github.com/qiqiboy/ding-bot-cli"
}' --token xxx
仅支持钉钉
$ dingding markdown '{
"title":"杭州天气",
"text": "#### 杭州天气 @156xxxx8827\n" +
"> 9度,西北风1级,空气良89,相对温度73%\n\n" +
"> ![screenshot](https://gw.alipayobjects.com/zos/skylark-tools/public/files/84111bbeba74743d2771ed4f062d1f25.png)\n" +
"> ###### 10点20分发布 [天气](https://github.com/qiqiboy/ding-bot-cli) \n"
}' --token xxx
仅支持钉钉
# 整体跳转
$ dingding actionCard '{
"title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": "Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖 啡馆的计划",
"hideAvatar": "0",
"btnOrientation": "0",
"singleTitle" : "阅读全文",
"singleURL" : "https://github.com/qiqiboy/ding-bot-cli"
}' --token xxx
# 独立跳转
$ dingding actionCard actionCard '{
"title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": "Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖 啡馆的计划",
"hideAvatar": "0",
"btnOrientation": "0",
"btns": [
{
"title": "内容不错",
"actionURL": "https://github.com/qiqiboy/ding-bot-cli"
},
{
"title": "不感兴趣",
"actionURL": "https://github.com/qiqiboy/ding-bot-cli"
}
]
}' --token xxx
仅支持钉钉
$ dingding feedCard '{
"links": [
{
"title": "时代的火车向前开",
"messageURL": "https://github.com/qiqiboy/ding-bot-cli",
"picURL": "https://avatars3.githubusercontent.com/u/3774036?s=460&v=4"
},
{
"title": "时代的火车向前开2",
"messageURL": "https://github.com/qiqiboy/ding-bot-cli",
"picURL": "https://avatars3.githubusercontent.com/u/3774036?s=460&v=4"
}
]
}' --token xxx
仅支持飞书
$ dingding post '{
"post": {
"zh_cn": {
"title": "项目更新通知",
"content": [
[{
"tag": "text",
"text": "项目有更新: "
},
{
"tag": "a",
"text": "请查看",
"href": "http://www.example.com/"
},
{
"tag": "at",
"user_id": "ou_18eac8********17ad4f02e8bbbb"
}
]
]
}
}
}' --feishu --token xxx
仅支持飞书
$ dingding share_chat '{
"share_chat_id": "oc_f5b1a7eb27ae2c7b6adc2a74faf339ff"
}' --feishu --token xxx
仅支持飞书
$ dingding image '{
"image_key": "img_ecffc3b9-8f14-400f-a014-05eca1a4310g"
}' --feishu --token xxx
仅支持飞书
$ dingding interactive '{
"config": {
"wide_screen_mode": true,
"enable_forward": true
},
"elements": [{
"tag": "div",
"text": {
"content": "**西湖**,位于浙江省杭州市西湖区龙井路1号,杭州市区西部,景区总面积49平方千米,汇水面积为21.22平方千米,湖面面积为6.38平方千米。",
"tag": "lark_md"
}
}, {
"actions": [{
"tag": "button",
"text": {
"content": "更多景点介绍 :玫瑰:",
"tag": "lark_md"
},
"url": "https://www.example.com",
"type": "default",
"value": {}
}],
"tag": "action"
}],
"header": {
"title": {
"content": "今日旅游推荐",
"tag": "plain_text"
}
}
}' --feishu --token xxx
{
"name": "project",
"version": "1.0.0",
"scripts": {
"deploy": "node ./scripts/deploy.js",
"notify": "dingding text \"{ content: 'Deploy project succeed!' }\" --token xxx"
}
}
deploy:
script:
- node ./scripts/deploy.js
# 有特殊字符,所以需要包裹双引号。具体可参考下方说明
- 'dingding text "{ content: ''Deploy project succeed!'' }" --token xxx'
Note: Sometimes,
script
commands will need to be wrapped in single or double quotes. For example, commands that contain a colon (:
) need to be wrapped in quotes so that the YAML parser knows to interpret the whole thing as a string rather than a "key: value" pair. Be careful when using special characters::
,{
,}
,[
,]
,,
,&
,*
,#
,?
,|
,-
,<
,>
,=
,!
,%
,@
,`
.