<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這個東西有啥用,好玩?
確實, 好玩歸好玩,其實很有使用場景。
可以自己選則一些業務節點觸發這個機器人助手的訊息推播;
簡單舉例:
1. 有人給你的系統留下反饋意見了,推播到運營群去;
2.專案部署成功了,推播到運維群去;
3.有人新增業務資料了,推播到客服群去;
對接企微機器人,推播訊息到群聊。
訊息型別有四種:
效果:
注意點:
1.企業微信群聊,外部群聊不允許弄機器人。
2.整合機器人的前提是,到相關群聊建機器人。
可以整合多個機器人,每個機器的身份標識是 建立的時候 企微分發的一個key。
觸發哪個機器人去推訊息,就使用哪個key。
①對著群聊右鍵,點選進入管理聊天訊息
②點選新增機器人
3.建立機器人
4.建立成功(這個key就是每個機器人的唯一標識,推播訊息可以設計成傳key推播)
開始敲程式碼整合:
慣例,先看下這次範例最終目錄結構:
1. 從頭開始 建一個專案:
2.引入核心依賴:
<!-- http請求工具 --> <dependency> <groupId>com.dtflys.forest</groupId> <artifactId>forest-spring-boot-starter</artifactId> <version>1.5.14</version> </dependency>
3. 把組態檔改成yml格式 (個人習慣),然後配上forset呼叫工具的設定,以及 機器人key
## 輕量級HTTP使用者端框架forest forest: # 設定底層API為 okhttp3 backend: okhttp3 # 連線池最大連線數,預設值為500 max-connections: 1000 # 每個路由的最大連線數,預設值為500 max-route-connections: 500 # 請求超時時間,單位為毫秒, 預設值為3000 timeout: 3000 # 連線超時時間,單位為毫秒, 預設值為2000 connect-timeout: 3000 # 請求失敗後重試次數,預設為0次不重試 retry-count: 1 # 單向驗證的HTTPS的預設SSL協定,預設為SSLv3 ssl-protocol: SSLv3 # 開啟或關閉紀錄檔,預設為true logEnabled: true # 開啟/關閉Forest請求紀錄檔(預設為 true) log-request: true # 開啟/關閉Forest響應狀態紀錄檔(預設為 true) log-response-status: true # 開啟/關閉Forest響應內容紀錄檔(預設為 false) log-response-content: true wechat: notice: key: 3f66977b-****-4af5-****-59*0c4****3d server: port: 8571
4. 建立 WechatNoticeClient.java
用於對接企微機器人推訊息介面,因為我們整合了forest ,簡單用註解就行(其實自己用http工具也行)
import com.dtflys.forest.annotation.JSONBody; import com.dtflys.forest.annotation.Post; import com.dtflys.forest.annotation.Var; import org.springframework.stereotype.Component; import java.util.Map; /** * @Author: JCccc * @Date: 2022-5-27 14:44 * @Description: 企業微信機器人通知client */ @Component public interface WechatNoticeClient { @Post( url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={key}", headers = { "Accept-Charset: utf-8", "Content-Type: application/json" }, dataType = "json") void sendWechatMsg(@Var("key") String key, @JSONBody Map<String, Object> body); }
5.建立 MyNoticeUtil.java
用於封裝不同訊息型別訊息的推播方法,裡面呼叫的WechatNoticeClient.
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import sun.misc.BASE64Encoder; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.MessageDigest; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @Author: JCccc * @Date: 2022-5-27 14:48 * @Description: */ @Component public class MyNoticeUtil { @Autowired private WechatNoticeClient wechatNoticeClient; @Value("${wechat.notice.key}") private String NOTICE_KEY; /** * 傳送文字訊息 */ public void sendTextMsg() { Map<String, Object> sendMap = new HashMap<>(); //設定訊息型別 txt文字 sendMap.put("msgtype", "text"); Map<String, String> contentMap = new HashMap<>(); contentMap.put("content", "你好,我是JCccc的機器人"); sendMap.put("text", contentMap); wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap); } /** * 傳送markdown文字訊息 */ public void sendMarkDownTextMsg() { Map<String, Object> sendMap = new HashMap<>(); //設定訊息型別 markdown文字 sendMap.put("msgtype", "markdown"); Map<String, String> contentMap = new HashMap<>(); contentMap.put("content", "JCccc,您的賬戶餘額已到賬<font color=\"warning\">15000元</font>,開心起來吧。\n" + " >付款方:<font color=\"comment\">白日做夢</font>"); sendMap.put("markdown", contentMap); wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap); } /** * 傳送圖片訊息 */ public void sendImageMsg() { String url = "D:\Program Files\KmProjects\dotest\src\main\resources\static\test.png"; Map<String, Object> sendMap = new HashMap<>(); sendMap.put("msgtype", "image"); Map<String, String> contentMap = new HashMap<>(); contentMap.put("md5", getMd5(url)); contentMap.put("base64", getBase64(url).replaceAll("r|n", "")); sendMap.put("image", contentMap); wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap); } /** * 傳送圖文訊息 */ public void sendImageAndTxtMsg() { Map<String, Object> sendMap = new HashMap<>(); sendMap.put("msgtype", "news"); Map<String, Object> contentMap = new HashMap<>(); List<Map<String, Object>> list = new ArrayList<>(); Map<String, Object> obj = new HashMap<>(); obj.put("title", "小目標青年的部落格"); obj.put("description", "大家給他點點贊!"); obj.put("url", "https://blog.csdn.net/qq_35387940"); obj.put("picurl", "https://img-blog.csdnimg.cn/6bc435ac39514cb780739ea1cc34c409.png"); list.add(obj); contentMap.put("articles", list); sendMap.put("news", contentMap); wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap); } /** * 圖片轉為base64編碼 */ public String getBase64(String imgFile) { InputStream in = null; byte[] data = null; // 讀取圖片位元組陣列 try { in = new FileInputStream(imgFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 對位元組陣列Base64編碼 BASE64Encoder encoder = new BASE64Encoder(); // 返回Base64編碼過的位元組陣列字串 return encoder.encode(data); } /** * 獲取檔案的MD5值 * * @param path * @return */ public String getMd5(String path) { try { MessageDigest md5 = MessageDigest.getInstance("MD5"); FileInputStream fis = new FileInputStream(path); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) { md5.update(buffer, 0, len); } fis.close(); byte[] byteArray = md5.digest(); StringBuilder sb = new StringBuilder(); for (byte b : byteArray) { sb.append(String.format("%02x", b)); } return sb.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } }
6.簡單寫一個測試介面模擬觸發一下機器人:
import com.jc.dotest.wechat.MyNoticeUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; /** * @Author: JCccc * @Date: 2022-5-27 14:52 * @Description: */ @RestController public class TestController { @Autowired MyNoticeUtil myNoticeUtil; @GetMapping("/doTest") public String doTest(@RequestParam("testType") String testType){ if (testType.equals("1")){ myNoticeUtil.sendTextMsg(); } if (testType.equals("2")){ myNoticeUtil.sendMarkDownTextMsg(); } if (testType.equals("3")){ myNoticeUtil.sendImageMsg(); } if (testType.equals("4")){ myNoticeUtil.sendImageAndTxtMsg(); } return "success"; } }
測試效果:
觸發傳送文字訊息
效果:
其他的效果:
到此這篇關於Springboot整合企業微信機器人助手推播訊息的實現的文章就介紹到這了,更多相關Springboot企業微信機器人推播內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45