Telegram Bot bauen in 10 Minuten mit Python (2024)

Frei verfügbare APIs können einem das Leben so leicht machen, wenn man Daten sammeln oder Dinge automatisieren will. Heute lernst du, wie du in 10 Minuten dienen ersten eigenen Telegram Bot bauen kannst.

Voraussetzungen:

Schritt 1: Botfather anschreiben und Bot erstellen

Um Requests an die Telegram API schicken zu können, brauchst du ein Token, mit dem du dich identifizierst. Das Token bekommst du beim Botfather. Da der Botfather ein normaler Telegram-Nutzer ist, kannst du ihn ganz einfach über die Suchfunktion in Telegram finden. Er schickt dir auch direkt eine Nachricht mit den möglichen Interaktionen.

Telegram Bot bauen in 10 Minuten mit Python (1)

Oben siehst du alles, was du im Chat machen kannst. Um einen neuen Telegram Bot zu erstellen, schreibe /newbot und der Botfather wird dich anschließend nach einem Namen für deinen neuen Bot fragen. Sobald du Anzeigenamen und Username erstellt hast, bekommst du auch schon dein persönliches Token.

Und schon hast du deinen Telegram Bot gebaut. Viel einfacher geht’s nicht mehr. Dein Bot kann jetzt mit Einzelpersonen interagieren. Um den Bot auch für Gruppen nutzen zu können, schreibe noch /setprivacy in den Chat. Jetzt kannst du den privaten Modus ausstellen und auch Updates von Gruppen empfangen.

Schritt 2: Bot benutzen

Jetzt kannst du entscheiden, ob du mit einer Gruppe oder einem Privatchat starten möchtest. In der App kannst du jetzt entsprechend entweder den Bot direkt anschreiben oder eine Gruppe erstellen, in die du deinen Bot einlädst. Anschließend kannst du dir in Python Updates über deine Chats ziehen. Machen wir das mal.

# Libraries importierenimport requestsimport json

Im Ordner, in dem auch das Skript läuft, habe ich das Token als Textdatei abgelegt.

with open("token.txt") as file: token = file.read()

Updates (Nachrichten) empfangen mit getUpdates()

Senden wir mal unseren ersten GET-Request mit der getUpdates()-Methode. Darüber bekommst du Updates über alles, was in den Chats passiert ist, an denen dein Bot teilnimmt.

answer = requests.get(f"https://api.telegram.org/bot{token}/getUpdates")answer
<Response [200]>

Sieht gut aus. Mal sehen, was die Antwort beinhaltet.

content = answer.contentdata = json.loads(content)data
{'ok': True, 'result': []}

Das JSON enthält zwei Keys: ok und result. Ersterer sagt uns nur, ob der Request erfolgreich war oder nicht. Im zweiten Key steht das Ergebnis der Anfrage. Doch warum ist sie leer? Wenn bei dir auch nichts im result steht, dann liegt das wahrscheinlich daran, dass es noch keine Nachrichten im Chat gibt. Schreiben wir unseren Bot mal an.

Telegram Bot bauen in 10 Minuten mit Python (3)

Die erste Nachricht wurde automatisch generiert, die zweite habe ich geschrieben. Jetzt holen wir uns noch mal Updates.

answer = requests.get(f"https://api.telegram.org/bot{token}/getUpdates")content = answer.contentdata = json.loads(content)data
{'ok': True, 'result': [{'update_id': 461557900, 'message': {'message_id': 2, 'from': {'id': 235114446, 'is_bot': False, 'first_name': 'Christopher'}, 'chat': {'id': 235114446, 'first_name': 'Christopher', 'type': 'private'}, 'date': 1597908594, 'text': '/start', 'entities': [{'offset': 0, 'length': 6, 'type': 'bot_command'}]}}, {'update_id': 461557901, 'message': {'message_id': 3, 'from': {'id': 235114446, 'is_bot': False, 'first_name': 'Christopher', 'language_code': 'de'}, 'chat': {'id': 235114446, 'first_name': 'Christopher', 'type': 'private'}, 'date': 1597908597, 'text': 'Hallo'}}]

Jetzt bekommen wir auch richtige Updates. Das JSON enthält Infos wie die chat_id (brauchen wir später, um Nachrichten zu senden), den Absender, den Timestamp der Nachricht (in Unix Epoch Time), den Nachrichtentyp (private/group) und den Textinhalt. Die Form der API-Antwort ist natürlich auch davon abhängig, ob man eine Textnachricht, Sprachnachricht, ein Bild, ein Video oder etwas anderes geschickt bekommt. Außerdem kannst du die Anzahl der Updates auch einschränken, per Default bekommst du maximal 100. Wie das genau geht und was die Methode noch kann, erfährst du im API Manual.

Nachrichten senden mit sendMessage()

Jetzt, da wir die chat_id unseres Chats haben, können wir auch Nachrichten an diesen Chat senden.

# die chat_id ist die aus der obigen Responseparams = {"chat_id":"235114446", "text":"Ich bin hier der Bot!"}url = f"https://api.telegram.org/bot{token}/sendMessage"message = requests.post(url, params=params)message
<Response [200]>

Hat geklappt. Wenn du mitgemacht hast, müsstest du jetzt eine Benachrichtigung bekommen haben.

Telegram Bot bauen in 10 Minuten mit Python (4)

Und was seht im message-Objekt, das wir mit dem POST-Request generiert haben?

data = json.loads(message.content)data
{'ok': True, 'result': {'message_id': 13, 'from': {'id': 1273207610, 'is_bot': True, 'first_name': 'StatisQuo', 'username': 'statisquoBot'}, 'chat': {'id': 235114446, 'first_name': 'Christopher', 'type': 'private'}, 'date': 1597934406, 'text': 'Ich bin hier der Bot!'}}

Im Objekt steht u.a. wer wir sind, was wir gesendet haben, dass wir ein Bot sind und ein Timestamp.

Fertig

Jetzt hast du deinen eigenen Telegram Bot gebaut, für den es heute schon eine Fülle von nützlichen Use Cases gibt. Probier’s aus! Und wenn du noch mehr Lust auf’s Spielen mit APIs in Python hast, dann guck dir gerne die Beiträge zu News Mining und der Twitter API an.

In diese Seite fließt viel Zeit und Energie. In mich fließt deshalb viel Kaffee. Falls dir der Beitrag also geholfen hat, findest du vielleicht noch ein bisschen Kleingeld zwischen deinen Sofakissen und möchtest mir einen Kaffee spendieren. 🙂

Telegram Bot bauen in 10 Minuten mit Python (2024)
Top Articles
Latest Posts
Article information

Author: Roderick King

Last Updated:

Views: 6047

Rating: 4 / 5 (51 voted)

Reviews: 90% of readers found this page helpful

Author information

Name: Roderick King

Birthday: 1997-10-09

Address: 3782 Madge Knoll, East Dudley, MA 63913

Phone: +2521695290067

Job: Customer Sales Coordinator

Hobby: Gunsmithing, Embroidery, Parkour, Kitesurfing, Rock climbing, Sand art, Beekeeping

Introduction: My name is Roderick King, I am a cute, splendid, excited, perfect, gentle, funny, vivacious person who loves writing and wants to share my knowledge and understanding with you.