Desarrollo reactivo de Telegram bot

Buen día, Habr'ovchan.

Al buscar información diversa sobre el desarrollo de un bot para el chat de Telegram en Internet, descubrí que todos los tutoriales están bastante llenos de diferentes mecanismos de interacción con la biblioteca telegram-bot-api , nadie llegó a la conclusión de que la vida de los camaradas siempre debe mejorarse. lado de la facilitación laboral (los programadores son flojos por naturaleza), así que decidí escribir mi propio tutorial usando mi propia biblioteca de envoltorios , que en este momento solo puede leer mensajes y enviarles una respuesta, pero primero lo primero.

¿Por qué se necesitan chatbots?



El tema del desarrollo de chatbots en nuestro tiempo para varias redes sociales es un tema delicado, desde la introducción de un chatbot:

  1. Reduce el tiempo de respuesta al usuario a la pregunta que le interesa (y en su interés, contacto rápido con él)
  2. Reduce la carga sobre la billetera N de la empresa para mantener a un empleado procesando aplicaciones manuales

La introducción de un chatbot no significa en absoluto que una persona no sea necesaria, ya que siempre hay ciertas situaciones que requieren la participación de la persona responsable de resolver un problema en particular, pero simplifica y automatiza el problema de resolver problemas del hogar, procesar aplicaciones, así como entregar información a personas responsables, manteniendo estadísticas y otras cosas que el alma quiere.

Dado que la introducción de asistentes virtuales no es tan activa, y ya estamos entrando gradualmente en la segunda década del siglo XXI, considero que es necesario reducir el umbral para ingresar a este tema.

Empecemos

Atencion

Un proyecto que usa la biblioteca de contenedor implementada no usa webhook, sino una agrupación larga, ya que no tiene el objetivo de implementarse en servicios específicos como heroku (sin embargo, tiene una funcionalidad básica para que el proyecto dure más o menos y no se quede dormido en la primera llamada del distribuidor tiempo de funcionamiento de varios servicios de otros usuarios de heroku). La idea principal del proyecto era simplificar el desarrollo y reducir la cantidad de "gestos" al desarrollar un chatbot con la funcionalidad básica: procesar las solicitudes entrantes de los usuarios.

¿Cómo funciona en esta biblioteca?




La fuente de datos principal es el diccionario en el que se basa el chatbot (contenido en un archivo JSON del formato), pero también implica el procesamiento de mensajes de usuario escribiendo su propia lógica de programa.

Primero debe crear un bot en BotFather (asumiremos que creó el bot y recibió el token). Ahora necesita "recoger" la biblioteca para usted mismo ejecutando el comando
go get "github.com/liquiddeath13/reactivetgbot" .

A continuación, debe crear un archivo de formato .go y colocar el siguiente código allí:

 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 contiene un enlace a una instancia de chatbot con el token especificado y una ruta a un diccionario que almacena preguntas y respuestas.

Ejemplo de diccionario:

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

A continuación, el chatbot comienza a trabajar con la API de Telegram y toma información de allí sobre los eventos que tienen lugar en los chats donde se encuentra. Si el mensaje descrito en el diccionario en el campo Pregunta llega a la dirección del bot, responderá al mensaje con las respuestas que se emparejan en el campo Respuesta (es decir, el mensaje "Hola, ¿cómo puedo contactar con su empresa?" en este ejemplo, el bot responderá "Hola, puede contactarnos por la dirección de correo proporcionada. Correo electrónico: coolnickname@hostname.domain").

Además, como se mencionó anteriormente, los camaradas avanzados pueden determinar el comportamiento de un bot cuando recibe un mensaje agregando un controlador, por ejemplo:

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

Este ejemplo describe el mecanismo para procesar la pregunta "¿cuánto tiempo le preguntaron las personas?". Como respuesta, el bot le dará al usuario un valor que muestra cuántas veces los usuarios hicieron la pregunta especificada, después de aumentar el contador.

Implementación en Heroku (sin anuncios)


Los chatbots, por alguna razón, no se sienten bien en servicios como heroku, porque se escribió una pequeña funcionalidad para evitar que el servicio se "quede dormido" temprano, es decir, emular la actividad de la red (acceder a un recurso web una vez cada cinco minutos)
Para colocar el proyecto en Heroku, necesitamos la utilidad godep, que "empacará" las dependencias en el proyecto. Puede "recogerlo" con el comando go get github.com/tools/godep , puede empaquetar dependencias ejecutando el comando godep save en la carpeta del proyecto.

Luego, necesitamos crear una cuenta en Heroku y familiarizarnos con la guía oficial de implementación . Si no tiene mucho tiempo para leer, o si quiere "todo a la vez en un solo lugar", todo se reduce a la siguiente serie de comandos:

  1. Autorización en el recurso Heroku usando su CLI ejecutando el heroku login
  2. Ejecutando el comando git init en la carpeta del proyecto
  3. Ejecutar el git remote add heroku ** git' , Heroku**
  4. Ejecutando el comando git add . para agregar todos los archivos al repositorio local
  5. Ejecutando el comando git commit -m " , commit'"
  6. Poner el repositorio local en el repositorio heroku usando el git push heroku master

Después de realizar las acciones, no se necesita hacer nada más: Heroku ensamblará el proyecto en modo automático y el bot hará todo el trabajo de rutina para usted o sus subordinados.
Para monitorear el ciclo de vida de un servicio web, Heroku tiene un heroku logs --tail , que le permite monitorear el registro de acciones recientes.

Otras consideraciones de desarrollo


Se planea al menos introducir soporte para controladores que devuelven no solo una cadena, sino un mensaje generado (mejora para admitir varios archivos adjuntos en forma de archivos).

upd: Llegué a la conclusión de que el mecanismo de emulación aplicado no funciona como se esperaba y el servicio permanece despierto por solo 30 minutos, y luego "se duerme" hasta que lo golpean directamente (siempre hay un enlace al proyecto en la oficina del proyecto similar a Heroku hosters), aunque probablemente valga la pena volver a escribir en webhook . Deje mis propios deseos, así como el odio y las ideas de mejora por cualquier medio conveniente. Estaré encantado de saber de usted.

(Probablemente) enlaces útiles


Página del proyecto Wrapper Library
Página del proyecto de la biblioteca de Telegram API

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


All Articles