本文へスキップ

ソリューション · ボット

Telegram ボット向けの VPS

ボットはアイドル時 100 MB 未満で、ほとんどの時間を待機に費やすため、マシンが制約になることはまずありません。U1-1(月額 $6.90)で 1 つのボットを問題なく稼働できます。実際に請求額を左右するのはメディアと、独自の Bot API サーバーを運用するかどうかです。どちらも計算で求められ、以下に示します。

判断の前提となる判断

Webhook かロングポーリングか

bot にドメイン、証明書、開放ポートが必要かどうかを決めるのは、プランではなくこちらです。

ロングポーリング

bot は Telegram へ外向きに接続し、更新を待ちます。ドメインも TLS 証明書も、インターネットに開放するポートも不要で、NAT の内側でも動作します。最も早く動かせる方法であり、ほとんどの bot にとって恒久的な解決策としても十分です。

Webhook

Telegram がお客様に接続します。パブリックアドレス、有効な証明書、開放ポートが必要です(ここにあるどのプランでも対応可能)。その代わりにポーリングループがなく、実際の負荷のもとでよりスケールします。移行は負荷やレイテンシーが必要とした時点で行い、それより前には不要です。

計算してみる

プランで実際に動かせるボット数

ボット数 =(RAM − オペレーティングシステムの 300 MB)÷ ボット 1 つが使用するメモリ。2 つの列は、ステートレスなコマンドボットと、ORM・スケジューラー・キャッシュを備えたボットです。

各プランのボットプロセス容量と月間の転送量枠(最新価格)
プランRAM軽いボット重いボット転送量価格デプロイ
U1-1ボット 1 つ、利用者数を問わず1 GB124Unmetered(計測なし)$6.90デプロイ
C1-1-25ボット 1 つ、計測ありだが安価1 GB1241 TB$9.90デプロイ
GL2-4複数のボット、またはデータベース付きのボット4 GB6325Unmetered(計測なし)$11.90デプロイ
BD-8セルフホストの Bot API サーバー8 GB1315232 TB$12.90デプロイ

bot のユーザー数はこの計算に含まれていません。問題にも含まれないからです。Telegram はユーザーごとに接続を開くのではなく、更新を 1 件ずつプロセスに渡します。答えを変えるのは、ご自身で保持する状態です。大きなキャッシュ、プロセス内データベース、モデルなどです。

料金を決める数値

メモリではなくメディア

平均ファイルサイズ × 1 日のメッセージ数 × 30。送受信の両方が計上されます。受信したファイルも転送量です。

1 日 100 件、5,000 件、50,000 件のメッセージにおける種類別の月間転送量
bot が扱うデータ100/日5,000/日50,000/日
テキストのみコマンドと返信。実質的に無料です。< 1 GB< 1 GB3 GB
写真圧縮された画像の送受信。< 1 GB44 GB439 GB
ボイスメッセージと短い動画コミュニティ bot の一般的な負荷です。9 GB439 GB4.3 TB
ドキュメントと長い動画通常のボットに対する Telegram 自身のダウンロード上限。59 GB2.9 TB28.6 TB

マシンを変える唯一の要素

公開 Bot API 上のボットは、最大 20 MB のファイルをダウンロードし、最大 50 MB をアップロードできます(当社ではなく Telegram の制限です)。ファイルがお客様のディスクに保存されることはありません。独自の Bot API サーバーを運用すると、上限は 2 GB になり、すべてのファイルがお客様のサーバーに保存されます。ここでディスクと転送量が付随的なものではなくなります。BD-8 は 100 GB の SSD と 32 TB を $12.90 で提供し、この用途に適した構成です。そうした運用をしないのであれば、その分を支払う必要はありません。

正直なところ

当社が実際に購入するなら

当社自身も Telegram bot を運用しています。これは当社ならそれを載せるマシンです。

ボット 1 つの場合

U1-1 · $6.90/月

1 コア、1 GB、15 GB SSD、転送量の計測なし。そのため、bot が予期せずメディアを扱い始めても、想定外の請求が発生することはありません。bot を Restart=always 付きで systemd の管理下に置けば、停止する原因として残るのはご自身のコードだけです。手狭になった場合、bot の移行はディレクトリとトークンをコピーするだけです。

