Discord BotとWebhook、どちらを選ぶべきか
AIエージェントの結果をDiscordへ届ける方法には、BotとWebhookがあります。機能が多いBotを常に選ぶ必要はありません。必要な双方向性で決めます。
比較表
| 観点 | Webhook | Bot |
|—|—|—|
| 主な用途 | 一方向の投稿 | 会話、コマンド、イベント受信 |
| 認証情報 | Webhook URL | Bot token |
| Gateway接続 | 不要 | イベント受信では必要 |
| 受信 | 基本的にできない | メッセージや操作を受信できる |
| 権限 | 投稿先中心 | Intentとサーバー権限 |
| 実装量 | 少ない | 多い |
| 向く例 | 日次レポート、障害通知 | AIとの対話、承認、状態確認 |
Discord公式も、チャンネルへメッセージを押し込むだけならWebhookがBotより適する場合があると説明しています。
Webhookを選ぶ場合
日次レポートやビルド結果など、返信を受け取らない通知に向きます。URLを知る者が投稿できるため、Webhook URLは秘密情報です。Gitやブログへ載せず、漏れたら削除して作り直します。
投稿先チャンネルを限定し、本文の個人情報を絞ります。障害時の再試行で同じメッセージを連投しないIDも必要です。
Botを選ぶ場合
利用者の質問へ答える、承認ボタンを処理する、スラッシュコマンドを使う場合はBotです。受け取るイベントに応じてGateway Intentを設定します。
`MESSAGE_CONTENT`、`GUILD_MEMBERS`、`GUILD_PRESENCES`はPrivileged Intentです。必要なものだけをDeveloper Portalで有効にし、サーバーへ追加する権限も最小化します。
AIエージェントのBotでは、Discord側の権限に加えて、誰がエージェントへ話しかけられるかをallowlistで制限します。チャンネルへ入れることと、OS上のToolを実行できることは影響が違います。
両方を使い分ける
一方向の定型通知はWebhook、対話と承認はBotに分ける構成も有効です。BotやGatewayが停止しても、別経路のWebhookで障害を通知できる可能性があります。ただし秘密情報と監視対象が増えるため、目的のない二重化は避けます。
まとめ
「送るだけ」ならWebhook、「受けて判断する」ならBotが基本です。最小機能を選ぶほど、権限、認証、監視の範囲を小さくできます。
参考にした一次情報
- [Discord Bots & Companion Apps](https://docs.discord.com/developers/platform/bots)
- [Discord Webhooks](https://docs.discord.com/developers/resources/webhook)
- [Discord Gateway Intents](https://docs.discord.com/developers/events/gateway#gateway-intents)
