目录
1.自定义机器人接入
1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理
1.2添加自定义机器人
1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像
完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。
完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
2.引用钉钉sdk
2.1下载地址:
2.2选择python3版本-点击下载
2.3下载将sdk文件放在自己的工程中,在python文件中引用api
3.实现
1.自定义机器人接入
1.1打开机器人管理页面。以PC端为例,打开PC端钉钉,点击头像,选择机器人管理
1.2添加自定义机器人
1.3在机器人管理页面选择自定义机器人,输入机器人名字并选择要发送消息的群,同时可以为机器人设置机器人头像
- 完成必要的安全设置,勾选我已阅读并同意《自定义机器人服务及免责条款》,然后单击完成。
目前有3种安全设置方式,请根据需要选择一种:
- 自定义关键词:最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。
例如添加了一个自定义关键词:监控报警,则这个机器人所发送的消息,必须包含监控报警这个词,才能发送成功。 - 加签:
- 把
timestamp+"\n"+
密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
参数 | 说明 |
timestamp | 当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时。 |
secret | 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。 |
签名计算示例代码(Java)
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.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 time
import hmac
import hashlib
import base64
import urllib.parse
timestamp = 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中。
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX
参数 | 说明 |
timestamp | 第一步使用到的时间戳。 |
sign | 第一步得到的签名值。 |
- IP地址(段):设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP地址和IP地址段,暂不支持IPv6地址白名单,格式如下。
格式 | 说明 |
1.1.1.1 | 开发者的出口公网IP地址(非局域网地址) |
1.1.1.0/24 | 用CIDR表示的一个网段 |
- 完成安全设置后,复制出机器人的Webhook地址,可用于向这个群发送消息,格式如下:
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
总结以上官方文档:
安全设置中选择以下设置(至少选择一个设置)
1.自定义关键词:在发送消息时,发送的内容就要包含关键词才能发送成功,
2.加签:一种加密方式,将加签值通过以上的方法得到的签名值和timestamp拼接到URL(Webhook)中
3.ip地址(段):设置后,只有来自IP地址范围内的请求才会被正常处理
2.引用钉钉sdk
2.1下载地址:
https://ding-doc.dingtalk.com/document/resourcedownload/download-server-sdk
2.2选择python3版本-点击下载
2.3下载将sdk文件放在自己的工程中,在python文件中引用api
官方示例:
import dingtalk.api
request = dingtalk.api.OapiGettokenRequest("https://oapi.dingtalk.com/user/get")
request.userid="userid1"
response = request.getResponse()
print(response)
3.实现
# -*- coding: utf-8 -*-
"""
Created on Thu Jan 21 11:04:09 2021
@author: Admin
"""
import time
import hmac
import hashlib
import base64
import urllib.parse
#引用钉钉API
import 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+timestamp
webhook ='https://oapi.dingtalk.com/robot/send?access_token=******×tamp={0}&sign={1}'.format(timestamp,sign)
#实例钉钉接口的OapiRobotSendRequest
request = 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()
效果: