钉钉机器人接入定时器(钉钉API+XXL-JOB)
首先需要创建钉钉内部群
在群设置中找到机器人选项
选择“自定义”机器人
通过Webhook接入自定义服务
创建完成后会生成一个send URL和一个加签码
下面就是干货 代码部分了
DingDingUtil.sendMessageByText(webhook, sign, text, mobileList, isAtAll);
// 其中webhook为机器人生成的 sendUrl
// sign为加签码
// text为机器人播报文本
// mobileList为List<String>格式的手机号
// isAtAll 为是否@全体人员 boolean值
Util如下
/*** 钉钉机器人工具类* @author zhangjiaxuan*/
@Slf4j
public class DingDingUtil {/**** 发送普通文本消息** @param content 文本消息* @param mobileList 指定@ 联系人* @param isAtAll 是否@ 全部联系人* @return OapiRobotSendResponse*/public static OapiRobotSendResponse sendMessageByText(String ACCESS_TOKEN, String SECRET, String content, List<String> mobileList, boolean isAtAll) {String sign = null;try {Long timestamp = System.currentTimeMillis();String stringToSign = timestamp + "\n" + SECRET;Mac mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(SECRET.getBytes("UTF-8"), "HmacSHA256"));byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));sign = "×tamp=" + timestamp + "&sign=" + URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);} catch (InvalidKeyException e) {throw new RuntimeException(e);} catch (UnsupportedEncodingException e) {throw new RuntimeException(e);}DingTalkClient client = null;client = new DefaultDingTalkClient(ACCESS_TOKEN + sign);if (StringUtils.isEmpty(content)) {return null;}//参数 参数类型 必须 说明//msgtype String 是 消息类型,此时固定为:text//content String 是 消息内容//atMobiles Array 否 被@人的手机号(在content里添加@人的手机号)//isAtAll bool 否 @所有人时:true,否则为:falseOapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent(content);OapiRobotSendRequest request = new OapiRobotSendRequest();if (!CollectionUtils.isEmpty(mobileList)) {// 发送消息并@ 以下手机号联系人OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setAtMobiles(mobileList);at.setIsAtAll(isAtAll);request.setAt(at);}request.setMsgtype("text");request.setText(text);OapiRobotSendResponse response = new OapiRobotSendResponse();try {response = client.execute(request);System.out.println("【DingTalkUtils】发送普通文本消息 响应参数:" + JSON.toJSONString(response));} catch (ApiException e) {log.error("[发送普通文本消息]: 发送消息失败, 异常捕获{}", e.getMessage());}return response;}
}
简单说一下XXL-JOB
java中的引入方式为
XXL面板上
先创建执行器
需要和yml文件中的job地址/token/app-name 全部对应
然后打开 - 任务管理 - 后选择对应的执行器创建任务
创建完成后可以选择执行一次 或者配置好Corn或者秒数后点击开启