DingtalkChatbot

GitHub
1.3k 288 非常简单 1 次阅读 3天前MIT插件
AI 解读 由 AI 自动生成,仅供参考

DingtalkChatbot 是一款专为 Python 开发者打造的钉钉群自定义机器人消息发送库。它旨在解决官方仅仅提供 Java 封装、而 Python 用户在自动化项目中调用不便的痛点,让开发者能轻松将各类第三方服务信息聚合到钉钉群中。

无论是同步 Github 代码更新、推送 JIRA 项目进度,还是发送运维报警、自动化测试报告乃至日常日程提醒,DingtalkChatbot 都能通过简洁的代码实现。它全面支持文本、链接、Markdown、图片表情、ActionCard 及 FeedCard 等多种消息格式,并内置了@指定用户或@所有人的功能。

该工具特别适合后端工程师、运维人员及热衷于办公自动化的开发者使用。其技术亮点在于不仅兼容 Python 2 和 Python 3,还贴心地集成了钉钉官方的消息频率限制机制(每分钟 20 条),有效避免触发限流;同时支持新版机器人的“加签”加密设置,保障消息发送安全。此外,它还允许自定义消息链接在 PC 端侧边栏打开,并具备发送失败自动通知机制,极大提升了集成的稳定性和开发效率。只需几行代码,即可让你的钉钉群变身高效的信息枢纽。

使用场景

某电商公司的运维团队需要实时监控夜间自动化测试结果,并在发现严重故障时立即通知值班开发人员介入处理。

没有 DingtalkChatbot 时

  • 运维脚本只能将日志输出到服务器文件,值班人员必须定时手动登录服务器查看,极易错过最佳修复窗口。
  • 若需集成报警功能,开发者需直接用 curl 拼接复杂的 JSON 报文和加密签名,代码冗长且难以维护。
  • 报警信息仅为纯文本,无法展示错误堆栈截图或跳转链接,开发人员收到消息后仍需二次排查才能定位问题。
  • 在高并发测试场景下,频繁调用官方接口容易触发每分钟 20 条的频率限制,导致关键报警丢失。
  • 无法精准@特定模块的负责人,往往造成“狼来了”效应,所有人群发消息却无人响应。

使用 DingtalkChatbot 后

  • 测试脚本通过 DingtalkChatbot 一键发送 Markdown 格式报告,自动包含错误日志、堆栈截图及构建详情链接,信息一目了然。
  • 内置的 Python 封装自动处理 Webhook 请求与加签逻辑,开发者仅需几行代码即可实现稳定发送,大幅降低接入门槛。
  • 工具原生支持频率限制控制与失败重试机制,确保在大规模测试中报警消息不拥堵、不丢失。
  • 利用 at_mobiles 参数精准@后端或前端值班人员的手机号,确保责任人第一时间收到强提醒并介入处理。
  • 支持配置消息在 PC 端侧边栏直接打开,开发人员无需切换窗口即可查看详细文档或重启服务,提升响应速度。

DingtalkChatbot 将繁琐的报警通知转化为标准化的自动化流程,让运维监控从“被动查阅”升级为“主动触达”,显著缩短了故障平均修复时间。

运行环境要求

操作系统
  • 未说明
GPU

不需要 GPU

内存

未说明

依赖
notes该工具为钉钉机器人 Python SDK,通过 pip 安装(pip install DingtalkChatbot)。主要功能依赖钉钉 Webhook 地址和可选的加密密钥(secret)。支持文本、链接、图片、Markdown、ActionCard 等多种消息格式。需注意图片链接建议使用 HTTPS 协议以兼容网页版,且官方限制每个机器人每分钟最多发送 20 条消息。
pythonPython 2, Python 3
DingtalkChatbot hero image

快速开始

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

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

常见的使用场景:

1、聚合Github、Gitlab等源码管理服务,实现源码更新同步;

2、聚合Trello、JIRA等项目协调服务,实现项目信息同步;

3、机器人支持Webhook自定义接入,就可以实现更多可能性,例如:将运维报警、产品数据、自动化测试报告、工作&生活日程安排(上班打卡、下班吃饭、健身、读书、生日、纪念日...)的提醒;

目前自定义机器人支持文本(text)、链接(link)、markdown三种消息格式,五种消息类型,详细信息请参考\ 自定义机器人官方文档 <https://open.dingtalk.com/document/group/custom-robot-access>__

二、安装使用

这么好用的功能,只要在钉钉群中添加机器人,得到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 <https://github.com/zhuifengshen/DingtalkChatbot>__ | 2、安装和更新命令如下:

::

pip install DingtalkChatbot
pip install -U DingtalkChatbot

3、支持功能如下:

  • 支持Text消息;
  • 支持Link消息;
  • 支持image表情消息;
  • 支持Markdown消息;
  • 支持ActionCard消息;
  • 支持消息发送失败时自动通知(默认fail_notice=False不通知,开发者可直接根据返回的消息发送结果自行处理)
  • 支持设置消息链接打开方式(默认pc_slide=False跳转至浏览器打开;pc_slide=True则在PC端侧边栏打开)
  • 支持钉钉官方消息发送频率限制,即每个机器人每分钟最多发送20条,不用担心触发限流;
  • 支持新版钉钉机器人加密设置;
  • 支持Python2、Python3;
  • 支持钉钉企业内部机器人\ 即outgoing机器人的消息发送 <https://open.dingtalk.com/document/group/enterprise-created-chatbot>__;

