企业微信群机器人发送消息(三)java端如何控制
1.先在群里添加机器人,然后获取机器人的webhook地址:
假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa
2.有多种方式发送群消息,可以采用curl,也可以采用发送http请求的方式,我这里采用okhttp发送http请求,pom如下:
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
调用okhttp核心代码如下:
package org.jeecg.modules.quartz.job;
import okhttp3.*;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.modules.quartz.mapper.InstrumentDataWarnJobMapper;
import org.jeecg.modules.ssta.utils.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Job;
import java.util.*;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
@Slf4j
public class InstrumentDataWarnJob implements Job {
@Autowired
private ISysBaseAPI sysBaseAPI;
@Resource
InstrumentDataWarnJobMapper instrumentDataWarnJobMapper;
private String webhook="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=1069f91f-d5ed-46ca3-8641-eb7c1c63da5b6";
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info(new Date()+",everyHourWarnJob,开始");
runJob();
//保存日志到系统日志表中
sysBaseAPI.addLog("everyHourWarnJob-执行成功", CommonConstant.LOG_TYPE_3,2);
}
public void runJob()
{
String textTemplate = "{\n" +
" \"msgtype\": \"text\",\n" +
" \"text\": {\n" +
" \"content\": \" 测试文本 \",\n" +
" \"mentioned_list\":[\"@all\"],\n" +
" }\n" +
"}";
callWeChatBot(textTemplate);
log.info(new Date()+",everyHourWarnJob,执行完毕");
}
public String callWeChatBot(String reqBody)
{
log.info("请求参数:" + reqBody);
// 构造RequestBody对象,用来携带要提交的数据;需要指定MediaType,用于描述请求/响应 body 的内容类型
MediaType contentType = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(contentType, reqBody);
// 调用群机器人
String respMsg = okHttp(body, webhook);
if ("0".equals(respMsg.substring(11, 12))) {
log.info("向群发送消息成功!");
} else {
log.info("请求失败!");
}
return respMsg;
}
public String okHttp(RequestBody body, String url)
{
String respMsg="error";
OkHttpClient client;
client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS) // 设置连接超时时间
.readTimeout(20, TimeUnit.SECONDS) // 设置读取超时时间
.build();
// 构造Request对象
Request request = new Request.Builder()
.url(url)
.post(body)
.addHeader("cache-control", "no-cache") // 响应消息不缓存
.build();
// 构建Call对象,通过Call对象的execute()方法提交异步请求
Response response = null;
try {
response = client.newCall(request).execute();
// 请求结果处理
byte[] datas = response.body().bytes();
respMsg = new String(datas);
log.info("返回结果:" + respMsg);
} catch (IOException e) {
e.printStackTrace();
}
return respMsg;
}
}
3.生成核心方法的参数,
如果发送markdown格式的消息:
public static String generalBotBodyInfo(File f1, File f2, String cusenv, String myenv) {
String content = "**信息摘要:** \n" +
">文件1:<font color=\\\"info\\\">" + f1.getName() + "</font>\n " +
">服务器路径:<font color=\\\"info\\\">" + f1.getAbsolutePath() + "</font>\n" +
">文件传输环境:<font color=\\\"info\\\">" + myenv + "</font>\n " +
">客户接受环境:<font color=\\\"info\\\">" + cusenv + "</font>\n" +
">时间:<font color=\\\"info\\\">" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + "</font>";
String textTemplate = "{\n" +
" \"msgtype\": \"markdown\",\n" +
" \"markdown\": {\n" +
" \"content\": \"" + content + "\",\n" +
" }\n" +
"}";
return textTemplate;
}
如果发送text格式的消息:
public static String generalBotBodyAT() {
String textTemplate = "{\n" +
" \"msgtype\": \"text\",\n" +
" \"text\": {\n" +
" \"content\": \"今天下午大暴雨\",\n" +
" \"mentioned_list\":[\"@all\"],\n" +
" }\n" +
"}";
return textTemplate;
}
如果发送图片,不能超过2M,支持的格式为JPG,PNG格式:
public static String generalBotBodyImage() {
String base64 = "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";
String md5 = "862715fb36992d6746641ff02ee85b8c";
String textTemplate = "{\n" +
" \"msgtype\": \"image\",\n" +
" \"image\": {\n" +
" \"base64\": \"" + base64 + "\",\n" +
" \"md5\": \"" + md5 + "\"\n" +
" }\n" +
"}";
return textTemplate;
}
发送图片需要对图片进行base64编码并计算图片的md5值,把计算的方法也一并献上,需要注意图片不要过大,不然base64编码的结果会超级长,甚至超过String的最大长度,java.util.Base64这个工具类有现成的,直接用就行
public static String getFileBase64(String path){
try {
FileInputStream inputStream = new FileInputStream(new File(path));
byte [] bs = new byte[inputStream.available()];
inputStream.read(bs);
return Base64.getEncoder().encodeToString(bs);
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}
return null;
}
企业微信群机器人发送消息(三)java端如何控制的更多相关文章
- 通过企业微信API接口发送消息
最近给公司测试组内部开发一个记账小工具,当账目出现问题的时候需要发送消息通知大家,前期主要采用的QQ发送通知消息,但是有一天突然无法连接到QQ服务器,运维的同学建议采用微信的方式对接然后进行告警,所以 ...
- 微信公众号发送消息模板(java)
这段时间接触公众号开发,写下向用户发送消息模板的接口调用 先上接口代码 public static JSONObject sendModelMessage(ServletContext context ...
- UDP端口检查告警SHELL脚本(企业微信版机器人版)
脚本准备 0Batch_Check.sh 1port_check.sh 2wechat_bot_alert.sh CheckList CheckList #支持大/小写 10.1.1.5 Udp 53 ...
- Python调用钉钉群机器人发送群消息
1.首先需要一个钉钉群,群才有机器人 2.群设置->智能群助手->添加机器人->自定义机器人 3.添加自定义机器人,配置如下:给机器人命名,选择加签.保存机器人的秘钥.Webhook ...
- MySQL数据库企业集群项目实战(阶段三)
MySQL数据库企业集群项目实战(阶段三) 作者 刘畅 时间 2020-10-25 目录 1 架构拓扑图 1 1.1 方案一 1 1.2 方案二 2 ...
- springboot使用RestTemplate以post方式发送json字符串参数(以向钉钉机器人发送消息为例)
使用springboot之前,我们发送http消息是这么实现的 我们用了一个过时的类,虽然感觉有些不爽,但是出于一些原因,一直也没有做处理,最近公司项目框架改为了springboot,springbo ...
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
微信通过openID发送消息/后台post.get提交并接收数据 控制器:下面是post发送消息(微信不支持从前台发送数据,之前试过,报错,需要跨域,跨域的问题解决后还不行,最后发现之后后端提交 ...
- Java企业微信开发_01_接收消息服务器配置
一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:Java微信公众平台开发_01_本地服务器映射外网 2.一个企业微信账号: 去注册:(https://work.weixin.qq.c ...
- python3企业微信群组报警
公司提出一个需求需要做一个企业微信的一个消息推送,需要将消息发送到聊天群里详细信息如下. 如何创建应用请阅读我的上篇文章:https://www.cnblogs.com/wangyajunblog/p ...
- Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)
注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先 ...
随机推荐
- #贪心#CF605A Sorting Railway Cars
题目 一个长度为 \(n\) 的排列,每次可以将一个数移至开头或者结尾,问最少多少次使其升序排列 分析 让数字连续的情况尽量多才能让移出来的次数尽量少, 找到最长的数字连续段,若其长度为 \(len\ ...
- 可能有人听过ThreadLocal,但一定没人听过ThreadLocal对象池
目录 简介 ThreadLocal ThreadLocalMap Recycler 总结 简介 JDK中的Thread大家肯定用过,只要是用过异步编程的同学肯定都熟悉.为了保存Thread中特有的变量 ...
- 【直播回顾】OpenHarmony知识赋能五期第五课——多媒体子系统之视频解读
5月19日晚上19点,知识赋能第五期第五节课<OpenHarmony标准系统多媒体子系统之视频解读>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由深开鸿资深技术专家 ...
- 构筑智能未来的开源 .Net AI知识库/智能体项目
在这个信息爆炸的时代,我们如何快速准确地从汪洋大海的数据中抽取真正有价值的知识呢?AntSK,一个基于.NET开发的人工智能知识库和智能体项目,似乎给出了一个新颖的答案.今天,就让我们一起深入了解An ...
- SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析
SQL RIGHT JOIN关键字 SQL RIGHT JOIN关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录.如果没有匹配,则左侧的结果为0条记录. RIGHT JO ...
- 三七互娱《斗罗大陆:魂师对决》上线,Network Kit助力玩家即刻畅玩
三七游戏旗下的年度旗舰大作<斗罗大陆:魂师对决>现已开启全平台公测.8月1日,三七互娱技术副总监出席了HMS Core.Sparkle游戏应用创新沙龙,展示了在HMS Core Netwo ...
- 开发指导—利用CSS动画实现HarmonyOS动效(二)
注:本文内容分享转载自HarmonyOS Developer官网文档 点击查看<开发指导-利用CSS动画实现HarmonyOS动效(一)> 3. background-position ...
- Lite Actor:方舟Actor并发模型的轻量级优化
原文:https://mp.weixin.qq.com/s/8biIBddpy6GKgakazg1vcg,点击链接查看更多技术内容. 并发模型是用来实现不同应用场景中并发任务的编程模型,通过合理地使用 ...
- CentOS下安装OpenSSH 5.8的三种方法【未测试】
CentOS下安装OpenSSH 5.8的三种方法 Category : 工作学习 / Tags : centos, linux, openssh / Date : 2011.05.19 / 5,29 ...
- 报表 BI 选型的那些事
前言 报表工具是一个接近 20 年的产物了 但是,直到现在,在各种数据信息化的系统中,报表工具的作用,不仅没有褪色,反而是因为信息化需求的增大.数据的增多,以及报表工具本身迭代后越来越方便好用,使得它 ...