钉钉机器人发送消息

背景


先前使用popo机器人发送消息通知 站会、周报、crash 等信息,被收购后改用钉钉,这些工作就迁移到钉钉了。


发送txt消息源码


如何添加至群组请参考钉钉开放平台群机器人

发送txt消息源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sys
import json
import requests

help = """
用法: ding msg

msg:消息内容
"""


def sendTextMsg(text):
headers = {
'Content-Type': 'application/json'
}
data = {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"isAtAll": True
}
}
return requests.post(url="https://oapi.dingtalk.com/robot/send?access_token=******", data=json.dumps(data), headers=headers)


if __name__ == "__main__":
if len(sys.argv) == 2:
content = sys.argv[1]
resp = sendTextMsg(content)
res_data = json.loads(resp.text)
if res_data["errcode"] == 0:
print "钉钉消息发送成功"
else:
print res_data["errcode"], res_data["errmsg"]
else:
print help

打包为可执行脚本


Python 脚本可使用 pyinstaller 模块很方便的打包成可执行文件(使用方法参看pyinstaller官网)

1
pyinstaller -F ding.py

产物在当前目录dist/文件夹下,可将产物发送给需要的同事,即可快速通过钉钉机器人发送消息。

使用姿势:

1
2
3
➜ ding 我在测试

钉钉消息发送成功

封装其他类型消息


钉钉机器人支持多种类消息型,闲时使用python封装了这些消息的发送逻辑,以免今后工作中用到,含以下类型:

text类型
link类型
markdown类型
整体跳转ActionCard类型
FeedCard类型

详细代码请查看项目:dingmsgapi

使用姿势:

1
pip install dingmsgapi

初始化实例


1
2
3
from ding_msg_api import MsgClient
# Webhook机器人access_token
msgClient = MsgClient("****************")

发送Text消息


1
2
3
4
5
6
7
8
9
10
11
12
13
from ding_msg_api import TextMsg

# @群里所有人发文本消息
txtMsg = TextMsg()
txtMsg.set_text(txt="text message")
txtMsg.set_at_all(True)
msgClient.send_message(txtMsg)

# @某个人发文本消息
txtMsg = TextMsg()
txtMsg.set_text(txt="text message")
txtMsg.add_at_user(telephone="***********")
msgClient.send_message(txtMsg)

发送Link消息


1
2
3
4
5
6
7
8
from ding_msg_api import LinkMsg

linkMsg = LinkMsg()
linkMsg.set_title(title="link message")
linkMsg.set_text(txt="test")
linkMsg.set_picUrl(pic_url="")
linkMsg.set_messageUrl(message_url="")
msgClient.send_message(linkMsg)

发送Markdown消息


1
2
3
4
5
6
from ding_msg_api import MarkdownMsg

markDownMsg = MarkdownMsg()
markDownMsg.set_title(title="markdown message")
markDownMsg.set_text(txt="### test")
msgClient.send_message(markDownMsg)

发送ActionCard消息


1
2
3
4
5
6
7
8
from ding_msg_api import ActionCardMsg

actionCardMsg = ActionCardMsg()
actionCardMsg.set_title(title="actioncard message")
actionCardMsg.set_text(txt="test")
actionCardMsg.set_singleTitle(single_title="test")
actionCardMsg.set_singleURL(single_url="")
msgClient.send_message(actionCardMsg)

发送FeedCard消息


1
2
3
4
5
6
from ding_msg_api import FeedCardMsg

feedCardMsg = FeedCardMsg()
for i in range(5):
feedCardMsg.add_feed_link(title="test%d" % i, message_url="messageURL%d" % i, pic_url="picUrl%d" % i)
msgClient.send_message(feedCardMsg)

参考文档


钉钉开放平台群机器人





文章目录
  1. 1. 背景
  2. 2. 发送txt消息源码
  3. 3. 打包为可执行脚本
  4. 4. 封装其他类型消息
    1. 4.1. 初始化实例
    2. 4.2. 发送Text消息
    3. 4.3. 发送Link消息
    4. 4.4. 发送Markdown消息
    5. 4.5. 发送ActionCard消息
    6. 4.6. 发送FeedCard消息
  5. 5. 参考文档