钉钉机器人消息自动化通知工具(Python版)

MIT
python2/3
Linux/Unix/macOS/Windows
Devin · 2018年08月27日 · 8897 次阅读 · 2 条评论

一、钉钉自定义机器人介绍

钉钉机器人是钉钉群的一个高级扩展功能,但使用起来却非常简单,只需要注册一个钉钉账号,就可以将第三方服务信息聚合到钉钉群中,实现信息的自动同步。

常见的使用场景:

  • 1、聚合 Github、Gitlab 等源码管理服务,实现源码更新同步;
  • 2、聚合 Trello、JIRA 等项目协调服务,实现项目信息同步;
  • 3、机器人支持 Webhook 自定义接入,就可以实现更多可能性,例如:将运维报警、自动化测试结果报告、工作&生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日...)的提醒;

目前自定义机器人支持文本(text)、链接(link)、markdown 三种消息格式,五种消息类型,详细信息请参考自定义机器人官方文档

二、安装使用

这么好用的功能,只要在钉钉群中添加机器人,得到 Webhoo 地址即可。接下来,我们先在命令行终端一睹为快吧:

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
   -H 'Content-Type: application/json' \
   -d '
  {"msgtype": "text", 
    "text": {
        "content": "我就是我, 是不一样的烟火"
     }
  }' 

由于各种消息调用,官方只提供 Java 语言的封装,平时使用 Python 比较多,为了更方便平时自动化项目的使用,周末花了点时间用 Python 语言对各种消息类型进行了一一封装,代码已开源在 GitHub 上,同时也上传了 PyPI。

1、项目源码地址如下:DingtalkChatbot
2、安装命令如下:

pip install DingtalkChatbot

3、支持功能如下:

  • 支持 Text 消息;
  • 支持 Link 消息;
  • 支持 Markdown 消息;
  • 支持 ActionCard 消息;
  • 支持消息发送失败时自动通知;
  • 支持 Python2、Python3;
  • 支持钉钉官方消息发送频率限制限制:每个机器人每分钟最多发送 20 条;

三、各消息类型使用示例

from dingtalkchatbot.chatbot import DingtalkChatbot
# WebHook地址
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'
# 初始化机器人小丁
xiaoding = DtalkChatbot(webhook)
# Text消息@所有人
xiaoding.send_text(msg='我就是小丁,小丁就是我!', is_at_all=True)

# Text消息之@指定用户
at_mobiles = ['这里填写需要提醒的用户的手机号码,字符串或数字都可以']
xiaoding.send_text(msg='我就是小丁,小丁就是我!', at_mobiles=at_mobiles)

# Link消息
xiaoding.send_link(title='万万没想到,某小璐竟然...', text='故事是这样子的...', message_url='http://www.kwongwah.com.my/?p=454748", pic_url="https://pbs.twimg.com/media/CEwj7EDWgAE5eIF.jpg')

# Markdown消息@所有人
xiaoding.send_markdown(title='氧气文字', text='#### 广州天气\n'
                           '> 9度,西北风1级,空气良89,相对温度73%\n\n'
                           '> ![美景](http://www.sinaimg.cn/dy/slidenews/5_img/2013_28/453_28488_469248.jpg)\n'
                           '> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n',
                           is_at_all=True)

# Markdown消息@指定用户
xiaoding.send_markdown(title='氧气文字', text='#### 广州天气 @用户手机号\n'
                       '> 9度,西北风1级,空气良89,相对温度73%\n\n'
                       '> ![美景](http://www.sinaimg.cn/dy/slidenews/5_img/2013_28/453_28488_469248.jpg)\n'
                       '> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n',
                       at_mobiles=at_mobiles)

# FeedCard消息类型
feedlink1 = FeedLink(title="氧气美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
feedlink2 = FeedLink(title="氧眼美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
feedlink3 = FeedLink(title="氧神美女", message_url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
links = [feedlink1.get_data(), feedlink2.get_data(), feedlink3.get_data()]
xiaoding.send_feed_card(links)

# ActionCard整体跳转消息类型
btns1 = [{"title": "查看详情", "actionURL": "https://www.dingtalk.com/"}]
actioncard1 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',
                             btns=btns1,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard1)

select_actioncard.png

# ActionCard独立跳转消息类型(双选项)
btns2 = [{"title": "支持", "actionURL": "https://www.dingtalk.com/"}, {"title": "反对", "actionURL": "http://www.back china.com/news/2018/01/11/537468.html"}]
actioncard2 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',
                             btns=btns2,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard2)

# ActionCard独立跳转消息类型(列表选项)
btns3 = [{"title": "支持", "actionURL": "https://www.dingtalk.com/"}, {"title": "中立", "actionURL": "https://www.dingtalk.com/"}, {"title": "反对", "actionURL": "https://www.dingtalk.com/"}]
    actioncard3 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](http://www.songshan.es/wp-content/uploads/2016/01/Yin-Yang.png) \n### 故事是这样子的...',
                             btns=btns3,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard3)

哥们,更多使用场景,现在尽情展开想象吧...
(如果对你有帮助的话,欢迎 > star <)

评论列表
Ruixiang 发表于 2023年12月06日

可以在 conda 里安装使用吗,我安装的时候提示:PackagesNotFoundError

Devin 发表于 2018年10月29日

v1.3.0 版本添加新功能:
1、支持发送图片表情信息类型;
2、支持自定义 outgoing 机器人发送消息;
&^ 欢迎大家使用和建议 &^