Erstellen Sie Ihren ersten Telegram-Bot: Eine Schritt-für-Schritt-Anleitung
Veröffentlicht: 2022-03-11Chatbots werden oft als Revolution in der Art und Weise angepriesen, wie Benutzer mit Technologie und Unternehmen interagieren. Sie haben im Vergleich zu herkömmlichen Apps eine recht einfache Benutzeroberfläche, da Benutzer nur chatten müssen und die Chatbots zumindest theoretisch alles verstehen und tun sollen, was der Benutzer von ihnen verlangt.
Viele Branchen stellen ihren Kundenservice auf Chatbot-Systeme um. Das liegt an den enormen Kosteneinsparungen im Vergleich zum Menschen, aber auch an der Robustheit und ständigen Verfügbarkeit. Chatbots bieten ein gewisses Maß an Benutzerunterstützung ohne erhebliche zusätzliche Kosten.
Heutzutage werden Chatbots in vielen Szenarien eingesetzt, von einfachen Aufgaben wie der Anzeige von Zeit- und Wetterdaten bis hin zu komplexeren Operationen wie rudimentären medizinischen Diagnosen und Kundenkommunikation/-support. Sie können einen Chatbot entwickeln, der Ihren Kunden hilft, wenn sie bestimmte Fragen zu Ihrem Produkt stellen, oder Sie können einen persönlichen Chatbot-Assistenten erstellen, der grundlegende Aufgaben erledigt und Sie daran erinnert, wenn es Zeit ist, zu einem Meeting oder ins Fitnessstudio zu gehen.
Es gibt viele Möglichkeiten, wo Sie Ihren Chatbot einsetzen können, und eine der häufigsten Anwendungen sind Social-Media-Plattformen, da die meisten Menschen sie regelmäßig nutzen. Dasselbe gilt für Instant-Messaging-Apps, allerdings mit einigen Einschränkungen.
Telegram ist heute eine der beliebtesten IM-Plattformen, da es Ihnen ermöglicht, Nachrichten in der Cloud zu speichern, anstatt nur auf Ihrem Gerät, und es bietet eine gute Unterstützung für mehrere Plattformen, da Sie Telegram auf Android, iOS, Windows und so weiter haben können jede andere Plattform, die die Webversion unterstützen kann. Das Erstellen eines Chatbots auf Telegram ist ziemlich einfach und erfordert nur wenige Schritte, die nur sehr wenig Zeit in Anspruch nehmen. Der Chatbot kann in Telegram-Gruppen und -Kanäle integriert werden und funktioniert auch alleine.
In diesem Tutorial erstellen wir einen Telegram-Bot, der Ihnen ein Avatar-Bild von Adorable Avatars gibt. In unserem Beispiel wird ein Bot mit Flask erstellt und auf einem kostenlosen Heroku-Server bereitgestellt.
Um dieses Tutorial abzuschließen, müssen Sie Python 3 auf Ihrem System installiert haben und über Python-Programmierkenntnisse verfügen. Außerdem wäre ein gutes Verständnis der Funktionsweise von Apps eine gute Ergänzung, aber kein Muss, da wir die meisten der von uns vorgestellten Dinge im Detail durchgehen werden. Außerdem muss Git auf Ihrem System installiert sein.
Natürlich erfordert das Tutorial auch ein Telegram-Konto, das kostenlos ist. Hier können Sie sich anmelden. Ein Heroku-Konto ist ebenfalls erforderlich und Sie können es hier kostenlos erhalten.
Erwecken Sie Ihren Telegramm-Bot zum Leben
Um einen Chatbot auf Telegram zu erstellen, müssen Sie den BotFather kontaktieren, der im Wesentlichen ein Bot ist, der zum Erstellen anderer Bots verwendet wird.
Der benötigte Befehl ist /newbot
, der zu den folgenden Schritten führt, um Ihren Bot zu erstellen:
Ihr Bot sollte zwei Attribute haben: einen Namen und einen Benutzernamen. Der Name wird für Ihren Bot angezeigt, während der Benutzername für Erwähnungen und Freigaben verwendet wird.
Nachdem Sie Ihren Bot-Namen und Benutzernamen ausgewählt haben, der auf „bot“ enden muss, erhalten Sie eine Nachricht mit Ihrem Zugriffstoken, und Sie müssen Ihren Zugriffstoken und Benutzernamen natürlich für später speichern, da Sie sie benötigen werden.
Codieren Sie die Chatbot-Logik
Wir werden Ubuntu in diesem Tutorial verwenden. Für Windows-Benutzer funktionieren die meisten Befehle hier ohne Probleme, aber sollten Sie Probleme mit der Einrichtung der virtuellen Umgebung haben, konsultieren Sie bitte diesen Link. Für Mac-Benutzer sollte dieses Tutorial problemlos funktionieren.
Lassen Sie uns zunächst eine virtuelle Umgebung erstellen. Es hilft, die Anforderungen Ihres Projekts von Ihrer globalen Python-Umgebung zu isolieren.
$ python -m venv botenv/
Jetzt haben wir ein botenv/
, das alle Python-Bibliotheken enthält, die wir verwenden werden. Fahren Sie fort und aktivieren virtualenv
mit dem folgenden Befehl:
$ source botenv/bin/activate
Die Bibliotheken, die wir für unseren Bot benötigen, sind:
- Flask: Ein in Python erstelltes Micro-Web-Framework.
- Python-telegram-bot: Ein Telegramm-Wrapper in Python.
- Anfragen: Eine beliebte Python-HTTP-Bibliothek.
Sie können sie mit dem Befehl pip wie folgt in der virtuellen Umgebung installieren:
(telebot) $ pip install flask (telebot) $ pip install python-telegram-bot (telebot) $ pip install requests
Lassen Sie uns nun unser Projektverzeichnis durchsuchen.
. ├── app.py ├── telebot │ ├── credentials.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
In der Datei " credentials.py
" benötigen wir drei Variablen:
bot_token = "here goes your access token from BotFather" bot_user_name = "the username you entered" URL = "the heroku app link that we will create later"
Gehen wir nun zurück zu unserer app.py und gehen den Code Schritt für Schritt durch:
# import everything 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)
Jetzt haben wir das Bot-Objekt, das für jede Aktion verwendet wird, die der Bot ausführen soll.
# start the flask app app = Flask(__name__)
Wir müssen auch Funktionen an bestimmte Routen binden. Mit anderen Worten, wir müssen Flask mitteilen, was zu tun ist, wenn eine bestimmte Adresse aufgerufen wird. Ausführlichere Informationen zu Flask und Routen finden Sie hier.
In unserem Beispiel antwortet die route-Funktion auf eine URL, die im Wesentlichen /{token}
ist, und dies ist die URL, die Telegram aufruft, um Antworten auf Nachrichten zu erhalten, die an den Bot gesendet werden.
@app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message 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. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok'
Der intuitive Weg, diese Funktion zum Laufen zu bringen, besteht darin, dass wir sie jede Sekunde aufrufen, damit sie überprüft, ob eine neue Nachricht eingetroffen ist, aber das werden wir nicht tun. Stattdessen verwenden wir Webhook, der uns eine Möglichkeit bietet, den Bot unseren Server anrufen zu lassen, wenn eine Nachricht aufgerufen wird, sodass wir unseren Server nicht in einer While-Schleife leiden lassen müssen, während er auf eine Nachricht wartet.
Wir werden also eine Funktion erstellen, die wir selbst aufrufen müssen, um den Webhook von Telegram zu aktivieren, und Telegram im Grunde sagen, dass es einen bestimmten Link aufrufen soll, wenn eine neue Nachricht eintrifft. Wir werden diese Funktion nur einmal aufrufen, wenn wir den Bot zum ersten Mal erstellen. Wenn Sie den App-Link ändern, müssen Sie diese Funktion mit dem neuen Link, den Sie haben, erneut ausführen.
Die Route hier kann alles sein; du bist derjenige, der es nennen wird:
@app.route('/setwebhook', methods=['GET', 'POST']) def set_webhook(): # we use the bot object to link the bot to our app which live # in the link provided by URL s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) # something to let us know things work if s: return "webhook setup ok" else: return "webhook setup failed"
Jetzt, wo alles eingestellt ist, lasst uns einfach eine schicke Homepage erstellen, damit wir wissen, dass die Engine läuft.
@app.route('/') def index(): return '.' if __name__ == '__main__': # note the threaded arg which allow # your app to have more than one thread app.run(threaded=True)
Werfen wir einen Blick auf die Vollversion von app.py:
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) app = Flask(__name__) @app.route('/{}'.format(TOKEN), methods=['POST']) def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # the first time you chat with the bot AKA the welcoming message if text == "/start": # print the welcoming message 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. """ # send the welcoming message bot.sendMessage(chat_id=chat_id, text=bot_welcome, reply_to_message_id=msg_id) else: try: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you bot.sendPhoto(chat_id=chat_id, photo=url, reply_to_message_id=msg_id) except Exception: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id) return 'ok' @app.route('/set_webhook', methods=['GET', 'POST']) def set_webhook(): s = bot.setWebhook('{URL}{HOOK}'.format(URL=URL, HOOK=TOKEN)) if s: return "webhook setup ok" else: return "webhook setup failed" @app.route('/') def index(): return '.' if __name__ == '__main__': app.run(threaded=True)
Das ist das letzte Stück Code, das Sie in unserem Tutorial schreiben werden. Jetzt können wir zum letzten Schritt übergehen und unsere App auf Heroku starten.

