现在工作上比较常用的IM一般式钉钉 企微 飞书,其实使用起来都是大同小异的。这里就用钉钉来实现。
使用钉钉发送信息,一般有三种形式
- 群webhook
- 工作通知
- 智能机器人
智能机器人方式,能实现一定的交互功能,但逻辑相对复杂,这里只是需要一个实时的钉钉消息,所以不进行讨论。
添加群webhook
这是一种比较简单的方式,适用于在群里发送消息。
在钉钉群中确保有管理权限,点击群设置
点击机器人
点击添加机器人
选择自定义webhook机器人
设定webhook机器人信息
安全信息是必选项,具体说明可以点击查看说明文档。
一般情况下,发送钉钉信息的服务器IP是固定的,可以使用IP地址(段)。如果安全性要求较高可以使用加签方式。最简单的办法就是使用自定义关键词,这里我推荐“20”,原因稍后解释。
点击完成后会获得形如https://oapi.dingtalk.com/robot/send?access_token=XXXXXX的webhook地址,这个地址非常重要千万不要泄露,以防止被滥用。
使用webhook可以发送普通消息,以及markdown格式。具体消息细节可以参考钉钉文档。
python实现webhook消息发送
这里附上使用markdow 与普通消息的python代码
import requests
import datetime
import json
import random
"""
封装使用webhook方式发送钉钉消息
"""
def webhook_msg(web_hook, dmsg, phones=[]):
"""
"""
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
head = {'Content-Type': 'application/json'}
msg = dmsg + '\n' + now
text = {
"msgtype": "text",
"text": {
"content": msg
},
'at': {
'atMobiles': phones,
'isAtAll': "false"
}
}
try:
req = requests.post(web_hook, data=json.dumps(text), headers=head)
except Exception as E:
return {'success': False, 'msg': str(E)}
if req.status_code != 200:
return {"success": False, "msg": req.text}
else:
return {"success": True, "msg": req.text}
def webhook_md(web_hook, dmsg):
"""
"""
head = {'Content-Type': 'application/json'}
now = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
dmsg['text'] = dmsg['text'] + '\n' + now
text = {
"msgtype": "markdown",
"markdown": dmsg
}
print(text)
try:
req = requests.post(web_hook, data=json.dumps(text), headers=head)
except Exception as E:
return {'success': False, 'msg': str(E)}
if req.status_code != 200:
return {"success": False, "msg": req.text}
else:
return {"success": True, "msg": req.text}
if __name__ == "__main__":
test_msg = {
"title": "测试测试",
"text": "<font color=\"#7FFF00\">告警测试 </font> \n"
}
r = webhook_md("https://oapi.dingtalk.com/robot/"
"send?access_token=4b6ae4530699f7e1b2205cffab0dacbbdccddf40ff0a17d2f9ca231ac84d9bdc",
test_msg)
print(r)
这段代码演示了使用钉钉webhook发送普通消息以及markdown格式消息的方法。如果需要at某人,需要在参数中提供对方的手机号码。
上文提到过使用“20”作为自定义关键词,这是一个取巧的方法。在这段代码中给每一条消息都加上当前的时间日期('%Y-%m-%d %H:%M:%S'),这段字符必然包含“20”这个字符串。所以说这个取巧的办法
未完待续
标签:return,text,req,webhook,part04,从零开始,msg,now From: https://blog.51cto.com/quietguoguo/8245074