Benutzer für Veranstaltungen registrieren, automatisch nach Antworten in der Datenbank suchen, mit dem technischen Support kommunizieren, Kontakte austauschen - all dies gehört zu den Funktionen unseres Leader-ID-Bots. Er "lebt" auf drei Plattformen: VK, Facebook Messenger und Telegramm, während die Logik seiner Arbeit ein für alle Mal mit plattformunabhängigen Abstraktionen geschrieben wird. Mit diesem Ansatz können Sie schnell neue Funktionen hinzufügen und alte Funktionen erweitern.

Die Struktur des Systems vereinheitlicht die Entwicklung von Funktionen für verschiedene Plattformen und vereinfacht die Prozesse um eine Größenordnung im Vergleich zu der Möglichkeit, sie in jeder plattformabhängigen API manuell neu zu schreiben. Gleichzeitig müssen Sie nur den entsprechenden Adapter (
Connector ) schreiben, um einen Bot auf einer neuen Plattform zu starten.
Ich wollte kurz auf diese Struktur eingehen. Vielleicht ist dies nützlich für diejenigen, die ihren plattformübergreifenden Bot schreiben möchten, aber noch nicht tief in das Thema eingetaucht sind und die Erfahrung eines anderen studiert haben.
Machen wir uns mit unserem Bot bekannt. Er ist in
Telegram ,
VK ,
FB zu finden , wo er (wie bei Großveranstaltungen) mehrere tausend Personen gleichzeitig bedient. Übrigens können wir in unserem
ersten Artikel erfahren, wer wir sind und was wir tun. Kurz gesagt, wir betreiben ein riesiges Netzwerk an freien Coworking- und Präsentationsflächen in ganz Russland und unterstützen gleichzeitig die
Leader-ID- Kommunikationsplattform, die den Kern des gesamten Systems bildet. Und der Bot spielt eine wichtige Rolle in der ganzen Geschichte.
Doppelpistole - doppelter Spaß
Tatsächlich haben wir zwei Bots. Der erste ist der Hauptverantwortliche für die Interaktion mit den Benutzern. Es ist ein praktisches Mittel zur Registrierung mobiler Benutzer für Veranstaltungen, zur Interaktion mit Support und zum Abrufen zusätzlicher Informationen aus Vorträgen und Seminaren sowie zum Austausch von Kontakten innerhalb desselben Ökosystems.

Der zweite Bot ist im Wesentlichen eine Schnittstelle für Support-Mitarbeiter. Bots arbeiten zusammen, aber ihre Basen und Schnittstellen sind getrennt.
Anhand ihres Beispiels werden wir zeigen, wie die Struktur eines solchen Systems aussehen könnte. In einfachen Fällen beginnen wir jedoch, diesen Ball allmählich aufzudrehen.
Die Struktur des einfachsten Bots
In der Basisversion besteht der Bot nur aus einem Dienst, der Nachrichten über die API des von uns benötigten Messenger (Plattform) sendet und empfängt, zum Beispiel Telegramm.

Wenn wir über mehrere Messenger verfügen, über die wir mit Benutzern kommunizieren möchten, ist es sinnvoll, die Logik plattformunabhängig zu schreiben und der Struktur Konnektoren hinzuzufügen, die Befehle und Daten aus dem internen Format in das Format der entsprechenden Plattform (Messenger) übersetzen.

Auf diese Weise können neue Funktionen an einem Ort hinzugefügt und nicht für jede Plattform einzeln dupliziert werden.
Connectors sind Dienste, die Nachrichten von der Plattform zur Weiterleitung an den Kernel und umgekehrt empfangen. Im Allgemeinen handelt es sich dabei um relativ unabhängige Komponenten des Systems, die sich bei Bedarf auf einem separaten Server befinden können, über mehrere Replikate verfügen usw.
Wir organisieren die Kommunikation der Konnektoren und des Kernels (Abfragen der Datenbank oder wie man es nicht macht)
Wir stehen also vor der Aufgabe, den Datenaustausch zwischen den Anschlüssen und dem Kern zu organisieren. Die erste Option ist das Senden neuer Nachrichten über die Datenbank. Wir haben damit angefangen. Dementsprechend erscheint die Datenbank selbst in unserem Schema und die Struktur sieht folgendermaßen aus: ein in Python geschriebener Kernel plus eine Basis auf MongoDB (die Gründe für diese Wahl sind ausschließlich historisch) plus Konnektoren.

Dieses Schema hat bei uns relativ lange nicht funktioniert. Wenn die Anzahl der Nachrichten 700.000 überschritt und die Häufigkeit von Spitzen 120 Treffer pro Sekunde erreichte, wurden die Indizes schwerer, und das Abfragen der Datenbank wurde erheblich teurer. Ich musste den RabbitMQ-Broker hier verbinden. Seine Hauptaufgabe besteht darin, Benachrichtigungen zu generieren, dass eine Komponente (Core / Connector) eine Nachricht mit einer bestimmten Kennung verarbeiten soll. Diese IDs werden dadurch übertragen. RabbitMQ hat uns die Basis und die Komponenten entladen, die nun nicht mehr ständig die Datenbank auf neue Informationen zur Verarbeitung überprüfen müssen.
Als Ergebnis begann unsere Grundstruktur so auszusehen:

