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

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. VSCODE中无法搜索插件的解决办法

    当前我的使用环境是虚拟机, 如果无法搜索插件但是网络连接是正确的极有可能是代理设置的问题. 解决办法如下: ctrl+, 打开设置 这里填写正确的代理设置.

  2. 题解 CF1401C

    题目大意: 给定一序列 \(A\),定义当且仅当 \(\gcd(a_i,a_j)=a_{min}\) 时,元素 \(a_i\) 和 \(a_j\) 可以交换. 问当前给定的序列 \(A\) 能否转化为 ...

  3. 如何给el-table中某一列加指定内容和点击事件

    背景: 小颖最近在写项目时遇到了要给  element-ui 中的  el-table 在 v-for  el-table-column 标签时给某列加内容和点击事件,项目忙完了想着总结一下,下面一起 ...

  4. ARM汇编指令实验

    题目 地址为0x40008000起始的内存中存放了20个无符号的8位整数,请编写ARM汇编程序实现如下功能: 采用冒泡法将以上内存中的数据按照从小到大的顺序排列. 注意:在验收实验时,需要自己把具体的 ...

  5. 上传代码到github和删除.git

    在本地建立目录,将想上传的代码放到该文件夹中 git init ###初始化 git add . ###将本地项目工作区的所有文件添加到暂存区 git commit -m "excu&quo ...

  6. .NET8极致性能优化AOT

    前言 .NET8对于性能的优化是方方面面的,所以AOT预编译机器码也是不例外的.本篇来看下对于AOT的优化.原文:.NET8极致性能优化AOT 详述 首先明确一个概念,.NET里面的AOT它是原生的. ...

  7. 校验码——循环校验码CRC,海明校验码

  8. C++学习笔记三:变量与数据类型(浮点型)

    1. 数据类型与所占内存大小 类型 大小 精度 注意 float 4 7   double 8 15 默认 long double 16 >double   精度就是有效数字. 2. 声明和初始 ...

  9. Shell下处理JSON数据工具向导

    目录 下载离线安装包 安装 源码包安装 选项及含义 JQ 程序代码演示在线平台 JQ 语法 基本过滤器 身份运算符 --- . 标识符-索引 --- .foo`, `.foo.bar 对象索引 --- ...

  10. 印能捷添加了加密进程导出的pdf文件不加密(rename的类型未添加)

    解决方法:用procmon监控下图的所有文件事件,查找rename的类型,然后右键SetRenameInfo点击Include,将查出来的类型添加到加密后缀中,如下图是一个无后缀的类型需要添加\NOE ...