最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot應(yīng)用實(shí)現(xiàn)向釘釘發(fā)送帶圖片的消息的兩種方法總結(jié)

 更新時(shí)間:2025年10月22日 15:46:21   作者:IT界Tony哥  
在Spring Boot應(yīng)用中向釘釘發(fā)送帶圖片的消息,主要有兩種主流實(shí)現(xiàn)方式,一個(gè)是使用機(jī)器人Webhook,一個(gè)是通過釘釘開放平臺(tái)SDK,下面我們就來看看具體實(shí)現(xiàn)步驟吧

在Spring Boot應(yīng)用中向釘釘發(fā)送帶圖片的消息,主要有兩種主流實(shí)現(xiàn)方式:一種是使用機(jī)器人Webhook發(fā)送包含圖片鏈接的消息,另一種是通過釘釘開放平臺(tái)SDK發(fā)送圖片消息。下面我為你詳細(xì)說明這兩種方法的實(shí)現(xiàn)步驟。

兩種發(fā)送釘釘圖片消息的方案對比

方案類型實(shí)現(xiàn)方式圖片處理適用場景主要限制
機(jī)器人Webhook方案通過群機(jī)器人Webhook發(fā)送圖文消息圖片需先上傳至公網(wǎng)可訪問的URL群聊通知、監(jiān)控告警圖片需公網(wǎng)可訪問;每分鐘限20條
釘釘SDK方案使用官方SDK上傳媒體文件并發(fā)送圖片上傳至釘釘服務(wù)器獲取media_id企業(yè)內(nèi)部應(yīng)用、精確到人需要企業(yè)應(yīng)用權(quán)限;流程更復(fù)雜

方案一:使用釘釘機(jī)器人Webhook發(fā)送圖文消息

這是最常用和簡便的方法,適合向釘釘群發(fā)送帶圖片的通知消息。

1. 創(chuàng)建釘釘群機(jī)器人

首先需要在釘釘群中創(chuàng)建自定義機(jī)器人:

  • 進(jìn)入釘釘群設(shè)置 → 智能群助手 → 添加機(jī)器人 → 自定義
  • 記錄生成的Webhook地址和加簽密鑰(如有安全設(shè)置)

2. 添加Maven依賴

根據(jù)不同的starter庫,可以選擇以下依賴之一:

<!-- 方案A: snowheart的starter -->
<dependency>
    <groupId>cn.snowheart</groupId>
    <artifactId>spring-boot-dingtalk-robot-starter</artifactId>
    <version>1.0.3.RELEASE</version>
</dependency>

<!-- 方案B: javafamily的starter -->
<dependency>
    <groupId>club.javafamily</groupId>
    <artifactId>dingtalk-notification-spring-boot-starter</artifactId>
    <version>2.3.2-beta.13</version>
</dependency>

3. 配置Webhook參數(shù)

application.yml中配置機(jī)器人信息:

# 如果使用snowheart的starter
dingtalk:
  robot:
    prefix: https://oapi.dingtalk.com/robot/send
    access-token: your_access_token_here
    secret:
      secret-enabled: true
      secret-token: your_secret_here

# 如果使用javafamily的starter  
javafamily:
  notify:
    dingtalk:
      hook-url: https://oapi.dingtalk.com/robot/send?access_token=your_token
      enabled: true

4. 實(shí)現(xiàn)圖片消息發(fā)送

以下是幾種常見的帶圖片消息類型的實(shí)現(xiàn)代碼:

A. 發(fā)送Link消息(圖片+標(biāo)題+描述)

@RestController
public class DingTalkController {
    
    @Autowired
    private DingTalkRobotClient dingTalkRobotClient; // snowheart starter
    
