Saudações.
Nesse tutorial vou explicar como usar um Bot do Telegram para automações.
1 – Abrindo uma conversa com o Bot Father
O primeiro passo é criar um bot.
Um bot é uma conta virtual que pertence a uma conta real (você).
Para criar é necessário chamar um bot nativo do Telegram chamado “Bot Father“

Você pode ir até ele pelo QR-CODE:

Ou pelo link da conta:
- @BotFather
- https://telegram.me/BotFather
Inicie uma conversa com o comando /help, retorno:
I can help you create and manage Telegram bots. If you're new to the Bot API, please see the manual.
You can control me by sending these commands:
/newbot - create a new bot
/mybots - edit your bots
Edit Bots
/setname - change a bot's name
/setdescription - change bot description
/setabouttext - change bot about info
/setuserpic - change bot profile photo
/setcommands - change the list of commands
/deletebot - delete a bot
Bot Settings
/token - get authorization token
/revoke - revoke bot access token
/setinline - toggle inline mode
/setinlinegeo - toggle inline location requests
/setinlinefeedback - change inline feedback settings
/setjoingroups - can your bot be added to groups?
/setprivacy - toggle privacy mode in groups
Web Apps
/myapps - edit your web apps
/newapp - create a new web app
/listapps - get a list of your web apps
/editapp - edit a web app
/deleteapp - delete an existing web app
Games
/mygames - edit your games
/newgame - create a new game
/listgames - get a list of your games
/editgame - edit a game
/deletegame - delete an existing game2 – Criar novo bot
Na conversa com o Bot Father, envie a mensagem: /newbot
Se você digitou errado, cancele e comece novamente com o comando: /cancel
Ele vai responder:
- Alright, a new bot. How are we going to call it? Please choose a name for your bot.
- Tradução: Muito bem, um novo bot. Como vamos chamá-lo? Por favor, escolha um nome para o seu bot.
Responda o nome de exibição do bot, exemplo: Kirkland Meeseeks
Ele vai responder (se aceitar o nome):
- Good. Now let’s choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.
- Tradução: Ótimo. Agora, vamos escolher um nome de usuário para o seu bot. Ele deve terminar com bot. Assim, por exemplo: TetrisBot ou tetris_bot.
Você deve responder com o nome do bot que deseja criar – nome de usuário para login.
Esse bot será uma conta @nome_do_bot para que qualquer pessoa possa encontrar e chamar.
O nome do bot deve terminar com “bot“, é uma regra que não da para contornar, se você não colocar esse sufixo ele responderá:
- Sorry, the username must end in bot. E.g. Tetris_bot or Tetrisbot.
- Tradução: Desculpe, o nome de usuário deve terminar com “bot”. Ex.: Tetris_bot ou Tetrisbot.
No meu exemplo seria:
- Login: “kirkland_meeseeks“,
- Mas com final “bot”, fica: kirkland_meeseeks_bot
Se o login já existir ele recusará, quando você digitar um nome único ele irá aprovar com essa mensagem:
- Done! Congratulations on your new bot…
Use this token to access the HTTP API:
7234567890:ABC1D2Efgh2ijKlMnOpQRStuVXyzw3AbCdE
For a description of the Bot API, see this page:
https://core.telegram.org/bots/api
O que importa nessa resposta é a chave de API do bot (BOT API KEY):
- 1234567890:ABC1D2Efgh2ijKlMnOpQRStuVXyzw3AbCdE
Com ele temos controle completo do bot para integrá-lo com automações.
3 – Personalizando o bot
Mande para o Bot Father o comando: /mybots
Ele vai mostrar os seus bots, clique no nome do bot desejado
(kirkland_meeseeks_bot no meu caso).
Opções que ele exibirá:
- API Token – Consulta a chave atual, com opção de revogar e gerar nova chave (cancela a chave anterior);
- Edit Bot – É onde personalizamos as características do bot;
- Edit Name
- Edit About
- Edit Description
- Edit Description Picture
- Edit Botpic
- Edit Commands
- Edit Privacy Policy
- Edit Commands
- Bot Settings – É onde alteramos as configurações do bot;
- Inline mode;
- Secretary Mode;
- Allow Groups?
- Group Privacy
- Group Admin Rights
- Channel Admin Rights
- Payments
- Domain
- Menu Button
- Configure Mini App
- Paid Broadcast
- Payments – É onde fica a relação entre o bot e pagamentos;
- Transfer Ownership – É onde você pode transferir o bot para outra conta do Telegram (vender bot, delegar a um funcionário, etc);
- Delete Bot – É onde você deleta completamente seu bot.
Para mexer no perfil do bot, clique no botão: Edit Bot.
Atributos editáveis:
- Name: O nome de exibição;
- About: Informações sobre o bot;
- Description: Descrição detalhada do bot, sua função e tarefas que ele executa (use como Agent Card);
- Description Picture: Altera a imagem do bot;
- Privacy Policy: Contrato que define como informações pessoais e sigilosas são tratadas no armazenamento de dados do bot.
Para personalizar a foto do bot, clique em:
- Description Picture: Envie a foto que aparece no meio da tela ao iniciar uma nova conversa;
- Edit Botpic: Envie a foto de perfil do contato.
Suas opções:
- Enviar uma foto no chat, tipo e tamanho:
- Tamanho aceito (único) para tipos PNG ou JPEG:
- 640 x 360;
- Tamanhos aceitos no formato GIF
- 320 x 180;
- 640 x 360;
- 960 x 540;
- Tamanho aceito (único) para tipos PNG ou JPEG:
Ao enviar a foto no tamanho correto, ele responderá:
- Success! Description media updated. You will be able to see the changes within a few minutes.
- Tradução: Sucesso! A mídia da descrição foi atualizada. Você poderá ver as alterações em alguns minutos.
Se você quiser apagar a imagem e deixar o bot sem nenhuma foto, use: /empty
4 – Primeira interação
Para que o bot possa interagir com qualquer usuário, o usuário precisa abrir uma nova conversa com o login do bot e mandar o comando: /start
Primeira foto de Botpic(bolinha com qr-code) e a segunda foto de Description Picture (quadro de boas vindas):

