El registro de usuarios para eventos, la búsqueda automática de respuestas en la base de datos, la comunicación con el soporte técnico, el intercambio de contactos, todo esto es parte de las funciones de nuestro bot de ID de líder. Él "vive" en tres plataformas: VK, Facebook Messenger y Telegram, mientras que la lógica de su trabajo está escrita de una vez por todas utilizando abstracciones independientes de la plataforma. Este enfoque le permite agregar rápidamente nuevas funciones y moler las antiguas.

La estructura del sistema hace que el desarrollo de funciones para diferentes plataformas sea uniforme y simplifica los procesos en un orden de magnitud en comparación con la opción de reescribirlos manualmente en cada API dependiente de la plataforma. Al mismo tiempo, para iniciar un bot en una nueva plataforma, solo necesita escribir el adaptador (
conector ) apropiado.
Quería hablar brevemente sobre esta estructura. Quizás esto sea útil para aquellos que desean escribir su bot multiplataforma, pero aún no se han sumergido profundamente en el tema y mientras estudian la experiencia de otra persona.
Conozcamos a nuestro bot. Se lo puede encontrar en
Telegram ,
VK ,
FB , donde atiende a varios miles de personas al mismo tiempo (como sucede en grandes eventos). Por cierto, podemos aprender sobre quiénes somos y qué hacemos desde nuestro
primer artículo . En resumen, operamos una enorme red de espacios de coworking y presentación gratuitos en toda Rusia y, al mismo tiempo, apoyamos la plataforma de comunicación
Leader-ID , que es el núcleo de todo el sistema. Y el bot juega un papel importante en toda la historia.
Doble arma - doble diversión
De hecho, tenemos dos bots. El primero es el principal, responsable de interactuar con los usuarios. Es un medio conveniente para el registro de usuarios móviles para eventos, la interacción con el soporte y la obtención de información adicional de conferencias y seminarios, así como para intercambiar contactos dentro del mismo ecosistema.

El segundo bot es esencialmente una interfaz para operadores de soporte. Los bots funcionan en conjunto, pero sus bases e interfaces están separadas.
Usando su ejemplo, mostraremos cómo podría verse la estructura de dicho sistema. Sin embargo, comenzaremos a desenrollar esta bola gradualmente, con casos simples.
La estructura del bot más simple
En la versión básica, el bot constará de un solo servicio que envía y recibe mensajes a través de la API del messenger (plataforma) que necesitamos, por ejemplo Telegram.

Si tenemos varios mensajeros a través de los cuales queremos comunicarnos con los usuarios, sería razonable escribir lógica en un estilo independiente de la plataforma con la adición de conectores a la estructura que traducen comandos y datos del formato interno al formato de la plataforma correspondiente (mensajero).

Esto permitirá agregar nuevas funciones en un solo lugar y no duplicarlas para cada plataforma por separado.
Los conectores son servicios que reciben mensajes de la plataforma para reenviarlos al kernel y viceversa. En general, estos son componentes relativamente independientes del sistema, que, si es necesario, se pueden ubicar en un servidor separado, tener varias réplicas, etc.
Organizamos la comunicación de los conectores y el núcleo (sondeo de la base de datos o cómo no hacerlo)
Entonces, nos enfrentamos con la tarea de organizar el intercambio de datos entre los conectores y el núcleo. La primera opción es enviar nuevos mensajes a través de la base de datos. Partimos de esto. En consecuencia, la base de datos en sí aparece en nuestro esquema, y la estructura se convierte así: un núcleo escrito en Python, más una base en MongoDB (las razones de esta elección son exclusivamente históricas), más conectores.

Este esquema no funcionó para nosotros relativamente largo. Cuando el número de mensajes excedió los 700 mil, y la frecuencia en los picos alcanzó 120 visitas por segundo, los índices se volvieron más pesados, el sondeo de la base de datos se volvió significativamente más costoso. Tuve que conectar el corredor RabbitMQ aquí. Su función principal es generar notificaciones de que un componente (núcleo / conector) debe procesar un mensaje con un identificador específico. Estas identificaciones se transmiten a través de él. RabbitMQ nos ha descargado la base y los componentes, que ahora no necesitan revisar constantemente la base de datos para obtener nueva información para el procesamiento.
Como resultado, nuestra estructura básica comenzó a verse así:

