大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。
先看这里
前言
最近改造了下机器人,接口改的更加灵活,可以通过自定义接口给自己的社群或者好友中。废弃掉之前的发送接口,简直为开发者的福音;不仅支持java
,其他类型的编程语言均可。
机器人目前功能列表
- 好友关键词自动通过
- 进群欢迎词
- 群聊列表查询
- 好友列表查询
- 接入百度文心大模型
- 自定义接口发送文本消息(群/好友/公众号)
- 自定义接口发送图片消息(群/好友/公众号)
- 自定义接口发送xml消息(群/好友/公众号)
- 自定义接口发送h5小卡片消息(群/好友/公众号)
- 自定义接口发送小程序卡片(群/好友/公众号)
- 自定义接口发送本地文件(群/好友/公众号)
- 每日诗词问答
- 签到获取星光币
- 答题奖励/扣除星光币
- 文本消息防撤回功能
- 我想买功能(对接拼多多、淘宝客返佣平台,根据关键词搜索商品,可直接下单购买)
- 同步给多个群/好友发送消息(应用场景:只需要给机器人发送一条消息,机器人会自动给已经配置了的多个群或好友随机在1-10分钟内将消息转发出去)
- 可视化机器人管理平台(群/好友/公众号)
- 每日新闻简报推送(群/好友/公众号)
- 每日天气信息推送(数据来源:中国中央气象台)(群/好友/公众号)
- 每日生活小技巧推送(群/好友/公众号)
- 天行数据api接口对接(头条热点、早安心语、彩虹屁、 朋友圈文案)
- 指定关键词回答配置(eg:给机器人发:穆雄雄,机器人回复:#小程序:雄雄的工具箱)
接口说明
接口地址(详细接口地址请咨询博主):
/system/object/customApiSendMsg
java中的调用示例:
/**
* 给微信机器人中发送信息的公共方法
*/
public String sendMsgToWechat(String wxid,Integer tag,String appkey,String message){
String url = WECHAT_SERVE_API + "/system/object/customApiSendMsg";
String path = url + "?tag=" + tag + "&wxid=" + wxid + "&appkey=" + appkey + "&message=" + message;
String body = HttpUtil.createGet(path)
.execute()
.body();
log.info("给微信群中发送的结果:" + body);
return body;
}
备注:
wxid
:为接收消息的群或者好友的唯一id,可以从管理平台中看到tag
:为消息类型,0表示发送文字,1表示发送图片 2发送本地文件 3发送H5小卡片 4发送小程序 5发送音乐卡片 6发送xml文件 7发送聊天记录 -1设置百度的appkey和秘钥appkey
:为开发者的appkey
,可以在管理平台中查看message
:需要发送的消息,消息格式与发送消息类型tag
有关,具体格式分别查看下面的示例
发送文本消息
效果
- 文本消息中的#符号,在代码中用
/cjj
代替 - 文本消息中的换行,在代码中
/cbr
代替
示例代码:
/**
* (微信机器人)每天早上6点将国内新闻发送至群中
*/
@GetMapping("/sendAlapiNewsV1")
// @Scheduled(cron = " 0 0 6 * * ?")
public void sendAlapiNewsV1() throws UnsupportedEncodingException {
//请求接口中的数据
String url = ALAPI_API+"/zaobao?token="+ALAPI_KEY+"&format=json";
String body = HttpUtil.createGet(url)
.execute()
.body();
JSONObject objectResult = JSON.parseObject(body);
Integer code = objectResult.getInteger("code");
JSONObject object = new JSONObject();
StringBuilder sb = new StringBuilder();
if (code != 200) {
log.info("获取新闻失败");
return;
}
SimpleDateFormat formatChina = new SimpleDateFormat("yyyy年MM月dd日");
// 将今天日期转换为 SimpleDateFormat 格式,并将明天的日期转换为 SimpleDateFormat 格式
String todayDate = formatChina.format(new Date());
//根据阳历计算农历
Calendar today = Calendar.getInstance();
today.setTime(new Date());
Date tomorrowDate = today.getTime();
String dateTomorrow = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(tomorrowDate);
sb.append("早上好[太阳],今天是:" + todayDate);
String week = "";
try {
week = DateUtils.getDaysByWeekChina(dateTomorrow);
DateUtils lunar = new DateUtils(today);
String nongli = lunar.toString();
nongli = nongli.substring(nongli.indexOf("年") + 1);
sb.append(",星期")
.append(week)
.append(",农历")
.append(nongli);
} catch (ParseException e) {
e.printStackTrace();
}
sb.append("。每天三分钟,读懂全世界!祝:工作愉快,生活喜乐!");
sb.append("/cbr");
sb.append("/cbr");
JSONObject dataObject = objectResult.getJSONObject("data");
//获取微语
String weiyu = dataObject.getString("weiyu");
//获取新闻列表
JSONArray arrayNews = dataObject.getJSONArray("news");
int index = 1;
for (Object o : arrayNews) {
sb.append(o);
if (index == 7) {
sb.append("/cjj公众号:雄雄的小课堂");
}
sb.append("/cbr");
index++;
}
sb.append("/cbr");
sb.append(weiyu);
sb.append("/cbr");
sb.append("/cbr");
sb.append("/cjj公众号:雄雄的小课堂,点击关注,可获得最新消息~");
sb.append("/cbr");
sb.append("/cjj小程序:小鱼早晚安打卡,养成良好的早睡早起习惯,坚持打卡可兑换现金。");
sb.append("/cbr");
sb.append("/cjj小程序:雄雄的工具箱,全站免广告去水印、图像处理、文字处理等");
//处理url中的特殊字符
String encodedUrl = URLEncoder.encode(sb.toString(), StandardCharsets.UTF_8.name());
log.info("发送的新闻信息:" + encodedUrl);
//调用发送的接口
String result = sendMsgToWechat(xunXiWxid,XIAOTANGYUAN_REBOT_TEXT,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送新闻信息结果:" + result);
}
发送图片消息
效果
注意,message的值为图片的地址,或者本地图片路径或者网络直链。
代码示例:
/**
* (微信机器人)定时发送每日天气图片到微信群中
*/
@GetMapping("/sendWetherInfoByDaysImg")
@Scheduled(cron = " 0 1 9 * * ?")
public void sendWetherInfoByDaysImg() {
//获取中央气象台每日天气信息
JSONObject objectZhongYang = collectWebDataUtils.getZYWetherDay();
//图片信息
JSONArray imgList = objectZhongYang.getJSONArray("imgArray");
for (int i = 0; i < imgList.size() - 1; i++) {
// 生成一个 1-5 秒之间的随机延迟
Random random = new Random();
int delay = random.nextInt(5) + 1; // 生成一个 1-10 的随机整数
try {
// 等待随机延迟时间,如果需要换成分钟,则乘以60
Thread.sleep(delay * 1000);
String imgPath = imgList.get(i).toString();
//处理url中的特殊字符
String encodedUrl = URLEncoder.encode(imgPath, StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(xunXiWxid, XIAOTANGYUAN_REBOT_IMG, XIAOTANGYUAN_REBOT_APPKEY, encodedUrl);
log.info("发送天气图片信息结果:" + result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
发送本地文件
效果
代码示例
/**
* (微信机器人)定时发送每日天气图片到微信群中
*/
@GetMapping("/sendWetherInfoByDaysImg")
@Scheduled(cron = " 0 1 9 * * ?")
public void sendWetherInfoByDaysImg() {
sendMsgToWechat(xunXiWxid, XIAOTANGYUAN_REBOT_IMG, XIAOTANGYUAN_REBOT_APPKEY, "D://muxiongxiong.txt");
}
对,就这么简单。message
为本地文件的路径。
发送xml消息
效果
代码示例:
@GetMapping("/sendH5")
public void sendH5(){
JSONObject object = new JSONObject();
//标题
object.put("title","雄雄的小课堂");
//描述
object.put("content","这是内容描述");
//跳转连接
object.put("jumpUrl","https://www.88688.team");
//预览图,需要小于200k
object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
String result = sendMsgToWechat(testWxid,3,XIAOTANGYUAN_REBOT_APPKEY,object.toString());
System.out.println("发送情况:"+result);
}
其中,message
的格式为如下json
:
{
"title":"标题",
"content":"这是内容描述",
"jumpUrl":"https://www.88688.team",
"path":"https://blogobs.88688.team/blog/zaobao_logo.png"
}
设置百度的appkey
主要用于百度文心大模型,在群内可以直接使用;
效果
代码
/**
* 设置百度的key之类的
*/
@GetMapping("/sendSetBaiDuKey")
public void sendSetBaiDuKey(){
JSONObject object = new JSONObject();
//标题
object.put("baiduApiKey","你的");
//描述
object.put("baiduSecretKey","你的");
//处理url中的特殊字符
try{
String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(testWxid,-1,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送信息结果:" + result);
}catch (Exception e){
e.printStackTrace();
}
}
发送小程序卡片
效果
代码示例
自己根据我的代码,看下封装的json哈,我都有注释,困了,写完赶紧睡觉,我就不写那么详细了。
/**
* 发送小程序卡片
*/
@GetMapping("/sendApplet")
public void sendApplet(){
JSONObject object = new JSONObject();
//标题
object.put("title","雄雄的工具箱");
//描述
object.put("content","一款万能免费的工具箱");
//点击跳转地址:pages/index/index
object.put("jumpUrl","pages/index/index");
//预览图,需要小于200k
object.put("path","https://blogobs.88688.team/blog/zaobao_logo.png");
//原始id gh_4a2xxxxx
object.put("gh","gh_4axxxxxxx");
//处理url中的特殊字符
try{
String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(testWxid,4,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送信息结果:" + result);
}catch (Exception e){
e.printStackTrace();
}
}
发送音乐卡片
效果
代码
/**
* 发送音乐卡片
*/
@GetMapping("/sendMusic")
public void sendMusic(){
JSONObject object = new JSONObject();
//歌曲名称
object.put("name","好汉歌");
//作者
object.put("author","刘欢");
//appid 例如:酷狗/wx79f2c4418704b4f8,网易云/wx8dd6ecd81906fd84,QQ音乐/wx5aa333606550dfd5
object.put("app","wx5aa333606550dfd5");
//点击跳转地址
object.put("jumpUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
//音乐地址
object.put("musicUrl","http://y.qq.com/n/yqq/song/003flDfR0oxrPX.html");
//图片地址,图片必须小于200k
object.put("imageUrl","https://y.qq.com/music/photo_new/T002R300x300M000001nYpd82yFZOK_1.jpg");
//处理url中的特殊字符
try{
String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(testWxid,5,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送信息结果:" + result);
}catch (Exception e){
e.printStackTrace();
}
}
发送xml文件
效果
代码
/**
* 发送xml文件
*/
@GetMapping("/sendXml")
public void sendXml(){
JSONObject object = new JSONObject();
//歌曲名称
object.put("title","穆雄雄的博客");
//描述
object.put("des","公众号:雄雄的小课堂");
//链接
object.put("url","https://www.88688.team");
//封面
object.put("thumburl","https://blogobs.88688.team/blog/zaobao_logo.png");
//来源id,如果是公众号,则是gh_eexxxxxx
object.put("sourceusername","gh_ee62xxxxc6");
//来源名字
object.put("sourcedisplayname","雄雄的小课堂");
//处理url中的特殊字符
try{
String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(testWxid,6,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送信息结果:" + result);
}catch (Exception e){
e.printStackTrace();
}
}
发送聊天记录
效果图
代码示例
/**
* 发送聊天记录
*/
@GetMapping("/sendRecord")
public void sendRecord(){
JSONObject object = new JSONObject();
//歌曲名称
object.put("title","公众号:雄雄的小课堂");
JSONArray array = new JSONArray();
JSONObject arrayObject = new JSONObject();
arrayObject.put("wxid","wxid_ehfdzccct22");
arrayObject.put("nickName","雄雄");
arrayObject.put("timestamp",System.currentTimeMillis());
arrayObject.put("msg","你说的是啥小程序来着?雄雄的工具箱");
array.add(arrayObject);
object.put("data",array);
//处理url中的特殊字符
try{
String encodedUrl = URLEncoder.encode(object.toString(), StandardCharsets.UTF_8.name());
String result = sendMsgToWechat(testWxid,7,XIAOTANGYUAN_REBOT_APPKEY,encodedUrl);
log.info("发送信息结果:" + result);
}catch (Exception e){
e.printStackTrace();
}
}