Python推送消息到钉钉群(从定义钉钉机器人到开发部署测试)

一、任务需求

此次的任务需求相对简单,思路也很清晰。就是从生产的库中读取数据,定时推送到钉钉群中用以消息通知,整个过程可以了解到如何自定义钉钉机器人、如何在Linux环境下部署python脚本并设置定时任务。

二、自定义钉钉机器人

1. 首先可以将相关人员建立一个钉钉群,人数要大于等于三人(不然还群聊个锤子...)

2. 点击右上角的群设置;

3. 点击智能群助手;

4. 点击添加机器人;

5. 点击添加机器人

6. 可以看到,钉钉可以添加的机器人的种类是很多的,包括代码托管的GitHub,gitlab,bug的追踪管理工具JIRA等等,这里我们选择自定义机器人。

7. 选择添加

8. 此时可以设置机器人的相关属性,包括机器人名字,安全设置等。

需要注意的是,这里的安全属性是必须选择的。

安全设置目前有3种方式:

1)方式一,自定义关键词

最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。

例如:添加了一个自定义关键词:监控报警

在你写的代码中,让这个机器人所发送的消息必须包含“监控报警”这个词,才能发送成功。否则会出现 keyword not in content。错误。

2)方式二,加签

第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。

参数

说明

timestamp

当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时

secret

密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串

签名计算代码示例(Java

Long timestamp = System.currentTimeMillis();
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
return URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");

签名计算代码示例(Python

#python 2.7
import time
import hmac
import hashlib
import base64
import urllibtimestamp = long(round(time.time() * 1000))
secret = 'this is secret'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)

第二步,把 timestamp和第一步得到的签名值拼接到URL中。

参数

说明

timestamp

第一步使用到的时间戳

sign

第一步得到的签名值

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX&timestamp=XXX&sign=XXX

3)方式三,IP地址(段)

设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IPIP段,暂不支持IPv6地址白名单,格式如下:

注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。校验不通过的消息将会发送失败,错误如下:

// 消息内容中不包含任何关键词
{"errcode":310000,"errmsg":"keywords not in content"
}// timestamp 无效
{"errcode":310000,"errmsg":"invalid timestamp"
}// 签名不匹配
{"errcode":310000,"errmsg":"sign not match"
}// IP地址不在白名单
{"errcode":310000,"errmsg":"ip X.X.X.X not in whitelist"
}

详情参考说明文档:

https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq

9. 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX

三、推送代码

单独推送的代码比较简单,如下。完整的GitHub代码见:GitHub代码

"""!/usr/bin/env python3.6-*- coding: utf-8 -*---------------------------------Description : 测试钉钉群机器人推送消息安全设置是必填项,例如自定义关键字:钉钉钉钉发送通知时,必须包含关键字 “钉钉”,不然会报 keyword not in content。--------------------------------@Time    : 2020/2/9 18:34@File    : dingding_push.py@Software: PyCharm--------------------------------@Author  : lixj@contact : lixj_zj@163.com
"""import requests
import jsondef ding_push_message():# 构建请求头部header = {"Content-Type": "application/json","Charset": "UTF-8"}# 构建请求数据message = {"msgtype": "text","text": {"content": msg},"at": {"isAtAll": True}}# 对请求的数据进行json封装message_json = json.dumps(message)# 发送请求info = requests.post(url=web_url, data=message_json, headers=header)# 打印返回的结果print(info.text)if __name__ == "__main__":# 请求的URL,WebHook地址web_url = "https://oapi.dingtalk.com/robot/send?access_token=xxxx"# 构建请求数据msg = "钉钉,测试消息。。。"ding_push_message()

四、部署测试

脚本完成后在Linux环境下部署测试,此时将脚本存放于 /app/mom/demo路径下:

在Linux中设置定时任务,使用 #crontab -e 指令:

crontab -e 

设置每分钟查询一次:

*/1 * * * * python /app/mom/demo/demo.py

