Telegram Bot · Bot API oficial
TELEGRAM BOT API · OFICIAL

Telegram Bot API

Documentação da integração com Telegram Bot API oficial na APIFacil. Criação de bot via BotFather, envio de mensagens, webhook de eventos, anti-spam automático e suporte completo a mídia, grupos e canais.

7
ENDPOINTS
30/s
RATE LIMIT GLOBAL
20MB
MÍDIA MÁX
0
BANIMENTOS
PRO
Por que Telegram
Vantagens do canal Telegram

O Telegram Bot API é a integração oficial do Telegram para bots. Você cria um bot via @BotFather, conecta na APIFacil e passa a enviar/receber mensagens via API HTTP — igual ao WhatsApp, mas sem risco de banimento.

SEM BANIMENTO
Bots oficiais — rate limits respeitados automaticamente
GRUPOS E CANAIS
Suportados nativamente (chat_id negativo)
SEM TELEFONE
Identificação por chat_id numérico
TEXTO LIVRE
Sem templates HSM — mensagens sem aprovação prévia
MÍDIA COMPLETA
Imagem, áudio, vídeo, documento, localização
BOTÕES INLINE
inline_keyboard com callback_data
Como funciona: Você cria um bot no @BotFather (dentro do Telegram), recebe um bot_token, cola no painel da APIFacil e configura o webhook. A APIFacil guarda o token criptografado e gerencia o webhook automaticamente.
AUTH
Autenticação
Todas as rotas usam o mesmo token da APIFacil no header Authorization: {seu_token} (sem prefixo "Bearer "). O token é gerado no painel do usuário. A APIFacil autentica você no Telegram internamente — você não precisa enviar o bot_token na API.
BASH
# Header correto: Authorization + token direto (SEM "Bearer") curl -X POST https://apifacil.dev/api/v1/whatsapp/enviar-mensagem \ -H "Authorization: SEU_TOKEN_AQUI" \ -H "Content-Type: application/json" \ -d '{"mensagem":"Olá","telefone":"123456789","instancia":"10"}'
Importante: O campo telefone na API é usado como chat_id para Telegram. Envie o chat_id numérico (ex: 123456789 para privado, -1001234567890 para grupo/canal).
Identificador da instância: O campo instancia aceita o ID, código ou public_token da instância Telegram. O roteamento é automático pelo tipo_conexao=telegram.
FLOW
Como o envio funciona
Fluxo de roteamento
1
Requisição HTTP
POST /api/v1/whatsapp/enviar-mensagem
2
Roteia por tipo_conexao
telegram → TelegramMessageSender
3
Anti-spam Redis
1/s por chat, 20/min por grupo
4
Telegram Bot API
POST api.telegram.org/bot<token>/sendMessage
5
Job async + webhook status
sent/delivered/read
O RoteiaEnvioPorTipo trait identifica que a instância é Telegram e despacha para o SendTelegramMessageJob na fila telegram_messages. O job respeita os rate limits e re-enfileira com Retry-After em caso de HTTP 429.
BOT
Criar o bot no BotFather
Passo a passo no Telegram
O BotFather é o bot oficial do Telegram que cria e gerencia bots. Todo bot Telegram nasce aqui. O processo leva menos de 2 minutos e é gratuito.

Passo a passo (conversa com @BotFather):

BotFather
VOCÊ: Abra o Telegram e busque por @BotFather
VOCÊ: Toque em /start para iniciar o BotFather
VOCÊ: Envie /newbot para criar um novo bot
BOTFATHER: "Alright, a new bot. How are we going to call it? Please choose a name for your bot."
VOCÊ: Digite o nome do bot (ex: APIFacil Suporte Bot) — é o nome que aparece no perfil
BOTFATHER: "Good. Now let's choose a username for your bot. It must end in `bot`. Like this, for example: TetrisBot or tetris_bot."
VOCÊ: Digite o username (ex: apifacil_suporte_bot) — deve ser único e terminar com bot
BOTFATHER: "Done! Congratulations on your new bot. You will find it at t.me/apifacil_suporte_bot. [...] Use this token to access the HTTP API:" 123456789:AAH_DUMMY_TOKEN_REPLACE_WITH_REAL_ONE_xyz
BOTFATHER: "Keep your token secure and store it safely, it can be used by anyone to control your bot."
Pronto! Você tem o bot_token. Guarde com segurança — ele dá controle total do bot. Cole no painel da APIFacil na aba "Telegram" da instância.
CMD
Comandos do BotFather
Configurações opcionais

Além de criar o bot, o BotFather permite configurar opções úteis:

