应用系统在碰到运行异常等情况时,发送预警消息@群内相关人员,可以及时发出问题,观察对问题的响应情况

1. 创建一个群(可以是公司内部群)

2. 添加机器人

自定义机器人安全设置: https://open.dingtalk.com/document/robots/customize-robot-security-settings

设置说明:https://open.dingtalk.com/document/org/application-types

{
"at": {
"atMobiles":[
"手机号"
],
"atUserIds":[
""
],
"isAtAll": false
},
"text": {
"content":"【业务报警】接口发生异常,请及时处理,如果加了自定义关键词,内容必须包括关键词,消息才能发出"
},
"msgtype":"text"
}

https://open.dingtalk.com/document/robots/push-message

https://open.dingtalk.com/document/group/custom-robot-access

https://open.dingtalk.com/document/resourcedownload/download-server-sdk

DT研究院 https://gitee.com/dt_research_institute

代码实现:

package com.vipsoft.dingtalk.rpc;

import com.vipsoft.dingtalk.entity.dingtalk.request.RobotMessage;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*; import java.util.Map; /**
* 需要在启动项中添加 @EnableFeignClients(basePackages = {"com.vipsoft"})
*/
@FeignClient(name = "vipsoft-dingtalk", url = "${dingtalk.rebot-url}")
public interface IDingtalkService { /**
* 发送预警信息
* SendSmsInfo.TemplateParam = 文本
* @return
*/
@PostMapping(value = "/robot/send")
String sendMessage(@RequestParam Map<String, Object> headerParam, @RequestBody RobotMessage param);
}

RobotMessage

package com.vipsoft.dingtalk.entity.dingtalk.request;

import java.io.Serializable;

public class RobotMessage implements Serializable {
private String msgtype; private RobotAtInfo at; private RobotContentInfo text; public String getMsgtype() {
return msgtype;
} public void setMsgtype(String msgtype) {
this.msgtype = msgtype;
} public RobotAtInfo getAt() {
return at;
} public void setAt(RobotAtInfo at) {
this.at = at;
} public RobotContentInfo getText() {
return text;
} public void setText(RobotContentInfo text) {
this.text = text;
}
}

RobotAtInfo

package com.vipsoft.dingtalk.entity.dingtalk.request;

import java.io.Serializable;
import java.util.List; public class RobotAtInfo implements Serializable { private List<String> atMobiles; public List<String> getAtMobiles() {
return atMobiles;
} public void setAtMobiles(List<String> atMobiles) {
this.atMobiles = atMobiles;
}
}

RobotContentInfo

package com.vipsoft.dingtalk.entity.dingtalk.request;

import java.io.Serializable; 

public class RobotContentInfo implements Serializable {

    private String content;

    public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
}
}

Test

@SpringBootTest
class VipsoftDingTalkTests {
Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired
IDingtalkService dingtalkService; @Test
void sendMessage() {
String result = "";
Long timestamp = System.currentTimeMillis();
List<String> phoneNoList = new ArrayList<>();
String[] phoneNoStr = "25988888888,35988888888".split(",");
for (String phoneNo : phoneNoStr) {
phoneNoList.add(phoneNo);
}
String content = "【业务预警】 调用开放平台,推送消息接口异常"; if (ObjectUtil.isNotEmpty(phoneNoList)) {
Map<String, Object> map = new HashMap<>();
map.put("access_token", "2471310a60b56329c47c0e5f202af16b89XXXXXXXXXXXXXXXXXX");
map.put("timestamp", timestamp);
map.put("sign", sign(timestamp)); RobotAtInfo atInfo=new RobotAtInfo();
atInfo.setAtMobiles(phoneNoList);
RobotContentInfo contentInfo=new RobotContentInfo();
contentInfo.setContent(content);
RobotMessage param=new RobotMessage();
param.setMsgtype("text");
param.setAt(atInfo);
param.setText(contentInfo);
result = dingtalkService.sendMessage(map, param);
}
logger.info(result); } public String sign(Long timestamp) {
try {
String appSecret = "SECfd5138XXXXXXXXXXXXXXXXXXXXXXXX";
String stringToSign = timestamp + "\n" + appSecret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(appSecret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
return new String(Base64.encodeBase64(signData));
} catch (Exception ex) {
return "";
}
}
}

DevOps 运维提醒 钉钉 机器人 群通知的更多相关文章

  1. 运维利器:钉钉机器人脚本告警(Linux Python 篇)

    写在前面的话 在前面的博客中已经具体提到了如何获取对的机器人的 Token 等操作,不清楚的可以参考之前写的 [运维利器:钉钉机器人脚本告警(Linux Shell 篇)]这篇博客的前部分. 本文主要 ...

  2. Go语言Golang DevOps运维开发实战

    Go语言Golang DevOps运维开发实战 提高运维意识.从下到上,从上到下的工作都要做好,对上运维工作的价值和含金量可以得到认可,对下我们的工作能够提高效率解放运维.运维意识是很重要,并不是你技 ...