5 – API básica de controle do bot
Com a chave de API do bot em mãos, vamos rodar alguns comandos CURL para manipular nosso bot.
A única operação que não existe é “obter lista de chats” entre o bot e os usuários chamaram. Você precisará usar a técnica de registrar o id dos chats via webhook.
Principais chaves no JSON que transita entre o bot e seu servidor:
- Cada conta tem um id único “id“;
- Cada conversa entre um contato ou grupo e o bot gera um “chat_id“. Ele é necessário para responder e enviar mensagens de volta;
- Cada mensagem em uma conversa tem seu “message_id“, utilizada para apagar, encaminhar e editar a mensagem.
Com isso, o “id” do remetente, o “chat_id” da conversa e os identificadores “message_id” de cada mensagem são únicos e relativo aos participantes.
5.1 – Autenticação e teste inicial
Teste se o token funciona e obtenha o “id” do bot.
O boleano “ok“=[false|true] é a flag de funcionamento.
# Coloque o TOKEN do seu bot
TOKEN="12345...AbCdE";
curl "https://api.telegram.org/bot${TOKEN}/getMe";{
"ok": true,
"result": {
"id": 8975793915,
"is_bot": true,
"first_name": "Kirkland Meeseeks",
"username": "kirkland_meeseeks_bot",
"can_join_groups": true,
"can_read_all_group_messages": false,
"supports_inline_queries": false,
"supports_guest_queries": false,
"can_connect_to_business": false,
"has_main_web_app": false,
"has_topics_enabled": false,
"allows_users_to_create_topics": false,
"can_manage_bots": false,
"supports_join_request_queries": false
}
}5.2 – Vincular webhook no bot
Essa é a API mais importante. Com ela, todas as mensagens e eventos relacionados ao seu boot são:
- Reportadas a uma e somente uma URL;
- Dois sistemas não podem processas as mensagens do mesmo bot por conta da regra acima;
- Um software de webhook deve ser criado para armazenar e processar as mensagens enviadas ao bot (n8n, langflow, webhook relay, etc);
- Teste em sites de debug de webhooks:
Diagrama de eventos:

Associando URL de webhook no bot:
# Coloque o TOKEN do seu bot
TOKEN="12345...AbCdE";
# Coloque a URL gerada pelo seu sistema de automacao
WEBHOOK="https://webhook.dominio.com/telegram/boot01";
# Acionar API para definir URL de Webhook
curl \
-X POST "https://api.telegram.org/bot${TOKEN}/setWebhook" \
-H "Content-Type: application/json" \
-d "{\"url\": \"${WEBHOOK}\"}";{
"ok": true,
"result": true,
"description": "Webhook was set"
}5.3 – Consultar webhook do bot
Conferir qual webhook está definida na conta (se acontecer de vários softwares tentarem usar o mesmo bot, esse valor vai ficar sambando entre as várias URLs):
# Coloque o TOKEN do seu bot
TOKEN="12345...AbCdE";
# Conferir qual URL de webhook esta recebendo eventos do bot
curl "https://api.telegram.org/bot${TOKEN}/getWebhookInfo";
{
"ok": true,
"result": {
"url": "https://webhook.dominio.com/telegram/boot01",
"has_custom_certificate": false,
"pending_update_count": 0,
"max_connections": 40,
"ip_address": "104.23.47.123"
}
}5.4 – Desativar webhook do bot
Caso deseje deletar a URL de webhook (desativar aviso de eventos via URL):
# Coloque o TOKEN do seu bot
TOKEN="12345...AbCdE";
# Apagar URL de webhook e desativar aviso de eventos via URL/HTTP
curl "https://api.telegram.org/bot${TOKEN}/deleteWebhook";
{
"ok": true,
"result": true,
"description": "Webhook was deleted"
}5.5 – Exemplo de eventos na webhook
Exemplos de mensagens (JSON) recebidas na webhook:
Primeiro contato iniciando o chat com o comando /start (comando enviado):
{
"update_id": 954888273,
"message": {
"message_id": 5,
"from": {
"id": 464557464,
"is_bot": false,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"language_code": "pt-br",
"is_premium": true
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790390624,
"text": "/start",
"entities": [
{
"offset": 0,
"length": 6,
"type": "bot_command"
}
]
}
}Mensagem de texto enviada pelo usuário:
{
"update_id": 954888274,
"message": {
"message_id": 6,
"from": {
"id": 464557464,
"is_bot": false,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"language_code": "pt-br",
"is_premium": true
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790390790,
"text": "Kirk, meu irmão, qual a novidade do dia?"
}
}Imagem (sem texto):
{
"update_id": 954888275,
"message": {
"message_id": 7,
"from": {
"id": 464557464,
"is_bot": false,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"language_code": "pt-br",
"is_premium": true
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790390915,
"photo": [
{
"file_id": "AgACAgEAAxkBAAMHarcyg2_0BG12Jz5pF19O_zqZFScAAqsMaxs-krlF4kDiq1AeN_QBAAMCAANzAAM9BA",
"file_unique_id": "AQADqwxrGz6SuUV4",
"file_size": 2037,
"width": 90,
"height": 79
},
{
"file_id": "AgACAgEAAxkBAAMHarcyg2_0BG12Jz5pF19O_zqZFScAAqsMaxs-krlF4kDiq1AeN_QBAAMCAANtAAM9BA",
"file_unique_id": "AQADqwxrGz6SuUVy",
"file_size": 15871,
"width": 320,
"height": 282
},
{
"file_id": "AgACAgEAAxkBAAMHarcyg2_0BG12Jz5pF19O_zqZFScAAqsMaxs-krlF4kDiq1AeN_QBAAMCAAN4AAM9BA",
"file_unique_id": "AQADqwxrGz6SuUV9",
"file_size": 24243,
"width": 476,
"height": 420
}
]
}
}Imagem com caption (texto da imagem):
{
"update_id": 954888276,
"message": {
"message_id": 8,
"from": {
"id": 464557464,
"is_bot": false,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"language_code": "pt-br",
"is_premium": true
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790391122,
"photo": [
{
"file_id": "AgACAgEAAxkBAAMIarczUidA-hhEjTpaUMXxXv0BvUoAAqwMaxs-krlFIRtaMId1P3kBAAMCAANzAAM9BA",
"file_unique_id": "AQADrAxrGz6SuUV4",
"file_size": 1750,
"width": 90,
"height": 90
},
{
"file_id": "AgACAgEAAxkBAAMIarczUidA-hhEjTpaUMXxXv0BvUoAAqwMaxs-krlFIRtaMId1P3kBAAMCAANtAAM9BA",
"file_unique_id": "AQADrAxrGz6SuUVy",
"file_size": 11753,
"width": 320,
"height": 320
},
{
"file_id": "AgACAgEAAxkBAAMIarczUidA-hhEjTpaUMXxXv0BvUoAAqwMaxs-krlFIRtaMId1P3kBAAMCAAN4AAM9BA",
"file_unique_id": "AQADrAxrGz6SuUV9",
"file_size": 19026,
"width": 512,
"height": 512
}
],
"caption": "Icone do freeradius"
}
}Arquivo de audio (MP3) anexado com caption:
{
"update_id": 954888277,
"message": {
"message_id": 9,
"from": {
"id": 464557464,
"is_bot": false,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"language_code": "pt-br",
"is_premium": true
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790391462,
"audio": {
"duration": 1,
"file_name": "ss-red-alert.mp3",
"mime_type": "audio/mpeg",
"file_id": "CQACAgEAAxkBAAMJarc0phu5Ed0b0Ofr8_G-1nEbVeYAAgwHAAI-ksFFV5SWypP_au89BA",
"file_unique_id": "AgADDAcAAj6SwUU",
"file_size": 10092
},
"caption": "MP3 do Red Alert"
}
}5.6 – Respondendo o usuário
Agora que temos as mensagens entrando na webhook, chegou a hora de responder o usuário com alguma automação básica (n8n por exemplo).
Antes disso precisamos saber como usar a API do Telegram para enviar conteúdo dentro da conversa (chat_id).
O chat_id é obtido na propriedade “chat” na chave “id” (chat.id).
Nos exemplos acima os valores são:
- Identificador da conversa: chat.id = 464557464;
- Identificador do remetente (usuário): from.id = 464557464;
- Quando ambos são iguais significa que o chat é privado entre o bot e o usuário, quando for diferente significa que a conversa ocorre num grupo.
Enviando mensagem de texto na conversa:
# Coloque o TOKEN do seu bot
TOKEN="12345...AbCdE";
# ID do chat
CHAT_ID="464557464";
# Mensagem de texto
MESSAGE="Olha a temperatura do equipamento, vai explodir...";
# Acionar API para definir URL de Webhook
curl \
-X POST "https://api.telegram.org/bot${TOKEN}/sendMessage" \
-H "Content-Type: application/json" \
-d "{\"chat_id\": \"$CHAT_ID\", \"text\": \"$MESSAGE\"}";
{
"ok": true,
"result": {
"message_id": 10,
"from": {
"id": 8975793915,
"is_bot": true,
"first_name": "Kirkland Meeseeks",
"username": "kirkland_meeseeks_bot"
},
"chat": {
"id": 464557464,
"first_name": "Patrick",
"last_name": "Brandão",
"username": "patrickbrandao",
"type": "private"
},
"date": 1790392642,
"text": "Olha a temperatura do equipamento, vai explodir..."
}
}Terminamos por hoje!
Patrick Brandão, patrickbrandao@gmail.com
“unca existiu uma grande inteligência
sem uma veia de loucura.“
Aristóteles
