O API do Telegram em Python guia: código funcional para cada abordagem
sendMessage ligar com solicitações, um bot minimalista com python-telegram-bot, uma conta real vinculada com Telethon, Pyrogram ou o SDK da Unipile, e como lidar com limites de taxa sem que seu script caia no primeiro 429. Quer você tenha chegado aqui procurando por um API de bot do Telegram em Python exemplo ou o completo API do Telegram em Python foto, cada abordagem abaixo vem com código funcional.import solicitações
TOKEN = "123456:ABC-your-bot-token"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
carga útil = {
"chat_id": 123456789,
"texto": "Olá do Python",
"modo de análise": "MarkdownV2"
}
response = pedidos.postagem(url, json=payload)
print(resposta.json())Três maneiras de construir a API do Telegram em Python e qual escolher
solicitações ou uma biblioteca wrapper como python-telegram-bot. A maneira mais rápida de enviar, mas um bot só pode enviar uma mensagem para um usuário que tenha escrito para ele primeiro.api_id e api_hash. Faz login como uma conta real, mas você possui o armazenamento da sessão, reconexões e o fluxo de 2FA.api_id / api_hash em primeiro lugar, veja o guia de acesso passo a passo.Construa sua integração em Python
A API do Python Telegram Bot com requests
solicitações, sem nenhuma biblioteca wrapper envolvida. A partir da Bot API 10.2 (14 de julho de 2026), um token de bot do BotFather e dois parâmetros são tudo o que sendMessage requer.123456:ABC-your-bot-token. Cada chamada da API do Bot, incluindo sendMessage, é um POST para https://api.telegram.org/bot<TOKEN>/sendMessage com um corpo JSON.import os
import solicitações
TOKEN = os.meio ambiente["TELEGRAM_BOT_TOKEN"]
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
carga útil = {
"chat_id": 123456789,
"texto": ""Seu pedido #4821 já foi enviado."",
"modo de análise": "MarkdownV2"
}
response = pedidos.postagem(URL, json=payload, timeout=10)ok booleano. Um código de status diferente de 200 ou ok: false significa que a mensagem não foi enviada, e a carga útil inclui uma legível por humanos descrição para registrar.dados = resposta.json()
se response.status_code == 200 e dados.obter("ok"):
id_da_mensagem = dados["resultado"]["message_id"]
print(f"enviado, message_id={message_id}")
senão:
print(f"falha: {data.get('description')}")| Parâmetro | Tipo | Descrição |
|---|---|---|
chat_id Obrigatório | int ou str | Identificador do chat de destino, ou @username para um canal público. |
text Obrigatório | str | Texto da mensagem, 1 a 4096 caracteres após a análise de entidades. |
modo de análise Opcional | str | MarkdownV2 ou HTML, para renderizar formatação de negrito, links e código no texto. |
desativar_notificação Opcional | booleano | Envia a mensagem silenciosamente, sem som de notificação push. |
parâmetros_de_resposta Opcional | dicionário | Envia a mensagem como uma resposta a uma mensagem existente no chat. |
Supere o limite exclusivo para bots
A API do Telegram Bot em Python com python-telegram-bot
solicitações as chamadas funcionam bem para uma única mensagem de saída. Além disso, a maioria das bases de código em Python envolvem a API do bot do Telegram em python-telegram-bot, uma biblioteca que transforma os mesmos endpoints HTTP em um modelo de objeto Python assíncrono com polling de atualização integrado.Aplicativo objeto que gerencia o loop de atualização para você (polling ou webhook)bot.send_message() em vez de payloads JSON construídos manualmente/iniciar é um decorador, não um loopchat_id, text, modo de análise. A biblioteca ainda não consegue fazer com que um bot envie uma mensagem para um usuário primeiro; essa restrição está nas regras da plataforma do Telegram, não no cliente que você usa para chamá-la.from telegrama import Atualizar
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
assíncrono def iniciar(update: Update, context: ContextTypes.DEFAULT_TYPE):
await contexto.bot.enviar_mensagem(
chat_id=update.effective_chat.id,
A tradução para o português do Brasil seria:
"texto=""Olá do python-telegram-bot",
parse_mode="MarkdownV2"
)
aplicativo = ApplicationBuilder().token("123456:ABC-your-bot-token").construir()
app.add_handler(Manipulador de Comandos("start", início))
aplicativo.executar_polling()Uma conta de usuário real em Python: Telethon e Pyrogram
api_id e api_hash do my.telegram.org. Duas bibliotecas Python fazem o trabalho pesado do MTProto: Telethon e Pyrogram.Telethon
Pyrogram
from telethon import TelegramClient
from telethon.errors import SessionPasswordNeededError
api_id = 1234567
api_hash = "seu_api_hash_de_my.telegram.org"
# "my_account" é o nome do arquivo de sessão no disco, reutilizado a cada execução
client = TelegramClient("minha_conta", api_id, api_hash)
assíncrono def principal():
await cliente.iniciar(telefone="+15551234567")
await cliente.enviar_mensagem("nome_de_usuario_ou_id", "Olá do Telethon")
com cliente:
client.loop.executar_ate_completar(main())client.start(phone=...) enrolados auth.sendCode, que envia um código de login por SMS para o número de telefone e retorna um hash_do_codigo_do_telefone usado para a próxima chamada. A biblioteca solicita o código e chama
auth.signIn com isso. É aqui que uma implementação focada apenas no caminho feliz para. Se a conta tiver a autenticação de dois fatores ativada, o Telegram responde com um Erro 400: SESSION_PASSWORD_NEEDED. O Telethon levanta isso como
SessionPasswordNeededError, um branch esperado, não um bug para capturar e ignorar. Passando a senha de nuvem da conta para
client.start(password=...) executa a troca SRP e auth.checkPassword para você. Chamar a camada bruta do MTProto diretamente significa construir a InputCheckPasswordSRP objece-te. O Telethon e o Pyrogram gravam um arquivo de sessão local (ou em memória
StringSession) após o primeiro login bem-sucedido. Perca-o, ou faça o deploy sem persistí-lo, e seu script terá que executar o fluxo do código de telefone e 2FA novamente a cada reinicialização. HASH_DE_SENHA_INVALIDO
API_ID_PUBLISHED_FLOOD
api_id do my.telegram.org: reutilizar o ID de exemplo fornecido no código de exemplo de código aberto aciona API_ID_PUBLISHED_FLOOD para os seus usuários finais, e apenas um api_id é emitido por número de telefone.Uma conta real do Telegram em Python, sem escrever MTProto
provedores: "TELEGRAM". Não há api_id, sem arquivo de sessão para persistir, e sem SENHA_DA_SESSAO_NECESSARIA ramificar para escrever você mesmo: a conta vinculada aparece como conectado ou não.Iniciar chat pega o ID da conta vinculada e um IDs de usuário lista e abre uma nova conversa ou entrega na existente se já existir um chat com esse destinatário.api_id / api_hash par para solicitar ou alternarimport unipilar
configuração = unipile.Configuração()
configuration.api_key["apiKey"] = "chave de API"
cliente_api = unipile.ApiClient(configuração)
API de mensagens = unipile.MessagingApi(api_client)
chat = api_de_mensagens.Iniciar chat(
"acc_123456789",
{"ids_de_usuario": ["0123456789"], "texto": "Olá, dando seguimento à sua solicitação."}
)Tratamento de erros e limites de taxa em Python
429 ou um FLOOD_WAIT_X, e o que o seu código Python fizer a seguir decide se isso é uma pausa de cinco segundos ou uma conta banida.Número máximo de mensagens da API do Bot para o mesmo chat individual
Número máximo de mensagens da API do Bot dentro de um único grupo
Limite aproximado da API de Bot ao transmitir para chats
Status retornado assim que qualquer um desses limites for ultrapassado
import tempo
import solicitações
def enviar_com_nova_tentativa(url, payload, max_retries=3):
para tentativa em intervalo(tentativas_max)
r = pedidos.postagem(url, json=payload)
se r.status_code != 429:
return r
tentar_novamente_apos = r.json().obter("parâmetros", {}).obter("tente_novamente_apos", 1)
tempo.dormir(tente_novamente_em)
levantar Erro de tempo de execução("muitas respostas 429")from telethon.errors import FloodWaitError
import asyncio
assíncrono def enviar_com_segurança(cliente, entidade, texto)
tentar:
await cliente.enviar_mensagem(entidade, texto)
exceto FloodWaitError como e:
# e.seconds é o valor de FLOOD_WAIT_X que o Telegram devolveu
await asyncio.dormir(e.seconds)
await cliente.enviar_mensagem(entidade, texto)API do Python Telegram Bot vs Telethon/Pyrogram vs SDK do Unipile
| Dimensão | Bot API (requests / python-telegram-bot) | Telethon / Pyrogram (MTProto) | SDK Python do Unipile |
|---|---|---|---|
| Pode enviar mensagem para um usuário primeiro | Não | Sim, dependente de privacidade | Sim |
| Requisito de configuração | Token do bot do BotFather | api_id / api_hash de my.telegram.org | Conta vinculada via código QR ou Autenticação Hospedada |
| Gerenciamento de sessão | Baseado em token, nada para persistir | Você mesmo persiste o arquivo de sessão | Gerenciado pelo recurso de Dispositivos do próprio Telegram |
| 2FA / SESSION_PASSWORD_NEEDED | Não se aplica | Você lida com a troca do SRP | Resolvido para você |
| Participantes do grupo (obter / adicionar / remover) | Limitado às permissões do bot | Sim, autoconstruído | Sim, endpoints v2 dedicados |
| Canais, comunidades, transmissões | Sim, se adicionado como administrador | Sim | Não suportado |
| Melhor para | Bots de notificação e suporte | Um cliente MTProto em Python totalmente personalizado | Enviando rápido sem possuir o MTProto |
API do Telegram em Python - FAQ
Perguntas comuns sobre a API do Python Telegram Bot, python-telegram-bot, Telethon, Pyrogram e como conectar uma conta real com o Unipile.
Sim. O API do bot do Telegram é uma interface HTTP simples, portanto, uma única POST requisição com o Python solicitações biblioteca para https://api.telegram.org/bot<TOKEN>/sendMessage, com um chat_id e text no corpo JSON, é suficiente. Nenhum SDK ou biblioteca wrapper é necessário para esta chamada.
O API do bot do Telegram é a interface HTTP própria do Telegram, que pode ser chamada a partir do Python com solicitações ou qualquer cliente HTTP. python-telegram-bot é uma biblioteca Python de terceiros que encapsula esses mesmos endpoints HTTP em um modelo de objeto assíncrono, com um Aplicativo classe, métodos tipados como bot.send_message, e verificação de atualizações integrada ou manipulação de webhooks.
Esta é uma regra estrutural da Bot API, não um bug no seu código. Um bot não pode chamar sendMessage contra um chat_id até que esse usuário tenha enviado pelo menos uma mensagem para o bot primeiro. Nenhum parâmetro ou biblioteca Python contorna isso. Uma conta real do Telegram vinculada, através do Telethon, Pyrogram ou do SDK Unipile, não tem essa restrição.
Não. A API do Bot precisa apenas de um token de bot emitido pelo BotFather. api_id e api_hash do my.telegram.org são necessários para a Client API (MTProto), o protocolo usado pelo Telethon, Pyrogram e qualquer cliente que faça login como uma conta de usuário real em vez de um bot.
SENHA_DA_SESSAO_NECESSARIA é um erro 400 que o Telegram retorna de auth.signIn quando a conta tem a autenticação de dois fatores ativada. O Telethon lança isso como SessionPasswordNeededError. Limpá-lo significa executar o protocolo SRP e chamar auth.checkPassword com a senha de nuvem da conta, que tanto o Telethon quanto o Pyrogram gerenciam quando você passa a senha para o método de login deles.
A API do Bot retorna um 429 status assim que você excede cerca de uma mensagem por segundo para o mesmo chat, 20 mensagens por minuto em um grupo, ou cerca de 30 mensagens por segundo ao transmitir entre chats. A resposta inclui um tentar_novamente_apos valor em segundos. Do lado do MTProto, o equivalente é um ENCHENTE 420 erro ou um FLOOD_WAIT_X exceção, onde X é o número de segundos a esperar antes de tentar novamente.
Sim. O SDK Python do Unipile conecta uma conta de usuário existente do Telegram através do próprio recurso Dispositivos do Telegram, seja por leitura de código QR ou Autenticação Hospedada, e expõe o envio de mensagens por meio de algumas chamadas de SDK, tais como Iniciar chat. Não há api_id para solicitar, sem implementação de MTProto e sem arquivo de sessão ou ramificação de 2FA para escrever sozinho.
O gerenciamento de participantes do grupo é suportado: listar, adicionar e remover participantes por meio de recursos dedicados v2 endpoints. Canais, comunidades, transmissões, ações de administração de grupo, como aprovar ou promover membros, arquivamento de chats e chamadas de voz ou vídeo não são suportados.
Ainda tem dúvidas? Nossa equipe está aqui para ajudar.