小夥伴們,好久不見,之前一直忙需求,好久沒寫博客了,企業微信於今年六月底新增了羣機器人消息接口,雖然這個機器人的功能還不是很完善,但是總體來說呢跟企業微信發送應用消息差不多,企業微信發送應用消息在這
我寫的博客呢,除非是涉及到項目隱私的部分沒公開,但是基本上博客中涉及的代碼我都有貼出來,小夥伴自行參考,一起加油!
1.首先呢,可以參考企業微信開發文檔:https://work.weixin.qq.com/api/doc#90000/90136/91770
2.其次呢,可以在羣裏創建羣機器人,目前好像都可以創建機器人 圖立馬安排上來
3.話不多說哈,上代碼!
a.首先呢,是接口調用:
@GetMapping(value = "testApi4")
public void testBosRoBot() throws Exception {
QiRobotVo vo = new QiRobotVo();
//機器人地址
vo.setWebhookAddress("替換成你的機器人地址");
//1.第一種情況:發送文本消息
vo.setContent("我發送的消息是:文本消息");
List<String> memberList = new ArrayList<>();
memberList.add("TangHuiHong");
memberList.add("@all");
vo.setMemberList(memberList);
vo.setMsgType("text");
//2.第二種情況,發送圖片消息
// vo.setMsgType("image");
// vo.setSavePath("C:/uploadImage/a.png");
//3.第三種情況,發送機器人消息
// vo.setMsgType("news");
// vo.setTitle("中秋節禮品領取");
// vo.setDescription("今年中秋節公司有豪禮相送");
// vo.setUrl("URL");
// vo.setImageUrl("http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png");
weiTemplateService.testSendNews(vo);
}
b.其次呢,是業務邏輯層代碼的編輯
@Override
public void testSendNews(QiRobotVo vo) throws Exception {
List<String> memberList = vo.getMemberList();
String jsonData = "";
String mobileList = "";
String strMember = "";
if (vo.getMsgType().equals("text")) {
if (!Strings.isNullOrEmpty(vo.getMobileList())) {
mobileList = vo.getMobileList();
} else {
mobileList = "";
}
for (int i = 0; i < memberList.size(); i++) {
if (i == memberList.size() - 1) {
strMember += "\"" + memberList.get(i) + "\"";
} else {
strMember += "\"" + memberList.get(i) + "\"" + ",";
}
}
String[] members = new String[memberList.size()];
for (int i = 0; i < memberList.size(); i++) {
members[i] = memberList.get(i);
}
jsonData = "{\n" +
"\t\"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"text\": {\n" +
" \"content\": \"" + vo.getContent() + "\",\n" +
" \"mentioned_list\":[" + strMember + "],\n" +
" \"mentioned_mobile_list\":[\"" + mobileList + "\"]\n" +
" }\n" +
"}";
} else if (vo.getMsgType().equals("image")) {
//圖片base64加密的值
vo.setImageBase64Value(ImageUtil.getImageStr(vo.getSavePath()));
//圖片md5加密的值
vo.setImageMd5Value(DigestUtils.md5Hex(new FileInputStream(vo.getSavePath())));
jsonData = "{\n" +
" \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"image\": {\n" +
" \"base64\": \"" + vo.getImageBase64Value() + "\",\n" +
" \"md5\": \"" + vo.getImageMd5Value() + "\"\n" +
" }\n" +
"}";
} else if (vo.getMsgType().equals("news")) {
//圖文消息
vo.setTitle(!Strings.isNullOrEmpty(vo.getTitle()) ? vo.getTitle() : "");
jsonData = "{\n" +
" \"msgtype\": \"" + vo.getMsgType() + "\",\n" +
" \"news\": {\n" +
" \"articles\" : [\n" +
" {\n" +
" \"title\" : \"" + vo.getTitle() + "\",\n" +
" \"description\" : \"" + vo.getDescription() + "\",\n" +
" \"url\" : \"" + vo.getUrl() + "\",\n" +
" \"picurl\" : \"" + vo.getImageUrl() + "\"\n" +
" }\n" +
" ]\n" +
" }\n" +
"}";
}
JSONObject jsonObject = SendRequest.sendPost(vo.getWebhookAddress(), jsonData);
}
c.我將當中涉及到的類都貼出來 QiRobotVo
/**
* 給企業微信機器人發送消息
* @Author: tanghh18
* @Date: 2019/7/5 14:53
*/
public @Data
class QiRobotVo {
/**
* 機器人id
*/
private String robotId;
/**
* 機器人名字
*/
private String robotName;
/**
* 當前機器人的webhook地址
*/
private String webhookAddress;
/**
* 消息類型
*/
private String msgType;
/**
* 富文本框裏面的內容
*/
private String content;
/**
* 涉及的人員
*/
private List<String> memberList;
/**
* 電話
*/
private String mobileList;
/**
* 圖片地址
*/
private String imageUrl;
/**
* base64編碼後的值
*/
private String imageBase64Value;
/**
* 圖片md5加密後的值
*/
private String imageMd5Value;
/**
* 發送消息的標題
*/
private String title;
/**
* 發送圖文消息的描述信息
*/
private String description;
/**
* 圖片url地址集合
*/
private List<String> imageUrlList;
/**
* 圖片打開的地址
*/
private String url;
/**
* 消息內容集合
*/
private List<String> contentList;
/**
* 圖片路徑
*/
private String savePath;
}
d.將圖片地址轉化成base64編碼
/**
* 根據圖片地址轉換爲base64編碼字符串
* @param imgFile
* @return
*/
public static String getImageStr(String imgFile) {
InputStream inputStream = null;
byte[] data = null;
try {
inputStream = new FileInputStream(imgFile);
data = new byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
// 加密
Base64.Encoder encoder = Base64.getEncoder();
return encoder.encodeToString(data);
}
e.sendRequest
public static JSONObject sendPost(String url, String param) {
PrintWriter out = null;
BufferedReader in = null;
JSONObject jsonObject = null;
String result = "";
try {
URL realUrl = new URL(url);
// 打開和URL之間的連接
URLConnection conn = realUrl.openConnection();
// 發送POST請求必須設置如下兩行
conn.setDoOutput(true);
conn.setDoInput(true);
// conn.addRequestProperty("Cookie", "stay_login=1 smid=DumpWzWQSaLmKlFY1PgAtURdV_u3W3beoei96zsXkdSABwjVCRrnnNBsnH1wGWI0-VIflgvMaZAfli9H2NGtJg id=EtEWf1XZRLIwk1770NZN047804");//設置獲取的cookie
// 獲取URLConnection對象對應的輸出流(設置請求編碼爲UTF-8)
out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
// 發送請求參數
out.print(param);
// flush輸出流的緩衝
out.flush();
// 獲取請求返回數據(設置返回數據編碼爲UTF-8)
in = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line;
while ((line = in.readLine()) != null) {
result += line;
}
jsonObject = JSONObject.parseObject(result);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return jsonObject;
}
完成了,最後呢給小夥伴們看一下效果