Java利用釘釘機(jī)器人實(shí)現(xiàn)發(fā)送群消息
添加群機(jī)器人
可以查看這篇文章:添加機(jī)器人到釘釘群 使用命令行工具curl快速驗(yàn)證自定義機(jī)器人是否可以正常工作??梢允褂萌缦旅?,把對(duì)應(yīng)的鏈接調(diào)整成對(duì)應(yīng)群的webhook地址即可。
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"嗨,我來(lái)啦"}}'
Java請(qǐng)求示例
設(shè)置如下方法進(jìn)行消息通知
/**
* 通知消息發(fā)送到群聊
* @param webhook 釘釘機(jī)器人地址(配置機(jī)器人的webhook)
* @param isAtAll 是否通知所有人
* @param mobileList 通知具體人的手機(jī)號(hào)碼列表
* @param content 消息內(nèi)容
*/
public static void sendMsgToGroupChat(String webhook,boolean isAtAll,List<String> mobileList,String content){
try {
//組裝請(qǐng)求內(nèi)容
String reqStr = buildReqStr(content, isAtAll, mobileList);
//推送消息(http請(qǐng)求)
String result = HttpUtil.post(webhook, reqStr);
log.info("通知響應(yīng)結(jié)果:{}",result);
}catch (Exception e){
log.error("webhook通知失敗",e);
}
}
/**
* 組裝請(qǐng)求報(bào)文(Map封裝)
* @param content 通知內(nèi)容
* @param isAtAll 是否@所有人
* @param mobileList 通知具體人的手機(jī)號(hào)碼
* @return
*/
private static String buildReqStr(String content, boolean isAtAll, List mobileList) {
//消息內(nèi)容
Map contentMap = Maps.newHashMap();
contentMap.put("content", content);
//通知人
Map atMap = Maps.newHashMap();
//1.是否通知所有人
atMap.put("isAtAll", isAtAll);
//2.通知具體人的手機(jī)號(hào)碼列表
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() {
//釘釘機(jī)器人消息內(nèi)容
String content;
//通過(guò)轉(zhuǎn)碼網(wǎng)站http://tool.chinaz.com/Tools/unicode.aspx
// 選擇中文轉(zhuǎn)Unicode把釘釘表情轉(zhuǎn)換成unicode編碼,也可以直接用表情對(duì)應(yīng)的中文設(shè)置
String milkyTea = "過(guò)來(lái)請(qǐng)我喝奶茶[奶茶][流鼻血][流鼻血]\u005b\u6d41\u9f3b\u8840\u005d";
String NEWLINE = "\n";
StringBuffer sb = new StringBuffer();
sb.append("小哥哥,你好!")
.append(NEWLINE)
.append(milkyTea);
content = sb.toString();
return content;
}通過(guò)main函數(shù)執(zhí)行調(diào)用
public static void main(String[] args) throws ApiException {
//把webhook設(shè)置成對(duì)應(yīng)群的即可
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請(qǐng)求示例
如果只是為了發(fā)起一個(gè)簡(jiǎn)單的消息通知上述動(dòng)態(tài)配置后足夠使用,要使用更多消息類型推薦使用官方SDK進(jìn)行消息發(fā)送,畢竟官方進(jìn)行了一層封裝,使用起來(lái)會(huì)更方便些。
pom引入官方SDK
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>2.0.0</version>
</dependency>
群消息通知方法
可以通過(guò)如下案例實(shí)現(xiàn)對(duì)應(yīng)消息的通知。自定義機(jī)器人支持文本 (text)、鏈接 (link)、markdown(markdown)、ActionCard、FeedCard消息類型。
/**
* 通知SDK消息發(fā)送到群聊
* @param webhook 釘釘機(jī)器人地址(配置機(jī)器人的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("你好,測(cè)試文本消息");
request.setText(text);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("176xxx"));
// isAtAll類型如果不為Boolean,請(qǐng)升級(jí)至最新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度,西北風(fēng)1級(jí),空氣良89,相對(duì)溫度73%\n\n" +
"> \n" +
"> ###### 10點(diǎn)20分發(fā)布 [天氣](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("時(shí)代的火車向前開");
link.setText("這個(gè)即將發(fā)布的新版本,創(chuàng)始人xx稱它為紅樹林。而在此之前,每當(dāng)面臨重大升級(jí),產(chǎn)品經(jīng)理們都會(huì)取一個(gè)應(yīng)景的代號(hào),這一次,為什么是紅樹林");
request.setLink(link);
OapiRobotSendResponse response = client.execute(request);
log.info("執(zhí)行結(jié)果回執(zhí){}",JSON.toJSONString(response));
}到此這篇關(guān)于Java利用釘釘機(jī)器人實(shí)現(xiàn)發(fā)送群消息的文章就介紹到這了,更多相關(guān)Java發(fā)送群消息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解
這篇文章主要介紹了用C++實(shí)現(xiàn)求N!中末尾0的個(gè)數(shù)的方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
為了多次讀取ServletInputStream引發(fā)的一系列問(wèn)題
這篇文章主要介紹了為了多次讀取ServletInputStream引發(fā)的一系列問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10
java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的
這篇文章主要介紹了java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11
Java正則表達(dá)式匹配字符串并提取中間值的方法實(shí)例
正則表達(dá)式常用于字符串處理、表單驗(yàn)證等場(chǎng)合,實(shí)用高效,下面這篇文章主要給大家介紹了關(guān)于Java正則表達(dá)式匹配字符串并提取中間值的相關(guān)資料,需要的朋友可以參考下2022-06-06
idea編譯報(bào)錯(cuò)-代碼沒問(wèn)題IDEA編譯不通過(guò)的處理方案
這篇文章主要介紹了idea編譯報(bào)錯(cuò)-代碼沒問(wèn)題IDEA編譯不通過(guò)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12
Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常
Java經(jīng)驗(yàn)點(diǎn)滴:處理沒有被捕獲的異常...2006-12-12

