VK Bot auf seinem Knie oder wie man Menschen am 14. Februar gefällt

Natürlich liebt jeder von uns Geschenke, aber am allermeisten lieben wir die Wünsche, die sie begleiten. Und bis vor kurzem hatten wir nicht die Gelegenheit, eine Person mit warmen Worten angenehm zu überraschen, bis uns die Idee einfiel: Was ist, wenn wir den Menschen die Möglichkeit geben, Valentinsgrüße auszutauschen (trotzdem am 14. Februar auf der Nase), ohne den Rahmen des üblichen Weges zu verlassen Kommunikation - Chatroom für soziale Netzwerke?

Wort für Wort, und hier ist es - ein vorgefertigter Geschäftsplan, um die Atmosphäre des Valentinstags zu schaffen! Werden wir Menschen glücklich machen?


Für die Idee des Mondes!


Zunächst war es natürlich notwendig, einen Aktionsplan zu erstellen und die Idee zu beschreiben. Aufgrund der Tatsache, dass die Leute schüchterner geworden sind und nicht immer bereit sind, irgendjemandem zu vertrauen, fiel die Wahl darauf, einen modischen und praktischen Bot für VK zu schreiben, der eine vertraute Oberfläche hat, immer zur Hand ist und die Anonymität der Nachrichten im Programmcode fest codiert wird.
Zusätzlich zu all den oben genannten Vorteilen haben Communitys leider zwei Nachteile: geringe Bandbreite (Anzahl der Nachrichten pro Sekunde) und Verbot, einen Dialog mit einem zufälligen Benutzer zu beginnen (der Benutzer muss zuerst und ausdrücklich zustimmen, Nachrichten im Namen der Community zu empfangen).

Wir haben also einen Benutzer, der bereit ist, seinem Seelenverwandten, einem Empfänger und einem Vermittler eine Valentinskarte in Form eines Chat-Bots zu senden. Das Interaktionsschema ist einfach, der Bot sollte: Senden anbieten → Empfänger erkennen → bis 14. Februar speichern → liefern → wiederholen.

Aber dies war natürlich nicht genug für die unersättliche Vorstellungskraft des Geistes, und um die Aktivität und Beteiligung des Publikums zu erhöhen, wurde ein Schema einer anderen Interaktion ausgearbeitet, das es den Menschen ermöglichte, sich mit dem System vertraut zu machen und Nachrichten an zufällige Menschen zu senden. Diese „zufälligen Valentinsgrüße“ können geschätzt werden, und wenn sich Valentinsgrüße von zwei Personen mögen, geben wir ihnen die Möglichkeit, sich zu unterhalten.

Haftungsausschluss


Dieses Projekt wurde ausschließlich aus Begeisterung von zwei Personen erstellt, einem halbgebildeten Programmierer (mir) und einem ideologischen Inspirator (Stepan sadfun Popov). Es hat nicht das Ziel, Ihnen etwas beizubringen (obwohl es Ihnen helfen kann, die Essenz des Universums zu verstehen). Erzählen Sie einfach eine interessante Schöpfungsgeschichte und folgen Sie dem Weg von einer Idee zu einer naiven Umsetzung.



Mit VK sprechen lernen


Nachdem ich auf Anfrage der „NodeJS VK API“ 3-4 verschiedene Bibliotheken durchgesehen hatte , stellte ich fest, dass es keine einfachen und funktionalen Bibliotheken gibt, mit denen wir Versprechen verwenden und die Ausführung durcharbeiten können. Erinnern Sie sich an eines der oben beschriebenen Probleme? Ja, die Ausführung von Anforderungen an VKontakte erfolgt nicht direkt, aber in Chargen von 25 können Sie den Durchsatz erheblich steigern.


Vergleichende Fähigkeit verschiedener Methoden von Anfragen an VKontakte

Daher wurde beschlossen, etwas Eigenes zu schreiben, eine zuverlässige und nicht sehr krückenhafte Lösung, die auf der Node-Fetch- Bibliothek basiert.

Um hier nicht den gesamten Code anzugeben, beschreibe ich einfach die Logik der Arbeit.

Da Anforderungen aus dem Programm in eine Ausführung gepackt werden müssen, werden sie in der LIFO-Warteschlange gesammelt und dann gesendet, wenn:

  • Ruft 25 oder mehr auf (maximal ausführen)
  • Seit dem letzten Versand ist genug Zeit vergangen, mindestens 50 Millisekunden, aber nicht mehr als 150 (so dass sich die Warteschlange trotz der geringen Größe bewegt)

Anforderungen aus der Warteschlange werden in VK-Skriptcode kompiliert, der (in dieser Implementierung) folgendermaßen aussieht:

var returnables = []; returnables[0] = API.messages.send({"message": ", !", "peer_id": 1, "random_id": 561427}); returnables[1] = API.users.get({"user_ids": 1, "fields": "sex"}); return returnables; 

Nachdem der Code durch eine Anforderung an VK ausgeführt wurde, kehrt das Ergebnis jeder Anforderung (durch die Index-Rückgabewerte) zu ihrem Rückruf zurück, der wunderschön in Promise verpackt ist. Die Effizienz des Ansatzes ist überwältigend - je mehr Benutzer (und daher je mehr Anfragen an VKontakte zum Senden), desto geringer ist die Verzögerung der Antwort. Um das Limit unter Kontrolle zu halten, verfügt das Sendesystem über einen Zähler, der die Anzahl der verbleibenden Anfragen für diese Sekunde anzeigt, sodass Sie schnell einen Besucheranstieg verarbeiten können.

VK lernen zu hören