El trabajo de los conectores a través de la base de datos tiene un inconveniente: esto reduce su independencia y aumenta la conectividad del sistema. Sin embargo, si los datos se transfieren directamente utilizando el gestor de colas, toda la responsabilidad de su seguridad y disponibilidad recae en este intermediario. Cómo esto satisface las demandas de confiabilidad y transparencia es una pregunta abierta. Por nosotros mismos, decidimos que experimentaríamos con esto en el proceso de un mayor desarrollo del sistema.
Agregar administradores
Para administrar toda la cocina, necesita una interfaz de administrador. Con su ayuda, encontramos la información necesaria en la correspondencia, editamos datos, hacemos encuestas y boletines. Por lo tanto, el componente web aparece en nuestro diagrama. Además de lo anterior, proporciona una interfaz web para autenticar usuarios y API de bot.

La Web se comunica con la base de datos y el núcleo a través de mensajes especiales del sistema. Se enrutan como texto, solo contienen información no sobre un nuevo mensaje del usuario, sino sobre algún otro evento en el sistema en su conjunto, al que debe responder el núcleo. Por ejemplo, obtener códigos de autorización.
La interfaz en sí para administradores se ve así:

Conectamos operadores a través del segundo bot
Para implementar el soporte completo para el usuario, conectamos operadores al sistema. Para mantener la velocidad de comunicación con ellos, en ausencia de alternativas adecuadas, se eligió Telegram como la interfaz de diálogo principal. Los operadores reciben preguntas de los usuarios a través de él e inmediatamente envían respuestas.
Así es como se ve el diálogo del usuario con el bot principal al enviar una pregunta de soporte:
La frase "Pregunta de prueba" en la captura de pantalla es el texto de la pregunta para soporte técnicoComo resultado, aparece un segundo bot (Support Bot) en nuestro circuito con su núcleo y conector Telegram. Se comunica con el núcleo principal y organiza la transferencia de preguntas y respuestas entre chats con usuarios y chats en los que están sentados los agentes de soporte.

También tiene su propia base de datos. Pero la comunicación con el usuario final pasa por el núcleo del bot principal, que controla el flujo general de mensajes.
Así es como se ve el diálogo del operador con un bot de soporte que redirige los mensajes de los usuarios:

En nuestro caso, los operadores se dividen en dos categorías: los que se dedican a la asistencia general al usuario y los responsables de apoyar los puntos de ebullición o eventos individuales. Sin embargo, esto no tiene ningún efecto en la estructura.
¿Qué más puede hacer nuestro bot?
Esta información se refiere solo a nuestra práctica, pero quizás sea interesante como una selección de ideas simples que puede tomar nota.
Intercambio de contactosSe lleva a cabo mediante el escaneo y el reconocimiento de códigos QR personales del bot. Para hacer esto, el procesador de imagen predeterminado se agrega al kernel. Las imágenes se envían por conectores, que las guardan en la base de datos junto con el mensaje.

El reconocimiento de código QR también se utiliza para proporcionar al usuario información adicional o archivos de seminarios. Se ve así:
Correo de notificaciones
A través del panel de control en el módulo web, podemos enviar notificaciones a los participantes de varios eventos.
Realizar encuestasDel mismo modo, las encuestas se realizan durante las conferencias. Pero para ellos, seguimos generando manualmente un archivo JSON con lógica, que cargamos en la web.


Las preguntas pueden ser ambas con respuestas y abiertas. Y la estructura de la encuesta puede variar según las respuestas.

Respuestas automáticasEl bot puede seleccionar independientemente las respuestas a las preguntas frecuentes.

Para hacer esto, tenemos una base especial, que se repone manualmente. Si no se encontró nada adecuado allí o el usuario no estaba satisfecho con la respuesta seleccionada, su apelación a través del bot de soporte se redirige a los operadores.
En general, si bien esta es toda nuestra historia. En este momento, estamos trabajando para expandir las funciones de las redes y esperamos que en un futuro cercano nuestro bot se vuelva un poco más "gordo", mientras que su estructura seguirá siendo la misma.