保存退出等待一分钟后,在同目录下生成run_log.log 日志文件:

此时钉钉群接受到消息:

除了简单的发送消息通知外,钉钉机器人还可以发送更丰富的通知形式,如链接、文本、markdown类型等等,详情参考钉钉开发平台开发指南(https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq )。

 

问题集锦

1. 生成的日志文件需要指定具体生成的位置,否则会默认生成在 /root 路径下,在做测试时,在 /root 路径下生成了 test.txt 文件,并且是通过定时任务定时执行的结果。

具体原因是因为直接执行和通过任务执行,程序的执行环境不同直接执行脚本,脚本执行环境是脚本所在的目录,而定时的脚本执行环境默认是root目录

 

参考连接

https://www.cnblogs.com/imustun/p/9604722.html

http://www.coin163.com/it/x5906505031476308272

https://blog.csdn.net/wc1695040842/article/details/86419557

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/69472.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创建钉钉群聊机器人,使用Python发送消息,使用DolphinScheduler发送告警

文章目录 获取自定义机器人Webhook使用Python发送消息使用curl发送消息使用DolphinScheduler发送告警 获取自定义机器人Webhook 1.1、创建群(然后将别人移出群聊) 1.2、单击群设置 > 智能群助手 1.3、在机器人管理页面选择自定义机器人 1.4、输入…

钉钉群机器人开发接口

钉钉群机器人开发接口 获取自定义机器人webhook 步骤一,在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成Hook地址&#xff0…

干货|Webhook配置钉钉/飞书机器人告警

马嘉炜 | Zabbix开源社区签约专家 SRE运维工程师,六年Zabbix监控系统使用经验。在Zabbix架构设计及性能优化领域有丰富的经验,擅长监控模板制作及Zabbix API的二次开发。 官方使用手册《Zabbix标准模板指南》译者 简介 自 Zabbix 4.4.4 版本开始&…

钉钉群聊机器人.go

来源于个人博客:https://agou-ops.cn 最近需要做一个钉钉群聊机器人,需求是:艾特该机器人并发送相应关键字,机器人会进行相应的自动回复。 通过钉钉开放平台钉钉机器人的企业自建机器人官方文档以及网络上其他语言(Ja…

python操作钉钉机器人推送消息