Es gibt zwei Möglichkeiten, Benachrichtigungen über Ereignisse von VKontakte zu erhalten: Longpoll-Anfragen und Callback-Server . Ihr Server ist praktisch, da keine speziellen Gesten erforderlich sind und Sie auch verpasste Benachrichtigungen erhalten können (z. B. wenn Sie den Server neu starten). Ein solcher Server kann mit der nativen http.Server- Klasse in mehreren Zeilen geschrieben werden.

All dies schafft ein ideales Ökosystem für die Programmlogik, das bequem zu verwenden ist.

Es endet alles


Da der Benutzer im Chat frei ist, etwas zu tun, und wir ihn nicht aufhalten können, müssen wir ihn auf einen angemessenen Betrag beschränken. Die Zustandsmaschine leistet hervorragende Arbeit, indem sie jeden möglichen Übergang innerhalb des Systems festlegt und die Verwendung der Schaltflächen ( Tastaturparameter in messages.send) die Verwendung des Bots so einfach wie eine einzelne Berührung des Bildschirms macht.

Hier ist die Benutzerinteraktion mit dem Bot:


All dies führt zu einer Reihe von Zuständen ("Hauptmenü", "Valentinstagseingabe" usw.), deren Übergänge in Schaltflächen festgelegt und übertragen werden oder die anfangs bekannt sind und sich nicht ändern.


Übrigens über die Knöpfe. Ihr Farbumfang ist nicht unveränderlich ( 4 Farben für alle Gelegenheiten), aber es sind die Schaltflächen, die es ermöglichen, die Anzahl der Benutzerfehler zu minimieren. Auf ihrer Basis können Sie absolut jedes nichtlineare System erstellen, weshalb sie überall verwendet werden. Und auch in diesem Projekt.

Aber Sie müssen verstehen: Wenn Sie ein großes Publikum ansprechen möchten, sollten Sie eine andere Art der Interaktion in Betracht ziehen, da jemand möglicherweise eine alte Anwendung hat ( VK für iPad wurde zum Beispiel schon sehr lange nicht mehr aktualisiert, ich werde nicht lügen, aber es scheint mehr als ein Jahr zu dauern). und Tastaturunterstützung gibt es nicht). Und es kommt vor (ja, es passiert, ich habe es überprüft), dass Leute, die nicht wissen, dass Schaltflächen angeklickt werden können, einfach ihren Inhalt neu schreiben (und dann wird der Parameter der Nutzlastschaltfläche natürlich nicht übertragen und alles kann kaputt gehen).

Es ist zu beachten, dass nicht alles so reibungslos wie im Diagramm beschrieben abläuft und manchmal merkwürdige Fälle auftreten. Beispielsweise hat das System zum Ermitteln des VKontakte-Links Benutzer falsch verarbeitet, deren kurze Links mit id begonnen und abgeschnitten wurden. Die Überraschung der Leute, die auf diesen Fehler gestoßen sind, kann nicht beschrieben werden, weil sie Valentine Valentine geschrieben haben, aber es stellte sich heraus, dass Olezhka.
Was olezhka ????

Unfälle sind nicht zufällig


Wenn also mit gewöhnlichen Valentinsgrüßen alles klar ist, gibt es einen Empfänger und einen Absender. Wie kann man dann zwei Fremde reduzieren? Sie müssen ihre Valentinsgrüße austauschen, und wenn die Leute die Valentinsgrüße des anderen mögen, sollten sie vorgestellt werden! Hier ist es, die Formel der Liebe!

Obwohl dies erbärmlich klingt, funktioniert es und es wird für Menschen interessanter, mit dem Bot zu arbeiten - sie erhalten eine positive Antwort, wenn es mindestens eine Person gibt (um die sich der Bot natürlich kümmert).

Daraus ergibt sich ein großes Plus: Je mehr Menschen diese Gelegenheit nutzen, desto mehr Chancen haben sie, sich kennenzulernen, und daher hält dies wie ein Spiel eine Person in einem Chat. Es lohnt sich zuzugeben, dass die durchschnittliche Benutzersitzung ~ 7 Minuten dauert, aber es besteht die Möglichkeit, eine Person nur wegen dieser Funktion um 10-15 zu straffen.

Die Verteilung von Nachrichten erzwang ein separates Schema, da es mehrere Optionen für die Verwendung dieses Bots gibt, der Benutzer etwas aus den Augen verlieren kann und der Bot ihn sorgfältig daran erinnert.


Es ist interessant, wie das zweite Problem gelöst wurde, mit der Unfähigkeit der Community, zuerst einen Dialog mit dem Benutzer zu initiieren: Jetzt wird dieses Problem durch eine solche Nachricht gelöst.
Aber ich habe eine Bedingung! Damit der Empfänger Ihren Valentinstag erhält, muss er mir auch schreiben. Ihre Aufgabe ist es jetzt, ihn zu überreden, mir etwas zu schreiben. Dies geschieht, damit Sie keine Angst haben, mit ihm zu sprechen!
Im Allgemeinen ist das traditionelle "Kein Fehler, aber eine Funktion!"

Feuerwerk am Ende


Das ist alles! Wenn Sie einige Schwierigkeiten beim Verständnis der Logik der VK-API sowie bei der Bestätigung des Kontos bei einem der Anbieter nicht berücksichtigen, verlief alles noch zu reibungslos.


Beispiel Chat mit einem Bot

Der Bot funktioniert und wird Menschen mit Valentinsgrüßen begeistern und sie glücklich machen. Dies geschieht, um den Menschen zu helfen, freundlicher miteinander umzugehen. Sie können dies alles selbst in der Valentinych- Community bewerten - vk.com/verylovebot , wenn Sie dies wünschen. Vielen Dank für Ihre Aufmerksamkeit!

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


All Articles