Pular para o conteúdo

Soluções · Bots

Um VPS para um bot do Telegram

Um bot em repouso usa menos de cem megabytes e passa a vida esperando, então a máquina quase nunca é a limitação: o U1-1 por $6.90 por mês executa um adequadamente. O que realmente decide a sua conta é a mídia, e se você roda seu próprio servidor da Bot API. Ambos são aritmética, e ambos estão abaixo.

A decisão por trás da decisão

Webhook ou long polling

É isso, e não o plano, que define se o seu bot precisa de um domínio, um certificado e uma porta aberta.

Long polling

Seu bot se conecta ao Telegram e aguarda atualizações. Sem domínio, sem certificado TLS, sem porta aberta para a internet, funciona atrás de NAT. É a maneira mais rápida de colocar algo para rodar e é uma solução permanente perfeitamente adequada para a maioria dos bots.

Webhook

O Telegram se conecta a você. Precisa de um endereço público, um certificado válido e uma porta aberta (tudo isso qualquer plano daqui oferece) e, em troca, não há loop de polling e a escala é melhor sob carga real. Mude quando a carga ou a latência pedirem, não antes.

A aritmética

Quantos bots um plano realmente comporta

Bots = (RAM − 300 MB do sistema operacional) ÷ o que um bot ocupa. As duas colunas são um bot de comandos sem estado e um com ORM, agendador e cache.

Capacidade de processos de bot e franquia mensal de transferência de cada plano, com preços em tempo real
PlanoRAMBots levesBots pesadosTransferênciaPreçoImplantar
U1-1Um bot, qualquer tamanho de público1 GB124Unmetered$6.90Implantar
C1-1-25Um bot, medido mas barato1 GB1241 TB$9.90Implantar
GL2-4Vários bots, ou um bot com banco de dados4 GB6325Unmetered$11.90Implantar
BD-8Um servidor da Bot API auto-hospedado8 GB1315232 TB$12.90Implantar

O número de usuários do seu bot não entra nesta aritmética, porque não faz parte do problema: o Telegram entrega as atualizações ao seu processo uma de cada vez, em vez de abrir uma conexão por usuário. O que muda a resposta é o estado que você mesmo mantém: um cache grande, um banco de dados no processo, um modelo.

O número que define a fatura

Mídia, não memória

Tamanho médio do arquivo × mensagens por dia × 30. As duas direções contam: um arquivo recebido também é tráfego.

Transferência mensal por tipo de mensagem com cem, cinco mil e cinquenta mil mensagens por dia
O que o bot transfere100/dia5,000/dia50,000/dia
Somente textoUm comando e uma resposta. Praticamente nada.< 1 GB< 1 GB3 GB
FotosUma imagem comprimida, enviada e recebida.< 1 GB44 GB439 GB
Mensagens de voz e vídeos curtosA carga habitual de um bot de comunidade.9 GB439 GB4.3 TB
Documentos e vídeos longosO próprio limite de download do Telegram para um bot comum.59 GB2.9 TB28.6 TB

A única coisa que muda a máquina

Um bot na Bot API pública pode baixar arquivos de até 20 MB e enviar até 50 MB (limites do Telegram, não nossos), e os arquivos nunca passam pelo seu disco. Rode seu próprio servidor da Bot API e o teto passa a ser 2 GB, e cada arquivo chega ao seu servidor. É nesse ponto que disco e transferência deixam de ser secundários: o BD-8 oferece 100 GB de SSD e 32 TB por $12.90, que é o perfil adequado. Se você não fizer isso, não pague por isso.

Com franqueza

O que nós realmente compraríamos

Nós mesmos rodamos um bot do Telegram. Esta é a máquina em que o colocaríamos.

Para um bot

U1-1 · $6.90/mês

1 núcleo, 1 GB, 15 GB SSD e sem medição de tráfego: assim, um bot que inesperadamente comece a transferir mídia não pode gerar uma fatura que você não esperava. Coloque o bot sob o systemd com Restart=always, e a única forma restante de ele cair é o seu próprio código. Se ele crescer além da máquina, mover um bot é copiar um diretório e um token.

