Développement réactif du bot Telegram

Bonjour, Habr'ovchan.

À la recherche de diverses informations sur le développement d'un bot pour le chat Telegram sur Internet, j'ai trouvé que tous les tutoriels sont assez remplis de mécanismes différents d'interaction avec la bibliothèque telegram-bot-api , personne n'est venu à la conclusion que la vie des camarades devrait toujours être améliorée dans côté de la facilitation du travail (les programmeurs sont paresseux par nature), j'ai donc décidé d'écrire mon propre tutoriel en utilisant ma propre bibliothèque wrapper , qui pour le moment ne peut que lire des messages et leur envoyer une réponse, mais d'abord.

Pourquoi les chatbots sont-ils nécessaires?



Le sujet du développement de chatbots à notre époque pour différents réseaux sociaux est un sujet sensible, depuis l'introduction d'un chatbot:

  1. Réduit le temps de réponse de l'utilisateur à la question qui l'intéresse (et dans votre intérêt, un contact rapide avec lui)
  2. Réduit la charge du portefeuille N de l'entreprise pour garder un employé traitant les demandes manuelles

L'introduction d'un chatbot ne signifie pas du tout qu'une personne n'est pas nécessaire du tout, car il y a toujours certaines situations qui nécessitent la participation de la personne responsable de la résolution d'un problème particulier, mais elle simplifie et automatise la résolution des problèmes domestiques, le traitement des demandes, ainsi que la fourniture d'informations aux personnes responsables, le maintien statistiques et autres choses que l'âme veut.

Étant donné que l'introduction d'assistants virtuels n'est pas si active et que nous entrons déjà progressivement dans la 2e décennie du 21e siècle, je considère qu'il est nécessaire d'abaisser le seuil d'entrée dans ce sujet.

Commençons.

Attention

Un projet utilisant la bibliothèque d'encapsulation implémentée n'utilise pas de webhook, mais une longue mutualisation, car il n'a pas pour objectif de se déployer sur des services spécifiques comme heroku (cependant, il a des fonctionnalités de base pour que le projet dure plus ou moins longtemps et ne s'endorme pas au premier appel du distributeur temps de fonctionnement de divers services d'autres utilisateurs de Heroku). L'idée principale du projet était de simplifier le développement et de réduire le nombre de «gestes» lors du développement d'un chatbot avec les fonctionnalités de base - le traitement des demandes entrantes des utilisateurs.

Comment ça marche dans cette bibliothèque?




La principale source de données est le dictionnaire sur lequel le chatbot est basé (contenu dans un fichier JSON du format), mais cela implique également le traitement des messages utilisateur en écrivant leur propre logique de programme.

Vous devez d'abord créer un bot sur BotFather (nous supposerons en outre que vous avez créé le bot et reçu le jeton). Vous devez maintenant "récupérer" la bibliothèque pour vous-même en exécutant la commande
go get "github.com/liquiddeath13/reactivetgbot" .

Ensuite, vous devez créer un fichier au format .go et y mettre le code suivant:

 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() //if we need host our application on Heroku and shouldn't think about uptime reactivetgbot.HerokuServiceUP("Telegram ChatBot by liquiddeath13") } } 

La variable BotInstance contient un lien vers une instance de chatbot avec le jeton spécifié et un chemin vers un dictionnaire qui stocke les questions et réponses.

Exemple de dictionnaire:

 [ { "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" } ] 

Ensuite, le chatbot commence à travailler avec l'API Telegram et en tire des informations sur les événements se déroulant dans les chats où il se trouve. Si le message décrit dans le dictionnaire dans le champ Question arrive à l'adresse du bot, il répondra au message avec les réponses qui sont couplées dans le champ Réponse (c'est-à-dire le message «Bonjour, comment puis-je contacter votre entreprise?» dans cet exemple, le bot répondra "Bonjour, vous pouvez nous contacter par l'adresse mail fournie. Email: coolnickname@hostname.domain").

De plus, comme mentionné précédemment, les camarades avancés peuvent déterminer le comportement d'un bot lorsqu'il reçoit un message en ajoutant un gestionnaire, par exemple:

 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") } } 

Cet exemple décrit le mécanisme de traitement de la question «combien de temps les gens vous ont-ils demandé?». En réponse, le bot donnera à l'utilisateur une valeur qui montre combien de fois les utilisateurs ont posé la question spécifiée, après avoir augmenté le compteur.

Déploiement sur Heroku (sans publicité)


Les chatbots, pour une raison quelconque, ne se sentent pas bien sur des services comme heroku, car une petite fonctionnalité a été écrite pour empêcher le service de «s'endormir» tôt, à savoir émuler l'activité réseau (accéder à une ressource Web toutes les cinq minutes)
Pour placer le projet sur Heroku, nous avons besoin de l'utilitaire godep, qui "pack" les dépendances dans le projet. Vous pouvez le «ramasser» avec la commande go get github.com/tools/godep , vous pouvez empaqueter les dépendances en exécutant la commande godep save dans le dossier du projet.

Ensuite, nous devons créer un compte sur Heroku et se familiariser avec le guide de déploiement officiel. Si vous n'avez pas beaucoup de temps pour lire, ou si vous voulez «tout à la fois au même endroit», alors tout se résume à la série de commandes suivante:

  1. Autorisation sur la ressource Heroku à l'aide de leur CLI en exécutant la commande de heroku login
  2. Exécution de la commande git init dans le dossier du projet
  3. L'exécution de la commande git remote add heroku ** git' , Heroku**
  4. Exécution de la commande git add . pour ajouter tous les fichiers au référentiel local
  5. Exécuter la commande git commit -m " , commit'"
  6. Mettre le référentiel local dans le référentiel heroku à l'aide de la commande git push heroku master

Après les actions effectuées, rien de plus ne doit être fait - Heroku assemblera le projet en mode automatique, et le bot fera tout le travail de routine pour vous ou vos subordonnés.
Pour surveiller le cycle de vie d'un service Web, Heroku dispose d'une heroku logs --tail , qui vous permet de surveiller le journal des actions récentes.

Autres considérations de développement


Il est prévu au moins d'introduire la prise en charge des gestionnaires qui renvoient non seulement une chaîne, mais un message généré (amélioration afin de prendre en charge diverses pièces jointes sous forme de fichiers).

upd: je suis arrivé à la conclusion que le mécanisme d'émulation appliqué ne fonctionne pas comme prévu et que le service reste éveillé pendant seulement 30 minutes, puis s'endort jusqu'à ce qu'il soit frappé directement (un lien vers le projet est toujours dans le bureau du projet sur Heroku-like hébergeurs), bien que cela vaille probablement la peine d'être réécrit sur le webhook . Laissez mes propres souhaits, ainsi que la haine et les idées d'amélioration par tous les moyens pratiques - je serai heureux d'avoir de vos nouvelles.

Liens (probablement) utiles


Page de projet de bibliothèque Wrapper
Page du projet de bibliothèque d'API Telegram

Source: https://habr.com/ru/post/fr480296/


All Articles