H繁中版
文件教學與最佳實踐pipe script output
<!-- Source: https://hermesbible.com/docs/guides/pipe-script-output -->

hermes send 是一個小型、可腳本化的 CLI,可將訊息推送到任何 Hermes 已設定的訊息平台。將其視為跨平台的 curl 用於通知 — 你不需要運行中的閘道、不需要 LLM,也不需要在每個腳本中重新貼上機器人代碼。

用於:

  • 系統監控(記憶體、磁碟、GPU 溫度、長時間運行的工作完成)
  • CI/CD 通知(部署完成、測試失敗)
  • 需要 ping 你結果的 Cron 腳本
  • 從終端機快速發送一次性訊息
  • 將任何工具的輸出導入任何地方(make | hermes send --to slack:#builds

該指令重用 hermes gateway 已使用的相同憑證和平台適配器,因此沒有第二個設定介面需要維護。


快速開始

# 純文字到平台的主頻道
hermes send --to telegram "deploy finished"

# 從任何來源導入 stdout
echo "RAM 92%" | hermes send --to telegram:-1001234567890

# 傳送檔案
hermes send --to discord:#ops --file /tmp/report.md

# 附加標題/表頭行
hermes send --to slack:#eng --subject "[CI] build.log" --file build.log

# 線程目標(Telegram 主題、Discord 線程)
hermes send --to telegram:-1001234567890:17585 "threaded reply"

# 列出每個已設定的目標
hermes send --list

# 按平台過濾
hermes send --list telegram

參數參考

參數描述
-t, --to TARGET目的地。參見目標格式
message(位置參數)訊息文字。省略以從 --file 或 stdin 讀取。
-f, --file PATH從檔案讀取內文。--file - 強制使用 stdin。
-s, --subject LINE在內文前附加標題/表頭行。
-l, --list列出可用目標。可選的位置平台過濾器。
-q, --quiet成功時無 stdout(僅退出碼 — 適用於腳本)。
--json輸出傳送的原始 JSON 結果。
-h, --help顯示內建說明文字。

目標格式

格式範例含義
platformtelegram傳送到平台的已設定主頻道
platform:chat_idtelegram:-1001234567890特定數字聊天室 / 群組 / 使用者
platform:chat_id:thread_idtelegram:-1001234567890:17585特定線程或 Telegram 論壇主題
platform:#channeldiscord:#ops人類友善的頻道名稱(根據頻道目錄解析)
platform:+E164signal:+15551234567以電話號碼為主的平台:Signal、SMS、WhatsApp

Hermes 附帶適配器的任何平台都可以作為目標: telegramdiscordslacksignalsmswhatsappmatrixmattermostfeishudingtalkwecomweixinemail 等。

退出碼

代碼含義
0傳送(或列出)成功
1平台層級的傳遞失敗(認證、權限、網路)
2使用方式 / 參數 / 設定錯誤

退出碼遵循標準 Unix 約定,因此你的腳本可以像處理 curlgrep 一樣對它們進行分支。


訊息內文解析

hermes send 按以下順序解析訊息內文:

  1. 位置參數hermes send --to telegram "hi"
  2. --file PATHhermes send --to telegram --file msg.txt
  3. 管道 stdinecho hi | hermes send --to telegram

當 stdin 是 TTY(無管道)時,Hermes 不會等待輸入 — 你會收到明確的使用錯誤。這防止了腳本在意外省略內文時掛起。


實際範例

監控:記憶體 / 磁碟告警

將你的監控中臨時的 curl https://api.telegram.org/... 呼叫替換為單行可攜指令:

#!/usr/bin/env bash
ram_pct=$(free | awk '/^Mem:/ {printf "%d", $3 * 100 / $2}')
if [ "$ram_pct" -ge 85 ]; then
  hermes send --to telegram --subject "⚠ MEMORY WARNING" \
    "RAM ${ram_pct}% on $(hostname)"
fi

因為 hermes send 重用你的 Hermes 設定,相同的腳本在任何安裝了 Hermes 的主機上都能運作 — 無需手動將機器人代碼匯出到每台機器的環境中。

提示 — 不要讓閘道通知它自己

對於可能在閘道本身掙扎時觸發的監控(OOM 告警、磁碟滿告警),繼續使用最小的 curl 呼叫而非 hermes send。如果因為主機在顫抖而無法載入 Python 直譯器,你仍然希望那個告警能發出。

CI / CD:建置和測試結果

# 在 .github/workflows/deploy.yml 或任何 CI 腳本中
if ./scripts/deploy.sh; then
  hermes send --to slack:#deploys "✅ ${CI_COMMIT_SHA:0:7} deployed"
else
  tail -n 100 deploy.log | hermes send \
    --to slack:#deploys --subject "❌ deploy failed"
  exit 1
fi

Cron:每日報告

# Crontab 條目
0 9 * * * /usr/local/bin/generate-metrics.sh \
  | /home/me/.hermes/bin/hermes send \
      --to telegram --subject "Daily metrics $(date +%Y-%m-%d)"

長時間運行的任務:完成時 Ping

./train.py --epochs 200 && \
  hermes send --to telegram "training done" || \
  hermes send --to telegram "training failed (exit $?)"

使用 --json--quiet 進行腳本化

# 如果傳遞失敗則腳本硬性失敗;成功時不雜亂日誌
hermes send --to telegram --quiet "keepalive" || {
  echo "Telegram delivery failed" >&2
  exit 1
}

# 捕獲訊息 ID 供後續編輯/線程使用
msg_id=$(hermes send --to discord:#ops --json "build started" \
  | jq -r .message_id)

hermes send 需要閘道運行嗎?

通常不需要。 對於任何機器人代碼平台 — Telegram、Discord、Slack、Signal、SMS、WhatsApp Cloud API 及大多數其他平台 — hermes send 直接使用來自 ~/.hermes/.env~/.hermes/config.yaml 的憑證呼叫平台的 REST 端點。它是一個獨立的子行程,在訊息傳遞後立即退出。

只有外掛平台(依賴持久適配器連線的平台,例如保持長期 WebSocket 連線的自訂外掛)才需要活的閘道。在這種情況下你會收到一個明確的錯誤指向閘道;使用 hermes gateway start 啟動它並重試。


列出和發現目標

在傳送到特定頻道之前,你可以檢視可用的內容:

# 每個已設定平台的每個目標
hermes send --list

# 僅 Telegram 目標
hermes send --list telegram

# 機器可讀
hermes send --list --json

此清單從 ~/.hermes/channel_directory.json 建立,閘道在運行時每幾分鐘刷新一次。如果你看到「no channels discovered yet」,啟動一次閘道(hermes gateway start)以便它可以填充快取。

人類友善的名稱(discord:#opsslack:#engineering)在傳送時根據此快取解析,因此你無需記住數字 ID。


與其他方法的比較

方法多平台重用 Hermes 憑證需要閘道最適合
hermes send否(機器人代碼)以下所有
原始 curl 到每個平台每個分別腳本化手動關鍵監控
搭配 --delivercron 工作排程代理任務
send_message 代理工具在代理迴圈內部

hermes send 故意是最簡單的介面。如果你需要代理程式決定說什麼,從聊天或 Cron 工作內部使用 send_message 工具。如果你需要使用 LLM 生成內容的排程運行,使用 cronjob(action='create', prompt=...) 搭配 deliver='telegram:...'。如果你只需要導入一個原始字串,就用 hermes send


相關



使用 Nous Portal 執行 Hermes Agent