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

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. 自然语言处理历史史诗:NLP的范式演变与Python全实现

    本文全面回顾了自然语言处理(NLP)从20世纪50年代至今的历史发展.从初创期的符号学派和随机学派,到理性主义时代的逻辑和规则范式,再到经验主义和深度学习时代的数据驱动方法,以及最近的大模型时代,NL ...

  2. re1-100

    虽然关键的判断函数和"成功"的提示也在这里,但是具体对输入flag的操作却在后面 看到对数组bufParentRead[1]开始赋值"53fc275d81",b ...

  3. srm-50

    刚开始拿到题目没有思路,看了字符串发现也没什么特别的,也没有提示输入什么什么,然后找到main函数,f5进去以后也没什么特别的 然后就看了wp发现得从程序本身出发去解决问题 点开程序,随便输入点什么 ...

  4. 如何正确执行 DORA 指标

    DevOps 研究与 DORA 评估指标可帮助我们深入了解软件开发和交付流程的性能和效率.这些指标包括部署频率.变更交付时间.变更失败率和平均恢复时间等方面.DORA 指标对于管理开发团队(从团队领导 ...

  5. 使用DocumentBuilderFactory解析XML浅谈

    背景: 当使用Java解析XML时,可以使用javax.xml.parsers.DocumentBuilderFactory类.这个类提供了一种创建解析XML的文档对象的方式.DocumentBuil ...

  6. C# 12 Blazor入门教程

    Blazor简介 Blazor 是由Microsoft开发的一款基于.NET的开源交互式Web UI框架.Blazor使开发人员能够使用C#和HTML建立全堆栈的单页应用程序,并避免使用JavaScr ...

  7. .NET 8 Video教程介绍(开篇)

    教程简介 本文将简单描述视频网站教程,视频网站是一个类似于腾讯视频一样的网站,视频资源用户自己上传,然后提供友好的界面查看视频和搜索视频,并且提供管理页面对于视频进行管理,我们将使用Blazor作为前 ...

  8. C语言输入一个三位的正整数,按逆序打印出该数的各位数字。

    #include <stdio.h> int main() { int n, a, b, c;//定义3位数,个位数,十位数,百位数变量 scanf_s("%d", & ...

  9. MacOS|matplotlib 无法显示中文 解决办法

    matplotlib 无法显示中文 解决办法 画图时,中文无法正常显示,如图 下载字体 点击这里获取字体 提取码: wnby 查看字体路径 在 python 环境中执行以下指令 import matp ...

  10. Bert-vits2新版本V2.1英文模型本地训练以及中英文混合推理(mix)

    中英文混合输出是文本转语音(TTS)项目中很常见的需求场景,尤其在技术文章或者技术视频领域里,其中文文本中一定会夹杂着海量的英文单词,我们当然不希望AI口播只会念中文,Bert-vits2老版本(2. ...