1.新建一个群。添加自定义机器人。获取自定义机器人webhook。
2.封装消息实体类。
public class TextMessage {
private String text;
private List atMobiles;
private boolean isAtAll;
public TextMessage(String text) {
this.text = text;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public List getAtMobiles() {
return atMobiles;
}
public void setAtMobiles(List atMobiles) {
this.atMobiles = atMobiles;
}
public boolean isAtAll() {
return isAtAll;
}
public void setIsAtAll(boolean isAtAll) {
this.isAtAll = isAtAll;
}
public String toJsonString() {
Map items = new HashMap<>();
items.put("msgtype", "text");
Map textContent = new HashMap<>();
if (StringUtils.isBlank(text)) {
throw new IllegalArgumentException("text should not be blank");
}
textContent.put("content", text);
items.put("text", textContent);
Map atItems = new HashMap<>();
if (atMobiles != null && !atMobiles.isEmpty()) {
atItems.put("atMobiles", atMobiles);
}
if (isAtAll) {
atItems.put("isAtAll", isAtAll);
}
items.put("at", atItems);
return JSON.toJSONString(items);
}
}
3.封装发送消息结果实体类
public class SendResult {
private boolean isSuccess;
private Integer errorCode;
private String errorMsg;
public boolean isSuccess() {
return isSuccess;
}
public void setIsSuccess(boolean isSuccess) {
this.isSuccess = isSuccess;
}
public Integer getErrorCode() {
return errorCode;
}
public void setErrorCode(Integer errorCode) {
this.errorCode = errorCode;
}
public String getErrorMsg() {
return errorMsg;
}
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
@Override
public String toString() {
Map items = new HashMap();
items.put("errorCode", errorCode);
items.put("errorMsg", errorMsg);
items.put("isSuccess", isSuccess);
return JSON.toJSONString(items);
}
}
4.发送消息通用类
public class RobotClient {
HttpClient httpclient = HttpClients.createDefault();
public SendResult send(String webhook, TextMessage message) throws IOException {
HttpPost httppost = new HttpPost(webhook);
httppost.addHeader("Content-Type", "application/json; charset=utf-8");
StringEntity se = new StringEntity(message.toJsonString(), "utf-8");
httppost.setEntity(se);
SendResult sendResult = new SendResult();
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity());
JSONObject obj = JSONObject.parseObject(result);
Integer errcode = obj.getInteger("errcode");
sendResult.setErrorCode(errcode);
sendResult.setErrorMsg(obj.getString("errmsg"));
sendResult.setIsSuccess(errcode.equals(0));
}
return sendResult;
}
}
5.发送文本消息类
@Slf4j
public class SendTextMessage {
//机器人消息token
public static String WEBHOOK_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=xxx";
private static RobotClient robot = new RobotClient();
/**
* 发送普通文本消息
*
* @param message
* @return
*/
public static SendResult send(String message) {
TextMessage textMessage = new TextMessage(message);
SendResult sendResult = null;
try {
sendResult = robot.send(WEBHOOK_TOKEN, textMessage);
} catch (Exception e) {
log.error("===> send robot message error:", sendResult);
}
return sendResult;
}
/**
* 发送文本消息 可以@部分人
*
* @param message
* @param atMobiles 要@人的电话号码 ArrayList
* @return
*/
public static SendResult sendWithAt(String message, ArrayList atMobiles) {
TextMessage textMessage = new TextMessage(message);
SendResult sendResult = null;
textMessage.setAtMobiles(atMobiles);
try {
sendResult = robot.send(WEBHOOK_TOKEN, textMessage);
} catch (Exception e) {
log.error("===> send robot message atPeople error:", sendResult);
}
return sendResult;
}
/**
* 发送文本消息 并@所有人
*
* @param message
* @return
*/
public static SendResult sendWithAtAll(String message) {
TextMessage textMessage = new TextMessage(message);
SendResult sendResult = null;
textMessage.setIsAtAll(true);
try {
sendResult = robot.send(WEBHOOK_TOKEN, textMessage);
} catch (Exception e) {
log.error("===> send robot message atAll error:", sendResult);
}
return sendResult;
}
}