一、需求描述
为实现更好的沟通,现需要实现以自定义形式向钉钉群聊中发送文本内容及图片消息的功能。
二、开发思路
(一)明确需求。即向钉钉群聊内发送自定义文本或图片消息
(二)阅读钉钉开发手册。钉钉具有一套面向开发者的开发手册,其上描述了钉钉对外提供的API接口,我们可以通过调用接口实现相应功能。
(三)了解接口要求。在我们调用接口时,需要向其中传递符合规范的参数,并以规定的方式调用,避免出错。若返回的消息出错,阅读错误码文档,对症下药进行修改。
(四)搭建开发环境编写代码。项目基于Springboot开发,Springboot确实能为开发省下了不少麻烦事,也不必再花费大量时间在配置上。
(五)测试
三、开发步骤
(一)阅读开发文档
首先我们要明确这是一个后端项目,并且需要对群聊进行开发,因此对应钉钉开发文档的服务端API中的群聊机器人
(二)创建机器人
如群机器人开发文档所示,首先我们得创建机器人并设置安全模式,安全模式分为三种,分别是关键字,加签(加密),IP地址限制


我们必须选取其中的任意一种或多种。
对各项安全模式进行讲解:
(1)方式一,自定义关键词
最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功。
例如:添加了一个自定义关键词:监控报警
则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功。
关键字模式调用的接口URL模板为
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
(2)方式二,加签
要求如下
第一步,把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)。
其中需要两个参数,分别为timestamp与secret
参数 | 说明 |
---|---|
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 = "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);
}
}
此处获得的sign需要在调用接口时传入,否则调用失败
加签模式调用的接口URL模板为
https