JAVA调用DingTalk
PS:最强大的文档: https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq(官方文档)
- 添加机器人
群—>群设置—>智能群助手—>添加机器人
然后,添加机器人,设置名字,添加成功时如下图
PS:地址非常重要记得保存
设置了关键字—监控–,代表 请求内容要包含”监控”
- 消息类型及数据格式
text类型
{
"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火@156xxxx8827"
},
"at": {
"atMobiles": [
"156xxxx8827",
"189xxxx8325"
],
"isAtAll": false
}
}
参数 参数类型 必须 说明
msgtype String 是 消息类型,此时固定为:text
content String 是 消息内容
atMobiles Array 否 被@人的手机号(在content里添加@人的手机号)
isAtAll bool 否 @所有人时:true,否则为:false
link类型
{
"msgtype": "link",
"link": {
"text": "这个即将发布的新版本,创始人xx称它为“红树林”。
而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是“红树林”?",
"title": "时代的火车向前开",
"picUrl": "",
"messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
}
}
参数 参数类型 必须 说明
msgtype String 是 消息类型,此时固定为:link
title String 是 消息标题
text String 是 消息内容。如果太长只会部分展示
messageUrl String 是 点击消息跳转的URL
picUrl String 否 图片URL
markdown类型
{
“msgtype”: “markdown”,
“markdown”: {
“title”:“杭州天气”,
“text”: “#### 杭州天气 @156xxxx8827\n” +
“> 9度,西北风1级,空气良89,相对温度73%\n\n” +
“> \n” +
“> ###### 10点20分发布 天气 \n”
},
“at”: {
“atMobiles”: [
“156xxxx8827”,
“189xxxx8325”
],
“isAtAll”: false
}
}
参数 类型 必选 说明
msgtype String 是 此消息类型为固定markdown
title String 是 首屏会话透出的展示内容
text String 是 markdown格式的消息
atMobiles Array 否 被@人的手机号(在text内容里要有@手机号)
isAtAll bool 否 @所有人时:true,否则为:false
说明:目前只支持md语法的子集,具体支持的元素如下:
标题
一级标题
二级标题
三级标题
四级标题
五级标题
六级标题
引用
A man who stands for nothing will fall for anything.
文字加粗、斜体
bold
italic
图片
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vSFAuMIN-1624340278262)(http://name.com/pic.jpg)]
无序列表
- item1
- item2
有序列表
- item1
- item2
整体跳转ActionCard类型
{
"actionCard": {
"title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": "[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MyynyYVo-1624340278263)(@lADOpwk3K80C0M0FoA)]
### 乔布斯 20 年前想打造的苹果咖啡厅
Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
"hideAvatar": "0",
"btnOrientation": "0",
"singleTitle" : "阅读全文",
"singleURL" : "https://www.dingtalk.com/"
},
"msgtype": "actionCard"
}
参数 类型 必选 说明
msgtype string true 此消息类型为固定actionCard
title string true 首屏会话透出的展示内容
text string true markdown格式的消息
singleTitle string true 单个按钮的方案。(设置此项和singleURL后btns无效)
singleURL string true 点击singleTitle按钮触发的URL
btnOrientation string false 0-按钮竖直排列,1-按钮横向排列
hideAvatar string false 0-正常发消息者头像,1-隐藏发消息者头像
通过整体跳转ActionCard类型消息发出的消息样式如下:
独立跳转ActionCard类型
{
"actionCard": {
"title": "乔布斯 20 年前想打造一间苹果咖啡厅,而它正是 Apple Store 的前身",
"text": "[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v4tPXjhX-1624340278265)(@lADOpwk3K80C0M0FoA)]
### 乔布斯 20 年前想打造的苹果咖啡厅
Apple Store 的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到 20 年前苹果一个建立咖啡馆的计划",
"hideAvatar": "0",
"btnOrientation": "0",
"btns": [
{
"title": "内容不错",
"actionURL": "https://www.dingtalk.com/"
},
{
"title": "不感兴趣",
"actionURL": "https://www.dingtalk.com/"
}
]
},
"msgtype": "actionCard"
}
参数 类型 必选 说明
msgtype string true 此消息类型为固定actionCard
title string true 首屏会话透出的展示内容
text string true markdown格式的消息
btns array true 按钮的信息:title-按钮方案,actionURL-点击按钮触发的URL
btnOrientation string false 0-按钮竖直排列,1-按钮横向排列
hideAvatar string false 0-正常发消息者头像,1-隐藏发消息者头像
通过独立跳转ActionCard类型消息发出的消息样式如下:
- 创建工具类
package com.XXXXXXXX.DingTalkRobUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class DingTalkRob {
private static Logger logger = LoggerFactory.getLogger(DingTalkRob.class);
/**
* 向指定 URL 发送POST方法的请求
*
* @param url 发送请求的 URL
* @param param 请求参数,
* @return 所代表远程资源的响应结果
*/
public static String sendPost(String param) {
//钉钉群机器人地址 关键字为: 监控
String dingDingToken="https://oapi.dingtalk.com/robot/send?access_token=XXXXXX";
String result = "";
try {
HttpPost httpPost = new HttpPost(dingDingToken);
CloseableHttpClient client = HttpClients.createDefault();
// 设置超时时间
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(30000)
.setConnectionRequestTimeout(30000).setSocketTimeout(30000).build();
httpPost.setConfig(requestConfig);
// 设置参数
StringEntity entity = new StringEntity(param, "utf-8");
// 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
System.out.println("钉钉机器人入参:" + entity.toString());
httpPost.setEntity(entity);
// 执行请求
HttpResponse resp ;
resp = client.execute(httpPost);
// 200成功
if (resp.getStatusLine().getStatusCode() != 200) {
throw new Exception("处理失败");
}
// http请求返回结果
HttpEntity httpEntity = resp.getEntity();
// 处理请求的返回结果
if (httpEntity != null) {
result = "钉钉返回结果code:" + EntityUtils.toString(httpEntity, "UTF-8");
}
} catch (Exception e) {
result = "钉钉机器人出错了,错误:" + e.getMessage();
}
return result;
}
}
- 发送方调用
try{
// 钉钉的webhook 钉钉群机器人
// 请求的JSON数据,注意用JSON.toJSONString 转化为json
//样例为 text消息
Map<String,Object> json=new HashMap();
Map<String,Object> text=new HashMap();
json.put("msgtype","text");
text.put("content","监控: 服务器IP="+localip+"查询成功,服务正常运行");
json.put("text",text);
// 发送post请求
String response = DingTalkRob.sendPost(JSON.toJSONString(json));
System.out.println("相应结果:"+response);
}catch(java.lang.Exception e){
System.out.println("DingTalk方法调用丢失!");
}
未完待续~~~~