Springboot整合企业微信机器人助手推送消息的实现

目录
  • 前言
  • 本篇内容:
  • 正文
    • 机器人创建步骤:

前言

这个东西有啥用,好玩?

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

可以自己选则一些业务节点触发这个机器人助手的消息推送;

简单举例:

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

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

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

本篇内容:

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

消息类型有四种:

  • 文本消息
  • 图片消息
  • MarkDown格式文本消息
  • 小卡片消息(小卡片哦~)

效果:

正文

注意点:

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企业微信机器人推送内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringBoot中集成企业微信机器人实现运维报警的示例

    目录 1.注册企业微信 2.添加群机器人 3.引入 forest 依赖 4.请求方法 5.发送消息 6.测试 在企业运营中,为了实现工作效率和执行效率的提升,往往会选择在社群中使用群聊机器人进行协助管理.机器人可以定时或者按照一定的规则给群里发信息并@群成员等.群聊机器人可以活跃气氛,关怀员工比如根据天气情况提醒员工注意天气变化,发送节日.生日祝福等.它也可以进行工作提醒,帮助员工更好的做系统化的回报总结,机器人可以依托业务系统,每天定时发送工作总结给对应负责人,帮助员工更好地复盘工作. 1.注

  • Springboot整合企业微信机器人助手推送消息的实现

    目录 前言 本篇内容: 正文 机器人创建步骤: 前言 这个东西有啥用,好玩? 确实, 好玩归好玩,其实很有使用场景. 可以自己选则一些业务节点触发这个机器人助手的消息推送: 简单举例: 1. 有人给你的系统留下反馈意见了,推送到运营群去: 2.项目部署成功了,推送到运维群去: 3.有人新增业务资料了,推送到客服群去: 本篇内容: 对接企微机器人,推送消息到群聊. 消息类型有四种: 文本消息 图片消息 MarkDown格式文本消息 小卡片消息(小卡片哦~) 效果: 正文 注意点: 1.企业微信群聊

  • Python实现企业微信机器人每天定时发消息实例

    1.背景 由于办公需要"每天定时推送某消息用来提醒群里面所有人",于是决定用企业微信自带的机器人来实现此功能.具体方法我来一一讲述. 2.企业微信API 具体见官网说明:https://work.weixin.qq.com/help?person_id=1&doc_id=13376 3.想法 想到几种方式: 直接写个sh脚本,并用linux定时器执行此脚本就可以了.这种方式简单实用,不过缺点就是修改起来稍微麻烦一点写个Qt/VS客户端程序,做好页面和每天想推送的内容,还是有点麻

  • python给微信好友定时推送消息的示例

    如下所示: from __future__ import unicode_literals from threading import Timer from wxpy import * import requests #bot = Bot() #bot = Bot(console_qr=2,cache_path="botoo.pkl")#这里的二维码是用像素的形式打印出来!,如果你在win环境上运行,替换为 bot=Bot() bot = Bot(cache_path=True) de

  • SpringBoot实现发送邮件、发送微信公众号推送功能

    目录 SpringBoot实现发送邮件 pom.xml application.yml 代码实现 SpringBoot实现发送微信公众号推送 pom.xml 代码实现 SpringBoot实现发送邮件   JavaMailSender是Spring封装的邮件发送封装类,支持普通文本.附件.html等格式. pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>

  • 13行python代码实现对微信进行推送消息的示例代码

    目录 单人推送 一对多推送 Python可以实现给QQ邮箱.企业微信.微信等等软件推送消息,今天咱们实现一下Python直接给微信推送消息. 这里咱们使用了一个第三方工具pushplus 单人推送 实现步骤: 1.用微信注册一个此网站的账号2.将token复制出来,记录到小本本上. 代码展示 import requests def send_wechat(msg): token = 'XXXXXXXXXXXX'#前边复制到那个token title = 'title1' content = ms

  • python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用requests.get()获取的内容是不含推送消息的,这里使用selenium+PhantomJS处理 代码 #! /usr/bin/env python3 from selenium import webdriver from datetime import datetime import bs4, requ

  • 微信java开发之实现微信主动推送消息

    1.拉取access_token2.拉取用户信息3.主动推送消息4.接口貌似要申请权限5.依赖httpclient4.2.3 和jackson 2.2.1 复制代码 代码如下: public class WeixinAPIHelper { /**  * 获取token接口  */ private String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=

  • 验证token、回复图文\文本、推送消息的实用微信类php代码

    本文实例为大家分享了用于验证token,回复图文.文本,向用户推送消息等功能的微信类,具体代码如下 <?php class Wechat{ private $data = array(); public function __construct($token){ $this -> auth($token, $wxuser) || exit; if(IS_GET){ echo($_GET['echostr']); exit; }else{ $xml = file_get_contents(&qu

  • 微信服务号推送模板消息接口

    微信服务号现在用的比较火,用户可以通过微信号订阅信息,有时候会用到模板消息.下面贴上代码,有注释写的很详细.在此@access_token 请调用 https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=@appid&secret=@secret 接口获取. 具体代码: public static void Send() { dynamic postData = new ExpandoObject

随机推荐