Baue deinen ersten Telegram Bot: Eine Schritt-für-Schritt-Anleitung

Baue deinen ersten Telegram Bot: Eine Schritt-für-Schritt-Anleitung

Chatbots werden oft als Revolution in der Art und Weise gepriesen, wie Nutzer mit Technologie und Unternehmen interagieren. Im Vergleich zu herkömmlichen Apps haben sie eine recht einfache Benutzeroberfläche, da sie nur einen Chat benötigen und die Chatbots angeblich verstehen und alles tun können, was der Benutzer von ihnen verlangt, zumindest in der Theorie.

Viele Branchen verlagern ihren Kundenservice auf Chatbot-Systeme. Das liegt an den erheblichen Kosteneinsparungen im Vergleich zu echten Menschen und an der Robustheit und ständigen Verfügbarkeit. Chatbots bieten eine gewisse Unterstützung für Benutzer ohne erhebliche zusätzliche Kosten.

Heutzutage werden Chatbots in vielen Szenarien eingesetzt, von einfachen Aufgaben wie der Anzeige von Uhrzeit und Wetterdaten bis hin zu komplexeren Vorgängen wie rudimentären medizinischen Diagnosen und Kundenkommunikation/-unterstützung. Du kannst einen Chatbot entwickeln, der deinen Kunden bei bestimmten Fragen zu deinem Produkt hilft, oder du kannst einen persönlichen Assistenten-Chatbot erstellen, der grundlegende Aufgaben erledigt und dich daran erinnert, wann es Zeit ist, zu einem Meeting oder ins Fitnessstudio zu gehen.

Es gibt viele Möglichkeiten, wo du deinen Chatbot einsetzen kannst, und eine der häufigsten Verwendungen sind soziale Medien, da die meisten Menschen sie regelmäßig nutzen. Das Gleiche gilt für Instant-Messaging-Apps, wenn auch mit einigen Einschränkungen.

Telegram ist eine der beliebtesten Instant-Messaging-Plattformen, da es dir ermöglicht, Nachrichten nicht nur auf deinem Gerät, sondern auch in der Cloud zu speichern, und es überzeugt durch eine gute Unterstützung für verschiedene Plattformen wie Android, iOS, Windows und andere Plattformen, die die Webversion unterstützen. Das Erstellen eines Chatbots auf Telegram ist ziemlich einfach und erfordert nur wenige Schritte, die sehr wenig Zeit in Anspruch nehmen. Der Chatbot kann in Telegram-Gruppen und -Kanälen integriert werden und funktioniert auch eigenständig.

In diesem Tutorial werden wir einen Python-Telegram-Bot erstellen, der dir ein Avatar-Bild von Adorable Avatars gibt. Unser Beispiel beinhaltet den Aufbau eines Bots mit Flask und die Bereitstellung auf einem kostenlosen Heroku-Server.

Für dieses Tutorial benötigst du Python 3 auf deinem System sowie Python-Codierkenntnisse. Ein gutes Verständnis davon, wie Apps funktionieren, wäre von Vorteil, ist aber nicht zwingend erforderlich, da wir die meisten Informationen detailliert durchgehen werden. Du benötigst auch Git auf deinem System.

Natürlich erfordert das Tutorial auch ein kostenloses Telegram-Konto. Du kannst dich hier anmelden. Ein Heroku-Konto ist ebenfalls erforderlich, und du kannst es hier kostenlos bekommen.

Los geht’s: Wie man einen Telegram Bot erstellt

Um einen Chatbot in Telegram zu erstellen, musst du den BotFather kontaktieren, der im Grunde genommen ein Bot ist, der andere Bots erstellt.

Der Befehl, den du benötigst, ist /newbot, woraufhin die folgenden Schritte zur Erstellung deines Bots folgen:

LESEN  iPad Air vs. iPad Pro: Eine Entscheidungshilfe für Tablet-Nutzer

Dein Bot sollte zwei Attribute haben: einen Namen und einen Benutzernamen. Der Name wird für deinen Bot angezeigt, während der Benutzername für Erwähnungen und Freigaben verwendet wird.

