【Java】企业微信群机器人发送消息(文字、图片、MarkDown、文件消息)

本文介绍如何使用Java调用企业微信群机器人发送文字、图片、Markdown和文件消息。详细步骤包括创建群机器人、添加依赖、调用工具类方法,并提供了相关代码示例。同时,文章提醒注意群机器人Webhook地址的保密性和图片大小限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java调用企业微信群机器人发送消息

2022/4/22更新:新增可发送文件消息。

发送文件消息需要先将文件上传到企业微信的临时素材,url为https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?type=file&key=**********,这个key就是群机器人Webhook地址的key参数,在代码里我已经处理好了,只要有Webhook地址就行。获取到media_id,再拿media_id和文件一起就可以调用群机器人的发送接口了。


2021/12/3 周五

主要参考 企业微信接口文档(但这里用的不是文档里的API) 和 企业微信机器人自动发送群消息 提供的方法,

将企业微信群机器人发送 文字、图片、MarkDown、文件消息 封装成了一个工具类

  • 用于自建的群,即不是使用企业微信api创建的群,不需要群id;
  • 主要使用 okhttp3 调用机器人api和上传文件到临时素材api;
  • 有含代理的构造方法和不含代理的构造方法,可根据需要选择调用;
  • 参数使用的是JSONObject,防止在用字符串拼接参数时出现各种特殊字符转义问题
  • 发送图片大小不超过2M(企业微信的规定)。

使用步骤:

1. 创建群机器人

在企业微信已经建好的群中,添加群机器人(怎么添加可以参考:企业微信机器人发送消息),获取群机器人的Webhook地址

需注意:

(1)因为不是用企业微信api创建的群,没有群id,无法指定群机器人只发送到某一个群,所以建议该机器人不要发布到公司或者添加到其他群

(2)还需注意群机器人Webhook地址的保密性,因为任何人拿到你的地址,就可以朝你的群里发消息了。

关于Webhook

Webhook是一个 API 概念,简单来说, 就是一个接收 HTTP POST(或GET,PUT,DELETE)的URL。

比如说我可以直接在postman测试工具里,带上需要的参数,向群机器人的Webhook地址发送请求,企业微信对应的群里就能收到这个机器人发送的消息。
用postman请求群机器人发送消息

2. 将工具类放到项目中,需要添加依赖

将工具类放到项目中,代码在最后。

需要在项目pom.xml文件中添加okhttp3图片操作的依赖:

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.14.9</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>

(PS:如果图片过大,可能导致base64编码结果过长超过String的最大长度,导致图片发送失败。另外,企业微信也有规定图片不能超过2M.)

3. 调用

(1)直接 new 一个WeChatBotUtils,带上群机器人Webhook地址和代理服务器相关配置:

WeChatBotUtils robot = new WeChatBotUtils(url, hostname, port);

或者从配置中获取代理信息,就可以用第二个构造方法:

WeChatBotUtils robot = new WeChatBotUtils(url, true);

(如果不需要使用代理,改为false就可以了)

IDEA将代理信息配置在启动参数的方法如下图:
IDEA配置代理
(2)带上对应消息内容参数,调用sendTextMsg(String msg)、sendImgMsg(String path)、sendMarKDownMsg(String msg)、sendFileMsg(String path)方法,即可发送请求:

robot.sendTextMsg(msg);
4. 返回参数

除了调用群机器人正常发送消息,还可能会有一些请求报错,比如图片大小无效、md5值不匹配等等,具体原因可以查看 企业微信全局错误码

5. 代码

0积分下载资源:Java企业微信群机器人发送消息,可以直接放到项目里使用。

以下是代码:

package com.ruoyi.project.tool.robot;

import com.alibaba.fastjson.JSONObject;
import okhttp3.*;
import org.apache.commons.codec.digest.DigestUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.util.Base64;
import java
<think>嗯,用户想知道如何通过企业微信机器人实现定时发送消息的功能。首先,我需要回忆一下相关的步骤。根据之前看到的引用,创建机器人需要先在企业微信聊里添加,然后获取webhook地址。这部分用户可能已经知道,但还是要详细说明一下。 接下来,用户需要编写脚本来发送消息。引用里提到有shell脚本和Java的例子,可能需要分别说明不同语言的方法。比如,shell脚本用curl发送POST请求,而Java可能需要用HttpClient或者其他库来处理。不过用户问的是教程,可能需要分步骤讲解,比如创建机器人、获取API地址、编写脚本、设置定时任务。 然后定时任务部分,在Linux下可以用crontab,在Windows下可能用计划任务。但用户可能用的是Linux,所以重点讲crontab的设置。需要给出具体的crontab示例,比如每天的9点发送。 另外,还要考虑消息内容的获取,比如天气API,但用户可能只需要发送固定消息,或者动态内容。引用1里提到获取天气,但用户的问题更关注定时发送消息本身,所以可能需要分开说明。比如,发送固定文本或者更复杂的内容,比如markdown或者文件上传。 还要注意API的限制,比如频率限制,避免被企业微信拦截。需要提醒用户注意发送频率,不要过于频繁。 可能用户还想知道如何测试脚本是否正常工作,可以用curl命令先手动测试,再加入定时任务。此外,错误处理也需要考虑,比如网络问题或者API返回错误时的日志记录。 总结一下,步骤应该是:1. 创建机器人获取webhook;2. 编写发送消息的脚本(shell或Java等);3. 设置定时任务;4. 测试和调试。同时,提供不同语言的示例代码,并解释每个部分的作用,确保用户能理解并修改为自己的配置。</think>### 企业微信机器人定时消息发送教程 #### 一、创建机器人并获取Webhook地址 1. 打开企业微信客户端,进入目标聊 2. 点击右上角设置 > 添加机器人 > 新建自定义机器人 3. 设置机器人名称,获取包含`key`参数的Webhook地址(格式:`https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx`)[^2] #### 二、消息发送脚本编写(Shell示例) ```bash #!/bin/bash WEBHOOK="替换为你的webhook地址" MESSAGE='{ "msgtype": "text", "text": { "content": "今日待办事项:\n1. 项目周报提交\n2. 客户会议预约\n3. 系统安全检查" } }' curl "$WEBHOOK" \ -H "Content-Type: application/json" \ -d "$MESSAGE" ``` #### 三、添加定时任务(Linux系统) 1. 赋予脚本执行权限: ```bash chmod +x wechat_bot.sh ``` 2. 配置crontab每日9点执行: ```bash 0 9 * * * /path/to/wechat_bot.sh >> /var/log/wechat_bot.log 2>&1 ``` #### 四、高级消息格式(Markdown示例) ```json { "msgtype": "markdown", "markdown": { "content": "**今日天气提醒**\n> 温度:26℃\n> 湿度:65%\n> 建议携带雨伞☔" } } ``` #### 五、Java实现示例(需引入HttpClient库) ```java public class WeChatBot { private static final String WEBHOOK = "https://qyapi.weixin.qq.com/..."; public static void sendMessage(String message) throws IOException { HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(WEBHOOK)) .header("Content-Type", "application/json") .POST(HttpRequest.BodyPublishers.ofString( "{\"msgtype\":\"text\",\"text\":{\"content\":\""+message+"\"}}")) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } } ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值