java实现钉钉机器人消息推送

源博客:https://blog.csdn.net/weixin_43968234/article/details/88898958
推荐大家直接看源博客,我转载排版不好看,如果看了原博客有错误的话,可以看一下此文章最后面,有我解决问题的方法

先建个钉钉群,并加好机器人
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
此时,机器人已经添加完毕,接下来编写我们连接机器人小哥的代码

import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.util.List;
import java.util.Map;

/**

  • @author yanghao

  • @version DingTalkTest.java, v 0.1 2019-03-29 11:36
    */
    public class DingTalkTest {

    public static void main(String[] args){

     <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
         <span class="token comment">//钉钉机器人地址(配置机器人的webhook)</span>
         String dingUrl <span class="token operator">=</span> <span class="token string">"https://oapi.dingtalk.com/robot/send?access_token=............"</span><span class="token punctuation">;</span>
    
         <span class="token comment">//是否通知所有人</span>
         <span class="token keyword">boolean</span> isAtAll <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
         <span class="token comment">//通知具体人的手机号码列表</span>
         List<span class="token generics function"><span class="token punctuation">&lt;</span>String<span class="token punctuation">&gt;</span></span> mobileList <span class="token operator">=</span> Lists<span class="token punctuation">.</span><span class="token function">newArrayList</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
         <span class="token comment">//钉钉机器人消息内容</span>
         String content <span class="token operator">=</span> <span class="token string">"小哥,你好!"</span><span class="token punctuation">;</span>
         <span class="token comment">//组装请求内容</span>
         String reqStr <span class="token operator">=</span> <span class="token function">buildReqStr</span><span class="token punctuation">(</span>content<span class="token punctuation">,</span> isAtAll<span class="token punctuation">,</span> mobileList<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
         <span class="token comment">//推送消息(http请求)</span>
         String result <span class="token operator">=</span> HttpUtil<span class="token punctuation">.</span><span class="token function">postJson</span><span class="token punctuation">(</span>dingUrl<span class="token punctuation">,</span> reqStr<span class="token punctuation">)</span><span class="token punctuation">;</span>
         System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"result == "</span> <span class="token operator">+</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     <span class="token punctuation">}</span><span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
         e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    
     <span class="token punctuation">}</span>
    

    }

    /**

    • 组装请求报文

    • @param content

    • @return
      */
      private static String buildReqStr(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);
      }

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

运行结果如下:

result == {"errmsg":"ok","errcode":0}

 
 
  • 1

钉钉群显示消息:
在这里插入图片描述
ok,简单的消息推送,这就完成了!


我们再来测试一下通知所有人和通知具体人

  • 将isAtAll更改为true
//是否通知所有人
boolean isAtAll = true;
//通知具体人的手机号码列表
List<String> mobileList = Lists.newArrayList();

 
 
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

  • 增加通知人号码列表注:isAtAll和mobileList 不能同时生效
//是否通知所有人
boolean isAtAll = false;
//通知具体人的手机号码列表
List<String> mobileList = Lists.newArrayList();
mobileList.add("182********");

 
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述


再来测试一下特殊符号

  • 换行标识符
/**
 * 换行标识符
 */
private static final String NEWLINE = "\n";

//钉钉机器人消息内容
//String content = “小哥,你好!”;
StringBuffer sb = new StringBuffer();
sb.append(“小哥,你好!”)
.append(NEWLINE)
.append(“看会书”);

String content = sb.toString();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

在这里插入图片描述

  • emoji图片
    先获取emoji图片的unicode编码
    在这里插入图片描述
    编写代码如下:
/**
 * 苹果unicode编码
 */
private static final String APPLE = "\ud83c\udf4e";

//钉钉机器人消息内容
//String content = “小哥,你好!”;
StringBuffer sb = new StringBuffer();
sb.append(“小哥,你好!”)
.append(NEWLINE)
.append(“看会书”)
.append(NEWLINE)
.append(“吃个”).append(APPLE);

String content = sb.toString();

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

通常在我们的项目中,作为一些告警加入,方便且实用
很有意思的钉钉机器人,很多实用技巧,可以深入去探索一波!


更新于2019-12-05

很多小伙伴留言咨询http请求,这边给大家2个http请求代码

1. maven项目

添加依赖

<!--糊涂工具-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.0.12</version>
</dependency>

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

http请求代码

private static final int timeout = 10000; 

public static String postJson(String url, String reqStr) {
String body = null;
try {
body = HttpRequest.post(url).body(reqStr).timeout(timeout).execute().body();
} catch (Exception e) {
e.printStackTrace();
}
return body;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2. 非maven项目

添加jar包
httpclient-xxx.jar
commons-logging-xxx.jar

http请求代码

public static String postJson(String url, String body) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = createCustomClient();
        CloseableHttpResponse response = null;
        String resultString = null;
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            httpPost.addHeader("Content-Type", "application/json");
        <span class="token keyword">if</span> <span class="token punctuation">(</span>body <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            httpPost<span class="token punctuation">.</span><span class="token function">setEntity</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">StringEntity</span><span class="token punctuation">(</span>body<span class="token punctuation">,</span> <span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
        <span class="token comment">// 执行http请求</span>
        response <span class="token operator">=</span> httpClient<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span>httpPost<span class="token punctuation">)</span><span class="token punctuation">;</span>
        resultString <span class="token operator">=</span> EntityUtils<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span>response<span class="token punctuation">.</span><span class="token function">getEntity</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token string">"utf-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
        e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
    <span class="token punctuation">}</span> <span class="token keyword">finally</span> <span class="token punctuation">{<!-- --></span>
        <span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
            <span class="token keyword">if</span> <span class="token punctuation">(</span>response <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
                response<span class="token punctuation">.</span><span class="token function">close</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
            <span class="token punctuation">}</span>
        <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
            e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
        <span class="token punctuation">}</span>
    <span class="token punctuation">}</span>

    <span class="token keyword">return</span> resultString<span class="token punctuation">;</span>
<span class="token punctuation">}</span>

<span class="token keyword">public</span> <span class="token keyword">static</span> CloseableHttpClient <span class="token function">createCustomClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
    RequestConfig defaultRequestConfig <span class="token operator">=</span> RequestConfig<span class="token punctuation">.</span><span class="token function">custom</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">setSocketTimeout</span><span class="token punctuation">(</span><span class="token number">120</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">setConnectTimeout</span><span class="token punctuation">(</span><span class="token number">120</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">setConnectionRequestTimeout</span><span class="token punctuation">(</span><span class="token number">120</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">setStaleConnectionCheckEnabled</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span>
            <span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>

    <span class="token keyword">return</span> HttpClients<span class="token punctuation">.</span><span class="token function">custom</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">setDefaultRequestConfig</span><span class="token punctuation">(</span>defaultRequestConfig<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">build</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

方法仅供参考,项目里面有现成的http请求,可以直接用!

以下是我自己写的,是我看原博客走的误区解决办法,而不是说源博客不对

1、需要导入谷歌依赖才能使用Lists和Maps
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>29.0-jre</version>
		</dependency>

2、如果HttpUtil.postJson,就用以下代码替换,并引入依赖

private static final int timeout = 10000; //这一行代码写在全局变量位置上
String body =HttpRequest.post(url).body(reqStr).timeout(timeout).execute().body();//这行代码替换掉HttpUtil.postJson那一行
<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.0.12</version>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值