hermes sendでアプリ通知をSlackへ安全に中継する


hermes sendでアプリ通知をSlackへ安全に中継する

個別の自動化アプリがSlackへ通知したいとき、いちばん簡単なのはWebhook URLを環境変数に置いてHTTP POSTする方法です。ただ、アプリが増えるほど秘密情報の置き場所も増え、通知先の変更や権限管理が散らばります。今回は、既存アプリの通知層をHermes Agentの`hermes send`へ寄せ、Slack通知を「各アプリがトークンを持つ」のではなく「Hermesの既存接続を再利用する」形にしました。

実際に行ったこと

手元の実装では、通知モジュールにSlack用の薄いラッパーを追加しました。設定値は`SLACK_NOTIFY_TARGET`と`HERMES_BIN`だけに絞り、通知先が未設定なら何も送らず`False`を返します。設定されている場合は、次のようにHermes CLIをサブプロセスで呼び出します。

“`python
subprocess.run([
HERMES_BIN,
"send",
"–to",
SLACK_NOTIFY_TARGET,
"–quiet",
message,
], timeout=30, check=False)
“`

既存のDiscord通知も残し、上位の`notify()`はDiscordとSlackの両方を呼びます。どちらか一方でも成功すれば通知成功とみなすため、片系の障害で日次処理全体が失敗しない構成です。確認日現在、対象テストでは未設定時のスキップ、`hermes send`呼び出し、非ゼロ終了、実行エラー、タイムアウト、両チャンネルへのファンアウトを検証し、対象テストは成功しました。

処理の流れ

1. アプリは通知本文だけを生成する。
2. Slack通知先が空なら安全にスキップする。
3. 通知先があれば`hermes send –to slack:… –quiet`を実行する。
4. CLIの終了コードを見て成功・失敗を返す。
5. 例外やタイムアウトは握りつぶさずログ化し、呼び出し元へ`False`を返す。

この構成にすると、アプリ側にはSlack Bot tokenやWebhook URLを置かずに済みます。Slack接続の実体はHermes側の設定と資格情報に集約され、通知アプリは「どこへ送るか」というターゲット名だけを知ればよくなります。

再現手順

まずHermes Agent側でSlack送信が使える状態にしておきます。公式ドキュメントでは、`hermes send`はTelegram、Discord、Slackなどの設定済みメッセージング先へ、LLMや常駐Gatewayループなしで一回だけ送信できるCLIとして説明されています。

“`bash
hermes send –list slack
hermes send –to slack:#alerts "test message"
“`

次にアプリ側へ通知先とHermes実行ファイルを渡します。

“`bash
export SLACK_NOTIFY_TARGET="slack:#alerts"
export HERMES_BIN="/path/to/hermes"
“`

Python側では、上の`subprocess.run()`を小さな関数に閉じ込め、戻り値を`True`/`False`へ正規化します。テストでは実際のSlackへ送らず、`subprocess.run`をモックして「正しいコマンド列になっているか」「失敗時にFalseになるか」を確認すると安全です。

失敗しやすい点と安全策

Slackのチャンネル名解決はHermes側のチャンネル一覧に依存します。見つからない場合は、`hermes send –list slack`で見えるターゲットを使ってください。また、監視用途で本当に最後の非常通報が必要な場面では、HermesやPython環境自体が壊れている可能性もあります。その場合は公式ドキュメントの注意どおり、最小限の直接送信経路を別に残す判断もあります。

投資・会計・医療・法務など人の判断が必要な内容を通知する場合、Slack通知は確認の入口にとどめ、最終判断や登録操作は人が確認する設計にしてください。

再現チェックリスト

  • [ ] `hermes send –list slack`で送信先候補が見える
  • [ ] アプリ側にSlack tokenやWebhook URLを保存していない
  • [ ] 通知先未設定時は処理全体が落ちない
  • [ ] 非ゼロ終了、実行エラー、タイムアウトのテストがある
  • [ ] Discordなど既存通知とのファンアウト結果を確認した
  • [ ] 本番送信前に小さなテストメッセージで到達確認した

公式一次情報

  • [Hermes Agent CLI Commands Reference](https://hermes-agent.nousresearch.com/docs/reference/cli-commands)
  • [Pipe Script Output to Messaging Platforms](https://hermes-agent.nousresearch.com/docs/guides/pipe-script-output)
  • [Automate Anything with Cron](https://hermes-agent.nousresearch.com/docs/guides/automate-with-cron)

Back to top