当前位置: 首页 > news >正文

[仅需1步]企业微信群机器人[0基础接入][java]

[仅需1步]企业微信群机器人[0基础接入][java]

背景

公司需要把日常的服务器错误抛到企业微信群中,我正好记录下使用企业微信群机器人…
在这里插入图片描述

介绍

企业微信群机器人
应用介绍

企业微信是腾讯微信团队打造的企业通讯与办公工具,具有与微信一致的沟通体验,丰富的OA应用,和连接微信生态的能力,可帮助企业连接内部、连接生态伙伴、连接消费者。

企业微信群机器人是企业微信的内置功能,可在企微群内推送消息、提醒群成员等。企业微信机器人支持webhook协议的自定义接入,来实现信息的自动同步。

企业微信官网:https://work.weixin.qq.com/

(opens new window)

应用场景介绍

通过腾讯云HiFlow场景连接器,可以零代码的设置企业微信机器人自动/定时发消息的规则,比如:每周五下午6点定时发送周报;收到新的销售线索/报表自动发送消息通知管理群等。

应用支持的触发条件和执行操作

企业微信群机器人支持的执行操作如下:

发送群图文消息:发送图片+文本标题的消息样式到企业微信群,支持给图片设置跳转链接
发送富文本消息:发送富文本消息到企业微信群,可以给文本添加样式,比如加粗、更改颜色、加超链接等
发送文本消息:发送纯文本消息到企业微信群,并且可以@提醒指定用户

应用账号和参数配置(或其他相关)

(一)使用企业微信群机器人应用的前置条件

需要有企业微信并已加入企业
需要有企业微信群管理员权限

(二)如何在企业微信中添加群机器人

如果没有可用的企业微信群机器人,请先在企业微信中添加新的群机器人。

在目标群聊右上角点击“..."后选择【添加群机器人】

img

选择【新创建一个机器人】,输入群机器人名称后点击【添加机器人】

img

添加成功后即可获得webhook地址,点击【复制地址】后粘贴至相应位置

img

(三)添加新的机器人账户

添加新的机器人账户需要:

企业微信群机器人名称:可自定义填写,建议与对应的企微群机器人同名
企业微信群机器人webhook地址:需要把获取到的webhook地址添加到HiFlow企业微信群机器人账户设置中

    如果目标群里您已添加群机器人,您可以右键单击群机器人【查看详情】后获取群机器人webhook地址
    如果目标群里您没有添加群机器人,请按照教程第二步在目标群中添加群机器人,然后获取到此机器人的webhook地址

img

使用

WxProducerController.java

package com.dongtech.mywxwork_bot.wx;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Date;

@Controller
public class WxProducerController {
    private static final Logger logger = LoggerFactory.getLogger(WxProducerController.class);
    final String APIWXBOT = "/WXBOT";
    final String LOGTITLE = "[dongtech-server] ["+APIWXBOT+"]";

    @Autowired
    private WxProducerService wxProducerService;

    @Autowired
    private WxPushService wxPushService;

    /**
     * 发送企业微信机器人消息
     * @param request
     * @throws IOException
     */
    @RequestMapping(value=APIWXBOT)
    @ResponseBody
    public void sendWXBOT(HttpServletRequest request) throws IOException {
        String message = request.getParameter("message");
        if (message == null || message == "") {
            return;
        }

        String msg = GetCurrentTime()+message;
        String logMsg = LOGTITLE+" WXBOT Receive Message: "+msg;
        logger.info(logMsg);

        WxRequest wxRequest = new WxRequest();
        wxRequest.message = msg;
        wxPushService.publishEvent(wxRequest);
    }

    private String GetCurrentTime(){
        LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println(localDateTime);
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss||");
        return format.format(new Date());
    }
}

WxProducerService.java

package com.dongtech.mywxwork_bot.wx;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.LinkedList;
import java.util.Queue;

@Service
public class WxProducerService {
    private static final Logger logger = LoggerFactory.getLogger(WxProducerService.class);
    final String APIWXBOT = "/WXBOT";
    final String LOGTITLE = "[dongtech-server] ["+APIWXBOT+"]";

    @Autowired
    private WxPushService wxPushService;

    @Value("${wx.wxbot.token}")
    public String WXBOTTOKEN;

    private Queue<WxRequest> wxRequestQueue = new LinkedList<WxRequest>();

    public void sendMessage(WxRequest wxRequest) throws IOException {
        if (wxRequest.message == null || wxRequest.message == "") {
            return;
        }

        HttpClient httpclient = HttpClients.createDefault();
        HttpPost httppost = new HttpPost(WXBOTTOKEN);
        httppost.addHeader("Content-Type", "application/json; charset=utf-8");
        //构建一个json格式字符串textMsg,其内容是接收方需要的参数和消息内容
        String textMsg = "{\"msgtype\":\"text\",\"text\":{\"content\":\"SERVER:"+ wxRequest.message+"\"},\"isAtAll\":false}}";
        StringEntity se = new StringEntity(textMsg, "utf-8");
        httppost.setEntity(se);
        HttpResponse response = httpclient.execute(httppost);
        if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
            String msg = LOGTITLE+" WXBOT Send Success : "+wxRequest.message;
            logger.info(msg);
        }else{
            wxPushService.publishEvent(wxRequest);
        }
    }

    public void Receive(WxRequest wxRequest){
        wxRequestQueue.offer(wxRequest);
    }

    public void DoSend() throws IOException {
       WxRequest req = wxRequestQueue.poll();
       if (req == null){
           return;
       }

       send(req);
    }

    /**
     * 发送
     * @param wxRequest
     */
    public void send(WxRequest wxRequest) throws IOException {
        sendMessage(wxRequest);
    }
}

测试

在这里插入图片描述

http://localhost:10010/WXBOT?message=我是一个机器人

在这里插入图片描述

项目

github

相关文章:

  • 关于 vue keep-live 缓存时候,缓存页面高度不生效问题 :
  • 对比勒索病毒和熊猫烧香,谈如何保证服务器端数据安全?
  • 【网络】HTTP协议详解
  • vue3.0 如何自定义指令
  • 浅析RocketMQ-消息重建
  • Kickstarter众筹需要准备哪些资料?
  • 数据分享|函数型数据分析部分省市新冠疫情数据
  • 莱佛士学生服装设计作品登知名时尚杂志NÜYOU
  • 【微搭低代码】小程序中利用弹窗组件实现城市切换选择
  • 【数据挖掘】XGBoost面试题:与GBDT的区别?为什么使用泰勒二阶展开?为什么可以并行训练?为什么快?防止过拟合的方法?如何处理缺失值?
  • 【物理应用】基于相场法模拟金属镍的晶粒的长大过程附matlab完整代码
  • 这三个步骤让你知道WPS如何转换成WORD文档
  • sql优化最新干货---mysql存储过程、索引和锁
  • 摄像头测试软件汇总
  • 葡聚糖-NHS/N3/Alkyne/SH/Biotin/CHO/OPSS/OH/NH2/COOH/MAL各种活性基团
  • [iOS]Core Data浅析一 -- 启用Core Data
  • [译]如何构建服务器端web组件,为何要构建?
  • 【EOS】Cleos基础
  • httpie使用详解
  • JAVA SE 6 GC调优笔记
  • javascript 哈希表
  • javascript 总结(常用工具类的封装)
  • js对象的深浅拷贝
  • log4j2输出到kafka
  • npx命令介绍
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • vagrant 添加本地 box 安装 laravel homestead
  • 工程优化暨babel升级小记
  • 盘点那些不知名却常用的 Git 操作
  • 前端工程化(Gulp、Webpack)-webpack
  • 使用SAX解析XML
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 用Visual Studio开发以太坊智能合约
  • Mac 上flink的安装与启动
  • ​2021半年盘点,不想你错过的重磅新书
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​Python 3 新特性:类型注解
  • ###STL(标准模板库)
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (2)(2.10) LTM telemetry
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)php投票系统 毕业设计 121500
  • (实战)静默dbca安装创建数据库 --参数说明+举例
  • (数据结构)顺序表的定义
  • (一)Java算法:二分查找
  • (转)项目管理杂谈-我所期望的新人
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .jks文件(JAVA KeyStore)
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 读取 JSON格式的数据
  • /etc/motd and /etc/issue
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录