Starten Sie unsere App auf Heroku
Wir brauchen ein paar Dinge, bevor wir unsere App erstellen.
Heroku kann nicht wissen, welche Bibliotheken Ihr Projekt verwendet, also müssen wir es mit der Datei requirements.txt
mitteilen – ein häufiges Problem ist, dass Sie Anforderungen falsch schreiben, seien Sie also vorsichtig –, um die Anforderungsdatei mit pip zu generieren:
pip freeze > requirements.txt
Jetzt haben Sie Ihre Anforderungsdatei einsatzbereit.
Jetzt brauchen Sie die Procfile
, die Heroku mitteilt, wo unsere App startet. Erstellen Sie also eine Procfile
-Datei und fügen Sie Folgendes hinzu:
web: gunicorn app:app
Ein Bounce-Schritt: Sie können Ihrem Projekt eine .gitignore
-Datei hinzufügen, damit nicht benötigte Dateien nicht in das Repository hochgeladen werden.
Erstellen Sie in Ihrem Heroku-Dashboard eine neue App. Sobald Sie dies getan haben, werden Sie zur Seite „ Bereitstellen “ weitergeleitet. Öffnen Sie dann die Registerkarte Einstellungen in einem neuen Fenster und kopieren Sie die Domäne der App, die so etwas wie https://appname.herokuapp.com/
sein wird, und fügen Sie sie in die URL-Variable in credentials.py
ein.
Gehen Sie nun zurück zur Registerkarte Bereitstellen und fahren Sie mit den Schritten fort:
Hinweis: Windows- und macOS-Benutzer können die hier beschriebenen Schritte ausführen.
Melden Sie sich bei Heroku an:
$ heroku login
Bitte beachten Sie, dass diese Methode manchmal beim waiting for login
hängen bleibt. Wenn dies bei Ihnen der Fall ist, versuchen Sie sich anzumelden mit:
$ heroku login -i
Initialisieren Sie ein Git-Repository in unserem Verzeichnis:
$ git init $ heroku git:remote -a {heroku-project-name}
Stellen Sie die App bereit:
$ git add . $ git commit -m "first commit" $ git push heroku master
An diesem Punkt sehen Sie den Baufortschritt in Ihrem Terminal. Wenn alles geklappt hat, sehen Sie so etwas:
remote: -----> Launching... remote: Released v6 remote: https://project-name.herokuapp.com/ deployed to Heroku remote: remote: Verifying deploy... done.
Gehen Sie nun auf die App-Seite (den Link der Domain, die Sie zuvor kopiert haben) und fügen Sie am Ende des Links /setwebhook
, sodass die Adresse etwa so lautet: https://appname.herokuapp.com/setwebhook
. Wenn Sie sehen, dass die webhook setup ok
ist, bedeutet dies, dass Sie bereit sind!
Sprechen Sie jetzt mit Ihrem Bot
Feinschliff, Tipps und Tricks
Jetzt haben Sie Ihren Telegram-Bot rund um die Uhr in Betrieb, ohne dass Sie eingreifen müssen. Sie können dem Bot jede beliebige Logik hinzufügen, sodass Sie Ihren Bot beispielsweise realistischer gestalten können, indem Sie wie folgt einen „Schreibstatus“ hinzufügen und einen Fotostatus senden:
Das nächste Code-Snippet aus der respond()
-Funktion:
if text == "/start": # print the welcoming message 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. """ # send the welcoming message 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: # clear the message we got from any non alphabets text = re.sub(r"\W", "_", text) # create the api link for the avatar based on http://avatars.adorable.io/ url = "https://api.adorable.io/avatars/285/{}.png".format(text.strip()) # reply with a photo to the name the user sent, # note that you can send photos by url and telegram will fetch it for you 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: # if things went wrong bot.sendMessage(chat_id=chat_id, text="There was a problem in the name you used, please enter different name", reply_to_message_id=msg_id)
Wie Sie im Snippet sehen können, haben wir eine Tippaktion hinzugefügt, wenn wir im Begriff sind, die Informationen über den Bot im Textformat zu senden, und eine Foto-Upload-Aktion hinzugefügt, wenn wir im Begriff sind, ein Foto zu senden, um den Bot realistischer zu machen . Weitere Aktionen finden Sie hier.
Sie können auch das Bot-Bild und die Beschreibung aus dem BotFather-Kanal ändern, um es benutzerfreundlicher zu gestalten.
Viele weitere einfache Beispiele für Telegramm-Bots finden Sie auf der Seite python-telegram-bot auf GitHub.
Sie können auf unserem Bot aufbauen und ihn zum nächsten Super-KI-Bot machen – alles, was Sie tun müssen, ist, Ihre Logik in die respond()
Funktion zu integrieren. Ihre Logik kann sich beispielsweise in einem separaten Modul befinden und innerhalb der Funktion respond()
wie folgt aufgerufen werden:
. ├── app.py ├── telebot │ ├── credentials.py │ ├──ai.py │ | . │ | you can build your engine here │ | . │ └── __init__.py └── botenv
Und innerhalb von ai .py :
def generate_smart_reply(text): # here we can do all our work return "this is a smart reply from the ai!"
Jetzt in die App .py importieren:
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
Rufen Sie es dann einfach innerhalb des respond()
.
def respond(): # retrieve the message in JSON and then transform it to Telegram object update = telegram.Update.de_json(request.get_json(force=True), bot) chat_id = update.message.chat.id msg_id = update.message.message_id # Telegram understands UTF-8, so encode text for unicode compatibility text = update.message.text.encode('utf-8').decode() # for debugging purposes only print("got text message :", text) # here call your smart reply message reply = generate_smart_reply(text) bot.sendMessage(chat_id=chat_id, text=reply, reply_to_message_id=msg_id)
Jetzt können Sie Ihren Bot so arbeiten lassen, wie Sie es möchten – machen Sie weiter und erstellen Sie das nächste große Ding!
Ich hoffe, Sie hatten Spaß beim Erstellen Ihres ersten Telegram-Bots.
Zusätzliche Ressourcen
- Aufbau eines Chatbots mit Telegram und Python
- Richten Sie Ihren Telegram Bot WebHook ganz einfach ein
- Python-telegram-bot-Repository
- Bereitstellen mit Git auf Heroku
- Python Telegram Bot-Dokumentation