Guten Tag, Habr'ovchan.
Auf der Suche nach verschiedenen Informationen über die Entwicklung eines Bot für Telegramm-Chats im Internet stellte ich fest, dass alle Tutorials sehr viele verschiedene Mechanismen für die Interaktion mit der
Telegramm-Bot-API- Bibliothek enthalten. Niemand kam zu dem Schluss, dass das Leben von Kameraden immer verbessert werden sollte Seite der Arbeitserleichterung (Programmierer sind von Natur aus faul), so entschied ich mich, mein eigenes Tutorial mit meiner eigenen
Wrapper-Bibliothek zu schreiben, die im Moment nur Nachrichten lesen und eine Antwort an sie senden kann, aber das Wichtigste zuerst.
Warum werden Chatbots benötigt?

Das Thema der Entwicklung von Chatbots in unserer Zeit für verschiedene soziale Netzwerke ist ein heikles Thema, seit der Einführung eines Chatbots:
- Reduziert die Antwortzeit des Benutzers auf die Frage, die ihn interessiert (und in Ihrem Interesse, schnellen Kontakt mit ihm)
- Reduziert die Belastung des Unternehmensportfolios N, wenn ein Mitarbeiter manuelle Anträge bearbeitet
Die Einführung eines Chatbots bedeutet nicht, dass eine Person überhaupt nicht benötigt wird, da es immer bestimmte Situationen gibt, in denen die Teilnahme der für die Lösung eines bestimmten Problems verantwortlichen Person erforderlich ist. Es vereinfacht und automatisiert jedoch die Lösung von Haushaltsproblemen, die Bearbeitung von Anträgen sowie die Bereitstellung von Informationen an verantwortliche Personen und die Aufrechterhaltung Statistiken und andere Dinge, die die Seele will.
Da die Einführung virtueller Assistenten nicht so aktiv ist und wir bereits allmählich in die zweite Dekade des 21. Jahrhunderts eintreten, halte ich es für notwendig, die Schwelle für den Einstieg in dieses Thema zu senken.
Fangen wir an.
AchtungEin Projekt, das die implementierte Wrapper-Bibliothek verwendet, verwendet kein Webhook, sondern Long Pooling, da es nicht das Ziel hat, bestimmte Dienste wie Heroku bereitzustellen (es verfügt jedoch über grundlegende Funktionen, sodass das Projekt mehr oder weniger lange lebt und beim ersten Aufruf des Distributors nicht einschlafen kann Betriebszeit verschiedener Dienste anderer Heroku-Benutzer). Die Hauptidee des Projekts war es, die Entwicklung zu vereinfachen und die Anzahl der „Gesten“ zu reduzieren, wenn ein Chatbot mit der Grundfunktionalität entwickelt wird - Bearbeitung eingehender Benutzeranforderungen.
Wie funktioniert es in dieser Bibliothek?

