企业微信机器人实现发送消息的功能(文本消息,图片消息,图片+文字消息)

15 篇文章 0 订阅
2 篇文章 1 订阅

1.打开企业微信电脑版点击红框位置添加机器人

在这里插入图片描述

2.复制地址

在这里插入图片描述

3.代码环节Controller

@GetMapping(value = "testRobot")
public void testRobot() throws IOException {
    //VO这段可以写在业务逻辑层
    RobotVo vo = new RobotVo();
    //机器人地址
    vo.setWebhookAddress("刚才复制的地址");
    //1.第一种情况:发送文本消息
    // vo.setContent("我发送的消息是:文本消息");
    // List<String> memberList = new ArrayList<>();
    // memberList.add("@all");
    // vo.setMemberList(memberList);
    // vo.setMsgType("text");

    // 2.第二种情况,发送图片消息
    // vo.setMsgType("image");
    // vo.setSavePath("C:/Users/Administrator/Desktop/吴彦祖.jpg");

    //3.第三种情况,发送机器人消息
    vo.setMsgType("news");
    vo.setTitle("test");
    vo.setDescription("test");
    vo.setUrl("url");
    // vo.setImageUrl("url")括号中的url是上传oss返回的路径
    vo.setImageUrl("url");
    service.run(vo);
}

4.VO

@Data
public class RobotVo {
    /**
     * 机器人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;
}

5.Service接口

 	/**
     * 机器人
     * @param vo
     * @throws IOException
     */
    void run(RobotVo vo) throws IOException;

6.Service业务逻辑

    @Override
    public void run(RobotVo vo) throws IOException {
        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(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" +
                    "}";
        }
        send(vo.getWebhookAddress(), jsonData);
    }

7.将图片地址转化成base64编码

    /**
     * 根据图片地址转换为base64编码字符串
     * @param imgFile
     * @return
     */
    public static String getImageStr(String imgFile) {
       //要想发送图片内容需要将图片加密转化成base64编码
        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 er= Base64.getEncoder();
        return er.encodeToString(data);
    }

8.send方法

  public static JSONObject send(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);
            // 获取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;
    }

9.效果图

在这里插入图片描述
在这里插入图片描述
end ~

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Spring Boot是一个用于简化Spring应用程序开发的框架,它提供了快速启动和开发的能力。企业微信机器人企业微信中的一个功能,它可以向指定的群聊或个人发送消息,用于自动化通知和交互。 要使用Spring Boot来实现企业微信机器人消息,首先需要在企业微信后台获取到机器人的Webhook地址,并在Spring Boot应用程序中编写发送消息的逻辑。可以使用Spring Boot的RestTemplate来发送HTTP请求将消息发送企业微信机器人的Webhook地址,同时也可以通过实现定时任务或事件监听来自动化消息发送。 在Spring Boot应用程序中可以编写一个Controller来接收需要发送消息内容,然后调用RestTemplate发送HTTP POST请求将消息内容发送企业微信机器人。另外,还可以编写定时任务或事件监听,当满足一定条件时自动发送消息给指定的群聊或个人,实现自动化通知功能。 除了发送文本消息外,还可以通过企业微信机器人的Webhook接口发送图文消息、链接消息、Markdown消息等不同类型的消息。在Spring Boot应用程序中可以根据需求来封装不同类型消息发送逻辑,以满足企业内部不同场景下的消息通知需求。 总的来说,通过Spring Boot实现企业微信机器人消息功能可以简化开发流程,提高开发效率,同时也可以满足企业内部自动化消息发送的需求,为企业内部的协作和通知提供便利。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

故事的小黄花-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值