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 | 顯示內建說明文字。 |
目標格式
| 格式 | 範例 | 含義 |
|---|---|---|
platform | telegram | 傳送到平台的已設定主頻道 |
platform:chat_id | telegram:-1001234567890 | 特定數字聊天室 / 群組 / 使用者 |
platform:chat_id:thread_id | telegram:-1001234567890:17585 | 特定線程或 Telegram 論壇主題 |
platform:#channel | discord:#ops | 人類友善的頻道名稱(根據頻道目錄解析) |
platform:+E164 | signal:+15551234567 | 以電話號碼為主的平台:Signal、SMS、WhatsApp |
Hermes 附帶適配器的任何平台都可以作為目標:
telegram、discord、slack、signal、sms、whatsapp、matrix、
mattermost、feishu、dingtalk、wecom、weixin、email 等。
退出碼
| 代碼 | 含義 |
|---|---|
0 | 傳送(或列出)成功 |
1 | 平台層級的傳遞失敗(認證、權限、網路) |
2 | 使用方式 / 參數 / 設定錯誤 |
退出碼遵循標準 Unix 約定,因此你的腳本可以像處理 curl 或 grep 一樣對它們進行分支。
訊息內文解析
hermes send 按以下順序解析訊息內文:
- 位置參數 —
hermes send --to telegram "hi" --file PATH—hermes send --to telegram --file msg.txt- 管道 stdin —
echo 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:#ops、slack:#engineering)在傳送時根據此快取解析,因此你無需記住數字 ID。
與其他方法的比較
| 方法 | 多平台 | 重用 Hermes 憑證 | 需要閘道 | 最適合 |
|---|---|---|---|---|
hermes send | ✅ | ✅ | 否(機器人代碼) | 以下所有 |
原始 curl 到每個平台 | 每個分別腳本化 | 手動 | 否 | 關鍵監控 |
搭配 --deliver 的 cron 工作 | ✅ | ✅ | 否 | 排程代理任務 |
send_message 代理工具 | ✅ | ✅ | 否 | 在代理迴圈內部 |
hermes send 故意是最簡單的介面。如果你需要代理程式決定說什麼,從聊天或 Cron 工作內部使用 send_message 工具。如果你需要使用 LLM 生成內容的排程運行,使用 cronjob(action='create', prompt=...) 搭配 deliver='telegram:...'。如果你只需要導入一個原始字串,就用 hermes send。
相關
- 使用 Cron 自動化任何事 — 排程工作其輸出自動傳送到任何平台。
- 閘道內部 —
hermes send與 cron 傳遞共用的傳遞路由器。 - 訊息平台設定 — 每個平台的一次性設定。