dingtalk-robot是钉钉机器人的Docker镜像,支持加签安全设置。当前自定义机器人支持文本、链接 、markdown、ActionCard、FeedCard消息类型。
6.6K
钉钉自定义机器人支持文本 (text)、链接 (link)、markdown、ActionCard、FeedCard 消息类型
每个机器人每分钟最多发送 20 条消息到群里,如果超过 20 条,会限流 10 分钟。 注意: 如果你有大量发消息的场景(譬如系统监控报警)可以将这些信息进行整合,通过 markdown 消息以摘要的形式发送到群里。
您可以使用基于环境变量或配置文件的方法来运行本项目。
在运行项目之前,请确保您已经获取了钉钉自定义机器人的access_token和secret。然后,您可以通过以下命令来运行该项目:
docker run -d --name dingtalk-robot --restart=unless-stopped -p 8080:8080 \
-e ACCESS_TOKEN="your dingtalk custom robot access_token" \
-e SECRET="your dingtalk custom robot secret" \
-e LOG_LEVEL="info" \
jerryin/dingtalk-robot
| 变量名 | 是否必填 | 说明 |
|---|---|---|
ACCESS_TOKEN | 是 | 自定义机器人 Webhook 的access_token 自定义机器人官方说明 |
SECRET | 是 | 自定义机器人 Webhook 的加签secret |
LOG_LEVEL | 否 | 日志级别,debug、info、warning、error。默认:info |
您还可以通过配置文件的方式来运行该项目。在运行项目之前,请确保您已经创建了一个配置文件,并将其挂载到 Docker 容器中。以下是一个示例配置文件:
dingtalk:
access_token:
secret:
log:
level: info
运行该项目的命令如下:
docker run -d --name dingtalk-robot --restart=unless-stopped -p 8080:8080 \
-v path/to/config.yaml:/config/config.yaml \
jerryin/dingtalk-robot
curl -X POST 'http://127.0.0.1:8080/robot/send' \
-H 'Content-Type: application/json' \
-d '{
"text": "简单文本"
}'
{
"msgtype": "text",
"text": {
"content": "我就是我, @XXX 是不一样的烟火"
},
"at": {
"atMobiles": ["180xxxxxx"],
"atUserIds": ["user123"],
"isAtAll": false
}
}
| 参数 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:text。 |
| content | String | 是 | 消息内容。 |
| atMobiles | Array | 否 | 被@人的手机号。 注意:在content里添加@人的手机号,且只有在群内的成员才可被@,非群内成员手机号会被脱敏。 |
| isAtAll | Boolean | 否 | 是否@所有人。 |
{
"msgtype": "link",
"link": {
"text": "这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林",
"title": "时代的火车向前开",
"picUrl": "",
"messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
}
}
| 参数 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:link。 |
| title | String | 是 | 消息标题。 |
| text | String | 是 | 消息内容。如果太长只会部分展示。 |
| messageUrl | String | 是 | 点击消息跳转的 URL。 |
| picUrl | String | 否 | 图片 URL。 |
{
"msgtype": "markdown",
"markdown": {
"title": "杭州天气",
"text": "#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"
},
"at": {
"atMobiles": ["150XXXXXXXX"],
"atUserIds": ["user123"],
"isAtAll": false
}
}
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:markdown。 |
| title | String | 是 | 首屏会话透出的展示内容。 |
| text | String | 是 | markdown 格式的消息。 |
| atMobiles | Array | 否 | 被@人的手机号。 注意:在text内容里要有@人的手机号,只有在群内的成员才可被@,非群内成员手机号会被脱敏。 |
| isAtAll | Boolean | 否 | 是否@所有人。 |
目前只支持 markdown 语法的子集,具体支持的元素如下:
标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
引用
> A man who stands for nothing will fall for anything.
文字加粗、斜体
**bold**
*italic*
链接
[this is a link](http://name.com)
图片

无序列表
- item1
- item2
有序列表
1. item1
2. item2
{
"msgtype": "actionCard",
"actionCard": {
"title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": " \n ### 乔布斯 20 年前想打造的苹果咖啡厅 \n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
"btnOrientation": "0",
"singleTitle": "阅读全文",
"singleURL": "https://www.dingtalk.com/"
}
}
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:actionCard。 |
| title | String | 是 | 首屏会话透出的展示内容。 |
| text | String | 是 | markdown 格式的消息。 |
| singleTitle | String | 是 | 单个按钮的标题。 |
| singleURL | String | 是 | 点击消息跳转的 URL。 |
| btnOrientation | String | 否 | 0:按钮竖直排列;1:按钮横向排列 |
{
"msgtype": "actionCard",
"actionCard": {
"title": "我 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": " \n\n #### 乔布斯 20 年前想打造的苹果咖啡厅 \n\n Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
"btnOrientation": "0",
"btns": [
{
"title": "内容不错",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "不感兴趣",
"actionURL": "https://www.dingtalk.com/"
}
]
}
}
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 此消息类型为固定:actionCard。 |
| title | String | 是 | 首屏会话透出的展示内容。 |
| text | String | 是 | markdown 格式的消息。 |
| btns | Array | 是 | 按钮。 |
| title | String | 是 | 按钮标题。 |
| actionURL | String | 是 | 点击按钮触发的 URL。 |
| btnOrientation | String | 否 | 0:按钮竖直排列;1:按钮横向排列 |
{
"msgtype": "feedCard",
"feedCard": {
"links": [
{
"title": "时代的火车向前开1",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
},
{
"title": "时代的火车向前开2",
"messageURL": "https://www.dingtalk.com/",
"picURL": "https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png"
}
]
}
}
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 此消息类型为固定:feedCard。 |
| title | String | 是 | 单条信息文本。 |
| messageURL | String | 是 | 点击单条信息到跳转链接。 |
| picURL | String | 是 | 单条信息后面图片的 URL。 |
Watchtower 用于自动更新 Docker 容器基础映像。Watchtower 可以在容器更新时发送通知,但是官方没有直接支持钉钉的 Webhook。
本项目可以实现 Watchtower 发送通知钉钉。
version: "3.8"
services:
dingtalk-robot:
image: jerryin/dingtalk-robot
restart: always
expose:
- "8080"
environment:
- ACCESS_TOKEN=your dingtalk custom robot access_token
- SECRET=your dingtalk custom robot secret
watchtower:
depends_on:
- dingtalk-robot
image: containrrr/watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
TZ: "Asia/Shanghai"
WATCHTOWER_NOTIFICATION_URL: "generic://dingtalk-robot:8080/robot/send?template=json&disabletls=yes&messagekey=text"
WATCHTOWER_NOTIFICATION_TEMPLATE: '{{range .}}{{.Time.Format "2006-01-02 15:04:05"}} ({{.Level}}): {{.Message}}{{println}}{{end}}'
command: --cleanup --schedule "0 0 4 * * *"
docker-compose up -d
Content type
Image
Digest
sha256:2cfef770f…
Size
9.8 MB
Last updated
10 months ago
docker pull jerryin/dingtalk-robot