ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot之钉钉机器人通知

2021-11-23 19:02:31  阅读:162  来源: 互联网

标签:ReqBody http SpringBoot 通知 机器人 new org apache import


我们在工作中钉钉办公需要一些提醒或者通知,需要用到钉钉机器人来代替我们完成一些重复性的工作,看到钉钉有个机器人的自定义文档。

https://developers.dingtalk.com/document/robots/custom-robot-access?spm=ding_open_doc.document.0.0.6284657351Hh8K#topic-2026027

如何实现自定义机器人?

1.首先在钉钉群中添加机器人获取webhook地址

在这里插入图片描述
在这里插入图片描述
注意这里 :
如果选择自定义关键字 在内容的开头一定要和自定义关键字一样
如:关键字设置为:通知
那么内容的开头一定是:通知XXXXX
在这里插入图片描述

2.代码实现

1.搭建springboot项目
使用RestTemplate发送HTTP请求

package com.bky.dingding;

import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

import javax.net.ssl.SSLContext;


@Configuration
public class RestTemplateConfig {
    /**
     * 服务器返回数据(response)的时间
     */
    private static final Integer READ_TIME_OUT = 6000;
    /**
     * 连接上服务器(握手成功)的时间
     */
    private static final Integer CONNECT_TIME_OUT = 6000;

    @Bean
    public RestTemplate restTemplate(){
        ClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient());
        return new RestTemplate(requestFactory);
    }

    @Bean
    public HttpClient httpClient(){
       //默认证书有效
        SSLConnectionSocketFactory sslConnectionSocketFactory = SSLConnectionSocketFactory.getSocketFactory();
        SSLContext sslContext = null;
        try {
            //信任所有的SSL证书
            sslContext = SSLContextBuilder.create().setProtocol(SSLConnectionSocketFactory.SSL)
                    .loadTrustMaterial((x, y) -> true).build();
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (sslContext != null) {
            sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext);
        }
        // 支持HTTP、HTTPS
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", sslConnectionSocketFactory)
                .build();
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        connectionManager.setMaxTotal(200);
        connectionManager.setDefaultMaxPerRoute(100);
        connectionManager.setValidateAfterInactivity(2000);
        RequestConfig requestConfig = RequestConfig.custom()
                // 服务器返回数据(response)的时间,超时抛出read timeout
                .setSocketTimeout(READ_TIME_OUT)
                // 连接上服务器(握手成功)的时间,超时抛出connect timeout
                .setConnectTimeout(CONNECT_TIME_OUT)
                // 从连接池中获取连接的超时时间,超时抛出ConnectionPoolTimeoutException
                .setConnectionRequestTimeout(1000)
                .build();
        return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager).build();
    }
}

```java
@Service
public class DingRobart {
    @Autowired
    RestTemplate restTemplate;
    @Value("${dingding.robart.webhook}")
    private String URL;
    private ReqBody reqBody = new ReqBody(new At(null, true), new Text("新的一天,大家发一下日报,元气满满"), "text");
    //private ReqBody reqBody1 = new ReqBody(new At(null, true), new Text("工作一周辛苦了,大家发一下周报"), "text");
    //private ReqBody reqBody2 = new ReqBody(new At(null, true), new Text("大家好!"), "text");
    //private ReqBody reqBody3 = new ReqBody(new At(null, true), new Text("大家早上好,开始努力搬砖吧!"), "text");
    //
    @Scheduled(cron = "0 00 9 ? * MON-FRI")
    public JSONObject ribaoEveryDay() {
        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "application/json");
        System.out.println("开始日报");
        String respBody = restTemplate.postForObject(URL, reqBody, String.class);
        return JSONObject.parseObject(respBody);
    }
}

application.properties文件的配置

# 应用名称
spring.application.name=dingding
# 把钉钉群里创建机器人的那个URL贴到这里替换掉
dingding.robart.webhook=https://oapi.dingtalk.com/robot/send?access_token=6970bbc0e0c73bc9bc6f4c7770c9d0280481b16a0adc628248444d459fe38bac

写完之后我们启动服务或者打成jar包就好了

3.效果

在这里插入图片描述

具体代码可以参考

https://gitee.com/easyu_stan/dingding-demo

标签:ReqBody,http,SpringBoot,通知,机器人,new,org,apache,import
来源: https://blog.csdn.net/weixin_44109726/article/details/121498533

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有