    /**
     * 發(fā)送帶圖片的Link消息
     */
    @GetMapping("/sendLinkMessage")
    public void sendLinkMessageWithImage() {
        // 圖片必須先上傳到公網(wǎng)可訪問的URL
        String imageUrl = "https://example.com/your-image.jpg";
        String title = "系統(tǒng)監(jiān)控告警";
        String text = "服務(wù)器CPU使用率超過90%,請及時(shí)處理!";
        String messageUrl = "http://your-system.com/detail"; // 點(diǎn)擊跳轉(zhuǎn)鏈接
        
        LinkMessage linkMessage = new LinkMessage(title, text, imageUrl, messageUrl);
        DingTalkResponse response = dingTalkRobotClient.sendLinkMessage(linkMessage);
        
        if (response.getErrcode().longValue() == 0L) {
            System.out.println("Link消息發(fā)送成功");
        }
    }
}

B. 發(fā)送Markdown消息(圖片嵌入正文)

/**
 * 發(fā)送Markdown格式的圖片消息
 */
@GetMapping("/sendMarkdownWithImage")
public void sendMarkdownWithImage() {
    String imageUrl = "https://example.com/chart.png";
    
    String markdownText = "### 業(yè)務(wù)數(shù)據(jù)報(bào)表\n\n" +
                         "最新業(yè)務(wù)數(shù)據(jù)統(tǒng)計(jì)圖如下:\n\n" +
                         "![業(yè)務(wù)圖表](" + imageUrl + ")\n\n" +
                         "**統(tǒng)計(jì)時(shí)間:** " + new Date();
    
    MarkdownMessage markdownMessage = new MarkdownMessage(
        "業(yè)務(wù)數(shù)據(jù)通知", 
        markdownText
    );
    
    DingTalkResponse response = dingTalkRobotClient.sendMarkdownMessage(markdownMessage);
    
    if (response.getErrcode().longValue() == 0L) {
        System.out.println("Markdown消息發(fā)送成功");
    }
}

C. 使用javafamily starter發(fā)送消息

@SpringBootTest
public class DingTalkNotifyTests {
    
    @Autowired
    private DingTalkNotifyHandler dingTalkNotifyHandler; // javafamily starter
    
    @Test
    void testNotifyLinkMessage() {
        String imageUrl = "https://example.com/image.jpg";
        
        DingTalkLinkRequest request = DingTalkLinkRequest.of(
            "系統(tǒng)通知",
            "發(fā)現(xiàn)異常請求,請及時(shí)查看處理",
            "https://your-system.com/detail",
            imageUrl
        );
        
        String response = dingTalkNotifyHandler.notify(request);
        System.out.println("發(fā)送結(jié)果:" + response);
    }
}

方案二:使用釘釘官方SDK發(fā)送圖片消息

這種方法適合企業(yè)內(nèi)部應(yīng)用,需要用戶授權(quán),可以發(fā)送給指定用戶。

1. 添加官方SDK依賴

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibaba-dingtalk-service-sdk</artifactId>
    <version>2.0.0</version>
</dependency>

2. 實(shí)現(xiàn)圖片上傳和發(fā)送

@Component
public class DingTalkService {
    
    @Value("${dingding.app-key}")
    private String appKey;
    
    @Value("${dingding.app-secret}")
    private String appSecret;
    @Value("${dingding.agent-id}")
    private Long agentId;
    
    /**
     * 獲取AccessToken
     */
    public String getAccessToken() throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
        OapiGettokenRequest request = new OapiGettokenRequest();
        request.setAppkey(appKey);
        request.setAppsecret(appSecret);
        request.setHttpMethod("GET");
        
