钉钉群-推送消息-Java

import com.alibaba.fastjson2.JSON;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;


import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.Instant;
import java.util.Date;


/**
 * @ClassName DingDingUtils
 * @Descripition 
 * @Author 
 * @Date 2024/9/20 18:00
 */
@Slf4j
@Component
public class DingDingUtils {


    

/**
 *
 * 推送钉钉消息
 *
 * @param content
 */
public static void sendDingTalkMsg(String content) {

    try {
        // 钉钉发送消息路径
        String sendMessageUrl = "https://oapi.dingtalk.com/robot/send?access_token=自定义token";
        // 秘钥
        String secret = "自定义secret";

        //获取系统时间戳
        long timestamp = Instant.now().toEpochMilli();
        //拼接
        String stringToSign = timestamp + "\n" + secret;
        //使用HmacSHA256算法计算签名
        Mac mac = Mac.getInstance("HmacSHA256");
        mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));

        //进行Base64 encode 得到最后的sign,可以拼接进url里
        String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
        //钉钉机器人地址(配置机器人的webhook)
        String dingUrl = sendMessageUrl + "&timestamp=" + timestamp + "&sign=" + sign;


        DingTalkClient client = new DefaultDingTalkClient(dingUrl);
        OapiRobotSendRequest sendRequest = new OapiRobotSendRequest();
        // ‌钉钉自定义机器人支持的消息类型包括text类型、link类型、markdown类型、actioncard类型和feedcard类型
        sendRequest.setMsgtype("markdown");

        StringBuilder sb = new StringBuilder();
        // 标题‌:通过#的数量来表示不同级别的标题,例如# 标题1、## 标题2等。
        sb.append("#### 【自定义标题】: ").append("****").append("\n\n");
        // ‌引用块‌:使用>符号开头,例如> 这是引用的文本块`。
        sb.append("> ##### 告警提示: ").append("【自定义信息文本】").append("\n\n");
        sb.append("> ##### 时间: ").append(DateUtil.parseDateToStr(new Date(), "yyyy-MM-dd HH:mm:ss")).append("\n\n");
        sb.append("> ##### 内容: ").append(content);

        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setText(sb.toString());
        markdown.setTitle("告警");
        sendRequest.setMarkdown(markdown);

        OapiRobotSendResponse response = client.execute(sendRequest);
        log.info("DingDingUtils.sendDingTalkMsg [钉钉消息发送结果] response: [{}]", JSON.toJSONString(response));
        if (!response.isSuccess()) {
            log.error("DingDingUtils.sendDingTalkMsg [钉钉消息发送失败!] response: [{}]", JSON.toJSONString(response));
        }

    } catch (NoSuchAlgorithmException e) {
        log.error("DingDingUtils.sendDingTalkMsg [NoSuchAlgorithmException] getMessage : {}", e.getMessage(), e);
    } catch (InvalidKeyException e) {
        log.error("DingDingUtils.sendDingTalkMsg [InvalidKeyException] getMessage : {}", e.getMessage(), e);
    } catch (UnsupportedEncodingException e) {
        log.error("DingDingUtils.sendDingTalkMsg [UnsupportedEncodingException] getMessage : {}", e.getMessage(), e);
    } catch (ApiException e) {
        log.error("DingDingUtils.sendDingTalkMsg [ApiException] getMessage : {}", e.getMessage(), e);
    }

}

public static void main(String[] args) {
    sendDingTalkMsg("测试发消息");
}
}
 

备注:钉钉发送消息路径 和 秘钥

  1. 创建机器人

    • 登录钉钉,进入需要接收通知的群聊。
    • 点击群设置(一般在群聊窗口右上角的“...”菜单中)。
    • 选择“智能群助手”或“群机器人”,然后点击“添加机器人”。
    • 选择“自定义机器人”,为机器人命名,并设置安全选项(如加签)。完成后,会生成一个Webhook地址,复制保存,稍后将会用到。


示例如图:


出现这个错误的原因是在导入seaborn包时,无法从typing模块中导入名为'Protocol'的对象。 解决这个问题的方法有以下几种: 1. 检查你的Python版本是否符合seaborn包的要求,如果不符合,尝试更新Python版本。 2. 检查你的环境中是否安装了typing_extensions包,如果没有安装,可以使用以下命令安装:pip install typing_extensions。 3. 如果你使用的是Python 3.8版本以下的版本,你可以尝试使用typing_extensions包来代替typing模块来解决该问题。 4. 检查你的代码是否正确导入了seaborn包,并且没有其他导入错误。 5. 如果以上方法都无法解决问题,可以尝试在你的代码中使用其他的可替代包或者更新seaborn包的版本来解决该问题。 总结: 出现ImportError: cannot import name 'Protocol' from 'typing'错误的原因可能是由于Python版本不兼容、缺少typing_extensions包或者导入错误等原因造成的。可以根据具体情况尝试上述方法来解决该问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [ImportError: cannot import name ‘Literal‘ from ‘typing‘ (D:\Anaconda\envs\tensorflow\lib\typing....](https://blog.youkuaiyun.com/yuhaix/article/details/124528628)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值