De Telegram API Python handleiding: werkende code voor elke benadering
sendMessage bellen met verzoekt, een minimale bot met python-telegram-bot, een echt gekoppeld account met Telethon, Pyrogram of de Unipile SDK, en hoe je omgaat met limieten (rate limits) zonder dat je script bij de eerste crasht 429. Of je hier nu bent beland op zoek naar een Telegram bot API Python voorbeeld of de volledige telegram api python afbeelding, elke onderstaande benadering wordt geleverd met werkende code.importeer verzoekt
TOKEN = "123456:ABC-your-bot-token"
url = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
lading = {
"chat_id": 123456789,
"tekst": "Hallo vanuit Python",
"parse_mode": "MarkdownV2"
}
response = verzoeken.post(url, json=payload)
print(antwoord.json())Drie manieren om de Telegram API te bouwen in Python, en welke je moet kiezen
verzoekt of een wrapper-bibliotheek zoals python-telegram-bot. De snelste manier om te verzenden, maar een bot kan alleen een bericht sturen naar een gebruiker die er eerst naar heeft geschreven.api_id en api_hash. Logt in als een echt account, maar je beheert de sessieopslag, herverbindingen en de 2FA-stroom.api_id / api_hash zie in de eerste plaats de stapsgewijze toegangsgids.Bouw je Python-integratie
De Python Telegram Bot API met requests
verzoekt, zonder dat hier een wrapper-bibliotheek bij komt kijken. Vanaf Bot API 10.2 (14 juli 2026) zijn een bot-token van BotFather en twee parameters het enige wat sendMessage vereist.123456:ABC-your-bot-token. Elke Bot API-aanroep, inclusief sendMessage, is een POST naar https://api.telegram.org/bot<TOKEN>/sendMessage met een JSON-body.importeer os
importeer verzoekt
TOKEN = os.ongeveer["TELEGRAM_BOT_TOKEN"]
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
lading = {
"chat_id": 123456789,
"tekst": ""Uw bestelling #4821 is verzonden."",
"parse_mode": "MarkdownV2"
}
response = verzoeken.post(URL, json=payload, timeout=10)oké boolean. Een niet-200 statuscode of ok: false betekent dat het bericht niet is verzonden en de payload een leesbare tekst bevat beschrijving aanmelden.gegevens = antwoord.json()
als response.status_code == 200 en gegevens.krijgen("oké"):
bericht-id = gegevens["resultaat"]["bericht_id"]
print(verzonden, message_id={message_id}")
anders:
print(mislukt: {data.get("description')}')| Parameter | Type | Beschrijving |
|---|---|---|
chat_id Vereist | int of str | Doelchat-id of @username voor een openbaar kanaal. |
text Vereist | straal | Berichttekst, 1 tot 4096 tekens na entiteitparsing. |
parse_mode Optioneel | straal | MarkdownV2 of HTML, om vette, link- en code-opmaak in de tekst weer te geven. |
melding_uitschakelen Optioneel | booleaans | Verzendt het bericht stil, zonder een push-notificatiegeluid. |
antwoordparameters Optioneel | dictee | Verstuurt het bericht als een antwoord op een bestaand bericht in de chat. |
Ga voorbij de limiet voor alleen bots
De Telegram Bot API in Python met python-telegram-bot
verzoekt oproepen werken prima voor één uitgaand bericht. Degenen die daarna komen, verpakken de meeste Python-codebases in de Telegram Bot API in python-telegram-bot, een bibliotheek die dezelfde HTTP-endpoints omzet in een asynchroon Python-objectmodel met ingebouwde update-polling.Toepassing object dat de updatelus voor je beheert (polling of webhook)bot.send_message() in plaats van handgeschreven JSON payloads/start is een decorator, geen luschat_id, text, parse_mode. De bibliotheek kan nog steeds niet instellen dat een bot eerst een gebruiker een bericht stuurt; die beperking bevindt zich in de platformregels van Telegram, niet in de client die je gebruikt om het aan te roepen.van telegram importeer Bijwerken
van telegram.ext importeer ApplicationBuilder, CommandHandler, ContextTypes
asynchroon def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
wacht op context.bot.bericht_verzenden(
chat_id=update.effective_chat.id,
tekst="Hallo van python-telegram-bot",
parse_mode="MarkdownV2"
)
app = ApplicationBuilder().token("123456:ABC-your-bot-token").bouwen()
app.add_handler(CommandHandler("start", start))
app.polling_starten()Een echt gebruikersaccount in Python: Telethon en Pyrogram
api_id en api_hash van my.telegram.org. Twee Python-bibliotheken doen het zware MTProto-werk: Telethon en Pyrogram.Telethon
Pyrogram
van telethon importeer TelegramClient
van telethon.errors importeer SessionPasswordNeededError
api_id = 1234567
api_hash = "je_api_hash_van_my.telegram.org"
# "my_account" is de bestandsnaam van het sessiebestand op de schijf, die bij elke uitvoering opnieuw wordt gebruikt
klant = TelegramClient("mijn_account", api_id, api_hash)
asynchroon def hoofd():
wacht op klant.start(telefoon="+15551234567")
wacht op klant.bericht_verzenden("gebruikersnaam_of_id", "Hallo van Telethon")
met klant:
client.loop.run_until_complete(main())client.start(phone=...) wraps auth.sendCode, waarmee een inlogcode naar het telefoonnummer wordt gestuurd en een telefoon_code_hash gebruikt voor het volgende gesprek. De bibliotheek vraagt om de code en roept aan
auth.signIn ermee. Hier stopt een implementatie die alleen uit een 'happy path' bestaat. Als het account tweefactorauthenticatie ingeschakeld heeft, antwoordt Telegram met een 400-fout: SESSION_PASSWORD_NEEDED. Telethon brengt dit naar voren als
SessionPasswordNeededError, een te verwachten tak, geen bug om op te vangen en te negeren. Het doorgeven van het cloudwachtwoord van het account aan
client.start(password=...) voert de SRP-uitwisseling uit en auth.checkPassword voor jou. Het direct aanroepen van de rauwe MTProto-laag betekent het bouwen van de InputCheckPasswordSRP werp jezelf tegen. Telethon en Pyrogram schrijven beide een lokaal sessiebestand (of een in-memory
StringSession) na de eerste succesvolle aanmelding. Raak het kwijt, of implementeer het zonder het op te slaan, en je script moet bij elke herstart opnieuw de telefooncode- en 2FA-procedure doorlopen. ONGELDIGE_WACHTWOORD_HASH
API_ID_PUBLISHED_FLOOD
api_id van my.telegram.org: het hergebruiken van de voorbeeld-ID die in open-source voorbeeldcode wordt meegeleverd, activeert API_ID_PUBLISHED_FLOOD voor uw eindgebruikers, en slechts één api_id wordt per telefoonnummer uitgegeven.Een echt Telegram-account in Python, zonder MTProto te schrijven
providers: "TELEGRAM". Er is geen api_id, geen sessiebestand om te behouden, en geen SESSIE_WACHTWOORD_NODIG vertakking om zelf te schrijven: het gekoppelde account wordt weergegeven als aangesloten of het gebeurt niet.start_chat neemt de ID van het gekoppelde account en een gebruikers-id's lijst, en opent hetzij een nieuw gesprek of levert af in het bestaande als er al een chat bestaat met die ontvanger.api_id / api_hash koppelen om aan te vragen of te roterenimporteer eenpaal
configuratie = eenstemmig.Configuratie()
configuration.api_key["apiKey"] = "API-sleutel"
api_client = eenstemmig.ApiClient(configuratie)
berichten-api = eenstemmig.MessagingApi(api_client)
chat = berichten_api.start_chat(
"acc_123456789",
{"gebruiker_ids": ["0123456789"], "tekst": "Hallo, ik kom even terug op je verzoek."}
)Fouten en limiet op het aantal verzoeken afhandelen in Python
429 of een HOOSBUI_WACHT_X, en wat je Python-code vervolgens doet, bepaalt of dat een pauze van vijf dagen is of een verbannen account.Maximum aantal Bot API-berichten naar dezelfde individuele chat
Maximaal aantal Bot API-berichten in een enkele groep
Geschatte limiet van de Bot API bij het uitzenden naar chats
Status wordt geretourneerd zodra een van deze limieten wordt overschreden
importeer tijd
importeer verzoekt
def versturen_met_herhaalpoging(url, payload, max_retries=3):
voor poging in bereikmax_herpogingen:
r = verzoeken.post(url, json=payload)
als r.status_code != 429:
return r
probeer_opnieuw_na = r.json().krijgen("parameters", {}).krijgen("opnieuw_proberen_na", 1)
tijd.slaap(probeer_opnieuw_na)
verhogen RuntimeError("te veel 429-reacties")van telethon.errors importeer FloodWaitError
importeer asyncio
asynchroon def veilig_verzenden(cliënt, entiteit, tekst)
proberen:
wacht op klant.bericht_verzenden(entiteit, tekst)
uitzondering FloodWaitError als e:
# e.seconds is de waarde van FLOOD_WAIT_X die Telegram heeft teruggestuurd
wacht op asyncio.slaap(e.seconden)
wacht op klant.bericht_verzenden(entiteit, tekst)Python Telegram Bot API versus Telethon/Pyrogram versus Unipile SDK
| Afmeting | Bot-API (requests / python-telegram-bot) | Telethon / Pyrogram (MTProto) | Unipile Python SDK |
|---|---|---|---|
| Kan een gebruiker eerst een bericht sturen | Geen | Ja, privacygevoelig | Ja |
| Installatievereiste | Bot-token van BotFather | api_id / api_hash van my.telegram.org | Gekoppeld account via QR-code of gehoste authenticatie |
| Sessiebeheer | Gebaseerd op tokens, niets om te bewaren | Je slaat het sessiebestand zelf op | Beheerd via de functie Apparaten van Telegram |
| 2FA / SESSION_PASSWORD_NEEDED | Niet van toepassing | Jij handelt de SRP-uitwisseling af | Voor u afgehandeld |
| Groepsdeelnemers (ophalen / toevoegen / verwijderen) | Beperkt tot botrechten | Ja, zelfgebouwd | Ja, toegewijde v2-eindpunten |
| Kanalen, communities, uitzendingen | Ja, indien toegevoegd als beheerder | Ja | Niet ondersteund |
| Het beste voor | Meldingen en supportbots | Een volledig aangepaste Python MTProto-client | Sneller verzenden zonder eigenaar te zijn van MTProto |
Telegram API in Python - FAQ
Veelgestelde vragen over de Python Telegram Bot API, python-telegram-bot, Telethon, Pyrogram en het koppelen van een echt account met Unipile.
Ja. De Telegram Bot API is een eenvoudige HTTP-interface, dus een enkele POST verzoek met Python's verzoekt bibliotheek naar https://api.telegram.org/bot<TOKEN>/sendMessage, met een chat_id en text in de JSON-body volstaat. Er is geen SDK of wrapper-bibliotheek vereist voor deze aanroep.
De Telegram Bot API Is de eigen HTTP-interface van Telegram, aanroepbaar vanuit Python met verzoekt of een andere HTTP-client. python-telegram-bot is een Python-bibliotheek van een derde partij die dezelfde HTTP-endpoints omwikkelt in een asynchroon objectmodel, met een Toepassing klasse, getypeerde methoden zoals bot.send_message, en ingebouwde update polling of webhook-afhandeling.
Dit is een structurele regel van de Bot API, geen bug in je code. Een bot kan niet aanroepen sendMessage tegen een chat_id totdat die gebruiker eerst minstens één bericht naar de bot heeft gestuurd. Geen enkele parameter of Python-bibliotheek omzeilt dit. Een echt gekoppeld Telegram-account, via Telethon, Pyrogram, of de Unipile SDK, heeft deze beperking niet.
Nee. De Bot API heeft alleen een bot-token nodig dat is uitgegeven door BotFather. api_id en api_hash van my.telegram.org zijn vereist voor de Client API (MTProto), het protocol dat wordt gebruikt door Telethon, Pyrogram en elke client die inlogt als een echt gebruikersaccount in plaats van een bot.
SESSIE_WACHTWOORD_NODIG is een 400-fout die Telegram retourneert van auth.signIn wanneer tweefactorauthenticatie is ingeschakeld voor het account. Gooit Telethon dit als SessionPasswordNeededError. Dit wissen betekent het uitvoeren van het SRP-protocol en het aanroepen van auth.checkPassword met het cloudwachtwoord van het account, dat zowel Telethon als Pyrogram verwerken wanneer je het wachtwoord doorgeeft aan hun inlogmethode.
De Bot API retourneert een 429 status zodra je ongeveer meer dan één bericht per seconde naar dezelfde chat overschrijdt, 20 berichten per minuut in een groep, of ongeveer 30 berichten per seconde bij het uitzenden naar meerdere chats. Het antwoord bevat een probeer_opnieuw_na waarde in seconden. Aan de MTProto-kant is het equivalente een 420 FLOOD fout of een HOOSBUI_WACHT_X uitzondering, waarbij X het aantal seconden is dat moet worden gewacht voordat het opnieuw wordt geprobeerd.
Ja. De Unipile Python SDK koppelt een bestaand Telegram-gebruikersaccount via Telegrams eigen Apparaten-functie, het scannen van een QR-code of gehoste authenticatie, en stelt berichtenverkeer beschikbaar via een paar SDK-aanroepen zoals start_chat. Er is geen api_id te aanvragen, geen MTProto-implementatie, en geen sessiebestand of 2FA-branch die je zelf moet schrijven.
Groepsdeelnemersbeheer wordt ondersteund: het weergeven, toevoegen en verwijderen van deelnemers via toegewijde v2 endpoints. Kanalen, communities, broadcasts, groepsbeheersacties zoals het goedkeuren of promoveren van leden, chatarchivering en spraak- of videogesprekken worden niet ondersteund.
Heb je nog vragen? Ons team staat klaar om te helpen.