写在前面的话:
之前想弄这个功能来着,但是不巧,钉钉的Webhook正好在维护,就搁置了。于是每次合并代码之类的,我都会对着老大喊一嗓子,同意一下呗。今天喊了一嗓子后,老大说:你快弄下那个机器人提醒吧。哈哈,可能受不了我突然的一嗓子~弄好之后趁着热乎劲,顺便记录一下过程,方便以后再用,老话说–好记性不如烂笔头。

钉钉上:

首先你得有个群,并且是群管理员,然后点击 群助手>添加机器人

钉钉机器人里如何使用加签java 钉钉如何添加机器人_WebHook


选择自定义>添加

钉钉机器人里如何使用加签java 钉钉如何添加机器人_机器人_02


输入机器人名字,设置头像,完成安全设置(下面介绍),勾选,点击完成。

华丽丽的分割线开始:以下内容粘贴自钉钉开发文档


安全设置

安全设置目前有3种方式:
(1)方式一,自定义关键词

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

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

则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功。

(2)方式二,加签

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

钉钉机器人里如何使用加签java 钉钉如何添加机器人_钉钉机器人里如何使用加签java_03


签名计算代码示例(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 urllib

timestamp = 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中。

钉钉机器人里如何使用加签java 钉钉如何添加机器人_钉钉机器人里如何使用加签java_04

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

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

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

钉钉机器人里如何使用加签java 钉钉如何添加机器人_IP_05


注意:安全设置的上述三种方式,需要至少设置其中一种,以进行安全保护。

校验不通过的消息将会发送失败,错误如下:

// 消息内容中不包含任何关键词
{
  "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"
}

华丽丽的分割线结束。
多说句废话,我选择了最简单的第一种,第二种我没太看懂(小菜鸡),第三种有点麻烦的样子。

点击完成后页面如下:

钉钉机器人里如何使用加签java 钉钉如何添加机器人_coding_06


到现在为止机器人就设置好了,接下来就是在codding中使用了。

项目中:

首先你有个项目(废话真多)并且得是项目管理员,找到项目设置>开发者选项>WebHook

钉钉机器人里如何使用加签java 钉钉如何添加机器人_WebHook_07


点击 新建WebHook

钉钉机器人里如何使用加签java 钉钉如何添加机器人_WebHook_08


输入相关内容,url就是刚才生成的WebHook地址,监听事件根据自己需要勾选,最后点击 新建WebHook 就OK了。

钉钉机器人里如何使用加签java 钉钉如何添加机器人_IP_09


接下来就可以看到自己添加的记录了,并且状态是成功发送(绿色的√)。此时,钉钉群将会收到一条测试推送。

钉钉机器人里如何使用加签java 钉钉如何添加机器人_钉钉机器人里如何使用加签java_10


下面是我测试机器人的消息:

钉钉机器人里如何使用加签java 钉钉如何添加机器人_机器人_11


应该似乎没啥问题了吧。

提醒一下下:如果在钉钉群重置了WebHook地址,一定要去项目中同步更新一下哦