よくある質問

購入前によくある質問。

Telegram ボットに必要な RAM は?
一般に販売されている量よりはるかに少なくて済みます。ボットはほとんどの時間を待機に費やす常駐プロセスです。ステートレスなコマンドボットは約 60 MB、ORM・スケジューラー・キャッシュを備えたボットは 150 MB 程度です。オペレーティングシステムが約 300 MB を使用した後でも、1 GB のマシンには重いボット 4 個、または軽いボット 12 個を動かす余裕があります。ユーザー数はほとんど影響しません。Telegram はユーザーごとに接続するのではなく、更新を 1 件ずつプロセスに届けるためです。答えを変えるのは、お客様自身がメモリに保持する状態(大きなキャッシュ、プロセス内データベース、モデルなど)です。
Webhook とロングポーリング、どちらにすべきですか?
最初はロングポーリング、必要になったら Webhook です。ロングポーリングでは、ボットが Telegram への接続を開いて待機します。ドメインも証明書も開放ポートも不要なので、NAT の内側でも動作し、最も早く稼働させられる方法です。Webhook では Telegram がお客様に接続するため、パブリックアドレス、有効な TLS 証明書、インターネットに開放されたポートが必要です。その代わりにポーリングループが完全になくなり、ボットが本当に忙しいときによりスケールします。どちらもここにある最小のマシンで問題なく動作します。移行する正当な理由は負荷やレイテンシーであり、流行ではありません。
ファイルサイズの制限はどのくらいですか?
これは当社ではなく Telegram 側の制限です。公開 Bot API を使う bot は、ダウンロードが最大 20 MB、アップロードが最大 50 MB です。独自の Bot API サーバーを運用するとこれが 2 GB に引き上げられ、さらに重要な点として、ファイルは Telegram のディスクを経由するのではなく、お使いのサーバーのディスクに保存されます。必要なマシンを実際に変えるのはこの一点だけです。急にディスクと転送量が重要になるため、上の比較表ではこの行にだけ BD-8 を割り当てています。
帯域幅が足りなくなることはありますか?
テキストボットであれば、決してありません。メディアボットであれば可能性があり、30 秒の計算をする価値があります:平均ファイルサイズ × 1 日のメッセージ数 × 30。1 日 5 万件の 3 MB のボイスメッセージは月に約 4.3 TB となり、多くの安価なプランの転送量枠を超えますが、BD-8 の 32 TB には遠く及びません。また、Unmetered ラインではこの問題自体が生じません。送受信の両方が計上されます。ボットが受信するファイルも送信するファイルも転送量です。
ターミナルを閉じた後もボットを動かし続けるには?
screen セッションではなく systemd ユニットを使います。Restart=always を指定した小さなサービスファイルを作成して有効にすれば、クラッシュ後も再起動後も、お客様が起きていなくてもボットは復帰します。これは VPS でボットが「停止する」最も一般的な理由であり、ホスティングの問題ではありません。手動で起動したプロセスは、起動元の SSH セッションとともに終了します。その形でパッケージ化したい場合は、再起動ポリシーを設定した Docker でも同じことができます。
1 台のサーバーで複数のボットを実行できますか?
はい。多くの方はそうすべきです。各 bot は独自の systemd ユニットと独自のトークンを持つ別プロセスで、共有するのはマシンと、必要であればデータベースだけです。比較表の計算はまさにこの問いへの答えです。4 GB のマシンは、メモリが制約になるまでに重い bot を 25 個収容できます。別々の人向けの bot であれば、ポートとユーザーを分けてください。
bot はどの地域で運用すべきですか?
ユーザーがアクセスでき、Telegram へのレイテンシーが妥当な場所であればどこでも構いません。ボットはユーザーと直接ではなく Telegram のインフラと通信するため、通常の「利用者の近くに」という原則はウェブサイトほど重要ではありません。ボットが同じユーザーにウェブダッシュボードや API も提供する場合は、そちらに合わせて地域を選んでください。迷う場合は、二つのリージョンで時間単位でデプロイして測定し、劣るほうを削除してください。1 時間あたり $0.0113 なので、安価に試せます。