Die Telegram API Python Anleitung: Funktionierender Code für jeden Ansatz
sendMessage Anruf bei Anfragen, ein minimaler Bot mit python-telegram-bot, ein echtes verknüpftes Konto mit Telethon, Pyrogram oder dem Unipile-SDK, und wie man Rate-Limits handhabt, ohne dass dein Skript beim ersten Mal abstürzt 429. Ob Sie hier gelandet sind auf der Suche nach Telegram Bot API Python Beispiel oder das Ganze Telegram API Python Bild: Jeder der nachstehenden Ansätze wird mit funktionierendem Code ausgeliefert.import Anfragen
TOKEN = "123456:ABC-your-bot-token"
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
Nutzlast = {
"chat_id": 123456789,
"Text": "Hallo von Python",
"Parse-Modus": "MarkdownV2"
}
response = Anfragen.Beitrag(url, json=payload)
print(Antwort.json())Drei Wege, die Telegram-API in Python zu implementieren, und welcher der richtige für Sie ist
Anfragen oder einer Wrapper-Bibliothek wie python-telegram-bot. Der schnellste Weg, um zu versenden, aber ein Bot kann nur einem Nutzer schreiben, der ihm zuerst geschrieben hat.api_id und API-Hash. Meldet sich als echtes Konto an, aber Sie besitzen den Sitzungsspeicher, stellt die Verbindung wieder her und steuert den 2FA-Ablauf.api_id / API-Hash sehen Sie sich zunächst an Schritt-für-Schritt-Zugangsanleitung.Erstelle deine Python-Integration
Die Python Telegram Bot API mit requests
Anfragen, ganz ohne Wrapper-Bibliothek. Seit Bot API 10.2 (14. Juli 2026) sind ein Bot-Token von BotFather und zwei Parameter alles, was sendMessage erfordert.123456:ABC-your-bot-token. Jeder Bot-API-Aufruf, einschließlich sendMessage, ist ein POST zu https://api.telegram.org/bot<TOKEN>/sendMessage mit einem JSON-Body.import Betriebssystem
import Anfragen
TOKEN = os.Umgebung["TELEGRAM_BOT_TOKEN"]
URL = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
Nutzlast = {
"chat_id": 123456789,
"Text": "Ihre Bestellung mit der Nummer #4821 wurde versandt.",
"Parse-Modus": "MarkdownV2"
}
response = Anfragen.Beitrag(URL, json=payload, timeout=10)Okay boolean. Ein Statuscode ungleich 200 oder ok: false bedeutet, dass die Nachricht nicht gesendet wurde, und die Nutzdaten enthalten eine menschenlesbare Beschreibung protokollieren.Daten = Antwort.json()
wenn response.status_code == 200 und Daten.bekommen.("Ok"):
Nachrichten-ID = Daten["Ergebnis"]["Nachricht_ID"]
print(gesendet, message_id={message_id}")
sonst:
print(f"fehlgeschlagen: {data.get('description')}")| Parameter | Typ | Beschreibung |
|---|---|---|
chat_id Erforderlich | int oder str | Ziel-Chat-ID oder @username für einen öffentlichen Kanal. |
text Erforderlich | Str | Nach Entitäten-Parsing 1 bis 4096 Zeichen Nachrichtentext. |
Parse-Modus Optional | Str | MarkdownV2 oder HTML, um Fettdruck, Links und Code-Formatierungen im Text darzustellen. |
Benachrichtigung deaktivieren Optional | bool | Sendet die Nachricht leise und ohne Push-Benachrichtigungston. |
Antwortparameter Optional | Wörterbuch | Sendet die Nachricht als Antwort auf eine bestehende Nachricht im Chat. |
Überschreite das Bot-Only-Limit
Die Telegram Bot API in Python mit python-telegram-bot
Anfragen Anrufe funktionieren gut für eine einzelne ausgehende Nachricht. Darüber hinaus wickeln die meisten Python-Codebasen den Telegram Bot API in python-telegram-bot, eine Bibliothek, die dieselben HTTP-Endpunkte in ein asynchrones Python-Objektmodell mit integrierter Aktualisierungsabfrage verwandelt.Anmeldung Objekt, das die Aktualisierungsschleife für Sie verwaltet (Polling oder Webhook)bot.send_message() anstelle von manuell erstellten JSON-Nutzdaten/start ist ein Decorator, keine Schleifechat_id, text, Parse-Modus. Die Bibliothek kann immer noch nicht veranlassen, dass ein Bot einen Nutzer zuerst anschreibt; diese Einschränkung liegt in den Plattformregeln von Telegram, nicht in dem Client, den Sie für den Aufruf verwenden.from Telegramm import Aktualisieren
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
asynchron def Start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.Nachricht senden(
chat_id=update.effective_chat.id,
Text="Hallo von python-telegram-bot",
parse_mode="MarkdownV2"
)
app = ApplicationBuilder().Token("123456:ABC-your-bot-token").bauen()
app.add_handler(Befehlshandler("Start", Start))
App.Polling starten()Ein echter Benutzeraccount in Python: Telethon und Pyrogram
api_id und API-Hash von my.telegram.org. Zwei Python-Bibliotheken erledigen die schwere Arbeit bei MTProto: Telethon und Pyrogram.Telethon
Pyrogram
from Telethon import Telegram-Client
from telethon.errors import SessionPasswordNeededError
api_id = 1234567
API-Hash = "dein_api_hash_von_my.telegram.org"
# "my_account" ist der Name der Sitzungsdatei auf der Festplatte, der bei jedem Durchlauf wiederverwendet wird
client = Telegram-Client("mein_konto", api_id, api_hash)
asynchron def Haupt():
await Klient.Start(Telefon="+15551234567")
await Klient.Nachricht senden("benutzername_oder_id", "Hallo von Telethon")
mit Kunde
client.loop.run_until_complete(main())client.start(phone=...) Wraps auth.sendCode, das einen Anmeldecode an die Telefonnummer sendet und einen zurückgibt phone_code_hash für den nächsten Anruf verwendet. Die Bibliothek fordert den Code an und ruft auf
auth.signIn damit. Hier hört eine ausschließlich auf den Normalverlauf ausgerichtete Implementierung auf. Wenn für das Konto die Zwei-Faktor-Authentifizierung aktiviert ist, antwortet Telegram mit einer 400 Fehler: SESSION_PASSWORD_NEEDED. Telethon nennt dies als
SessionPasswordNeededError, ein erwarteter Zweig, kein Fehler, der abgefangen und ignoriert werden muss. Das Cloud-Passwort des Kontos übergeben an
client.start(password=...) führt den SRP-Austausch durch und auth.checkPassword Für dich. Der direkte Aufruf der rohen MTProto-Schicht bedeutet, die InputCheckPasswordSRP Widersprich dir selbst. Telethon und Pyrogram schreiben beide eine lokale Sitzungsdatei (oder eine im Speicher
StringSession) nach dem ersten erfolgreichen Login. Verlieren Sie ihn oder deployen Sie ihn, ohne ihn dauerhaft zu speichern, muss Ihr Skript bei jedem Neustart den Telefoncode- und 2FA-Ablauf erneut durchlaufen. PASSWORT_HASH_UNGÜLTIG
API_ID_PUBLISHED_FLOOD
api_id von my.telegram.org: Die Wiederverwendung der in Open-Source-Beispielcode mitgelieferten Beispiel-ID löst aus API_ID_PUBLISHED_FLOOD für Ihre Endbenutzer und nur für einen api_id wird pro Telefonnummer ausgestellt.Ein echter Telegram-Account in Python, ohne MTProto zu schreiben
Anbieter: "TELEGRAM". Es gibt keinen api_id, keine Sitzungsdatei zum Speichern und keine SESSION_PASSWORT_ERFORDERLICH Zweig, den man selbst schreiben muss: Das verknüpfte Konto wird entweder angezeigt als verbunden oder auch nicht.Chat starten nimmt die ID des verknüpften Kontos und eine Benutzer-IDs Liste, und öffnet entweder ein neues Gespräch oder leitet es in das bestehende weiter, wenn bereits ein Chat mit diesem Empfänger existiert.api_id / API-Hash zum Anfordern oder Rotieren koppelnimport unipile
Konfiguration = einspurig.Konfiguration()
configuration.api_key["API-Schlüssel"] = "API-Schlüssel"
API-Client = einspurig.ApiClientKonfiguration
Messaging-API = einspurig.Messaging-API(api_client)
Chat = Messaging-API.Chat starten(
"acc_123456789",
{"user_ids": ["0123456789"], "Text": "Hallo, ich komme auf Ihre Anfrage zurück."}
)Fehlerbehandlung und Rate-Limits in Python
429 oder ein FLOOD_WAIT_X, und was dein Python-Code als Nächstes tut, entscheidet darüber, ob das eine Fünfsekundenpause oder ein gesperrtes Konto ist.Maximale Bot-API-Nachrichten an denselben privaten Chat
Maximale Bot-API-Nachrichten in einer einzelnen Gruppe
Ungefähres Bot-API-Limit beim Broadcasten an Chats
Status, der zurückgegeben wird, sobald eines dieser Limits überschritten wird
import Zeit
import Anfragen
def mit_wiederholung_senden(URL, Nutzlast, max_wiederholungen=3):
für Versuch in Reichweite(max_wiederholungen):
r = Anfragen.Beitrag(url, json=payload)
wenn r.status_code != 429:
return r
erneut_versuchen_nach = r.json().bekommen.("Parameter", {}).bekommen.("erneut_versuchen_nach", 1)
Zeit.Schlaf(Wiederholung nach)
erhöhen Laufzeitfehler("Zu viele 429-Antworten")from telethon.errors import FloodWaitError
import asyncio
asynchron def sicher senden(Klunde, Entität, Text)
versuchen:
await Klient.Nachricht senden(Entität, Text)
außer FloodWaitError als e:
# e.seconds ist der Wert von FLOOD_WAIT_X, den Telegram zurückgesendet hat
await asyncio.Schlaf(e.seconds)
await Klient.Nachricht senden(Entität, Text)Python Telegram Bot API vs Telethon/Pyrogram vs Unipile SDK
| Dimension | Bot-API (requests / python-telegram-bot) | Telethon / Pyrogram (MTProto) | Unipile Python SDK |
|---|---|---|---|
| Kann einem Benutzer zuerst eine Nachricht senden | Nein | Ja, datenschutzabhängig | Ja |
| Einrichtungsanforderung | Bot-Token von BotFather | api_id / API-Hash von my.telegram.org | Verknüpftes Konto über QR-Code oder Hosted Auth |
| Verwaltung der Sitzungen | Token-basiert, nichts zu speichern | Du speicherst die Sitzungsdatei selbst ab | Verwaltet über die Telegram-Funktion „Geräte“ |
| 2FA / SESSION_PASSWORD_NEEDED | Nicht anwendbar | Du führst den SRP-Austausch durch | Für Sie erledigt |
| Gruppenteilnehmer (abrufen / hinzufügen / entfernen) | Beschränkt auf Bot-Berechtigungen | Ja, selbst gebaut | Ja, dedizierte v2-Endpunkte |
| Kanäle, Communities, Streams | Ja, wenn als Administrator hinzugefügt | Ja | Nicht unterstützt |
| Am besten für | Benachrichtigungen und Support-Bots | Ein vollständig benutzerdefinierter Python-MTProto-Client | Schneller Versand ohne Besitz von MTProto |
Telegram-API in Python – FAQ
Häufige Fragen zur Python Telegram Bot API, python-telegram-bot, Telethon, Pyrogram und zum Verbinden eines echten Accounts mit Unipile.
Ja. Die Telegram Bot API ist eine einfache HTTP-Schnittstelle, sodass eine einzelne POST mit Python Anfragen Bibliothek zu https://api.telegram.org/bot<TOKEN>/sendMessage, mit einem chat_id und text im JSON-Body ist ausreichend. Für diesen Aufruf ist kein SDK oder Wrapper-Library erforderlich.
Die Telegram Bot API ist die eigene HTTP-Schnittstelle von Telegram, die von Python aus aufgerufen werden kann mit Anfragen oder einem beliebigen HTTP-Client. python-telegram-bot ist eine Python-Bibliothek von Drittanbietern, die genau diese HTTP-Endpunkte in ein asynchrones Objektmodell verpackt, mit einem Anmeldung Klasse, typisierte Methoden wie bot.send_message, sowie integriertem Update-Polling oder Webhook-Handling.
Dies ist eine strukturelle Regel der Bot-API und kein Fehler in Ihrem Code. Ein Bot kann nicht sendMessage gegen ein chat_id bis dieser Nutzer dem Bot zuerst mindestens eine Nachricht gesendet hat. Kein Parameter und keine Python-Bibliothek umgeht dies. Ein echtes verknüpftes Telegram-Konto, über Telethon, Pyrogram oder das Unipile SDK, hat diese Einschränkung nicht.
Nein. Die Bot-API benötigt lediglich ein von BotFather ausgegebenes Bot-Token. api_id und API-Hash von my.telegram.org werden für die Client-API (MTProto) benötigt, das Protokoll, das von Telethon, Pyrogram und jedem Client verwendet wird, der sich als echtes Benutzerkonto statt als Bot anmeldet.
SESSION_PASSWORT_ERFORDERLICH ist ein 400-Fehler, den Telegram zurückgibt von auth.signIn wenn für das Konto die Zwei-Faktor-Authentifizierung aktiviert ist. Telethon löst dies aus als SessionPasswordNeededError. Das Bereinigen bedeutet, das SRP-Protokoll auszuführen und aufzurufen auth.checkPassword mit dem Cloud-Passwort des Kontos, das sowohl Telethon als auch Pyrogram verarbeiten, wenn Sie das Passwort an deren Anmeldemethode übergeben.
Die Bot-API gibt eine/einen/ein 429 Status, sobald Sie etwa eine Nachricht pro Sekunde an denselben Chat, 20 Nachrichten pro Minute in einer Gruppe oder etwa 30 Nachrichten pro Sekunde beim Broadcasten über Chats hinweg überschreiten. Die Antwort enthält eine erneut_versuchen_nach Wert in Sekunden. Auf der MTProto-Seite entspricht dem ein 420 FLOOD Fehler oder ein FLOOD_WAIT_X Ausnahme, wobei X die Anzahl der Sekunden ist, die vor dem erneuten Versuch gewartet werden soll.
Ja. Die Unipile Python SDK verbindet ein bestehendes Telegram-Benutzerkonto über die telegramm-eigenen Gerätefunktionen, entweder durch einen QR-Code-Scan oder Hosted Auth, und stellt Messaging über einige SDK-Aufrufe zur Verfügung, wie zum Beispiel Chat starten. Es gibt keinen api_id anfordern, keine MTProto-Implementierung und keine Session-Datei oder keinen 2FA-Zweig, die man selbst schreiben müsste.
Die Verwaltung von Gruppenmitgliedern wird unterstützt: das Auflisten, Hinzufügen und Entfernen von Teilnehmern über dedizierte v2 Endpunkte. Kanäle, Communities, Broadcasts, Gruppenverwaltungsaktionen wie das Genehmigen oder Befördern von Mitgliedern sowie Sprach- oder Videoanrufe werden nicht unterstützt.
Haben Sie noch Fragen? Unser Team ist für Sie da.