Die Hauptdatenquelle ist das Wörterbuch, auf dem der Chatbot basiert (in einer JSON-Datei des Formats enthalten), aber es impliziert auch die Verarbeitung von Benutzernachrichten durch Schreiben einer eigenen Programmlogik.
Zuerst müssen Sie bei BotFather einen Bot erstellen (wir gehen weiter davon aus, dass Sie den Bot erstellt und den Token erhalten haben). Jetzt müssen Sie die Bibliothek "abholen", indem Sie den Befehl ausführen
go get "github.com/liquiddeath13/reactivetgbot"
.
Als Nächstes müssen Sie eine Datei im .go-Format erstellen und den folgenden Code dort einfügen:
package main import ( reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") if BotInstance != nil { go BotInstance.Logic()
Die Variable BotInstance enthält einen Link zu einer Chatbot-Instanz mit dem angegebenen Token und einen Pfad zu einem Wörterbuch, in dem Fragen und Antworten gespeichert sind.
Wörterbuch Beispiel:
[ { "Question" : "/about", "Answer" : "ChatBot created by liquiddeath13 in 2019 year" }, { "Question" : "Hello, how can i contact with your company?", "Answer" : "Hello, you can contact us by provided mail address. Email: coolnickname@hostname.domain" } ]
Als nächstes beginnt der Chatbot mit der Telegramm-API zu arbeiten und erhält von dort Informationen zu den Ereignissen, die in den Chats stattfinden, in denen er sich befindet. Wenn die im Wörterbuch im Feld "Frage" beschriebene Nachricht an der Adresse des Bots eintrifft, antwortet dieser auf die Nachricht mit den Antworten, die im Feld "Antwort" gepaart sind (d. H. Die Nachricht "Hallo, wie kann ich mit Ihrem Unternehmen Kontakt aufnehmen?" In diesem Beispiel antwortet der Bot mit "Hallo, Sie können uns über die angegebene E-Mail-Adresse kontaktieren. E-Mail: coolnickname@hostname.domain").
Wie bereits erwähnt, können fortgeschrittene Kameraden das Verhalten eines Bots bestimmen, wenn er eine Nachricht empfängt, indem sie einen Handler hinzufügen, zum Beispiel:
package main import ( "fmt" reactivetgbot "github.com/liquiddeath13/reactivetgbot" ) func main() { BotInstance := reactivetgbot.Init("YOUR_BOT_TOKEN", "PATH_TO_JSON_DICTIONARY") AskCounter := 0 if BotInstance != nil { BotInstance.AppendHandler("how much time people asked you?", func(Msg reactivetgbot.TGMessage) string { AskCounter++ return fmt.Sprintf("Hello.\n%d - so many time people asked me", AskCounter) }) go BotInstance.Logic() reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } }
In diesem Beispiel wird der Mechanismus zum Verarbeiten der Frage "Wie viel Zeit haben Sie gefragt?" Beschrieben. Als Antwort gibt der Bot dem Benutzer einen Wert, der angibt, wie oft Benutzer die angegebene Frage gestellt haben, nachdem der Zähler erhöht wurde.
Bereitstellung auf Heroku (keine Werbung)
Aus irgendeinem Grund fühlen sich Chatbots bei Diensten wie Heroku nicht wohl, da eine kleine Funktionalität geschrieben wurde, um zu verhindern, dass der Dienst früh einschlafen kann, nämlich die Netzwerkaktivität zu emulieren (alle fünf Minuten wird auf eine Webressource zugegriffen).
Um das Projekt auf Heroku zu platzieren, benötigen wir das Godep-Dienstprogramm, das die Abhängigkeiten im Projekt "packt". Sie können es mit dem Befehl
go get github.com/tools/godep
godep save
Sie können Abhängigkeiten verpacken, indem
godep save
Befehl
godep save
im Projektordner
godep save
.
Als Nächstes müssen wir ein Konto bei Heroku erstellen und uns mit dem offiziellen
Bereitstellungshandbuch vertraut machen. Wenn Sie nicht viel Zeit zum Lesen haben oder "alles auf einmal an einem Ort" möchten, müssen Sie die folgenden Befehle ausführen:
- Autorisierung der Heroku-Ressource mithilfe ihrer CLI durch Ausführen des
heroku login
- Ausführen des Befehls
git init
im Projektordner git remote add heroku ** git' , Heroku**
- Führen Sie den Befehl
git add .
um alle Dateien zum lokalen Repository hinzuzufügen - Ausführen des Befehls
git commit -m " , commit'"
- Lokales Repository mit dem
git push heroku master
in das Heroku-Repository git push heroku master
Nach den durchgeführten Aktionen muss nichts mehr getan werden - Heroku stellt das Projekt im automatischen Modus zusammen und der Bot erledigt die gesamte Routinearbeit für Sie oder Ihre Untergebenen.
Um den Lebenszyklus eines Webdienstes zu überwachen, verfügt Heroku über den
heroku logs --tail
, mit dem Sie das Protokoll der letzten Aktionen überwachen können.
Überlegungen zur Weiterentwicklung
Es ist geplant, zumindest Handler zu unterstützen, die nicht nur eine Zeichenfolge, sondern eine generierte Nachricht zurückgeben (Verbesserung, um verschiedene Anhänge in Form von Dateien zu unterstützen).
upd: Ich bin zu dem Schluss gekommen, dass der angewendete Emulationsmechanismus nicht wie erwartet funktioniert und der Dienst nur 30 Minuten wach bleibt und dann "einschläft", bis er direkt geklopft wird (ein Link zum Projekt befindet sich immer im Büro des Projekts auf Heroku-like) Hoster), obwohl es sich wahrscheinlich nur lohnt, auf
Webhook umzuschreiben . Lassen Sie meine eigenen Wünsche sowie
Hass und Verbesserungsvorschläge mit allen Mitteln offen - ich würde mich freuen, von Ihnen zu hören.
(Vermutlich) nützliche Links
Projektseite der Wrapper-BibliothekProjektseite der Telegramm-API-Bibliothek