前言

这个东西有啥用,好玩?

确实, 好玩归好玩,其实有很多使用场景。

可以自己选择一些业务节点触发这个机器人助手的消息推送; 简单举例:

1. 有人给你的系统留下反馈意见了,推送到运营群去;

2.项目部署成功了,推送到运维群去;

3.有人新增业务资料了,推送到客服群去;

本篇内容:  

对接企微机器人,推送消息到群聊。 

消息类型有四种: 文本消息

图片消息

MarkDown格式文本消息

小卡片消息(小卡片哦~)

效果:

正文

注意点:

1.企业微信群聊,外部群聊不允许弄机器人。

 2.整合机器人的前提是,到相关群聊建机器人。  

可以整合多个机器人,每个机器的身份标识是 创建的时候 企微分发的一个key。 触发哪个机器人去推消息,就使用哪个key。

机器人创建步骤:

①对着群聊右键,点击进入管理聊天消息 

②点击添加机器人

3.创建机器人

 4.创建成功(这个key就是每个机器人的唯一标识,推送消息可以设计成传key推送)

开始敲代码整合: 惯例,先看下这次实例最终目录结构:

1. 从头开始 建一个项目:

 2.引入核心依赖:  

    com.dtflys.forest     forest-spring-boot-starter     1.5.14  

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 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 sendMap = new HashMap<>();

//设置消息类型 txt文本

sendMap.put("msgtype", "text");

Map contentMap = new HashMap<>();

contentMap.put("content", "你好,我是JCccc的机器人");

sendMap.put("text", contentMap);

wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap);

}

/**

* 发送markdown文本消息

*/

public void sendMarkDownTextMsg() {

Map sendMap = new HashMap<>();

//设置消息类型 markdown文本

sendMap.put("msgtype", "markdown");

Map contentMap = new HashMap<>();

contentMap.put("content", "JCccc,您的账户余额已到账15000元,开心起来吧。\\\n" +

" >付款方:白日做梦");

sendMap.put("markdown", contentMap);

wechatNoticeClient.sendWechatMsg(NOTICE_KEY, sendMap);

}

/**

* 发送图片消息

*/

public void sendImageMsg() {

String url = "D:\\Program Files\\JcProjects\\dotest\\src\\main\\resources\\static\\test.png";

Map sendMap = new HashMap<>();

sendMap.put("msgtype", "image");

Map 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 sendMap = new HashMap<>();

sendMap.put("msgtype", "news");

Map contentMap = new HashMap<>();

List> list = new ArrayList<>();

Map 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";

}

}

测试效果:

触发发送文本消息

效果: 

 

其他的效果:

好了该篇就到这吧。

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: