企业微信 机器人消息开发

master
3y 3 years ago
parent 5517212ab7
commit eddf4cedae

@ -27,6 +27,16 @@ public class EnterpriseWeChatRobotContentModel extends ContentModel {
*/ */
private String content; private String content;
/**
* base64md5
*/
private String md5;
/**
* base64
*/
private String base64;
/** /**
* Id * Id
*/ */

@ -9,9 +9,8 @@ import lombok.NoArgsConstructor;
import java.util.List; import java.util.List;
/** /**
* *
* * https://developer.work.weixin.qq.com/document/path/91770#%E6%96%87%E6%9C%AC%E7%B1%BB%E5%9E%8B
* https://open.dingtalk.com/document/group/custom-robot-access
* *
* @author 3y * @author 3y
*/ */
@ -97,6 +96,7 @@ public class EnterpriseWeChatRobotParam {
@JSONField(name = "content") @JSONField(name = "content")
private String content; private String content;
} }
/** /**
* ImageDTO * ImageDTO
*/ */

@ -0,0 +1,33 @@
package com.java3y.austin.handler.domain.wechat.robot;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* https://developer.work.weixin.qq.com/document/path/91770#%E6%96%87%E6%9C%AC%E7%B1%BB%E5%9E%8B
*
* @author 3y
* @date 2022/12/26
*/
@NoArgsConstructor
@Data
@AllArgsConstructor
@Builder
public class EnterpriseWeChatRootResult {
@JSONField(name = "errcode")
private Integer errcode;
@JSONField(name = "errmsg")
private String errmsg;
@JSONField(name = "type")
private String type;
@JSONField(name = "media_id")
private String mediaId;
@JSONField(name = "created_at")
private String createdAt;
}

@ -1,35 +1,25 @@
package com.java3y.austin.handler.handler.impl; package com.java3y.austin.handler.handler.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.file.FileReader;
import cn.hutool.crypto.digest.DigestUtil;
import cn.hutool.crypto.digest.MD5;
import cn.hutool.http.ContentType; import cn.hutool.http.ContentType;
import cn.hutool.http.Header; import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import com.java3y.austin.common.constant.SendAccountConstant;
import com.java3y.austin.common.domain.TaskInfo; import com.java3y.austin.common.domain.TaskInfo;
import com.java3y.austin.common.dto.account.EnterpriseWeChatRobotAccount; import com.java3y.austin.common.dto.account.EnterpriseWeChatRobotAccount;
import com.java3y.austin.common.dto.model.EnterpriseWeChatRobotContentModel; import com.java3y.austin.common.dto.model.EnterpriseWeChatRobotContentModel;
import com.java3y.austin.common.enums.ChannelType; import com.java3y.austin.common.enums.ChannelType;
import com.java3y.austin.common.enums.SendMessageType; import com.java3y.austin.common.enums.SendMessageType;
import com.java3y.austin.handler.domain.wechat.robot.EnterpriseWeChatRobotParam; import com.java3y.austin.handler.domain.wechat.robot.EnterpriseWeChatRobotParam;
import com.java3y.austin.handler.domain.wechat.robot.EnterpriseWeChatRootResult;
import com.java3y.austin.handler.handler.BaseHandler; import com.java3y.austin.handler.handler.BaseHandler;
import com.java3y.austin.handler.handler.Handler; import com.java3y.austin.handler.handler.Handler;
import com.java3y.austin.support.domain.MessageTemplate; import com.java3y.austin.support.domain.MessageTemplate;
import com.java3y.austin.support.utils.AccountUtils; import com.java3y.austin.support.utils.AccountUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
@ -51,17 +41,17 @@ public class EnterpriseWeChatRobotHandler extends BaseHandler implements Handler
@Override @Override
public boolean handler(TaskInfo taskInfo) { public boolean handler(TaskInfo taskInfo) {
try { try {
EnterpriseWeChatRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), EnterpriseWeChatRobotAccount.class); EnterpriseWeChatRobotAccount account = accountUtils.getAccountById(taskInfo.getSendAccount(), EnterpriseWeChatRobotAccount.class);
EnterpriseWeChatRobotParam enterpriseWeChatRobotParam = assembleParam(taskInfo); EnterpriseWeChatRobotParam enterpriseWeChatRobotParam = assembleParam(taskInfo);
String result = HttpRequest.post(account.getWebhook()).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue()) String result = HttpRequest.post(account.getWebhook()).header(Header.CONTENT_TYPE.getValue(), ContentType.JSON.getValue())
.body(JSON.toJSONString(enterpriseWeChatRobotParam)) .body(JSON.toJSONString(enterpriseWeChatRobotParam))
.timeout(2000) .timeout(2000)
.execute().body(); .execute().body();
JSONObject jsonObject = JSON.parseObject(result); EnterpriseWeChatRootResult weChatRootResult = JSON.parseObject(result, EnterpriseWeChatRootResult.class);
if (jsonObject.getInteger("errcode") != 0) { if (weChatRootResult.getErrcode() == 0) {
return true; return true;
} }
log.error("EnterpriseWeChatRobotHandler#handler fail! result:{},params:{}", JSON.toJSONString(jsonObject), JSON.toJSONString(taskInfo)); log.error("EnterpriseWeChatRobotHandler#handler fail! result:{},params:{}", JSON.toJSONString(weChatRootResult), JSON.toJSONString(taskInfo));
} catch (Exception e) { } catch (Exception e) {
log.error("EnterpriseWeChatRobotHandler#handler fail!e:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(taskInfo)); log.error("EnterpriseWeChatRobotHandler#handler fail!e:{},params:{}", Throwables.getStackTraceAsString(e), JSON.toJSONString(taskInfo));
} }
@ -80,10 +70,7 @@ public class EnterpriseWeChatRobotHandler extends BaseHandler implements Handler
param.setMarkdown(EnterpriseWeChatRobotParam.MarkdownDTO.builder().content(contentModel.getContent()).build()); param.setMarkdown(EnterpriseWeChatRobotParam.MarkdownDTO.builder().content(contentModel.getContent()).build());
} }
if (SendMessageType.IMAGE.getCode().equals(contentModel.getSendType())) { if (SendMessageType.IMAGE.getCode().equals(contentModel.getSendType())) {
FileReader fileReader = new FileReader(contentModel.getImagePath()); param.setImage(EnterpriseWeChatRobotParam.ImageDTO.builder().base64(contentModel.getBase64()).md5(contentModel.getMd5()).build());
byte[] bytes = fileReader.readBytes();
param.setImage(EnterpriseWeChatRobotParam.ImageDTO.builder().base64(Base64.encode(bytes))
.md5(DigestUtil.md5Hex(bytes)).build());
} }
if (SendMessageType.FILE.getCode().equals(contentModel.getSendType())) { if (SendMessageType.FILE.getCode().equals(contentModel.getSendType())) {
param.setFile(EnterpriseWeChatRobotParam.FileDTO.builder().mediaId(contentModel.getMediaId()).build()); param.setFile(EnterpriseWeChatRobotParam.FileDTO.builder().mediaId(contentModel.getMediaId()).build());

@ -1,12 +0,0 @@
package com.java3y.austin.web.constants;
/**
* amis
* @author 3y
*/
public class AmisVoConstant {
public static final String LEGEND_TITLE = "人数";
public static final String TYPE = "bar";
}

@ -13,7 +13,6 @@ import com.java3y.austin.common.enums.SmsStatus;
import com.java3y.austin.support.domain.ChannelAccount; import com.java3y.austin.support.domain.ChannelAccount;
import com.java3y.austin.support.domain.SmsRecord; import com.java3y.austin.support.domain.SmsRecord;
import com.java3y.austin.support.utils.TaskInfoUtils; import com.java3y.austin.support.utils.TaskInfoUtils;
import com.java3y.austin.web.constants.AmisVoConstant;
import com.java3y.austin.web.vo.amis.CommonAmisVo; import com.java3y.austin.web.vo.amis.CommonAmisVo;
import com.java3y.austin.web.vo.amis.EchartsVo; import com.java3y.austin.web.vo.amis.EchartsVo;
import com.java3y.austin.web.vo.amis.SmsTimeLineVo; import com.java3y.austin.web.vo.amis.SmsTimeLineVo;
@ -37,6 +36,7 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class Convert4Amis { public class Convert4Amis {
/** /**
* *
*/ */
@ -60,7 +60,7 @@ public class Convert4Amis {
* jsonArray * jsonArray
* (JSONArray) * (JSONArray)
*/ */
private static final List<String> PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns"); private static final List<String> PARSE_JSON_ARRAY = Arrays.asList("feedCards", "btns","articles");
/** /**
* (JSONObjectJSONArray) * (JSONObjectJSONArray)
@ -393,9 +393,9 @@ public class Convert4Amis {
return EchartsVo.builder() return EchartsVo.builder()
.title(EchartsVo.TitleVO.builder().text(title).build()) .title(EchartsVo.TitleVO.builder().text(title).build())
.legend(EchartsVo.LegendVO.builder().data(Arrays.asList(AmisVoConstant.LEGEND_TITLE)).build()) .legend(EchartsVo.LegendVO.builder().data(Arrays.asList("人数")).build())
.xAxis(EchartsVo.XAxisVO.builder().data(xAxisList).build()) .xAxis(EchartsVo.XAxisVO.builder().data(xAxisList).build())
.series(Arrays.asList(EchartsVo.SeriesVO.builder().name(AmisVoConstant.LEGEND_TITLE).type(AmisVoConstant.TYPE).data(actualData).build())) .series(Arrays.asList(EchartsVo.SeriesVO.builder().name("人数").type("bar").data(actualData).build()))
.yAxis(EchartsVo.YAxisVO.builder().build()) .yAxis(EchartsVo.YAxisVO.builder().build())
.tooltip(EchartsVo.TooltipVO.builder().build()) .tooltip(EchartsVo.TooltipVO.builder().build())
.build(); .build();

Loading…
Cancel
Save