使用钉钉发送消息(可用于 服务异常通知、定时任务异常通知 等等...)

您所在的位置:网站首页 钉钉登录服务异常 使用钉钉发送消息(可用于 服务异常通知、定时任务异常通知 等等...)

使用钉钉发送消息(可用于 服务异常通知、定时任务异常通知 等等...)

2024-07-15 13:12| 来源: 网络整理| 查看: 265

一、前言

服务器上有时 定时任务、重要接口 等出现异常,导致数据不正常,不能及时通知到服务负责人,及时处理问题。所以引入“钉钉”作为通知工具,当服务出现异常便可立即收到通知,及时处理!

二、使用方式 1、客户端配置机器人

1、首先需要有阿里巴巴的“钉钉”客户端

2、建立群聊(如果只想通知给自己,不想通知其他人,也可以与他们创建群聊之后再将他们踢出)

3、点击“群设置”里面的“智能群助手”

 

 4、“添加机器人”

5、“添加机器人”

6、选择“自定义”

7、给机器人取个名字,注意:后续的消息体中必须要包含设置的“自定义关键词”,消息才能发送成功。

8、点击“完成”后会得到一个webhook,把这个webhook复制出来,一会儿代码中要用,

类似这样的:https://oapi.dingtalk.com/robot/send?access_token=880e6b7********************************************97d5e

9、点击“完成”之后会收到这样一条消息,说明机器人配置完成了,接下来就是代码了

2、通过代码使用机器人发送钉钉消息

代码如下:

package com.common.util; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 钉钉-工具类 */ @Slf4j public class DingTalkUtil { /** * 钉钉机器人发消息地址(配置机器人的webhook) * 此处大家可以配置到配置文件等等方式 */ private static final String MSG_URL = "https://oapi.dingtalk.com/robot/send?access_token=880e6b7********************************************97d5e"; /** * 通知具体人 * * @param content 通知内容 * @param mobileList 通知具体人的手机号码列表 */ public static void sendDingTalkMsg(List mobileList, String content) { sendDingTalkMsg(false, mobileList, content); } /** * 通知所有人 * * @param content 通知内容 */ public static void sendDingTalkMsg(String content) { sendDingTalkMsg(true, null, content); } /** * 发送消息 * * @param content 通知内容 * @param isAtAll 是否@所有人 * @param mobileList 通知具体人的手机号码列表 */ private static void sendDingTalkMsg(boolean isAtAll, List mobileList, String content) { try { if (!CollectionUtils.isEmpty(mobileList)) { isAtAll = false; } //消息内容 Map contentMap = new HashMap(); contentMap.put("content", content); //通知人 Map atMap = new HashMap(); //1.是否通知所有人 atMap.put("isAtAll", isAtAll); //2.通知具体人的手机号码列表 atMap.put("atMobiles", mobileList); Map parameter = new HashMap(); parameter.put("msgtype", "text"); parameter.put("at", atMap); parameter.put("text", contentMap); //推送消息(http请求) String result = HttpUtils.post(MSG_URL, JSON.toJSONString(parameter)); log.info("发送钉钉消息-result:{}", result); } catch (Exception e) { log.error("发送钉钉消息异常", e); } } public static void main(String[] args) { // sendDingTalkMsg("服务通知:测试消息"); sendDingTalkMsg(Collections.singletonList("189********"), "服务通知:测试消息"); } }

 另附代码中使用到的HttpUtils

package com.common.util; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.http.HttpStatus; import org.apache.http.client.config.RequestConfig; import org.apache.http.clienthods.CloseableHttpResponse; import org.apache.http.clienthods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicHeader; import org.apache.http.util.EntityUtils; import java.io.Closeable; import java.nio.charset.Charset; import java.util.Map; /** * http请求-工具类 * * @author xiehongwei * @date 2020/11/03 */ @Slf4j public class HttpUtils { private static final String UTF_8 = "utf-8"; private static RequestConfig requestConfig; static { requestConfig = RequestConfig.custom() .setConnectTimeout(1000)//连接超时时间 .setSocketTimeout(3000)//读超时时间 .build(); } /** * post请求(无参/参数在url上) */ public static String post(String url) throws Exception { return post(url, ""); } /** * post请求 */ public static String post(String url, String body) throws Exception { CloseableHttpClient httpClient = null; CloseableHttpResponse httpResponse = null; try { httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(url); if (StringUtils.isNotBlank(body)) { StringEntity se = new StringEntity(body, Charset.forName(UTF_8)); se.setContentType("text/json"); se.setContentEncoding(new BasicHeader("Content-Type", "application/json")); httpPost.setEntity(se); } httpPost.setConfig(requestConfig); httpPost.setHeader("Content-Type", "application/json;charset=utf-8"); httpResponse = httpClient.execute(httpPost); if (httpResponse.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { return EntityUtils.toString(httpResponse.getEntity(), UTF_8); } else { log.error("post请求其它服务失败,statusCode:{}", httpResponse.getStatusLine().getStatusCode()); } } catch (Exception e) { log.error("post请求其它服务异常", e); throw e; } finally { close(httpClient); close(httpResponse); } return null; } /** * post请求 */ public static String post(String url, Map parameter) throws Exception { return post(url, JSON.toJSONString(parameter)); } /** * 关闭流 */ private static void close(T io) { if (io == null) { return; } try { io.close(); } catch (Exception e) { log.error(e.getMessage(), e); } } } 3、测试

使用main方法发送消息测试

如果对你有帮助,请为我点个赞,如果有需要纠正或者疑问,欢迎留言



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3