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