        OapiGettokenResponse response = client.execute(request);
        return response.getAccessToken();
    }
    
    /**
     * 上傳圖片并發(fā)送
     */
    public void sendImageMessage(String userId, String imageUrl) throws ApiException {
        String accessToken = getAccessToken();
        
        // 1. 先上傳圖片獲取media_id
        String mediaId = uploadImage(accessToken, imageUrl);
        
        // 2. 發(fā)送圖片消息
        DingTalkClient client = new DefaultDingTalkClient(
            "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
        
        OapiMessageCorpconversationAsyncsendV2Request req = new OapiMessageCorpconversationAsyncsendV2Request();
        req.setAgentId(agentId);
        req.setUseridList(userId);
        
        OapiMessageCorpconversationAsyncsendV2Request.Msg msg = 
            new OapiMessageCorpconversationAsyncsendV2Request.Msg();
        msg.setMsgtype("image");
        
        msg.setImage(new OapiMessageCorpconversationAsyncsendV2Request.Image());
        msg.getImage().setMediaId(mediaId);
        
        req.setMsg(msg);
        
        OapiMessageCorpconversationAsyncsendV2Response rsp = client.execute(req, accessToken);
        if (rsp.getErrcode() != 0) {
            throw new RuntimeException("發(fā)送失?。? + rsp.getErrmsg());
        }
    }
    
    /**
     * 上傳圖片到釘釘服務(wù)器
     */
    private String uploadImage(String accessToken, String imageUrl) throws ApiException {
        DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/media/upload");
        OapiMediaUploadRequest request = new OapiMediaUploadRequest();
        request.setType("image");
        
        // 需要下載圖片并上傳
        FileItem item = new FileItem(new URL(imageUrl).openStream());
        request.setMedia(item);
        
        OapiMediaUploadResponse response = client.execute(request, accessToken);
        return response.getMediaId();
    }
}

重要注意事項(xiàng)

圖片處理要點(diǎn)

  • ??圖片URL必須公網(wǎng)可訪問??:釘釘機(jī)器人需要從公網(wǎng)下載圖片進(jìn)行展示
  • ??圖片格式支持??:支持JPG、PNG等常見格式,建議圖片大小不超過2MB
  • ??圖片緩存??:釘釘會(huì)對圖片進(jìn)行緩存,相同URL的圖片可能不會(huì)實(shí)時(shí)更新

安全限制

  • ??頻率限制??:每個(gè)機(jī)器人每分鐘最多發(fā)送20條消息
  • ??安全設(shè)置??:支持自定義關(guān)鍵詞、加簽、IP白名單等安全措施
  • ??token保護(hù)??:Webhook中的access_token要妥善保管,避免泄露

實(shí)際應(yīng)用示例:監(jiān)控告警帶圖表

@Service
public class MonitorAlertService {
    
    @Autowired
    private DingTalkRobotClient dingTalkRobotClient;
    
    public void sendAlertWithChart(String alertMsg, String chartImageUrl) {
        String markdownContent = "### ?? 系統(tǒng)監(jiān)控告警\n\n" +
                               "**告警信息:** " + alertMsg + "\n\n" +
                               "**趨勢圖表:** \n\n" +
                               "![監(jiān)控圖表](" + chartImageUrl + ")\n\n" +
                               "**時(shí)間:** " + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
        
        MarkdownMessage message = new MarkdownMessage("系統(tǒng)監(jiān)控告警", markdownContent);
        
        // @所有人
        message.setIsAtAll(true);
        
        DingTalkResponse response = dingTalkRobotClient.sendMarkdownMessage(message);
        
        if (response.getErrcode() == 0) {
            System.out.println("告警消息發(fā)送成功");
        }
    }
}

方案選擇建議

  • ??對于群通知和監(jiān)控告警??,推薦使用??方案一(機(jī)器人Webhook)??,配置簡單,適合向群內(nèi)發(fā)送帶圖表的通知
  • ??對于企業(yè)內(nèi)部精準(zhǔn)推送??,需要??方案二(官方SDK)??,可以指定接收人并確保消息送達(dá)
  • ??圖片準(zhǔn)備??:確保圖片已上傳至公網(wǎng)可訪問的圖床或自有CDN

根據(jù)你的具體場景選擇合適的方案,即可實(shí)現(xiàn)Spring Boot應(yīng)用向釘釘發(fā)送帶圖片的消息。

到此這篇關(guān)于SpringBoot應(yīng)用實(shí)現(xiàn)向釘釘發(fā)送帶圖片的消息的兩種方法總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot釘釘發(fā)送帶圖片消息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot整合freemarker和相應(yīng)的語法詳解

    Springboot整合freemarker和相應(yīng)的語法詳解

    FreeMarker是一款Spring官方推薦使用的模板引擎。接下來通過本文給大家介紹Springboot整合freemarker和相應(yīng)的語法,感興趣的朋友一起看看吧
    2021-09-09
  • Java中使用synchronized關(guān)鍵字實(shí)現(xiàn)簡單同步操作示例

    Java中使用synchronized關(guān)鍵字實(shí)現(xiàn)簡單同步操作示例

    這篇文章主要介紹了Java中使用synchronized關(guān)鍵字實(shí)現(xiàn)簡單同步操作示例,本文起講解了synchronized修飾函數(shù)、synchronized修飾代碼塊、synchronized修飾靜態(tài)方法等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • SpringBoot整合SpringSecurity實(shí)現(xiàn)JWT認(rèn)證的項(xiàng)目實(shí)踐

    SpringBoot整合SpringSecurity實(shí)現(xiàn)JWT認(rèn)證的項(xiàng)目實(shí)踐

    本文會(huì)通過創(chuàng)建SpringBoot項(xiàng)目整合SpringSecurity,實(shí)現(xiàn)完整的JWT認(rèn)證機(jī)制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓的方法

    Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓的方法

    這篇文章主要介紹了Java GZip 基于磁盤實(shí)現(xiàn)壓縮和解壓,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考需要的朋友可以參考下
    2020-08-08
  • mybatis中<if>標(biāo)簽bool值類型為false判斷方法

    mybatis中<if>標(biāo)簽bool值類型為false判斷方法

    這篇文章主要給大家介紹了關(guān)于mybatis中<if>標(biāo)簽bool值類型為false判斷方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • java采用中文方式顯示時(shí)間的方法

    java采用中文方式顯示時(shí)間的方法

    這篇文章主要介紹了java采用中文方式顯示時(shí)間的方法,實(shí)例分析了java時(shí)間操作及字符串轉(zhuǎn)換的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見郵箱的配置)

    Spring Boot實(shí)現(xiàn)郵件服務(wù)(附:常見郵箱的配置)

    這篇文章主要給大家介紹了關(guān)于Spring Boot實(shí)現(xiàn)郵件服務(wù)的相關(guān)資料,文中還附上了常見郵箱的配置,通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Java 獲取網(wǎng)絡(luò)302重定向URL的方法

    Java 獲取網(wǎng)絡(luò)302重定向URL的方法

    在本篇文章里小編給大家整理的是關(guān)于Java 獲取網(wǎng)絡(luò)302重定向URL的方法以及相關(guān)知識點(diǎn),有興趣的朋友們參考下。
    2019-08-08
  • java字符串求并集的方法

    java字符串求并集的方法

    這篇文章主要介紹了java字符串求并集的方法,涉及Java字符串操作中union方法的使用,是Java字符串操作中非常實(shí)用的基本技巧,需要的朋友可以參考下
    2014-11-11
  • Java遠(yuǎn)程調(diào)用組件Feign技術(shù)使用詳解

    Java遠(yuǎn)程調(diào)用組件Feign技術(shù)使用詳解

    Feign是Netflix公司開發(fā)的一個(gè)聲明式的REST調(diào)用客戶端; Ribbon負(fù)載均衡、 Hystrⅸ服務(wù)熔斷是我們Spring Cloud中進(jìn)行微服務(wù)開發(fā)非?;A(chǔ)的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時(shí)出現(xiàn)的,而且配置也都非常相似
    2022-11-11

最新評論

乐山市| 长乐市| 遵义县| 尚志市| 吴川市| 富民县| 清涧县| 肃北| 揭阳市| 长顺县| 花莲县| 蒙山县| 武义县| 城市| 彝良县| 许昌县| 南木林县| 五原县| 申扎县| 江阴市| 汉川市| 聂拉木县| 马鞍山市| 海阳市| 黔东| 黄平县| 刚察县| 山西省| 永平县| 蛟河市| 和硕县| 共和县| 炎陵县| 濮阳市| 哈尔滨市| 长岭县| 基隆市| 高陵县| 绩溪县| 绥宁县| 台东市|