2016-09-13 1 views
4

Erstellen Sie einen Facebook Messenger Bot mit Claudia JS und planen Sie Hosting auf AWS Lambda.Beste Möglichkeit, Antworten von Benutzern in Facebook Bot Chat zu speichern?

Ich möchte dem Benutzer eine Reihe von Fragen stellen.

Wenn ein Benutzer mit einer Antwort antwortet, muss ich diese für später speichern und sobald ich alle Informationen habe, die ich brauche, übergebe ich die Antworten an eine Funktion.

Was ist der beste Weg, um diese Informationen zu speichern?

Ich dachte einige Caching-Ebene wie Redis, aber weil das im RAM gespeichert ist, werde ich es verlieren, wenn Lamda Server herunterfährt. Mongodb hat offensichtlich eine Menge Overheads beim Verbinden, wird aber zumindest hartnäckig sein.

Vielleicht nur ein einfacher mySQL-Server?

Wie machen es alle anderen? Ich habe das Gefühl, dass es eine einfache Lösung gibt, die ich vermisse.

Antwort

5

Ich werde zuerst den Teil über beantworten, wie ich es mache: Ich benutze eine MongoDB. Ich habe mit den von Ihnen erwähnten Ideen gespielt, aber aus dem gleichen Grund schnell In-Memory-Lösungen (Memcached, Redis) durchgestrichen. Meine endgültige Lösung kam entweder zu einer relationalen DB oder zu einer NoSQL wie MongoDB. Um ehrlich zu sein, habe ich auf der Ebene meines Projekts nicht daran gedacht, die Performance zwischen DB-Typen zu vergleichen.

Mit meiner speziellen Funktion "Roadmap" entschied ich mich, mit Mongo einen "OOP" -Stil beim Umgang mit dem Benutzer "Objekt" zu erreichen, ohne eine Benutzerklasse explizit definieren zu müssen, dank der normalisierten Struktur von Mongo . Ich verstehe das gleiche könnte auch für MySQL getan werden, nur dass die Verarbeitung json Daten ist mehr "Objekt-like" für mich und flask, d. H. user = getUserFromMongo, die mir ein Diktat in Python gibt dann kann ich einfach tun user['first_name']. Die Codes belows werden diese Einfachheit erklären:

Interact with MongoDB (Irgendwie fühlte sich wie ... nicht in Rails SQL-Befehle für die einfache Datenbank-Interaktion schreiben)

Meine Benutzerobjektdaten auf MongoDB user

Schließlich, wie zu , wie ich Benutzereingabe verwalte, adoptierte ich Wit.ai-Konzept von context. Ich weiß nicht, wie sie es genau machen, aber eine context für mich ist die Art der Konversation Zweck, der vor sich geht. Ich benutze es wie einen Stapel und sobald der aktuelle Kontext fertig ist, öffne ihn aus den Kontextdaten des Benutzers. Für jede Nachricht, die der Bot erhält, erhält das Programm den aktuellen Kontext und leitet den Fluss. Immer wenn ein unbekannter Fehler auftritt (Ausnahmenbehandlung), lösche ich höchstwahrscheinlich die Daten context, weil der Benutzer etwas sagt, was der Bot nicht versteht.

Der gute Teil über MongoDB ist, dass ich die context gestalten kann, wie ich will und behandeln Sie es nur als ein Objekt. Ein einfacher ist wie {name: yelp-search, stage:ask-for-user-location}, und ich kann mir vorstellen, dass auch komplexe auf dieser Struktur gebaut werden können. Natürlich befasst sich eine Stapelimplementierung der context nicht mit einer komplexen Konversation mit einer komplexen Vergangenheitsreferenz.

I put my project on Github wenn Sie es sich ansehen möchten.

+0

Das ist sehr ähnlich zu der Lösung, mit der ich endete. Ich habe mySQL anstelle von mongo benutzt (nur weil ich mehr damit vertraut bin und keine neuen Erfahrungen sammeln wollte). MongoDB wäre definitiv der richtige Weg. Ich auch Wit AI und wenn der Kontext der Antwort eine Frage beantwortet, die nicht beantwortet wurde, dann speichere ich das gegen den Benutzer. Vielen Dank für Ihre Antwort. Wird Ihren Code überprüfen :) – Stretch0

3

ich habe auch mysql für chatbot aber ich habe NodeJS app.For diesem mysql Modul für das Backend verwendet wäre sehr hilfreich.

Sie müssen speichern Benutzer aktuellen Zustand für die Sitzung Frage Antwort und auch speichert die Antwort selbst vom Benutzer und Sie brauchen einen Schalter machen oder if-else-if Fall für Fragen zu stellen, zu Benutzer basierend auf seinem Status als switch (state) und in Fällen von switch nur update es ist state.and Sie haben facebook-id des Benutzers in Ereignisobjekt von Chatbot, so dass Sie Daten von jedem Benutzer einzeln mit ihrem Zustand und Frage- speichern können antworte in einer anderen Tabelle.

Für z.B. Definieren von Flags {1,2,3}

Der Status des Benutzers wird 1 sein, fragen Sie ihn nach z. Frage-1 nur, und speichern Sie diese als Antwort-1, können Sie dies, indem sie es tun können, ist Zustand Prüfung und nach diesem Update-Status 2.

so, auf diese Weise können Sie jeden einzelnen Schüler fragen nach ihr Zustand und antworte ihm.

Ich habe das gleiche in genau der obigen Weise getan.

Hoffe, das wäre hilfreich für Sie.

+0

Ich mag diesen Ansatz der Speicherung des Zustands. Besonders wenn Sie mySQL verwenden, können Sie eine separate Tabelle mit allen Fragen erstellen und dann kann das Statusfeld in der Benutzertabelle auf die Frage verweisen, die sie gerade haben. – Stretch0

Verwandte Themen