三、各消息类型使用示例

|image0|

.. code:: python

from dingtalkchatbot.chatbot import DingtalkChatbot, ActionCard, CardItem
# WebHook地址
webhook = 'https://oapi.dingtalk.com/robot/send?access_token=这里填写自己钉钉群自定义机器人的token'
secret = 'SEC11b9...这里填写自己的加密设置密钥'  # 可选:创建机器人勾选“加签”选项时使用
# 初始化机器人小丁
xiaoding = DingtalkChatbot(webhook)  # 方式一:通常初始化方式
xiaoding = DingtalkChatbot(webhook, secret=secret)  # 方式二:勾选“加签”选项时使用(v1.5以上新功能)
xiaoding = DingtalkChatbot(webhook, pc_slide=True)  # 方式三:设置消息链接在PC端侧边栏打开(v1.5以上新功能)
# Text消息@所有人
xiaoding.send_text(msg='我就是小丁,小丁就是我!', is_at_all=True)

|image1|

.. code:: python

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

|image9|

.. code:: python

# image表情消息
xiaoding.send_image(pic_url='http://uc-test-manage-00.umlife.net/jenkins/pic/flake8.png')

|image2|

.. code:: python

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

|image3|

.. code:: python

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

|image4|

.. code:: python

    # Markdown消息@指定用户
    xiaoding.send_markdown(title='氧气文字', text='#### 广州天气 @1882516xxxx\n'
                           '> 9度,西北风1级,空气良89,相对温度73%\n\n'
                           '> ![美景](https://oss.gittoolsai.com/images/zhuifengshen_DingtalkChatbot_readme_4e14b0a460e0.jpg)\n'
                           '> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n',
                           at_mobiles=at_mobiles)

|image5|

.. code:: python

# FeedCard消息类型(注意:当发送FeedCard时,pic_url需要传入参数值,必选)
card1 = CardItem(title="氧气美女", url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
card2 = CardItem(title="氧眼美女", url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
card3 = CardItem(title="氧神美女", url="https://www.dingtalk.com/", pic_url="https://unzippedtv.com/wp-content/uploads/sites/28/2016/02/asian.jpg")
cards = [card1, card2, card3]
xiaoding.send_feed_card(cards)

|image6|

.. code:: python

# ActionCard整体跳转消息类型
btns1 = [CardItem(title="查看详情", url="https://www.dingtalk.com/")]
actioncard1 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](https://oss.gittoolsai.com/images/zhuifengshen_DingtalkChatbot_readme_9a80d59c9f74.png) \n### 故事是这样子的...',
                             btns=btns1,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard1)

|image7|

.. code:: python

# ActionCard独立跳转消息类型(双选项)
btns2 = [CardItem(title="支持", url="https://www.dingtalk.com/"), CardItem(title="反对", url="https://www.dingtalk.com/")]
actioncard2 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](https://oss.gittoolsai.com/images/zhuifengshen_DingtalkChatbot_readme_9a80d59c9f74.png) \n### 故事是这样子的...',
                             btns=btns2,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard2)

|image8|

.. code:: python

# ActionCard独立跳转消息类型(列表选项)
btns3 = [CardItem(title="支持", url="https://www.dingtalk.com/"), CardItem(title="中立", url="https://www.dingtalk.com/"), CardItem(title="反对", url="https://www.dingtalk.com/")]
actioncard3 = ActionCard(title='万万没想到,竟然...',
                             text='![选择](https://oss.gittoolsai.com/images/zhuifengshen_DingtalkChatbot_readme_9a80d59c9f74.png) \n### 故事是这样子的...',
                             btns=btns3,
                             btn_orientation=1,
                             hide_avatar=1)
xiaoding.send_action_card(actioncard3)