  3. DEVOPS 运维开发系列

    DEVOPS 运维开发系列四:ITIL事态管理流程.事态监控系统设计以及基于Devops的效率提升实践 - watermelonbig的专栏 - CSDN博客https://blog.csdn.net ...

  4. 运维利器:钉钉机器人脚本告警(Linux Shell 篇)

    写在前面的话 目前换了几家公司,且最近几家都是以钉钉作为公司 OA 聊天工具,总的来说还是很不错的.最近去了新公司,由于公司以前没有运维,所以监控,做自动化等方面都没有实施,恰逢这个机会把最近做的关于 ...

  5. Elasticsearch 运维实战之1 -- 集群规划

    规划一个可用于生产环境的elasticsearch集群. 集群节点划分 整个集群的节点分为以下三种主要类型 Master nodes -- 负责维护集群状态,不保存index数据, 硬件要求: 一般性 ...

  6. yii2-dingtalk 钉钉群机器人

    说明 群机器人是钉钉群的高级扩展功能.群机器人可以将第三方服务的信息聚合到群聊中,实现自动化的信息同步.目前,大部分机器人在添加后,还需要进行Webhook配置,才可正常使用(配置说明详见操作流程中的 ...

  7. shell操作钉钉机器人实现告警提醒

    我们知道,之前的运维告警多通过mail 等方式通知到相应的人员,难以实现随时随地的查看.随着手机APP的发展,很多告警开始发送到IM软件上去.目前比较常用的是发送到微信和钉钉上,今天我们将重点放在钉钉 ...

  8. 阿里智能运维实践|阿里巴巴DevOps实践指南

    编者按:本文源自阿里云云效团队出品的<阿里巴巴DevOps实践指南>,扫描上方二维码或前往:https://developer.aliyun.com/topic/devops,下载完整版电 ...

  9. 大数据运维尖刀班 | 集群_监控_CDH_Docker_K8S_两项目_腾讯云服务器

    说明:大数据时代,传统运维向大数据运维升级换代很常见,也是个不错的机会.如果想系统学习大数据运维,个人比较推荐通信巨头运维大咖的分享课:https://url.cn/5HIqOOr,主要是实战强.含金 ...

  10. 运维不仅仅是懂Linux就行,还需要知道这些……

    运维不仅仅是懂Linux就行,因为还有一大部分的Windows运维,最近看一个报道说,windows的服务器占了47.71%.嗯,向windows运维人员致敬.当然我们这篇文章不是说运维除了懂Linu ...

随机推荐

  1. Java之引用传递

    引用传递分析 类本身就属于引用数据类型,既然是引用数据类型,就会牵扯到内存的引用传递. 引用传递的本质:同一块堆内存空间可以被不同的栈内存所指向,也可以变更指向. 引用传递案例 先看一个应用传递的例子 ...

  2. Java核心知识体系6:集合框架详解

    Java核心知识体系1:泛型机制详解 Java核心知识体系2:注解机制详解 Java核心知识体系3:异常机制详解 Java核心知识体系4:AOP原理和切面应用 Java核心知识体系5:反射机制详解 1 ...

  3. Welcome to YARP - 7.目标健康检查

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...

  4. WPF --- 如何以Binding方式隐藏DataGrid列

    引言 如题,如何以Binding的方式动态隐藏DataGrid列? 预想方案 像这样: 先在ViewModel创建数据源 People 和控制列隐藏的 IsVisibility,这里直接以 MainW ...

  5. 玩转开源 | 搭建 Hugo 管理 Markdown 文档

    在工作.学习中,不可避免会要写一些文档:又或者想搭建个简单网站,记录和分享您的生活经验或知识:撰写这些文档中使用 markdown 是一个非常不错的选择,让我们更加聚焦在文档表达的内容上.实际上笔者的 ...

  6. AntDesignBlazor示例——列表查询条件

    本示例是AntDesign Blazor的入门示例,在学习的同时分享出来,以供新手参考. 示例代码仓库:https://gitee.com/known/AntDesignDemo 1. 学习目标 重构 ...

  7. Python 潮流周刊第 30 期(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  8. [HAOI2018] 字串覆盖

    [HAOI2018]字串覆盖 题目描述 小C对字符串颇有研究,他觉得传统的字符串匹配太无聊了,于是他想到了这 样一个问题. 对于两个长度为n的串A, B, 小C每次会给出给出4个参数s, t, l, ...

  9. CentOS 8.1成功安装最新Node.js 20教程(含用到的全部命令和截图演示)

    yum换镜像和源 CentOS 已经停止维护的问题.2020 年 12 月 8 号,CentOS 官方宣布了停止维护 CentOS Linux 的计划,并推出了 CentOS Stream 项目,Ce ...

  10. 51Nod 1085 01背包

    01背包入门题,刚学完当写模板. 在N件物品取出若干件放在容量为W的背包里,每件物品的体积为W1,W2--Wn(Wi为整数),与之相对应的价值为P1,P2--Pn(Pi为整数).求背包能够容纳的最大价 ...