iT邦幫忙

2026 iThome 鐵人賽

DAY 15
0
AI 自動化

RPA流程自動化應用系列 第 15 篇

【Day 15】運用 Discord Webhook 實現動態情資推播

  • 分享至 

  • xImage
  •  

自動化流程的終點不能停在「檔案存檔」,必須主動出擊!我們將實現全自動監控體系的最後一步,情報主動推播。

一、選擇 Webhook?
零帳密依賴:只需一組專屬的 Webhook URL,全靠底層 HTTP POST 傳輸,徹底免疫 Google 安全性阻擋。
原生跨平台相容:直接調用 .NET 原生的 System.Net.Http.HttpClient,不需安裝肥大的第三方通訊套件。
手機即時卡片戰報:支援 Markdown 與 Rich Embed 卡片排版,機器人跑完 1 秒內,團隊手機立刻跳出帶有警報顏色的戰報。
二、實戰細節:企業日常巡檢的「無新專利」情境處理
當機器人正式上線運行後,會遇到一個極為真實的業務場景:
「水位線機制(processed_ids.txt)正常發揮作用,今天檢索時發現案號全部已處理過,沒有新專利進入。」
如果這時機器人發送一張全都是「0 件」的空白報表,對決策者毫無價值。因此我們設計了動態情報感知邏輯:
情境 A(本日有新專利公開,newFetchedCount > 0):
主旨標註:🚨【高風險專利預警】(若有 VIP 案件)或 🟢【專利情報日報】今日新增資料更新
數據內容:呈現本日新增的專利分流結果。
情境 B(例行巡檢無新增,newFetchedCount = 0):
主旨標註:🟢【例行巡檢正常】今日無新專利進入
數據內容:自動解析本機既有的歷史分類檔案(High_Priority.json 等),推播系統至今累計監控之專利情報態勢,讓主管隨時掌握總庫存比例!
三、 核心實作代碼解析

  1. 安全組裝 Discord Embed 格式(避開 400 Bad Request)
    Discord API 對 JSON 的資料型態極為嚴格,例如 inline 必須是純布林值,value 必須為字串。我們透過 Newtonsoft.Json.Linq 進行嚴格排版:
' 組裝符合 Discord API 規範的 Embed JSON
webhookPayload = (New JObject(
    New JProperty("content", statusHeader),
    New JProperty("embeds", New JArray(
        New JObject(
            New JProperty("title", "📊 全球專利自動化監控情報戰報"),
            New JProperty("color", If(newFetchedCount > 0 AndAlso displayHigh > 0, 15158332, 3447003)),
            New JProperty("description", statusDesc & vbLf & "**檢索完成時間**:" & DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")),
            New JProperty("fields", New JArray(
                New JObject(New JProperty("name", "🔴 VIP 競品監控"), New JProperty("value", displayHigh.ToString() & " 件"), New JProperty("inline", True)),
                New JObject(New JProperty("name", "🟠 海外優先權覆核"), New JProperty("value", displayReview.ToString() & " 件"), New JProperty("inline", True)),
                New JObject(New JProperty("name", "🔵 一般常規專利"), New JProperty("value", displayGeneral.ToString() & " 件"), New JProperty("inline", True)),
                New JObject(New JProperty("name", "📈 監控總案件數"), New JProperty("value", "累計共 " & displayTotal.ToString() & " 筆專利"), New JProperty("inline", False)),
                New JObject(New JProperty("name", "📁 產出情報檔案"), New JProperty("value", htmlFilePath & " (Web 圖表看板)" & vbLf & csvFilePath & " (商業明細報表)"), New JProperty("inline", False))
            )),
            New JProperty("footer", New JObject(New JProperty("text", "UiPath 專利情報機器人 • 零成本自動化閉環")))
        )
    ))
)).ToString(Formatting.None)
  1. 使用原生 .NET 發送(解決 Cloudflare 防火牆阻擋)
    若使用空的 HttpClient,可能會被 Discord 防火牆視為惡意爬蟲拋出 403。因此我們在 InvokeCode 中明確注入 User-Agent
Try
    Using client As New System.Net.Http.HttpClient()
        client.DefaultRequestHeaders.Add("User-Agent", "UiPath-Patent-Monitor/1.0")
        Dim httpContent As New System.Net.Http.StringContent(payload, System.Text.Encoding.UTF8, "application/json")
        Dim resp = client.PostAsync(url, httpContent).Result
        Dim respText = resp.Content.ReadAsStringAsync().Result
        Console.WriteLine("[Discord 推播結果] 代碼: " & resp.StatusCode.ToString() & " | 回傳: " & respText)
    End Using
Catch ex As Exception
    Console.WriteLine("[Discord 推播異常] " & ex.ToString())
End Try

今日成果
https://ithelp.ithome.com.tw/upload/images/20260929/20178363OpKfkyDz9S.jpg


上一篇
【Day 14】 利用WEB實現動態專利情報看板
下一篇
【Day 16】讓報表井然有序!打造日期自動歸檔與資料夾管理機制
系列文
RPA流程自動化應用 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言