DiscordをAIエージェントの窓口にする


ターミナルで動くAIエージェントは強力ですが、毎回Macの前に座るとは限りません。そこでDiscordを、外出先から状況を確認し、必要な指示だけを出す窓口にしました。

Discord Botを使う理由

Discordへ一方向に通知するだけならWebhookが簡単です。一方、Hermes Agentと会話し、応答や承認を返したい場合はBotとGatewayが必要になります。私は「通知だけの処理」と「対話が必要な処理」を分けました。

  • Webhook向き:定型レポート、障害通知、一方向の投稿
  • Bot向き:質問への応答、コマンド、承認、会話の継続

Hermes Agentの公式説明では、単一のGatewayプロセスからDiscordを含む複数のメッセージ基盤へ接続できます。

最小権限でBotを作る

Discord Developer PortalでアプリとBotを作り、専用のテストサーバーへ追加します。最初から管理者権限を付けず、利用するチャンネルの閲覧と投稿など、必要な権限だけにします。

メッセージ内容を受け取る用途ではMESSAGE_CONTENTが関係します。Discord公式ではこれはPrivileged Intentに分類され、Developer Portal側で有効化が必要です。不要なIntentは有効にしません。

認証情報と利用者制限

Botトークンはブログ、ソースコード、スクリーンショットへ入れません。環境変数やHermesの秘密情報管理へ保存し、漏れた可能性があればDeveloper Portalで再発行します。

さらに、Botへ話しかけられる利用者を制限します。Hermes AgentのGatewayにはプラットフォーム別allowlistやDMペアリングがあります。公開サーバーでallow allにするのではなく、自分のDiscordユーザーIDだけを許可するところから始めます。

動作確認は専用チャンネルで

本番チャンネルへ入れる前に、次を確認しました。

  1. 許可した利用者のメッセージにだけ応答する
  2. 許可していない利用者を拒否する
  3. 長い処理中でも停止指示を送れる
  4. 秘密情報が返信やログへ出ない
  5. Gateway停止時に無言で止まらず、監視で分かる

Gatewayは便利ですが、動いていることが前提です。後の回で扱うcronもGateway停止中は自動実行されません。窓口を作ることと、窓口の稼働を監視することはセットです。

再現チェック

  • [ ] テスト用サーバーと専用チャンネルを使った
  • [ ] Botへ管理者権限を与えていない
  • [ ] 必要なIntentだけを有効にした
  • [ ] Botトークンを秘密情報として保存した
  • [ ] 利用者allowlistまたはDMペアリングを設定した
  • [ ] Gateway停止を検知する方法を決めた

次回は、このDiscord窓口へ「重要メールだけ」を送る小さな自動化を作ります。

参考にした一次情報


Back to top