自動化流程的終點不能停在「檔案存檔」,必須主動出擊!我們將實現全自動監控體系的最後一步,情報主動推播。
一、選擇 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 等),推播系統至今累計監控之專利情報態勢,讓主管隨時掌握總庫存比例!
三、 核心實作代碼解析
' 組裝符合 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)
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
今日成果