Il API di Telegram Python guida: codice funzionante per ogni approccio
sendMessage chiama con richieste, un bot minimale con python-telegram-bot, un account reale collegato con Telethon, Pyrogram o l'SDK di Unipile, e come gestire i limiti di frequenza senza che il tuo script si blocchi al primo 429. Sia che tu sia arrivato qui in cerca di API bot Telegram Python esempio o il completo API di Telegram Python ogni approccio di seguito viene fornito con codice funzionante.import richieste
TOKEN = "123456:ABC-your-bot-token"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
carico utile = {
"chat_id": 123456789,
"testo": "Ciao da Python",
"parse_mode": "MarkdownV2"
}
response = richieste.posta(url, json=payload)
print(risposta.json())Tre modi per costruire l'API di Telegram in Python e quale scegliere
richieste o una libreria wrapper come python-telegram-bot. Il modo più veloce per spedire, ma un bot può inviare un messaggio a un utente solo se questo gli ha scritto per primo.api_id e api_hash. Si collega come un account reale, ma tu possiedi l'archiviazione della sessione, le riconnessioni e il flusso dell'autenticazione a due fattori (2FA).api_id / api_hash innanzitutto, guarda il guida di accesso passo-passo.Crea la tua integrazione in Python
L'API di Python Telegram Bot con requests
richieste, senza alcuna libreria di supporto. A partire dalle Bot API 10.2 (14 luglio 2026), un token bot di BotFather e due parametri sono tutto ciò sendMessage richiede.123456:ABC-your-bot-token. Ogni chiamata alle API dei Bot, inclusi sendMessage, è un POSTA a https://api.telegram.org/bot<TOKEN>/sendMessage con un corpo JSON.import os
import richieste
TOKEN = os.circa["TELEGRAM_BOT_TOKEN"]
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
carico utile = {
"chat_id": 123456789,
"testo": ""Il tuo ordine #4821 è stato spedito."",
"parse_mode": "MarkdownV2"
}
response = richieste.posta(URL, json=payload, timeout=10)va bene booleano. Un codice di stato diverso da 200 o ok: false significa che il messaggio non è stato inviato e il carico utile include un testo leggibile dall'uomo descrizione registrare.dati = risposta.json()
se response.status_code == 200 e dati.ottenere("ok"):
id_messaggio = dati["risultato"]["ID messaggio"]
print(f"inviato, message_id={message_id}")
altro:
print(f"fallito: {data.get('description')}")| Parametro | Tipo | Descrizione |
|---|---|---|
chat_id Richiesto | int o str | Identificatore della chat di destinazione, o @username per un canale pubblico. |
text Richiesto | strada | Testo del messaggio, da 1 a 4096 caratteri dopo l'analisi delle entità. |
modalità_analisi Opzionale | strada | MarkdownV2 o HTML, per applicare la formattazione in grassetto, ai link e al codice nel testo. |
disabilita_notifica Opzionale | booleano | Invia il messaggio in silenzio, senza un suono di notifica push. |
parametri_di_risposta Opzionale | dizionario | Invia il messaggio come risposta a un messaggio esistente nella chat. |
Supera il limite riservato ai soli bot
L'API del bot di Telegram in Python con python-telegram-bot
richieste le chiamate funzionano bene per un singolo messaggio in uscita. Oltre a ciò, la maggior parte delle codebase Python racchiude API del bot di Telegram in python-telegram-bot, una libreria che trasforma gli stessi endpoint HTTP in un modello a oggetti Python asincrono con polling di aggiornamento integrato.Applicazione oggetto che gestisce il ciclo di aggiornamento per te (polling o webhook)bot.send_message() invece di payload JSON costruiti a mano/avviare è un decoratore, non un ciclochat_id, text, modalità_analisi. La libreria non può ancora fare in modo che un bot invii il primo messaggio a un utente; tale restrizione appartiene alle regole della piattaforma di Telegram, non al client che usi per richiamarla.from telegramma import Aggiorna
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
asincrono def inizio(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.invia_messaggio(
chat_id=update.effective_chat.id,
Testo="Ciao da python-telegram-bot",
parse_mode="MarkdownV2"
)
app = ApplicationBuilder().gettone("123456:ABC-your-bot-token").costruire()
app.add_handler(CommandHandler("inizio", inizia))
app.avvia_polling()Un vero account utente in Python: Telethon e Pyrogram
api_id e api_hash da my.telegram.org. Due librerie Python svolgono il lavoro pesante di MTProto: Telethon e Pyrogram.Telethon
Pyrogram
from maratona televisiva import TelegramClient
from telethon.errors import SessionPasswordNeededError
api_id = 1234567
api_hash = "il_tuo_api_hash_da_my.telegram.org"
# "my_account" è il nome del file di sessione su disco, riutilizzato ad ogni esecuzione
client = TelegramClient("il_mio_account", api_id, api_hash)
asincrono def principale():
await cliente.inizio(telefono="+15551234567")
await cliente.invia_messaggio("nome_utente_o_id", "Ciao da Telethon")
con cliente:
loop del client.esegui_fino_al_completamento(main())client.start(phone=...) involucri auth.sendCode, che invia un codice di accesso tramite SMS al numero di telefono e restituisce un hash_codice_telefonico utilizzato per la prossima chiamata. La libreria richiede il codice e chiama
auth.signIn con esso. È qui che si ferma un'implementazione basata solo sul percorso felice. Se l'account ha l'autenticazione a due fattori abilitata, Telegram risponde con un Errore 400: SESSION_PASSWORD_NEEDED. Telethon solleva questo problema come
SessionPasswordNeededError, un ramo atteso, non un bug da intercettare e ignorare. Passaggio della password cloud dell'account a
client.start(password=...) esegue lo scambio SRP e auth.checkPassword per te. Chiamare direttamente il livello grezzo di MTProto significa costruire InputCheckPasswordSRP oggettivati. Telethon e Pyrogram scrivono entrambi un file di sessione locale (o in memoria)
StringSession) dopo il primo accesso riuscito. Perdilo, o distribuiscilo senza renderlo persistente, e il tuo script dovrà rieseguire la procedura del codice telefonico e dell'autenticazione a due fattori (2FA) a ogni riavvio. HASH_PASSWORD_NON_VALIDO
API_ID_PUBBLICATO_FLOOD
api_id da my.telegram.org: il riutilizzo dell'ID di esempio fornito nel codice sorgente open source attiva API_ID_PUBBLICATO_FLOOD per i tuoi utenti finali, e solo uno api_id viene emesso per numero di telefono.Un vero account Telegram in Python, senza scrivere MTProto
fornitori: "TELEGRAM". Non c'è api_id, nessun file di sessione da salvare e nessun PASSWORD_SESSIONE_NECESSARIA ramo in cui scrivere autonomamente: l'account collegato risulta collegato o non lo fa.Avvia chat prende l'ID dell'account collegato e un ID utente elenco, e apre una nuova conversazione o la consegna in quella esistente se esiste già una chat con quel destinatario.api_id / api_hash coppia da richiedere o ruotareimport unipilo
configurazione = unipilo.Configurazione()
configuration.api_key["chiave API"] = "chiave API"
client_api = unipilo.ApiClient(configurazione)
API di messaggistica = unipilo.API di messaggistica(api_client)
chat = API di messaggistica.Avvia chat(
"acc_123456789",
{"ID utente": ["0123456789"], "testo": "Ciao, in merito alla tua richiesta."}
)Gestione degli errori e dei limiti di frequenza in Python
429 oppure un ATTESA_ALLAGAMENTO_X, e ciò che il tuo codice Python farà subito dopo deciderà se si tratterà di una pausa di cinque secondi o di un account bannato.Numero massimo di messaggi dell'API Bot alla stessa chat individuale
Numero massimo di messaggi dell'API Bot all'interno di un singolo gruppo
Limite approssimativo dell'API dei Bot durante la trasmissione tra le chat
Stato restituito una volta superato uno di questi limiti
import tempo
import richieste
def inviare_con_ritentativo(url, payload, max_retries=3):
per tentativo in gamma(max_tentativi):
r = richieste.posta(url, json=payload)
se r.status_code != 429:
return r
riprova_dopo = r.json().ottenere("parametri", {}).ottenere("riprova_dopo", 1)
tempo.dormire(riprova_dopo)
salire Errore di esecuzione("troppe risposte 429")from telethon.errors import FloodWaitError
import asyncio
asincrono def invia_in_sicurezza(cliente, entità, testo)
tentare:
await cliente.invia_messaggio(entità, testo)
tranne FloodWaitError come e:
# e.seconds è il valore FLOOD_WAIT_X restituito da Telegram
await asyncio.dormire(e.seconds)
await cliente.invia_messaggio(entità, testo)API di Python Telegram Bot vs Telethon/Pyrogram vs SDK di Unipile
| Dimensione | Bot API (requests / python-telegram-bot) | Telethon / Pyrogram (MTProto) | SDK Python di Unipile |
|---|---|---|---|
| È possibile inviare un messaggio a un utente per primo | No | Sì, dipendente dalla privacy | Sì |
| Requisito di configurazione | Token del bot di BotFather | api_id / api_hash da my.telegram.org | Account collegato tramite codice QR o Hosted Auth |
| Gestione della sessione | Basato su token, nulla da persistere | Salvi il file di sessione tu stesso | Gestito dalla funzione Dispositivi di Telegram |
| 2FA / SESSION_PASSWORD_NEEDED | Non applicabile | Gestisci tu lo scambio SRP | Gestito per te |
| Partecipanti al gruppo (ottieni / aggiungi / rimuovi) | Limitato ai permessi del bot | Sì, autocostruito | Sì, endpoint v2 dedicati |
| Canali, community, broadcast | Sì, se aggiunto come amministratore | Sì | Non supportato |
| Il migliore per | Notifiche e bot di supporto | Un client MTProto in Python completamente personalizzato | Spedire velocemente senza possedere MTProto |
API di Telegram in Python - FAQ
Domande frequenti sull'API di Python Telegram Bot, python-telegram-bot, Telethon, Pyrogram e sulla connessione di un account reale con Unipile.
Sì. Il API del bot di Telegram è una semplice interfaccia HTTP, quindi una singola POSTA con requests di Python richieste biblioteca a https://api.telegram.org/bot<TOKEN>/sendMessage, con un chat_id e text nel corpo JSON, è sufficiente. Non è richiesto alcun SDK o libreria wrapper per questa chiamata.
Il API del bot di Telegram è la stessa interfaccia HTTP di Telegram, richiamabile da Python con richieste o qualsiasi client HTTP. python-telegram-bot è una libreria Python di terze parti che incapsula quegli stessi endpoint HTTP in un modello a oggetti asincrono, con un Applicazione metodi di classe tipizzati come bot.send_message, e polling degli aggiornamenti integrato o gestione dei webhook.
Questa è una regola strutturale delle Bot API, non un bug nel tuo codice. Un bot non può chiamare sendMessage contro un chat_id fino a quando quell'utente non ha inviato almeno un messaggio al bot per primo. Nessun parametro o libreria Python aggira il problema. Un vero account Telegram collegato, tramite Telethon, Pyrogram, o il SDK Unipile, non ha questa restrizione.
No. L'API del Bot richiede solo un token del bot emesso da BotFather. api_id e api_hash da my.telegram.org sono richiesti per la Client API (MTProto), il protocollo utilizzato da Telethon, Pyrogram e qualsiasi client che effettua l'accesso come account utente reale anziché come bot.
PASSWORD_SESSIONE_NECESSARIA è un errore 400 restituito da Telegram auth.signIn quando l'account ha l'autenticazione a due fattori abilitata. Telethon solleva un'eccezione come SessionPasswordNeededError. Cancellarlo significa eseguire il protocollo SRP e chiamare auth.checkPassword con la password cloud dell'account, che sia Telethon che Pyrogram gestiscono quando passi la password al loro metodo di accesso.
L'API Bot restituisce un 429 lo stato una volta superato circa un messaggio al secondo nella stessa chat, 20 messaggi al minuto in un gruppo o circa 30 messaggi al secondo durante la trasmissione tra chat. La risposta include un riprova_dopo valore in secondi. Sul lato MTProto, l'equivalente è un 420 FLOOD errore o un ATTESA_ALLAGAMENTO_X eccezione, dove X è il numero di secondi da attendere prima di riprovare.
Sì. Il SDK Python di Unipile collega un account utente Telegram esistente tramite la funzione Dispositivi di Telegram, tramite la scansione di un codice QR o l'autenticazione ospitata, ed espone la messaggistica tramite alcune chiamate SDK come Avvia chat. Non c'è api_id da richiedere, nessuna implementazione MTProto e nessun file di sessione o ramo 2FA da scrivere autonomamente.
La gestione dei partecipanti al gruppo è supportata: elenco, aggiunta e rimozione di partecipanti tramite appositi v2 endpoint. Canali, community, broadcast, azioni di amministrazione dei gruppi come l'approvazione o la promozione dei membri, l'archiviazione delle chat e le chiamate o videochiamate non sono supportati.
Avete ancora domande? Il nostro team è qui per aiutarvi.