目录
1.自定义机器人接入
1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理
1.2添加自定义机器人
1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像
完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。
完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
2.引用钉钉sdk
2.1下载地址:
2.2选择python3版本-点击下载
2.3下载将sdk文件放在自己的工程中,在python文件中引用api
3.实现
1.自定义机器人接入
钉钉官方链接:https://ding-/document/app/custom-robot-access
1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理
1.2添加自定义机器人
1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像
完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。
目前有3种安全设置方式,请根据需要选择一种:
自定义关键词:最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。
例如添加了一个自定义关键词:监控报警,则这个机器人所发送的消息,必须包含监控报警这个词,才能发送成功。
加签:
把timestamp+"\n"+
密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
签名计算示例代码(Java)
import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import mons.codec.binary.Base64;import .URLEncoder;public class Test {public static void main(String[] args) throws Exception {Long timestamp = System.currentTimeMillis();String secret = "this is secret";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"));String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)),"UTF-8");System.out.println(sign);}}
签名计算代码示例(Python)
#python 3.8 import timeimport hmacimport hashlibimport base64import urllib.parsetimestamp = str(round(time.time() * 1000))secret = 'this is secret'secret_enc = secret.encode('utf-8')string_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = string_to_sign.encode('utf-8')hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))print(timestamp)print(sign)
把 timestamp和第一步得到的签名值拼接到URL中。
/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX
IP地址(段):设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP地址和IP地址段,暂不支持IPv6地址白名单,格式如下。
完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
/robot/send?access_token=XXXXXX
总结以上官方文档:
安全设置中选择以下设置(至少选择一个设置)
1.自定义关键词:在发送消息时,发送的内容就要包含关键词才能发送成功,
2.加签:一种加密方式,将加签值通过以上的方法得到的签名值和timestamp拼接到URL(Webhook)中
3.ip地址(段):设置后,只有来自IP地址范围内的请求才会被正常处理
2.引用钉钉sdk
2.1下载地址:
https://ding-/document/resourcedownload/download-server-sdk
2.2选择python3版本-点击下载
2.3下载将sdk文件放在自己的工程中,在python文件中引用api
官方示例:
import dingtalk.apirequest = dingtalk.api.OapiGettokenRequest("/user/get")request.userid="userid1"response = request.getResponse()print(response)
3.实现
# -*- coding: utf-8 -*-"""Created on Thu Jan 21 11:04:09 @author: Admin"""import timeimport hmacimport hashlibimport base64import urllib.parse#引用钉钉APIimport dingtalk.api#发送消息def SendMessage():#时间戳timestamp = str(round(time.time() * 1000))#钉钉加签secret = 'SEC****'secret_enc = secret.encode('utf-8')string_to_sign = '{}\n{}'.format(timestamp, secret)string_to_sign_enc = string_to_sign.encode('utf-8')hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))print(timestamp)print(sign)#钉钉机器人中的Webhook+sign+timestampwebhook ='/robot/send?access_token=******×tamp={0}&sign={1}'.format(timestamp,sign)#实例钉钉接口的OapiRobotSendRequestrequest = dingtalk.api.OapiRobotSendRequest(webhook)#需要发送的文字内容content_txt = "我就是我, 是不一样的烟火"#设置msgtype为text类型 #根据官方文档还可设置其他类型:link类型 markdown类型 整体跳转ActionCard类型 FeedCard类型request.msgtype = 'text'#引入需要发送的内容request.text = {"content": content_txt}#atMobiles:钉钉群中所对应的成员手机号#isAtAll:当设置为True时,发送消息时@所有人request.at = {"atMobiles":["13*****4538"],"isAtAll": True}#发送消息response = request.getResponse()print(response)if __name__ == '__main__':#程序运行时调用方法SendMessage()
效果:
该代码只是简单的一个钉钉机器人消息推送,还可再继续改造引用到运用到其他项目做异常消息推送
参考文档:钉钉开发文档https://ding-/document/app/custom-robot-access