Skip to content
mobius1qwe edited this page Nov 13, 2026 · 1 revision

Home > Chatbot > Telegram

Chatbot no Telegram

Important

Em desenvolvimento (2.0). Ainda não está numa versão lançada e pode mudar.

Nível: intermediário

Em uma frase: TRALChatTelegram é o canal do Telegram do chatbot: recebe as mensagens por webhook ou perguntando ao Telegram (polling) e envia texto, botões, teclados, mídia, localização e enquetes pela Bot API.

Você vai precisar: os pacotes RALModuleChatPackage e RALModuleChatTelegramPackage, um cliente RAL com HTTPS (a OpenSSL ao lado do executável, ou um motor com TLS próprio) e o token de um robô do Telegram.

O token

  1. No Telegram, abra a conversa com @BotFather e mande /newbot.
  2. Escolha o nome e o usuário do robô (termina em bot).
  3. O BotFather responde com o token (123456:ABC...). Ele dá controle total do robô: guarde fora do código.
  FTelegram.TokenSource := tsEnvironment;
  FTelegram.TokenName := 'TELEGRAM_TOKEN';

O verbo "Testar token" (clique direito no componente) pergunta ao Telegram de quem é o token e mostra o usuário do robô.

Recebendo: polling ou webhook

Polling é o jeito mais simples: o canal pergunta ao Telegram numa thread própria. Não precisa de servidor nem de endereço público; serve para desenvolver, para um robô atrás de firewall e para robôs pequenos.

  FTelegram.ReceiveMode := crmPolling;
  FTelegram.Active := True;

Webhook é o Telegram chamando o seu servidor a cada mensagem: menos espera, menos tráfego, e serve vários robôs no mesmo servidor. Precisa de um endereço HTTPS público (portas 443, 80, 88 ou 8443) e de um TRALChatWebhookModule (chatbot):

  FTelegram.ReceiveMode := crmWebhook;
  FTelegram.SecretToken := GetEnvironmentVariable('TELEGRAM_SECRET');

Registre o endereço uma vez, pelo verbo "Registrar webhook" ou no código com RegisterWebhook('https://meu.dominio/telegram', vRelatorio); RemoveWebhook volta ao polling. O Telegram manda o SecretToken num cabeçalho em cada chamada e o módulo recusa (401) o que vier sem ele. Sem SecretToken, todo webhook é recusado.

Com crmAuto o canal decide ao ativar: webhook se houver um registrado no Telegram, polling se não houver.

O que o canal faz

recurso como
texto formatado TextMode: MarkdownV2 (padrão) ou HTML; o RAL escapa o que precisa
botões na mensagem AddButton; ButtonsPerRow por linha; AutoAnswerCallback para o relógio do botão parar na hora
teclado de respostas AddKeyboardRow; ids especiais cRALChatTelegramRequestContact e cRALChatTelegramRequestLocation pedem o telefone e a localização; RALChatTelegramRemoveKeyboard tira o teclado
mídia Media na mensagem que sai (arquivo, stream ou URL); na que chega, LoadMedia baixa até MaxDownloadSize (a Bot API vai até 20 MB)
editar, apagar, "digitando" Edit, Delete, SendTyping do robô
grupos um comando /start@outrobot é ignorado se BotUsername for o seu
o que pedir ao Telegram AllowedUpdates (por exemplo ["message","callback_query"])

Os limites do Telegram (cerca de 30 mensagens por segundo no total e 1 por segundo por conversa) já vêm em Rates; uma resposta 429 do Telegram faz a fila esperar o tempo que ele pediu.

Erros comuns

sintoma causa o que fazer
"Testar token" diz 401 token errado ou revogado peça outro ao BotFather (/token)
polling não recebe nada há um webhook registrado "Remover webhook", ou crmAuto
webhook não chega endereço sem HTTPS válido ou porta fora de 443/80/88/8443 um certificado do domínio (certificado automático)
webhook responde 401 SecretToken diferente do registrado registre o webhook de novo
texto com _ ou * sai quebrado MarkdownV2 com marcação escrita à mão Reply(..., AMarkup = False) deixa o RAL escapar, ou TextMode HTML

Veja também

Começar

Servidor

MQTT 🚧

E-mail 🚧

Chatbot 🚧

Cliente

Motores

Avançado

Ajuda

🚧 = em desenvolvimento, pode mudar

Clone this wiki locally