SpringBoot 实践项目(钉钉机器人)

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

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


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请求

packagecom.bky.dingding;
importorg.apache.http.client.HttpClient;
importorg.apache.http.client.config.RequestConfig;
importorg.apache.http.config.Registry;
importorg.apache.http.config.RegistryBuilder;
importorg.apache.http.conn.socket.ConnectionSocketFactory;
importorg.apache.http.conn.socket.PlainConnectionSocketFactory;
importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;
importorg.apache.http.impl.client.HttpClientBuilder;
importorg.apache.http.impl.conn.PoolingHttpClientConnectionManager;
importorg.apache.http.ssl.SSLContextBuilder;
importorg.springframework.context.annotation.Bean;
importorg.springframework.context.annotation.Configuration;
importorg.springframework.http.client.ClientHttpRequestFactory;
importorg.springframework.http.client.HttpComponentsClientHttpRequestFactory;
importorg.springframework.web.client.RestTemplate;
importjavax.net.ssl.SSLContext;
@ConfigurationpublicclassRestTemplateConfig {
/*** 服务器返回数据(response)的时间*/privatestaticfinalIntegerREAD_TIME_OUT=6000;
/*** 连接上服务器(握手成功)的时间*/privatestaticfinalIntegerCONNECT_TIME_OUT=6000;
@BeanpublicRestTemplaterestTemplate(){
ClientHttpRequestFactoryrequestFactory=newHttpComponentsClientHttpRequestFactory(httpClient());
returnnewRestTemplate(requestFactory);
    }
@BeanpublicHttpClienthttpClient(){
//默认证书有效SSLConnectionSocketFactorysslConnectionSocketFactory=SSLConnectionSocketFactory.getSocketFactory();
SSLContextsslContext=null;
try {
//信任所有的SSL证书sslContext=SSLContextBuilder.create().setProtocol(SSLConnectionSocketFactory.SSL)
                    .loadTrustMaterial((x, y) ->true).build();
        } catch (Exceptione) {
e.printStackTrace();
        }
if (sslContext!=null) {
sslConnectionSocketFactory=newSSLConnectionSocketFactory(sslContext);
        }
// 支持HTTP、HTTPSRegistry<ConnectionSocketFactory>registry=RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                .register("https", sslConnectionSocketFactory)
                .build();
PoolingHttpClientConnectionManagerconnectionManager=newPoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(200);
connectionManager.setDefaultMaxPerRoute(100);
connectionManager.setValidateAfterInactivity(2000);
RequestConfigrequestConfig=RequestConfig.custom()
// 服务器返回数据(response)的时间,超时抛出read timeout                .setSocketTimeout(READ_TIME_OUT)
// 连接上服务器(握手成功)的时间,超时抛出connect timeout                .setConnectTimeout(CONNECT_TIME_OUT)
// 从连接池中获取连接的超时时间,超时抛出ConnectionPoolTimeoutException                .setConnectionRequestTimeout(1000)
                .build();
returnHttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(connectionManager).build();
    }
}
```java@ServicepublicclassDingRobart {
@AutowiredRestTemplaterestTemplate;
@Value("${dingding.robart.webhook}")
privateStringURL;
privateReqBodyreqBody=newReqBody(newAt(null, true), newText("新的一天,大家发一下日报,元气满满"), "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")
publicJSONObjectribaoEveryDay() {
HttpHeadersheaders=newHttpHeaders();
headers.add("Content-Type", "application/json");
System.out.println("开始日报");
StringrespBody=restTemplate.postForObject(URL, reqBody, String.class);
returnJSONObject.parseObject(respBody);
    }



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

3.效果


目录
相关文章
|
2月前
|
并行计算 Java 数据处理
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析
241 0
|
2月前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
245 2
|
27天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
89 5
|
28天前
|
安全 Java 数据安全/隐私保护
如何使用Spring Boot进行表单登录身份验证:从基础到实践
如何使用Spring Boot进行表单登录身份验证:从基础到实践
46 5
|
28天前
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
48 5
|
1月前
|
Java 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
107 1
SpringBoot获取项目文件的绝对路径和相对路径
|
1月前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
57 8
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
45 2
|
2月前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
402 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
1月前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
59 2