Perguntas

O que as pessoas perguntam antes de comprar.

Quanta RAM um bot do Telegram precisa?
Bem menos do que costuma ser vendido. Um bot é um processo de longa duração que passa quase todo o tempo esperando: um bot de comandos sem estado fica em torno de 60 MB, e um com ORM, agendador e cache se aproxima de 150 MB. Depois que o sistema operacional ocupa seus 300 MB aproximadamente, uma máquina de 1 GB ainda tem espaço para 4 bots pesados ou 12 leves. O número de USUÁRIOS quase não influencia, porque o Telegram entrega as atualizações uma de cada vez ao seu processo, e não uma conexão por usuário. O que muda a resposta é o estado que você mesmo mantém na memória: um cache grande, um banco de dados no processo, um modelo.
Webhook ou long polling?
Long polling para começar, webhooks quando fizer diferença. Com long polling, seu bot abre uma conexão de saída para o Telegram e espera: não precisa de domínio, certificado nem porta aberta, o que significa que funciona atrás de NAT e é a forma mais rápida de colocar algo para rodar. Com um webhook, o Telegram se conecta a VOCÊ, então é preciso um endereço público, um certificado TLS válido e uma porta aberta para a internet; em troca, o loop de polling desaparece por completo e a escala é melhor quando o bot está realmente ocupado. Ambos rodam bem na menor máquina daqui. O motivo honesto para mudar é carga ou latência, não moda.
Quais são os limites de tamanho de arquivo?
Limites do próprio Telegram, não nossos: um bot que usa a Bot API pública pode baixar arquivos de até 20 MB e enviar até 50 MB. Rodar seu próprio servidor da Bot API eleva isso para 2 GB e, mais importante, faz os arquivos chegarem ao disco do seu servidor em vez de passarem pelo do Telegram. Essa é a única mudança que realmente altera a máquina de que você precisa: de repente, disco e transferência importam, e é por isso que a tabela acima coloca BD-8 nessa linha e não nas outras.
Vou ficar sem largura de banda?
Um bot de texto, nunca. Um bot de mídia, talvez, e vale trinta segundos de aritmética: tamanho médio do arquivo × mensagens por dia × 30. Cinquenta mil mensagens de voz por dia a 3 MB dão cerca de 4.3 TB por mês, o que ultrapassa a franquia da maioria dos planos baratos e está longe dos 32 TB do BD-8, ou da linha não medida, onde a questão nem se coloca. As duas direções contam: um arquivo que seu bot recebe e um que ele envia são ambos tráfego.
Como mantenho o bot rodando depois de fechar o terminal?
Uma unidade systemd, não uma sessão screen. Escreva um pequeno arquivo de serviço com Restart=always, habilite-o, e o bot volta após uma falha e após uma reinicialização sem que você precise estar acordado. Esse é o motivo mais comum para um bot "cair" em um VPS, e não é um problema de hospedagem: um processo iniciado manualmente morre com a sessão SSH que o iniciou. Docker com uma política de reinício faz o mesmo trabalho, se você preferir empacotá-lo assim.
Posso rodar vários bots em um servidor?
Sim, e a maioria das pessoas deveria. Cada um é um processo separado, com sua própria unidade systemd e seu próprio token; eles compartilham a máquina, o banco de dados se você quiser, e nada mais. A aritmética da tabela responde exatamente a essa pergunta: uma máquina de 4 GB comporta 25 bots pesados antes que a memória seja o limite. Mantenha-os em portas e usuários separados se forem para pessoas diferentes.
Em qual região o bot deve rodar?
Em qualquer lugar que seus usuários alcancem e onde sua latência até o Telegram seja razoável: o bot se comunica com a infraestrutura do Telegram, não diretamente com seus usuários, então a regra habitual de "ficar perto do seu público" importa menos aqui do que para um site. Se o bot também oferece um painel web ou uma API a esses mesmos usuários, dimensione a região para isso. Se tiver dúvidas, implante por hora em duas regiões, meça e destrua a que perder: $0.0113 por hora torna esse experimento barato.