
自動売買ボットの稼働状況をDiscordに通知する方法【Python実装例つき】
※本記事にはアフィリエイト広告(プロモーション)が含まれています。
自動売買ボットを24時間運用するうえで、実は売買ロジックと同じくらい重要なのが通知の仕組みです。私のボットはDiscordに通知を送る設計にしており、スマホひとつで稼働状況を把握できます。
なぜDiscordなのか
- 無料でWebhook(通知の受け口)が使える
- スマホアプリのプッシュ通知がそのまま使える
- チャンネルを分ければ「取引通知」「日次レポート」「警告」を整理できる
- メールと違って埋もれない
LINEやTelegramでも同様のことはできますが、Webhookの手軽さでDiscordが頭ひとつ抜けています。
Webhookの作り方(3分)
- Discordでサーバーを作る(自分専用でOK)
- 通知用チャンネルの「編集」→「連携サービス」→「ウェブフック」→「新しいウェブフック」
- 「ウェブフックURLをコピー」を押す
これだけで、そのURLにPOSTするだけでメッセージが届くようになります。
Pythonでの実装例
import requests
WEBHOOK_URL = 'https://discord.com/api/webhooks/xxxx/yyyy'
def notify(message: str):
try:
requests.post(
WEBHOOK_URL,
json={'content': message},
timeout=10,
)
except Exception as e:
# 通知失敗でボット本体を止めないこと
print(f'Discord通知失敗: {e}')
notify('✅ エントリー: BUY BTC/USDT @ 108,500')
ポイントは通知の失敗でボット本体を落とさないこと。通知はあくまで補助機能なので、例外はログに残して握りつぶします。
実運用で踏んだ落とし穴
突然403エラーで通知が届かなくなった
ある日突然、Webhookが403(拒否)を返すようになりました。原因は2つありました。
- 古いドメイン
discordapp.comを使っていた — Discordは旧ドメインを段階的に廃止しており、Webhook URLはdiscord.comに書き換える必要があります(IDとトークン部分はそのまま使えます) - urllib のデフォルトUser-Agentが拒否される — Pythonの
urllibで送るとPython-urllib/x.xというUser-Agentが付き、これをDiscordが拒否することがあります。User-Agentヘッダーを独自の文字列に変えるか、requestsライブラリを使えば回避できます
どちらも「昨日まで動いていたのに」というパターンなので、通知が止まったらまずここを疑ってください。
通知設計のコツ: 送りすぎない
最初は何でも通知したくなりますが、多すぎると重要な通知が埋もれます。私の構成は:
- 即時通知: エントリー/決済、エラー、市場状態の変化(レンジ→強トレンド等)
- 毎時: 1行サマリー(残高・ポジション・直近成績)
- 日次: 詳細レポート(決済理由の内訳つき: 利確/損切り/トレーリング等)
- 週次: 7日間の総括
そしてもうひとつ重要なのが、休眠バグの記事でも書いた「何も起きないことの通知」です。取引が長期間ゼロのときに知らせる仕組みがあると、静かな故障に気づけます。
まとめ
通知はボットの「健康診断」です。Webhook自体は3分で作れるので、ボット開発の最初期に入れておくことを強くおすすめします。ボットの24時間運用環境についてはVPS運用の記事をどうぞ。