Nachdem du deinen Bot-Namen und Benutzernamen ausgewählt hast – der mit “bot” enden muss – erhältst du eine Nachricht mit deinem Zugriffstoken, und du musst dein Zugriffstoken und deinen Benutzernamen natürlich für später speichern, da du sie benötigen wirst.

Implementiere die Chatbot-Logik

Wir werden in diesem Tutorial Ubuntu verwenden. Für Windows-Benutzer werden die meisten Befehle hier ohne Probleme funktionieren, aber falls du Probleme bei der Einrichtung der virtuellen Umgebung hast, schaue dir bitte diesen Link an. Für Mac-Benutzer sollte dieses Tutorial gut funktionieren.

Erstellen wir zunächst eine virtuelle Umgebung. Sie hilft dabei, die Anforderungen deines Projekts von deiner globalen Python-Umgebung zu isolieren.

$ python -m venv botenv/

Nun haben wir ein Verzeichnis “botenv/”, das alle Python-Bibliotheken enthält, die wir verwenden werden. Aktiviere die virtuelle Umgebung mit dem folgenden Befehl:

$ source botenv/bin/activate

Die Bibliotheken, die wir für unseren Bot benötigen, sind:

  • Flask: Ein Micro-Web-Framework in Python.
  • Python-telegram-bot: Ein Telegram-API-Wrapper in Python.
  • Requests: Eine beliebte Python-HTTP-Bibliothek.

Du kannst sie in der virtuellen Umgebung mit dem Pip-Befehl installieren:

$ pip install flask
$ pip install python-telegram-bot
$ pip install requests

Lass uns jetzt unser Projektverzeichnis durchsuchen.

.
├── app.py
├── telebot
│   ├── credentials.py
│   |   .
│   |   Hier kannst du deinem Bot Leben einhauchen
│   |   .
│   └── __init__.py
└── botenv

In der Datei credentials.py benötigen wir drei Variablen:

bot_token = "hier kommt dein Zugriffstoken vom BotFather"
bot_user_name = "der Benutzername, den du eingegeben hast"
URL = "der Heroku-App-Link, den wir später erstellen werden"

Lass uns nun zu unserer app.py zurückkehren und den Code Schritt für Schritt durchgehen:

# importiere alles von Flask, request
import re
from flask import Flask, request
import telegram
from telebot.credentials import bot_token, bot_user_name, URL

global bot
global TOKEN
TOKEN = bot_token
bot = telegram.Bot(token=TOKEN)

# starte die Flask App
app = Flask(__name__)

# verbinde Funktionen mit bestimmten Routen
@app.route('/{}'.format(TOKEN), methods=['POST'])
def respond():
    # rufe die Nachricht als JSON ab und wandele sie in ein Telegram-Objekt um
    update = telegram.Update.de_json(request.get_json(force=True), bot)
    chat_id = update.message.chat.id
    msg_id = update.message.message_id

    # Telegram versteht UTF-8, also kodiere den Text für unicode-Kompatibilität
    text = update.message.text.encode('utf-8').decode()

    # nur zu Debugging-Zwecken
    print("got text message :", text)

    # die erste Nachricht, die du mit dem Bot austauschst, auch als Begrüßungsnachricht bekannt
    if text == "/start":
        # die Begrüßungsnachricht
        bot_welcome = """Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name."""

        # sende die Begrüßungsnachricht
        bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id)
    else:
        try:
            # bereinige die Nachricht von allen Nicht-Buchstaben
            text = re.sub(r'W', '_', text)

            # erstelle den API-Link für den Avatar basierend auf http://avatars.adorable.io/
            url = "http://avatars.adorable.io/{}.png".format(text.strip())

            # antworte mit einem Foto, das auf den Namen des Benutzers hinweist
            # beachte, dass du Fotos per URL senden kannst und Telegram es für dich abruft
            bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id)
        except Exception:
            # wenn etwas schief gelaufen ist
            bot.sendMessage(chat_id=chat_id, text="Es gab ein Problem mit dem verwendeten Namen. Bitte gib einen anderen Namen ein.", reply_to_message_id=msg_id)

    return 'ok'

@app.route('/set_webhook', methods=['GET', 'POST'])
def set_webhook():
    # wir verwenden das Bot-Objekt, um den Bot mit unserer App zu verbinden, die unter der von URL bereitgestellten URL liegt
    s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN))
    if s:
        return "Webhook wurde erfolgreich eingerichtet"
    else:
        return "Fehler beim Einrichten des Webhooks"

@app.route('/')
def index():
    return '.'

if __name__ == '__main__':
    app.run(threaded=True)

Das war der letzte Teil des Codes, den du in unserem Tutorial schreiben wirst. Jetzt können wir zum letzten Schritt übergehen und unsere App auf Heroku starten.

LESEN  Wie man Musik analysiert: 7 bewährte Tipps

Starte unsere App auf Heroku

Bevor wir unsere App erstellen, benötigen wir ein paar Dinge.

Heroku kann nicht wissen, welche Bibliotheken dein Projekt verwendet, daher müssen wir es mit der Datei requirements.txt mitteilen – ein häufiges Problem ist, dass du requirements falsch schreibst, also sei vorsichtig -, um die Anforderungen mithilfe von pip zu generieren:

pip freeze > requirements.txt

Jetzt hast du deine Anforderungsdatei bereit.

Jetzt benötigst du das Procfile, das Heroku sagt, wo unsere App startet. Erstelle eine Datei namens Procfile und füge Folgendes hinzu:

web: gunicorn app:app

Als Zwischenschritt kannst du eine .gitignore-Datei zu deinem Projekt hinzufügen, damit nicht verwendete Dateien nicht in das Repository hochgeladen werden.

Aus deinem Heroku-Dashboard heraus erstelle eine neue App. Sobald du dies getan hast, wirst du zur Deploy-Seite weitergeleitet. Öffne dann in einem neuen Fenster den Einstellungen-Tab und kopiere die Domain der App, die etwas wie https://appname.herokuapp.com/ sein wird, und füge sie in die URL-Variable in credentials.py ein.

Gehe nun zurück zum Deploy-Tab und führe die folgenden Schritte aus:

Hinweis: Windows- und macOS-Benutzer können den hier beschriebenen Schritten folgen.

Melde dich bei Heroku an:

$ heroku login

Bitte beachte, dass diese Methode manchmal im Wartezustand beim Login hängen bleibt. Wenn dir das passiert, versuche dich mit folgendem Befehl anzumelden:

$ heroku login -i

Initialisiere ein Git-Repository in unserem Verzeichnis:

$ git init
$ heroku git:remote -a {heroku-projektname}

Deploye die App:

$ git add .
$ git commit -m "erster Commit"
$ git push heroku master

An diesem Punkt siehst du den Baufortschritt in deinem Terminal. Wenn alles gut gegangen ist, wirst du etwas Ähnliches sehen:

remote: -> Launching...
remote: Released v6
remote: https://project-name.herokuapp.com/ deployed to Heroku
remote:...

Gehe jetzt zur App-Seite (den Link der Domain, den du vorher kopiert hast) und füge am Ende des Links /setwebhook hinzu, sodass die Adresse etwas wie https://appname.herokuapp.com/setwebhook sein wird. Wenn du “webhook setup ok” siehst, bist du bereit!

Jetzt spreche mit deinem Bot

Jetzt hast du deinen Telegram-Bot rund um die Uhr ohne dein Eingreifen einsatzbereit. Du kannst der Bot-Logik alles hinzufügen, was du möchtest. So kannst du zum Beispiel deinen Bot realistischer gestalten, indem du einen “Tippstatus” hinzufügst und den Foto-Status wie folgt sendest:

LESEN  VOGONS – Wie ich einen alten PC in ein Retro-Gaming-System verwandelte

Der folgende Code-Schnipsel befindet sich in der respond() Funktion:

if text == "/start":
    # sende die Begrüßungsnachricht
    bot_welcome = """Welcome to coolAvatar bot, the bot is using the service from http://avatars.adorable.io/ to generate cool looking avatars based on the name you enter so please enter a name and the bot will reply with an avatar for your name."""

    # sende die Begrüßungsnachricht
    bot.sendChatAction(chat_id=chat_id, action="typing")
    sleep(1.5)
    bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id)
else:
    try:
        # bereinige die Nachricht von allen Nicht-Buchstaben
        text = re.sub(r'W', '_', text)

        # erstelle den API-Link für den Avatar basierend auf http://avatars.adorable.io/
        url = "http://avatars.adorable.io/{}.png".format(text.strip())

        # antworte mit einem Foto, das auf den Namen des Benutzers hinweist
        # beachte, dass du Fotos per URL senden kannst und Telegram es für dich abruft
        bot.sendChatAction(chat_id=chat_id, action="upload_photo")
        sleep(2)
        bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id)
    except Exception:
        # wenn etwas schief gelaufen ist
        bot.sendMessage(chat_id=chat_id, text="Es gab ein Problem mit dem verwendeten Namen. Bitte gib einen anderen Namen ein.", reply_to_message_id=msg_id)

Wie du im obigen Code-Schnipsel sehen kannst, haben wir eine “Tippen”-Aktion hinzugefügt, wenn wir die Informationen über den Bot, die im Textformat vorliegen, senden, und eine “Foto hochladen”-Aktion, wenn wir ein Foto senden, um den Bot realistischer zu gestalten. Weitere Aktionen findest du hier.

Du kannst auch das Bot-Bild und die Beschreibung im BotFather-Kanal ändern, um es freundlicher zu gestalten.

Auf der Python-Telegram-Bot-Seite auf GitHub findest du viele weitere einfache Beispiele für Telegram-Bots.

Du kannst auf unserem Bot aufbauen und ihn zum nächsten Super-KI-Bot machen – alles, was du tun musst, ist deine Logik in der respond() Funktion zu integrieren. Zum Beispiel kann deine Logik in einem separaten Modul sein und innerhalb der respond()-Funktion wie folgt aufgerufen werden:

.
├── app.py
├── telebot
│   ├── credentials.py
│   ├──ai.py
│   |   .
│   |   Hier kannst du deinem Bot Leben einhauchen
│   |   .
│   └── __init__.py
└── botenv

In ai.py:

def generate_smart_reply(text):
    # hier kannst du alles machen, was du willst
    return "Dies ist eine intelligente Antwort der KI!"

Importiere es jetzt in app.py:

import re
from time import sleep
from flask import Flask, request
import telegram
from telebot.ai import generate_smart_reply
from telebot.credentials import bot_token, bot_user_name, URL

Rufe es dann innerhalb des respond()-Codes auf:

def respond():
    # rufe die Nachricht als JSON ab und wandele sie in ein Telegram-Objekt um
    update = telegram.Update.de_json(request.get_json(force=True), bot)
    chat_id = update.message.chat.id
    msg_id = update.message.message_id

    # Telegram versteht UTF-8, also kodiere den Text für unicode-Kompatibilität
    text = update.message.text.encode('utf-8').decode()

    # nur zu Debugging-Zwecken
    print("got text message :", text)

    # hier rufe deine smarte Antwortnachricht auf
    reply = generate_smart_reply(text)
    bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)

Jetzt kannst du deinen Bot so arbeiten lassen, wie du es möchtest. Mach weiter und erstelle das nächste große Ding!

Ich hoffe, dir hat es Spaß gemacht, zu lernen, wie man einen Telegram-Bot in Python erstellt.

Weitere Ressourcen

  • Aufbau eines Chatbots mit Telegram und Python
  • Einrichten des Webhooks deines Telegram-Bots auf einfache Weise
  • Python-telegram-bot Repository
  • Bereitstellen mit Git auf Heroku
  • Python Telegram Bot Dokumentation