自動売買ボットの稼働状況をDiscordに通知する方法【Python実装例つき】


※本記事にはアフィリエイト広告(プロモーション)が含まれています。

自動売買ボットを24時間運用するうえで、実は売買ロジックと同じくらい重要なのが通知の仕組みです。私のボットはDiscordに通知を送る設計にしており、スマホひとつで稼働状況を把握できます。

なぜDiscordなのか

  • 無料でWebhook(通知の受け口)が使える
  • スマホアプリのプッシュ通知がそのまま使える
  • チャンネルを分ければ「取引通知」「日次レポート」「警告」を整理できる
  • メールと違って埋もれない

LINEやTelegramでも同様のことはできますが、Webhookの手軽さでDiscordが頭ひとつ抜けています。

Webhookの作り方(3分)

  1. Discordでサーバーを作る(自分専用でOK)
  2. 通知用チャンネルの「編集」→「連携サービス」→「ウェブフック」→「新しいウェブフック」
  3. 「ウェブフック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つありました。

  1. 古いドメイン discordapp.com を使っていた — Discordは旧ドメインを段階的に廃止しており、Webhook URLは discord.com に書き換える必要があります(IDとトークン部分はそのまま使えます)
  2. urllib のデフォルトUser-Agentが拒否される — Pythonの urllib で送ると Python-urllib/x.x というUser-Agentが付き、これをDiscordが拒否することがあります。User-Agent ヘッダーを独自の文字列に変えるか、requestsライブラリを使えば回避できます

どちらも「昨日まで動いていたのに」というパターンなので、通知が止まったらまずここを疑ってください。

通知設計のコツ: 送りすぎない

最初は何でも通知したくなりますが、多すぎると重要な通知が埋もれます。私の構成は:

  • 即時通知: エントリー/決済、エラー、市場状態の変化(レンジ→強トレンド等)
  • 毎時: 1行サマリー(残高・ポジション・直近成績)
  • 日次: 詳細レポート(決済理由の内訳つき: 利確/損切り/トレーリング等)
  • 週次: 7日間の総括

そしてもうひとつ重要なのが、休眠バグの記事でも書いた「何も起きないことの通知」です。取引が長期間ゼロのときに知らせる仕組みがあると、静かな故障に気づけます。

まとめ

通知はボットの「健康診断」です。Webhook自体は3分で作れるので、ボット開発の最初期に入れておくことを強くおすすめします。ボットの24時間運用環境についてはVPS運用の記事をどうぞ。

PR

筆者のボット+通知システムは ConoHa VPS 上で24時間動いています。セットアップ手順はVPS運用の記事で解説しています。

サービス開発やテスト環境に便利な【ConoHa】