Java利用钉钉机器人实现发送群消息
作者:共饮一杯无 时间:2021-06-28 23:37:33
添加群机器人
可以查看这篇文章:添加机器人到钉钉群 使用命令行工具curl快速验证自定义机器人是否可以正常工作。可以使用如下命令,把对应的链接调整成对应群的webhook地址即可。
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"嗨,我来啦"}}'
Java请求示例
设置如下方法进行消息通知
/**
* 通知消息发送到群聊
* @param webhook 钉钉机器人地址(配置机器人的webhook)
* @param isAtAll 是否通知所有人
* @param mobileList 通知具体人的手机号码列表
* @param content 消息内容
*/
public static void sendMsgToGroupChat(String webhook,boolean isAtAll,List<String> mobileList,String content){
try {
//组装请求内容
String reqStr = buildReqStr(content, isAtAll, mobileList);
//推送消息(http请求)
String result = HttpUtil.post(webhook, reqStr);
log.info("通知响应结果:{}",result);
}catch (Exception e){
log.error("webhook通知失败",e);
}
}
/**
* 组装请求报文(Map封装)
* @param content 通知内容
* @param isAtAll 是否@所有人
* @param mobileList 通知具体人的手机号码
* @return
*/
private static String buildReqStr(String content, boolean isAtAll, List mobileList) {
//消息内容
Map contentMap = Maps.newHashMap();
contentMap.put("content", content);
//通知人
Map atMap = Maps.newHashMap();
//1.是否通知所有人
atMap.put("isAtAll", isAtAll);
//2.通知具体人的手机号码列表
atMap.put("atMobiles", mobileList);
Map reqMap = Maps.newHashMap();
reqMap.put("msgtype", "text");
reqMap.put("text", contentMap);
reqMap.put("at", atMap);
return JSON.toJSONString(reqMap);
}
/**
* 获取通知消息
* @return
*/
private static String getContent() {
//钉钉机器人消息内容
String content;
//通过转码网站http://tool.chinaz.com/Tools/unicode.aspx
// 选择中文转Unicode把钉钉表情转换成unicode编码,也可以直接用表情对应的中文设置
String milkyTea = "过来请我喝奶茶[奶茶][流鼻血][流鼻血]\u005b\u6d41\u9f3b\u8840\u005d";
String NEWLINE = "\n";
StringBuffer sb = new StringBuffer();
sb.append("小哥哥,你好!")
.append(NEWLINE)
.append(milkyTea);
content = sb.toString();
return content;
}
通过main函数执行调用
public static void main(String[] args) throws ApiException {
//把webhook设置成对应群的即可
String webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxx";
String content = getContent();
ArrayList<String> mobileList = Lists.newArrayList();
sendMsgToGroupChat(webhook,false,mobileList,content);
}
可以看到如下通知效果:
添加通知人后效果如下:
官方SDK请求示例
如果只是为了发起一个简单的消息通知上述动态配置后足够使用,要使用更多消息类型推荐使用官方SDK进行消息发送,毕竟官方进行了一层封装,使用起来会更方便些。
pom引入官方SDK
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>2.0.0</version>
</dependency>
群消息通知方法
可以通过如下案例实现对应消息的通知。自定义机器人支持文本 (text)、链接 (link)、markdown(markdown)、ActionCard、FeedCard消息类型。
/**
* 通知SDK消息发送到群聊
* @param webhook 钉钉机器人地址(配置机器人的webhook)
*
*/
public static void sendMsgToGroupChatSDK(String webhook) throws ApiException {
DingTalkClient client = new DefaultDingTalkClient(webhook);
OapiRobotSendRequest request = new OapiRobotSendRequest();
//普通文本消息
request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("你好,测试文本消息");
request.setText(text);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("176xxx"));
// isAtAll类型如果不为Boolean,请升级至最新SDK
at.setIsAtAll(true);
at.setAtUserIds(Arrays.asList("109929","32099"));
request.setAt(at);
//md格式消息
request.setMsgtype("markdown");
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
markdown.setTitle("杭州天气");
markdown.setText("#### 杭州天气 @156xxxx8827\n" +
"> 9度,西北风1级,空气良89,相对温度73%\n\n" +
"> ![screenshot](https://gw.alicdn.com/tfs/TB1ut3xxbsrBKNjSZFpXXcXhFXa-846-786.png)\n" +
"> ###### 10点20分发布 [天气](http://www.thinkpage.cn/) \n");
request.setMarkdown(markdown);
//链接
request.setMsgtype("link");
OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
link.setMessageUrl("https://blog.csdn.net/qq_35427589");
link.setPicUrl("");
link.setTitle("时代的火车向前开");
link.setText("这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林");
request.setLink(link);
OapiRobotSendResponse response = client.execute(request);
log.info("执行结果回执{}",JSON.toJSONString(response));
}
来源:https://juejin.cn/post/7138584705523253284
标签:Java,钉钉,机器人,群消息
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
dubbo将异常转换成RuntimeException的原因分析 ExceptionFilter
2023-11-24 14:25:13
![](https://img.aspxhome.com/file/2023/3/64143_0s.jpg)
java8新特性 stream流的方式遍历集合和数组操作
2023-03-29 10:49:25
![](https://img.aspxhome.com/file/2023/0/60790_0s.jpg)
Java设计模式初识之备忘录模式详解
2023-08-29 23:27:09
Mybatis中注解@MapKey的使用详解
2023-11-24 21:43:35
解析android中的dip,dp,px,sp和屏幕密度
2023-09-26 20:44:38
JAVA中数组从小到大排序的2种方法实例
2021-10-09 09:46:18
用SpringBoot+Vue+uniapp小程序实现在线房屋装修管理系统
2023-11-12 04:10:48
![](https://img.aspxhome.com/file/2023/3/58883_0s.png)
kotlin之协程的理解与使用详解
2023-10-21 15:55:57
![](https://img.aspxhome.com/file/2023/0/64420_0s.png)
Java @Deprecated注解的作用及传递性
2023-08-11 12:55:05
![](https://img.aspxhome.com/file/2023/7/58097_0s.png)
C#实现对数组进行随机排序类实例
2023-06-22 19:04:26
java中用String.Join美化代码的实例讲解
2022-03-04 08:17:04
![](https://img.aspxhome.com/file/2023/7/64947_0s.jpg)
java 实现MD5加密算法的简单实例
2023-07-19 21:53:56
java比较器comparator使用示例分享
2022-07-18 22:45:15
Java中左移和右移问题图文详解
2023-02-14 15:44:05
![](https://img.aspxhome.com/file/2023/3/64113_0s.png)
spring cloud整合ribbon问题及解决方案
2023-07-25 04:24:49
![](https://img.aspxhome.com/file/2023/3/57823_0s.png)
生产消费者模式实现方式和线程安全问题代码示例
2023-11-26 19:44:17
![](https://img.aspxhome.com/file/2023/0/60040_0s.png)
Flutter利用Hero组件实现自定义路径效果的动画
2023-06-25 13:46:29
![](https://img.aspxhome.com/file/2023/3/85453_0s.png)
完美解决Spring Boot前端的Access-Control-Allow-Origin跨域问题
2023-09-19 10:16:28
Java命名规范
2022-10-03 00:06:59
Java单例模式简单示例
2022-04-24 03:46:20
![](https://img.aspxhome.com/file/2023/3/61843_0s.png)