Die Arbeit der Konnektoren durch die Datenbank hat ein Minus - dies verringert ihre Unabhängigkeit und erhöht die Konnektivität des Systems. Wenn die Daten jedoch direkt mit dem Warteschlangenmanager übertragen werden, liegt die Verantwortung für deren Sicherheit und Verfügbarkeit bei diesem Broker. Wie dies den Anforderungen an Zuverlässigkeit und Transparenz gerecht wird, ist eine offene Frage. Wir haben uns entschieden, damit im Zuge der Weiterentwicklung des Systems zu experimentieren.
Admins hinzufügen
Um die gesamte Küche zu verwalten, benötigen Sie eine Administratoroberfläche. Mit ihrer Hilfe finden wir die notwendigen Informationen in Korrespondenz, bearbeiten Daten, führen Umfragen und Newsletter durch. Daher erscheint die Webkomponente in unserem Diagramm. Darüber hinaus bietet es eine Weboberfläche zur Authentifizierung von Benutzern und Bot-APIs.

Das Web kommuniziert mit der Datenbank und dem Kernel über spezielle Systemnachrichten. Sie werden als Text weitergeleitet und enthalten nur Informationen, nicht über eine neue Nachricht des Benutzers, sondern über ein anderes Ereignis im Gesamtsystem, auf das der Kernel reagieren soll. Zum Beispiel, um Autorisierungscodes zu erhalten.
Die Oberfläche selbst für Administratoren sieht folgendermaßen aus:

Wir verbinden die Betreiber über den zweiten Bot
Um die vollständige Benutzerunterstützung zu implementieren, haben wir Bediener an das System angeschlossen. Um die Kommunikationsgeschwindigkeit mit ihnen aufrechtzuerhalten, wurde Telegramm als Hauptdialogschnittstelle gewählt, da keine geeigneten Alternativen vorhanden waren. Bediener erhalten Benutzerfragen und senden sofort Antworten.
So sieht der Benutzerdialog mit dem Haupt-Bot aus, wenn eine Support-Frage gesendet wird:
Der Ausdruck „Testfrage“ im Screenshot ist der Text der Frage für den technischen SupportInfolgedessen erscheint ein zweiter Bot (Support Bot) auf unserer Schaltung mit seinem Kern und dem Telegrammanschluss. Er kommuniziert mit dem Hauptkern und organisiert den Transfer von Fragen und Antworten zwischen Chats mit Benutzern und Chats, in denen Support-Mitarbeiter sitzen.

Es hat auch eine eigene Datenbank. Die Kommunikation mit dem Endbenutzer erfolgt jedoch über den Kern des Hauptbots, der den gesamten Nachrichtenfluss steuert.
So sieht der Dialog des Bedieners mit einem Support-Bot aus, der Anwendernachrichten umleitet:

In unserem Fall werden die Bediener in zwei Kategorien unterteilt: diejenigen, die sich mit der allgemeinen Benutzerunterstützung befassen, und diejenigen, die für die Unterstützung einzelner Siedepunkte oder Ereignisse verantwortlich sind. Dies hat jedoch keinen Einfluss auf die Struktur.
Was kann unser Bot noch?
Diese Informationen beziehen sich nur auf unsere Praxis, sind jedoch möglicherweise als Auswahl einfacher Ideen interessant, die Sie zur Kenntnis nehmen können.
Kontakt austauschenDies erfolgt durch Scannen und Erkennen persönlicher QR-Codes vom Bot. Dazu wird der Standard-Image-Prozessor zum Kernel hinzugefügt. Bilder werden von Konnektoren gesendet, die sie zusammen mit der Nachricht in der Datenbank speichern.

Die QR-Code-Erkennung wird auch verwendet, um dem Benutzer zusätzliche Informationen oder Dateien aus Seminaren bereitzustellen. Es sieht so aus:
Benachrichtigungsmailing
Über das Kontrollfeld im Webmodul können wir Benachrichtigungen an Teilnehmer verschiedener Veranstaltungen senden.
Umfragen durchführenEbenso werden Umfragen in Vorlesungen durchgeführt. Für sie erstellen wir jedoch immer noch manuell eine JSON-Datei mit Logik, die wir in das Web hochladen.


Fragen können sowohl mit Antworten als auch offen sein. Und die Struktur der Umfrage kann je nach den Antworten variieren.

Automatische AntwortenDer Bot kann selbstständig Antworten auf häufig gestellte Fragen auswählen.

Zu diesem Zweck verfügen wir über eine spezielle Basis, die manuell nachgefüllt wird. Wenn dort nichts Passendes gefunden wurde oder der Benutzer mit der gewählten Antwort nicht zufrieden war, wird sein Aufruf über den Support-Bot an die Betreiber weitergeleitet.
Im Allgemeinen ist dies zwar unsere gesamte Geschichte. Im Moment arbeiten wir an der Erweiterung der Netzwerkfunktionen und erwarten, dass unser Bot in naher Zukunft ein wenig „fetter“ wird, während seine Struktur gleich bleibt.