群里面设置 使用关键词,必须要携带这个关键词才能调用这个机器人 下一步,这个就是操作这个钉钉机器人的接口 allure测试报告 关键词一定要写在 content字段里面 import jsonimport requestsdef dd_robot():HEADERS {"Content-Type": …

Python - 接入钉钉机器人

背景 想将 Python 爬下来的内容通知到钉钉 钉钉群聊机器人概述 所谓群聊机器人,指可以在群内使用的机器人,目前主要为 webhook 机器人和企业自建机器人两大类,另外通过场景群模板的方式,也可以预先配置好机器人并通过启用模板的方…

钉钉机器人怎么使用?钉钉机器人如何设置自动发送消息

在企业中,需要使用许多CRM系统,例如交易系统、监控报警系统等应用支撑着公司的核心业务流程;有时候也需要行政人事定时发送一些企业人文关怀、疫情通知等信息。通过钉钉的自定义机器人,可以将这些系统事件或消息自动发送至聊天群。…

开通与使用钉钉群机器人、企业微信等消息推送 [附API代码]

目录 开通方式 参考代码 使用示范 其他的 企业微信 TG Plusplus Server Server酱 开通方式 免费,有群就能开,任何用户都可开 官方文档:自定义机器人接入 - 钉钉开放平台 注意事项:用电脑版钉钉来开通,手机上…

前端 sentry 接入钉钉机器人

sentry 接入钉钉机器人 打开钉钉,添加机器人 此时会得到Webhook地址,记录一下,以后会用到 sentry 端设置 看看这里有木有钉钉插件,有的话开启插件,并配置这里我说一下没有的情况下,我们何如设置 这里需要填写webhook url 这个的url 需要是一个公网的地址,不可以是本地…

让服务器实时跟你报告 —— 钉钉机器人 企业微信机器人

写在前面 一入炼丹深似海,希望天下没有空闲的GPU 每次训练开始跑起来总是要不断看什么时候结束,永远副屏都要开着终端实时查看GPU占用情况 原本想着能不能服务器有空闲时给我发邮件提醒呢,简单搜索了一番发现了更优雅的解决方案 最终效果…

爬虫-接入钉钉机器人

前言 又间隔了好久都没发博客了,心血来潮来写写博客,今天就写一下用pthon实现钉钉群机器人自动发消息的功能吧,也就是通过去爬取数据,通过钉钉内置的群机器人去做一个自动通知的这么一个操作 钉钉机器人相关文档 链接: 钉钉群机…

Ruminococcus gnavus

Capsular polysaccharide correlates with immune response to the human gut microbe Ruminococcus gnavus 有趣的是,R. gnavus在克罗恩病患者短暂开花(10),并与多种其他免疫疾病有关如狼疮(11)&#xff…

小小的纳豆居然有这么多好处,难怪岛国人为它疯狂

纳豆,起源于中国古代,自秦汉(公元前221年-公元220年)以来开始制作,由黄豆通过纳豆菌(枯草杆菌)发酵制成豆制品,具有黏性,气味较臭,味道微甜,不仅保…

[文献分享] 父母炎症性肠病与儿童自闭症(国家登记数据队列研究、连锁不平衡分数回归、多基因风险评分、孟德尔随机化)

文献来源:Sadik A, Dardani C, Pagoni P, et al. Parental inflammatory bowel disease and autism in children. Nat Med. 2022;28(7):1406-1411. doi:10.1038/s41591-022-01845-9 目录 1.基本信息 2. 主要内容概览: 3. 主要结果 3.1. Study 1: Pare…

如何解读肠道菌群检测报告中维生素指标

​在谷禾肠道菌群健康检测中,我们会看到结果报告中关于维生素的评估如下: 摄入水平建议保持在70-80分之间最佳,如果单项指标低于5表明摄入比例在人群中属于最低的5%,评估为缺乏,如上图中维生素B2;低于15评估…

生命早期肠道微生物群与儿童呼吸道疾病之间的关联

谷禾健康 儿童呼吸系统疾病,包括呼吸道感染、反复喘息和哮喘,是儿童及其以后年龄发病和死亡的重要原因。 而哮喘是其中比较典型的一种,哮喘是全球最常见的慢性疾病之一,是一种复杂的、异质性的免疫介导的紊乱集合,以气…

肠道核心菌属——普拉梭菌F. prausnitzii,预防炎症的下一代益生菌

谷禾健康 Faecalibacterium prausnitzii(F. prausnitzii),普氏栖粪杆菌,又名:普拉梭菌,是人类肠道菌群中最重要的细菌之一,占健康人粪便样本中检测到的细菌总数的 5-15%,是丁酸的重要…

你想要的宏基因组-微生物组知识全在这(2023.3)

欢迎点击上方蓝色”宏基因组”关注我们! 宏基因组/微生物组是当今世界科研最热门的研究领域之一,为加强宏基因组学技术和成果交流传播,推动全球华人微生物组领域发展,中科院青年科研人员创立“宏基因组”公众号,联合海…

人类微生物组和缺失遗传力--读论文

读读论文,用谷歌学术翻译一下,重要的部分做一下笔记。正文部分是翻译,加黑部分是个人笔记。 本次学习的论文:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5468393/ 1. 摘要 “缺失遗传力”问题表明,全基因组关联…

IgA | 对抗病原菌,帮助共生菌定植的“重要开关”

导 语:关于抗体,免疫和微生物 肠道微生物群的组成因个体而异,肠道微生物群中的特定细菌类群可能是某些肠内外疾病的独特有效驱动因素。对人类而言,精准且优先识别影响疾病易感性和严重性的细菌仍然是一项重大挑战。 很多时候我们想…