JAVA 实现调用钉钉机器人发送信息

JAVA 实现调用钉钉机器人发送信息


前言

java调用钉钉的机器人进行发送信息,群信息的发送,也可以在群众@个别人员查看信息


提示:以下是本篇文章正文内容,下面案例可供参考

一、钉钉群设置

1、创建群

在这里插入图片描述

2、选择智能群助手

在这里插入图片描述

3、进行添加机器人

注意:在这里我们创建的机器人其中涉及到的(加签)、(Webhook)中的数据提前复制出来一份,代码会用到,不在创建机器人的时候保存,也可在点击机器人头像中的机器人你设置查看到。
在这里插入图片描述

4、下面开始创建机器人

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、创建完成

在这里插入图片描述

二、编写代码util

1.地址url的获取

代码如下:

//钉钉机器人地址(配置机器人的webhook)这里我么能得到了dingUrl
String baseUrl = "https://oapi.dingtalk.com/robot/send?access_token=";
String token = "b7b308debe235c9346c3f40ec028bde031916e9837b935244ff306823d5c0722";
String secret = "SECdaae5572ef80810a2c0131ba7aed56484e5b90d0c2f3bf9140c247682560e3a2";
long timestamp = System.currentTimeMillis();
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
String dingUrl = baseUrl + token + "&timestamp=" + timestamp + "&sign=" + URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
2.设置发送内容,发送人,是否@所有人

代码如下(示例):

//是否通知所有人
boolean isAtAll = false;

//通知具体人的手机号码列表/可以再群里面点击个人头像进行复制
List<String> mobileList = Lists.newArrayList();
//mobileList.add("+86-159*******");

//发送内容在这里也可以直接 String格式作为数据
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("测试1")//数据
.append("\n")//换行
.append("[对勾]");//表情
String content = stringBuffer.toString();

官网中给到的数据格式:

//消息类型及数据格式
//text类型
{
    "msgtype": "text", 
    "text": {
        "content": "测试1@159*******"
    }, 
    "at": {
        "atMobiles": [
            "159*******"
        ], 
        "isAtAll": false
    }
}
3.基于上面的官网格式,我们在这里对数据进行一下组装
//组装数据
//消息内容
Map<String, String> contentMap = Maps.newHashMap();
contentMap.put("content", content);

//通知人员数据
Map<String, Object> atMap = Maps.newHashMap();

//1.是否通知所有人
atMap.put("isAtAll", isAtAll);

//2.通知具体人的手机号码列表
atMap.put("atMobiles", mobileList);

//组装数据
Map<String, Object> requestMap = Maps.newHashMap();
requestMap .put("msgtype", "text");
requestMap .put("text", contentMap);
requestMap .put("at", atMap);

String requestJson = JSON.toJSONString(reqMap);
4.发送请求
//dingUrl 机器人地址
//requestJson 组装数据json
String returnData= HttpUtil.doPosthttp(dingUrl, requestJson );
System.out.println("returnData== " + returnData);


//HttpUtil 工具类
//doPosthttp
/** 
 * 发送 POST 请求(HTTP),JSON形式 
 * @param apiUrl 
 * @param json json对象 
 * @return 
 */ 
public static String doPosthttp(String apiUrl, Object json) {  

	CloseableHttpClient httpClient = HttpClients.createDefault();  
	String httpStr = null;  
	HttpPost httpPost = new HttpPost(apiUrl);  
	CloseableHttpResponse response = null;  
	try {  
		httpPost.setConfig(requestConfig);  
		StringEntity stringEntity = new StringEntity(json.toString(), "UTF-8");//解决中文乱码问题  
		stringEntity.setContentEncoding("UTF-8");  
		stringEntity.setContentType("application/json");  
		httpPost.setEntity(stringEntity);  
		response = httpClient.execute(httpPost);  
		HttpEntity entity = response.getEntity();  
		System.out.println(response.getStatusLine().getStatusCode());  
		httpStr = EntityUtils.toString(entity, "UTF-8");  
	} catch (IOException e) {  
		logger.error(e.toString());
	} finally {  
		if (response != null) {  
			try {  
				EntityUtils.consume(response.getEntity());  
			} catch (IOException e) {  
				logger.error(e.toString());
			}  
		}  
	}  
	return httpStr;  
}
5.钉钉接受信息

在这里插入图片描述

三、整体代码

package com.pcitc.vms.util;

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.codec.binary.Base64;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.net.Socket;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;

class DingTalkUtil {

    private static final String NEWLINE = "\n";

    public static void main(String[] args) throws IOException {

        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("测试1")//数据
                .append("\n")//换行
                .append("[对勾]");//表情

        sendDingDing(stringBuffer);
    }

    /**
     * 发送钉钉
     * @param stringBuffer 钉钉机器人消息内容
     */
    private static void sendDingDing(StringBuffer stringBuffer) {

        try {
            //钉钉机器人地址(配置机器人的webhook)
            String baseUrl = "https://oapi.dingtalk.com/robot/send?access_token=";
            String token = "b7b308debe235c9346c3f40ec028bde031916e9837b935244ff306823d5c0722";
            String secret = "SECdaae5572ef80810a2c0131ba7aed56484e5b90d0c2f3bf9140c247682560e3a2";
            long timestamp = System.currentTimeMillis();
            String stringToSign = timestamp + "\n" + secret;
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
            byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
            String dingUrl = baseUrl + token + "&timestamp=" + timestamp + "&sign=" + URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");

            //是否通知所有人
            boolean isAtAll = false;
            //通知具体人的手机号码列表
            List<String> mobileList = Lists.newArrayList();
            //mobileList.add("+86-159*******");

            String content = stringBuffer.toString();

            //组装请求内容
            String reqStr = packageBuildReqData(content, isAtAll, mobileList);
            //推送消息(http请求)
            String result = HttpUtil.doPosthttp(dingUrl, reqStr);
            System.out.println("result == " + result);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    /**
     * 组装请求报文
     * @param content
     * @return
     */
    private static String packageBuildReqData(String content, boolean isAtAll, List<String> mobileList) {
        //消息内容
        Map<String, String> contentMap = Maps.newHashMap();
        contentMap.put("content", content);
        //通知人
        Map<String, Object> atMap = Maps.newHashMap();
        //1.是否通知所有人
        atMap.put("isAtAll", isAtAll);
        //2.通知具体人的手机号码列表
        atMap.put("atMobiles", mobileList);

        Map<String, Object> reqMap = Maps.newHashMap();
        reqMap.put("msgtype", "text");
        reqMap.put("text", contentMap);
        reqMap.put("at", atMap);

        return JSON.toJSONString(reqMap);
    }

}


总结

总结:发现问题请及时纠错,感谢阅读。

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值