HTML 笔记

windows下安装consul

  返回  

关于钉钉机器人异常消息推送流程备忘录

2021/7/21 10:03:12 浏览:

开发的速卖通对接奇门自定义接口,数据安全出塔项目,因为项目需要部署到聚石塔中,但异常信息查看比较麻烦,不利于排查错误信息,所以考虑使用钉钉的机器人进行异常消息推送。

首先,你需要一个钉钉账号,其次你需要拉一个群

比如我选择创建一个项目群

创建完后有一条消息推送,这个是钉钉的机器人,点击它的头像,选择更多机器人

 

我选择的是自定义

 

 选择ip地址段,这里的设置相当于ip白名单,只有地址段内的ip才被允许推送消息

完成配置后会给一个链接地址,请复制此地址进行存储,这个就是你进行消息推送的地址

 

下面的链接是钉钉开放平台sdk的下载地址,使用sdk进行开发,比较快捷方便,文档上有开发案例

https://developers.dingtalk.com/document/resourcedownload/download-server-sdk?pnamespace=app

下面是自定义机器人接入的开发文档,我是在此基础上进行开发的,支持text,link,markdown格式的消息推送

 https://developers.dingtalk.com/document/app/custom-robot-access

接下来介绍项目中的使用,我创建的项目是springboot项目,思路是,建立一个全局的异常捕获机制,获取到异常信息,进行钉钉机器人异常消息推送

package com.text..control;

import com.text.utils.DingTalkUtils;
import org.springframework.web.bind.annotation.ControllerAdvice;

/**
 * @description: 全局异常处理
 * @author: 
 * @date: 2021-07-15 8:48
 * @version: 1.0
 */
@ControllerAdvice
public class ExceptionHandler {


    @org.springframework.web.bind.annotation.ExceptionHandler(value=Exception.class)
    public void exceptionHandler(Exception e){
        //全局捕获异常,并进行钉钉异常消息推送
        DingTalkUtils.dingTalkSendException(e);
    }
}

请记得更换 DingTalkClient client = new DefaultDingTalkClient()中的链接地址,这个是上面复制的机器人推送地址

    public static void dingTalkSendException(Exception e){
        //得到异常棧的首个元素
        StackTraceElement  stackTrace = e.getStackTrace()[0];
        StringBuilder sb=new StringBuilder();
        sb.append("报错信息:"+e.getMessage()+"\n")
          .append("报错文件:"+stackTrace.getFileName()+"\n")
          .append("报错行号:"+stackTrace.getLineNumber()+"\n")
          .append("报错方法:"+stackTrace.getMethodName()+"\n")
          .append("报错Class:"+stackTrace.getClass()+"\n")
          .append("报错ClassName:"+stackTrace.getClassName());
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send");
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("text");
        OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
        text.setContent(sb.toString());
        request.setText(text);
        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();

        at.setIsAtAll(true);
        request.setAt(at);


        OapiRobotSendResponse response=null;
        try {
            response= client.execute(request);
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        System.out.println("钉钉机器人异常通知返回信息:"+response.getBody());
    }

下面是速卖通自定义api接口中关于异常信息的处理

比如以下代码,我调取速卖通的某个接口,其接口api上有标明返回异常信息的结构体

        AliexpressCategoryRedefiningGetchildattributesresultbypostcateidandpathResponse rsp = client.execute(req, session);
        JSONObject bodyJson = JSONObject.parseObject(rsp.getBody());
        //速卖通返回的结构体需要进行重新整合,result外又包了一层需要去除
        JSONObject aliexpressResponse = bodyJson.getJSONObject("aliexpress_category_redefining_getchildattributesresultbypostcateidandpath_response");
        System.out.println(bodyJson);
        if(bodyJson.containsKey("error_response")){
            throw new RuntimeException(bodyJson.toString());
        }
        return  aliexpressResponse;
{
	"error_response":{
		"msg":"Remote service error",
		"code":50,
		"sub_msg":"非法参数",
		"sub_code":"isv.invalid-parameter"
	}
}

所以判断返回的结构体中是否包含error_response这个key,如果有抛一个异常

这个是效果图,这样的话不需要取查看奇门的日志才能定位问题了,其他异常信息正常抛就可以了 

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号