在钉钉群通过机器人发送信息

在第三方API接口对接中,需要及时获取第三方接口请求结果情况,所以在代码中融合钉钉机器人,对请求的异常结果及时发送通知。

  1. 自定义机器人参考链接
  2. 通用响应参数-封装API的错误码
public interface IErrorCode {

    long getCode();

    String getMessage();
}
  1. 通用响应参数-状态码
/**
 * 〈 通用响应参数-状态码 〉
 *
 * @since JDK1.8
 * 版本 @version 1.0
 */
public enum ResultCode implements IErrorCode {

    SUCCESS(2000, "操作成功"),

    FAILED(5000, "操作失败"),

    VALIDATE_FAILED(4040, "参数检验失败"),

    UNAUTHORIZED(4010, "暂未登录或token已经过期"),

    FORBIDDEN(4030, "没有相关权限");

    private long code;
    private String message;

    ResultCode(long code, String message) {
        this.code = code;
        this.message = message;
    }

    public long getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}

  1. 通过返回类定义
@Data
@ApiModel(description = "通用响应参数")
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult {

    @ApiModelProperty(value = "返回码")
    private long resultCode;

    @ApiModelProperty(value = "返回信息")
    private String message;

    @ApiModelProperty(value = "返回结果集")
    private Object data;

    private CommonResult(long resultCode, String message) {
        this.resultCode = resultCode;
        this.message = message;
    }

    /**
     * 成功返回结果
     */
    public static CommonResult success() {
        return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
    }

    /**
     * 失败返回结果
     */
    public static CommonResult failed() {
        return new CommonResult(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage());
    }

    /**
     * 未授权访问返回结果
     * @return
     */
    public static CommonResult unauthorized(){
        return new CommonResult(ResultCode.UNAUTHORIZED.getCode(),ResultCode.UNAUTHORIZED.getMessage());
    }

    /**
     * 参数校验失败返回结果
     * @return
     */
    public static CommonResult validateFailed(){
        return new CommonResult(ResultCode.VALIDATE_FAILED.getCode(),ResultCode.VALIDATE_FAILED.getMessage());
    }

    /**
     * 没有授权返回结果
     * @return
     */
    public static CommonResult forbidden(){
        return new CommonResult(ResultCode.FORBIDDEN.getCode(),ResultCode.FORBIDDEN.getMessage());
    }
    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     */
    public static CommonResult common(IErrorCode errorCode) {
        return new CommonResult(errorCode.getCode(), errorCode.getMessage());
    }
}
  1. 在钉钉群可以通过手机号码@指定人员
/**
     * 日志接受者,需要在text中包含才可以@
     * @param mobiles 手机号码集合
     * @return
     */
    private String phone(List<String> mobiles){
        StringBuffer stringBuffer = new StringBuffer();
        for (String mobile : mobiles) {
            stringBuffer.append(" @"+mobile);
        }
        return stringBuffer.toString();
    }
  1. 关于钉钉群机器人配置的通用参数
@Data
@Component
@ConfigurationProperties(prefix = "dingtalk")
public class DingTalkProperties {

    /**
     * 数据请求url
     */
    private String url;

    /**
     * token
     */
    private String token;

    /**
     * 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。
     */
    private String secret;

    /**
     * 项目民称,用于钉钉机器人发送信息的请求头
     */
    private String projectName;

    private List<String> atMobiles;
}
  1. 发送数据URL
    private String sendUrl() throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
        Long timestamp = System.currentTimeMillis();
        String stringToSign = timestamp + "\n" + dingTalkConfig.getSecret();
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(dingTalkConfig.getSecret().getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");

        return dingTalkConfig.getUrl() + "?access_token=" + dingTalkConfig.getToken() + "&sign=" + sign + "&timestamp=" + timestamp;

    }
  1. 发送数据service层
    @Override
    public void sendMessage(CommonResult data) {
        try {
            DingTalkClient client = new DefaultDingTalkClient(sendUrl());
            OapiRobotSendRequest request = new OapiRobotSendRequest();
            request.setMsgtype("markdown");
            OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
            markdown.setTitle("接口异常通知");

            markdown.setText("#### " + dingTalkConfig.getProjectName() + " \n" +
                    "> 日志处理人:" + phone(dingTalkConfig.getAtMobiles()) + "\n\n" +
                    "> 异常原因:" + data.getMessage() + "\n\n" +
                    "> ###### " + DateUtils.getThisTime() + "发布\n");
            request.setMarkdown(markdown);

            OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
            at.setAtMobiles(dingTalkConfig.getAtMobiles());
            // isAtAll类型如果不为Boolean,请升级至最新SDK
            at.setIsAtAll(false);
            request.setAt(at);

            OapiRobotSendResponse response = client.execute(request);
        } catch (Exception e) {
            log.error("发送信息错误,失败信息:{}", e.getMessage());
        }
    }
  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个很实用的功能,需要用到 `dingtalkchatbot` 和 `itchat` 这两个 Python 库。 首先,安装这两个库: ```python pip install dingtalkchatbot pip install itchat ``` 然后,编写代码: ```python import itchat import json from dingtalkchatbot.chatbot import DingtalkChatbot # 钉钉机器人 webhook url webhook = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxx' # 创建钉钉机器人对象 dingtalk_robot = DingtalkChatbot(webhook) # 钉钉机器人的问答库 qa_dict = { '你好': '你好啊!', '你是谁': '我是你的小助手,有什么可以帮到您的吗?', '再见': '好的,祝您生活愉快!' } # 监听钉钉消息 @itchat.msg_register(itchat.content.TEXT, isGroupChat=True) def group_text_reply(msg): if '@钉钉机器人' in msg['Text']: # 获取消息内容 text = msg['Text'].replace('@钉钉机器人', '').strip() # 在问答库中查找回复 reply = qa_dict.get(text) # 如果找到回复,则发送回复信息 if reply: # 发送回复信息到钉钉机器人 dingtalk_robot.send_text(msg=reply) # 登录微信 itchat.auto_login(hotReload=True) # 运行微信监听 itchat.run() ``` 这段代码实现了监听钉钉消息的功能,并且将消息发送给钉钉机器人的 webhook。钉钉机器人会根据问答库中的回复,在钉钉中回复相应的内容。 需要注意的是,为了保证代码的安全性,钉钉机器人 webhook 的 `access_token` 需要保密,建议使用环境变量或配置文件的方式来存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值