COMANDOO QUE FAZRECOMENDADO
/newbotCria um novo botSIM — obrigatório
/setnameAltera o nome de exibiçãoOpcional
/setdescriptionDescrição do bot (perfil)SIM
/setabouttextSobre o bot (texto curto)SIM
/setuserpicFoto de perfil do botSIM
/setcommandsLista de comandos do bot (menu)SIM — ex: /start, /ajuda
/tokenGera um novo token (revoga o anterior)Só se comprometer
/revokeRevoga o token atual e gera novoSó se comprometer
/deletebotRemove o bot permanentementeCuidado
Exemplo de comandos (para /setcommands):
start - Iniciar conversa ajuda - Mostrar ajuda status - Verificar status do bot
KEY
O bot_token
Formato e segurança
O bot_token é a chave completa de acesso ao bot. Quem tiver o token pode enviar e receber mensagens em nome do bot. Nunca faça commit no git, não cole em chat público e não exponha no frontend.
FORMATO
123456789:AAH_DUMMY_TOKEN_REPLACE_WITH_REAL_ONE_xyz # [bot_id]:[35-40 caracteres alfanuméricos e _-] # O número antes dos : é o bot_id # A parte depois dos : é o segredo
Na APIFacil: O bot_token é criptografado com Laravel Crypt (AES-256) antes de ser salvo no banco. Nunca é retornado em endpoints da API. O painel mostra apenas bot_username e status.
Se comprometer o token: Abra o @BotFather/revoke → ele gera um novo token e invalida o antigo. Depois cole o novo no painel da APIFacil.
PAIN
Configurar no painel APIFacil
Após ter o bot_token
1
Criar instância
Tipo: Telegram
2
Aba Telegram
Painel › WhatsApp › [instância] › Telegram
3
Colar bot_token
Clica em "Conectar Bot"
4
Configurar webhook
Clica em "Configurar Webhook"
5
Bot operacional
status=connected
Ao colar o token e clicar "Conectar Bot", o painel chama getMe na API do Telegram para validar. Se o token for válido, salva bot_id, bot_username e bot_first_name automaticamente.
Ao clicar "Configurar Webhook", o painel gera um secret_token aleatório (32 chars) e chama setWebhook no Telegram com a URL https://apifacil.dev/api/v1/telegram/webhook/{credencial_id}. O Telegram passa a enviar updates para esta URL.
Pronto para usar! O bot agora recebe mensagens (via webhook) e envia via API. Teste enviando /start para o bot no Telegram — o webhook será disparado.
POST
Envio de Mensagens
Endpoints da API
POST /api/v1/whatsapp/enviar-mensagem Enviar texto
Envia uma mensagem de texto para um chat (privado, grupo ou canal). Para Telegram, o campo telefone é o chat_id.
PARÂMETROTIPOOBRIGDESCRIÇÃO
mensagemstringSIMTexto da mensagem (máx 4096 chars)
telefonestringSIMchat_id numérico (ex: 123456789 ou -1001234567890 para grupo)
instanciastringSIMID/código/public_token da instância Telegram
BASH
# Enviar mensagem de texto para chat privado curl -X POST https://apifacil.dev/api/v1/whatsapp/enviar-mensagem \ -H "Authorization: SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{"mensagem":"Olá do Telegram!","telefone":"123456789","instancia":"10"}'
200 OK Mensagem enfileirada para envio
JSON
{ "error": false, "message": "Mensagem enfileirada", "message_id": "msg_abc123" }
POST /api/v1/whatsapp/enviar-foto Enviar imagem (URL)
Envia uma imagem via URL. O Telegram baixa a imagem do URL e envia como photo.
PARÂMETROTIPOOBRIGDESCRIÇÃO
urlstringSIMURL da imagem (HTTPS)
telefonestringSIMchat_id
instanciastringSIMID da instância
captionstringNÃOLegenda da imagem (máx 1024 chars)
BASH
curl -X POST https://apifacil.dev/api/v1/whatsapp/enviar-foto \ -H "Authorization: SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{"url":"https://exemplo.com/foto.jpg","telefone":"123456789","instancia":"10","caption":"Nova foto"}'
POST /api/v1/whatsapp/enviar-arquivo Enviar documento (URL)
Envia um arquivo qualquer (PDF, DOCX, ZIP, etc) via URL.
PARÂMETROTIPOOBRIGDESCRIÇÃO
urlstringSIMURL do arquivo (HTTPS)
telefonestringSIMchat_id
instanciastringSIMID da instância
captionstringNÃOLegenda do arquivo
POST /api/v1/whatsapp/enviar-audio Enviar áudio (URL)
Envia um arquivo de áudio via URL. O Telegram envia como audio (reprodutor nativo).
POST /api/v1/whatsapp/enviar-video Enviar vídeo (URL)
Envia um vídeo via URL. Suporta mp4 e formatos comuns.
POST
Enviar com Botões
POST /api/v1/whatsapp/enviar-botao Botões inline (callback)
Envia mensagem com botões inline. Quando o usuário toca, o Telegram dispara um callback_query no webhook com o callback_data.
PARÂMETROTIPOOBRIGDESCRIÇÃO
mensagemstringSIMTexto acima dos botões
botoesarraySIMArray de botões [{id, texto}]
telefonestringSIMchat_id
instanciastringSIMID da instância
BASH
curl -X POST https://apifacil.dev/api/v1/whatsapp/enviar-botao \ -H "Authorization: SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "mensagem":"Escolha uma opção:", "botoes":[ {"id":"sim","texto":"Sim, quero"}, {"id":"nao","texto":"Não, obrigado"} ], "telefone":"123456789", "instancia":"10" }'
Quando o usuário toca em um botão, o webhook recebe tipo: "interactive" com interacao.tipo: "button_reply" e interacao.id: "sim" (o callback_data).
POST
Enviar Localização
POST /api/v1/whatsapp/enviar-localizacao Latitude + longitude
Envia um ponto no mapa (latitude e longitude) para o chat.
PARÂMETROTIPOOBRIGDESCRIÇÃO
latfloatSIMLatitude (-90 a 90)
lngfloatSIMLongitude (-180 a 180)
telefonestringSIMchat_id
instanciastringSIMID da instância
TIP
Tipos de Mensagem
TIPOENDPOINTFORMATO TELEGRAM
Textoenviar-mensagemsendMessage
Imagemenviar-fotosendPhoto (URL)
Documentoenviar-arquivosendDocument (URL)
Áudioenviar-audiosendAudio (URL)
Vídeoenviar-videosendVideo (URL)
Botõesenviar-botaosendMessage + inline_keyboard
Localizaçãoenviar-localizacaosendLocation
HOOK
Webhook de Eventos
Mensagens recebidas + status
Quando o Telegram envia um update (mensagem recebida, callback de botão, status), a APIFacil processa e encaminha para o webhook do cliente (configurado no painel) no formato universal — mesmo formato da Meta Cloud API, com o campo extra chat_id.
Importante: O webhook do cliente é diferente do webhook do Telegram. O Telegram envia para /api/v1/telegram/webhook/{credencial_id} (validado por secret_token). A APIFacil processa e reenvia para a URL do cliente no formato universal.
JSON
Formato do Payload (Universal)
Igual ao Meta, com chat_id extra
JSON · MENSAGEM RECEBIDA
{ "evento": "received", "instancia": "abcd-1234-efgh", "message_id": "tg_12345", "tipo": "text", "de": "987654321", "para": "123456789", "chat_id": "987654321", "contato": "João", "texto": "Olá, tudo bem?", "timestamp": "2026-08-05T10:30:00Z" }
JSON · STATUS DE ENVIO
{ "evento": "status", "instancia": "abcd-1234-efgh", "message_id": "msg_abc123", "status": "delivered", "chat_id": "987654321", "timestamp": "2026-08-05T10:30:01Z" }
CAMPOTIPOEVENTODESCRIÇÃO
eventostringambosreceived ou status
instanciastringambosCódigo UUID da instância
message_idstringambosID da mensagem no Telegram
tipostringreceivedtext, image, audio, video, document, sticker, location, interactive
destringreceivedchat_id de origem (quem enviou)
parastringambosbot_id (seu bot)
chat_idstringambosTelegram extra — chat_id numérico
contatostringreceivedNome do remetente (first_name do Telegram)
textostringreceivedConteúdo textual ou caption da mídia
midiaobjectreceivedDados da mídia (file_id, mime_type, nome, tamanho, url)
localizacaoobjectreceivedlatitude, longitude
interacaoobjectreceivedtipo: button_reply, id (callback_data)
statusstringstatussent, delivered, read, failed
erroobjectstatuscódigo, detalhe (quando status=failed)
timestampstringambosISO 8601
Compatibilidade: O formato é idêntico ao da Meta Cloud API. Se você já integra com o webhook da APIFacil para WhatsApp, não precisa mudar nada — basta tratar o campo extra chat_id.
SEC
Validação secret_token
Segurança do webhook Telegram
O Telegram envia um header X-Telegram-Bot-Api-Secret-Token em cada update. A APIFacil compara com o secret_token gerado no setWebhook usando hash_equals (timing-safe). Se não bater, retorna 401 e o update é descartado.
VALIDAÇÃO
# Header enviado pelo Telegram X-Telegram-Bot-Api-Secret-Token: aB3xY9kL2mN7pQ4rS6tU8vW0xZ1aB3cD # Se não bater com o secret_token da credencial → HTTP 401 # Se a credencial não tem secret_token configurado → HTTP 401 # Se o credencial_id na URL não existe → HTTP 200 (silencioso)
Ports suportadas: O Telegram só aceita webhooks nas ports 443, 80, 88, 8443. A APIFacil usa 443 (HTTPS padrão).
LIM
Rate Limits (Anti-Spam)
Controlados automaticamente
LIMITEVALORESCOPOAO EXCEDER
Por chat1 msg/sCada conversa privadaPausa de 1s
Por grupo20 msg/minCada grupo/canalPausa até próximo minuto
Global30 msg/sPor bot (todas as conversas)Pausa de 1s
Retry-After (HTTP 429): Se o Telegram retornar 429 com retry_after, o job é re-enfileirado com release($retryAfter + 1) segundos. O envio não é perdido — é apenas postergado.
Tudo automático via TelegramAntiSpamService (Redis). Você não precisa gerenciar rate limits no seu código.
GRP
Grupos e Canais
No Telegram, grupos e canais têm chat_id negativo (ex: -1001234567890). Chats privados têm chat_id positivo. A APIFacil identifica grupos automaticamente pelo sinal do número.
TIPOCHAT_IDRATE LIMIT
Chat privado1234567891 msg/s
Grupo-100123456789020 msg/min
Canal-100123456789120 msg/min
Para o bot funcionar em grupos, ele precisa ser adicionado como membro do grupo (ou administrador para canais). Sem permissão, o Telegram retorna 403.
DIF
Telegram vs Meta (WhatsApp)
Diferenças principais
ASPECTOMETA (WHATSAPP)TELEGRAM
IdentidadeTelefone (5511999999999)chat_id numérico
Grupos@g.us no IDchat_id negativo
Validação webhookHMAC SHA-256secret_token header
Rate limit80 req/s por credencial1/chat/s, 20/grupo/min, 30/global
Templates HSMSim (aprovados pela Meta)Não (texto livre)
Janela 24hSim (Customer Care Window)Não (sem limite de janela)
Mídia downloadGraph API + URLgetFile + URL (bot API)
Mídia uploadURL ou upload diretoURL (sendPhoto por URL)
Botõesinteractive (button/list)inline_keyboard (callback)
BanimentoSim (se violar política)Não (bot oficial)
OnboardingWizard OAuth (5 etapas)BotFather + colar token
CLI
Comandos Artisan
Gestão via terminal
BASH
# Configurar webhook (gera secret_token automaticamente) php artisan telegram:set-webhook --credencial=1 # Remover webhook (para de receber updates) php artisan telegram:delete-webhook --credencial=1 # Verificar info do bot (getMe + getWebhookInfo) php artisan telegram:get-info --credencial=1 # Especificar URL base personalizada php artisan telegram:set-webhook --credencial=1 --url=https://meu-dominio.com # Usar secret_token personalizado php artisan telegram:set-webhook --credencial=1 --secret=meu_secret_123
ERR
Erros Comuns
STATUSCÓDIGOCAUSASOLUÇÃO
401token invalidoToken da APIFacil errado ou com BearerRemover "Bearer ", usar token do painel
404instância não encontradaID/código não pertence ao usuárioVerificar o ID no painel
422não é TelegramInstância não é tipo TelegramVerificar tipo_conexao no painel
422credencial não ativaBot não conectado ou sem webhookColar bot_token e configurar webhook no painel
429rate limitMais de 1/s por chat ou 30/s globalA APIFacil controla automaticamente (Retry-After)
403bot sem permissãoBot não foi adicionado ao grupo/canalAdicionar o bot como membro do grupo
400chat não encontradochat_id inválido ou usuário não iniciou conversaUsuário deve enviar /start para o bot primeiro
400token invalido (Telegram)bot_token incorreto ou revogadoVerificar token no BotFather, usar /token para gerar novo
500falha Bot APITelegram rejeitou o envioVerificar chat_id e se o bot tem permissão
Usuário precisa iniciar a conversa: Um bot Telegram não pode enviar mensagem primeiro para um usuário. O usuário deve enviar /start (ou qualquer mensagem) para o bot — a partir daí o bot pode responder a qualquer momento.
Suporte: Qualquer duvida, chame no WhatsApp 55 51 9 8033-1519.