Telegram Bot bauen in 10 Minuten mit Python

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.

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 importieren
import requests
import 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.content
data = 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.

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.content
data = 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 Response
params = {"chat_id":"235114446", "text":"Ich bin hier der Bot!"}
url = f"https://api.telegram.org/bot{token}/sendMessage"
message = requests.post(url, params=params)
messsage
<Response [200]>

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

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.