四、常见注意事项

  • 1、at_mobiles列表上的手机号默认自动添加到消息文本末尾,才有@的效果,如需自定义在消息文本@的位置,可将参数is_auto_at设置为False即可,同时支持@多个手机号;
  • 2、如果钉钉机器人消息中的图片链接使用Http协议,可以在钉钉客户端正常加载显示,但无法在钉钉网页版显示,需要更改为Https协议;
  • 3、钉钉机器人消息中的链接默认跳转至浏览器打开(即:pc_slide=False),如果需要直接在客户端侧边栏打开,设置pc_slide为True即可;
  • 4、当前钉钉自定义机器人官方尚不支持应答机制(即在群里成员在聊天@机器人),此功能需要使用钉钉企业内部开发机器人实现(即Outgoing机器人;

哥们,更多使用场景,现在尽情展开想象吧...

(如果对你有帮助的话,欢迎star

.. |image0| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/text_at_all.png .. |image1| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/text_at_one.png .. |image2| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/link.png .. |image3| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/markdown_at_all.png .. |image4| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/markdown_at_one.png .. |image5| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/feedcard.png .. |image6| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/global_actioncard.png .. |image7| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/select_actioncard.png .. |image8| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/multi_actioncard.png .. |image9| image:: https://raw.githubusercontent.com/zhuifengshen/DingtalkChatbot/master/img/image_msg.png

版本历史

v1.5.72022/12/07

常见问题

相似工具推荐

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

OpenHands

OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。

70.6k|★★★☆☆|今天
语言模型Agent开发框架

gpt4free

gpt4free 是一个由社区驱动的开源项目,旨在聚合多种可访问的大型语言模型(LLM)和媒体生成接口,让用户能更灵活、便捷地使用前沿 AI 能力。它解决了直接调用各类模型时面临的接口分散、门槛高或成本昂贵等痛点,通过统一的标准将不同提供商的资源整合在一起。 无论是希望快速集成 AI 功能的开发者、需要多模型对比测试的研究人员,还是想免费体验最新技术的普通用户,都能从中受益。gpt4free 提供了丰富的使用方式:既包含易于上手的 Python 和 JavaScript 客户端库,也支持部署本地图形界面(GUI),更提供了兼容 OpenAI 标准的 REST API,方便无缝替换现有应用后端。 其技术亮点在于强大的多提供商支持架构,能够动态调度包括 Opus、Gemini、DeepSeek 等多种主流模型资源,并支持 Docker 一键部署及本地推理。项目秉持社区优先原则,在降低使用门槛的同时,也为贡献者提供了扩展新接口的便利框架,是探索和利用多样化 AI 资源的实用工具。

66k|★★☆☆☆|2天前
插件语言模型Agent

gstack

gstack 是 Y Combinator CEO Garry Tan 亲自开源的一套 AI 工程化配置,旨在将 Claude Code 升级为你的虚拟工程团队。面对单人开发难以兼顾产品战略、架构设计、代码审查及质量测试的挑战,gstack 提供了一套标准化解决方案,帮助开发者实现堪比二十人团队的高效产出。 这套配置特别适合希望提升交付效率的创始人、技术负责人,以及初次尝试 Claude Code 的开发者。gstack 的核心亮点在于内置了 15 个具有明确职责的 AI 角色工具,涵盖 CEO、设计师、工程经理、QA 等职能。用户只需通过简单的斜杠命令(如 `/review` 进行代码审查、`/qa` 执行测试、`/plan-ceo-review` 规划功能),即可自动化处理从需求分析到部署上线的全链路任务。 所有操作基于 Markdown 和斜杠命令,无需复杂配置,完全免费且遵循 MIT 协议。gstack 不仅是一套工具集,更是一种现代化的软件工厂实践,让单人开发者也能拥有严谨的工程流程。

64.6k|★★☆☆☆|今天
Agent插件

meilisearch

Meilisearch 是一个开源的极速搜索服务,专为现代应用和网站打造,开箱即用。它能帮助开发者快速集成高质量的搜索功能,无需复杂的配置或额外的数据预处理。传统搜索方案往往需要大量调优才能实现准确结果,而 Meilisearch 内置了拼写容错、同义词识别、即时响应等实用特性,并支持 AI 驱动的混合搜索(结合关键词与语义理解),显著提升用户查找信息的体验。 Meilisearch 特别适合 Web 开发者、产品团队或初创公司使用,尤其适用于需要快速上线搜索功能的场景,如电商网站、内容平台或 SaaS 应用。它提供简洁的 RESTful API 和多种语言 SDK,部署简单,资源占用低,本地开发或生产环境均可轻松运行。对于希望在不依赖大型云服务的前提下,为用户提供流畅、智能搜索体验的团队来说,Meilisearch 是一个高效且友好的选择。

57k|★★☆☆☆|今天
图像Agent数据工具

awesome-claude-skills

awesome-claude-skills 是一个精心整理的开源资源库,旨在帮助用户挖掘和扩展 Claude AI 的潜力。它不仅仅是一份列表,更提供了实用的“技能(Skills)”模块,让 Claude 从单纯的文本生成助手,进化为能执行复杂工作流的智能代理。 许多用户在使用 AI 时,常受限于其无法直接操作外部软件或处理特定格式文件的痛点。awesome-claude-skills 通过预设的工作流解决了这一问题:它不仅能教会 Claude 专业地处理 Word、PDF 等文档,进行代码开发与数据分析,还能借助 Composio 插件连接 Slack、邮箱及数百种常用应用,实现发送邮件、创建任务等自动化操作。这使得重复性任务变得标准化且可复用,极大提升了工作效率。 无论是希望优化日常办公流程的普通用户、需要处理复杂文档的研究人员,还是寻求将 AI 深度集成到开发管线中的开发者,都能从中找到适合的解决方案。其独特的技术亮点在于“技能”的可定制性与强大的应用连接能力,让用户无需编写复杂代码,即可通过简单的配置让 Claude 具备跨平台执行真实任务的能力。如果你希望让 Claude

51.3k|★★☆☆☆|今天
Agent插件