2016-09-13 2 views
4

Création d'un bot Facebook Messenger à l'aide de Claudia JS et planification de l'hébergement sur AWS Lambda.La meilleure façon de stocker les réponses des utilisateurs dans Facebook bot chat?

Je souhaite poser une série de questions à l'utilisateur.

Lorsqu'un utilisateur répond avec une réponse, je dois l'enregistrer pour plus tard et une fois que j'ai toutes les informations dont j'ai besoin, je vais passer les réponses à une fonction.

Quel est le meilleur moyen de sauvegarder cette information?

Je pensais à une couche de cache comme Redis, mais parce que cela est stocké dans la RAM, je vais le perdre quand le serveur lamda s'arrête. Mongodb a apparemment beaucoup de frais généraux lors de la connexion, mais sera au moins persistante.

Peut-être juste un simple serveur mySQL?

Comment les autres le font-ils? J'ai l'impression qu'il y a une solution simple qui me manque.

Répondre

5

Je vais d'abord répondre à la partie sur comment je le fais: J'utilise un MongoDB. J'ai joué avec les idées que vous avez mentionnées, mais a rapidement barré les solutions en mémoire (Memcached, Redis) avec la même raison. Ma solution finale est descendue soit à une base de données relationnelle ou à un noSQL comme MongoDB. Pour être honnête, à l'échelle de mon projet, je ne pensais pas à comparer de manière robuste les performances entre les types de DB. Avec ma particularité "roadmap", j'ai décidé d'aller avec Mongo pour approcher un style plus "OOP" en traitant l'utilisateur "object" sans avoir à définir explicitement une classe d'utilisateurs, grâce à la structure normalisée de Mongo . Je comprends la même chose pourrait être fait pour MySQL, aussi, que le traitement json données est plus "objet" pour moi et flask, c'est-à user = getUserFromMongo, ce qui me donne un dict en Python alors je peux simplement faire user['first_name']. Les codes belows expliquer cette simplicité:

Interact with MongoDB (D'une certaine façon cela se sent comme ... ne pas avoir à écrire des commandes SQL pour une interaction simple base de données dans Rails)

Mes données d'objet utilisateur sur MongoDB user

Enfin, en ce qui concerne comment je gère l'entrée de l'utilisateur, j'ai adopté le concept de Wit.ai de context. Je ne sais pas comment ils le font exactement, mais pour moi, c'est le type de conversation qui se passe. Je l'utilise comme une pile, et dès que le contexte actuel est fait, le retirer des données de contexte de l'utilisateur. Pour chaque message reçu par le bot, le programme obtiendra le contexte actuel et dirigera le flux. Chaque fois qu'une erreur inconnue se produit (gestion des exceptions), probablement parce que l'utilisateur dit quelque chose que le bot ne comprend pas, j'efface aussi les données context. La bonne partie de MongoDB est que je peux façonner le context mais je veux le traiter comme un objet. Un simple est comme {name: yelp-search, stage:ask-for-user-location}, et j'imagine que des complexes pourraient être construits sur cette structure aussi. Bien sûr, une implémentation en pile du context ne traite pas d'une conversation complexe avec une référence passée complexe.

I put my project on Github si vous voulez jeter un coup d'œil.

+0

C'est très similaire à la solution avec laquelle j'ai fini par aller. J'ai utilisé mySQL au lieu de mongo (seulement parce que je suis plus familier avec ça et que je ne voulais pas être suivi de l'apprentissage de nouvelles choses). MongoDB serait certainement le chemin à parcourir. J'ai aussi utilisé l'intelligence artificielle et si le contexte de la réponse répond à une question qui n'a pas reçu de réponse, je la sauvegarde contre l'utilisateur. Merci pour votre réponse. Va vérifier votre code :) – Stretch0

3

j'ai aussi utilisé MySQL pour chatbot mais je l'ai utilisé NodeJS pour le back-end app.For ce module mysql serait très utile.

Vous devez stocker les utilisateurs de l'état actuel pour la session de questions et réponses ainsi que magasin la réponse elle-même de l'utilisateur et vous avez besoin de faire un commutateur ou si-else, si le cas pour poser des questions à utilisateur basé sur son état de commutateur (état) et dans les cas de commutateur juste mettre à jour son état.et vous avez facebook-id de l'utilisateur dans l'objet événement de chatbot de sorte que vous pouvez stocker les données de chaque utilisateur individuellement avec leur état et question- répondre dans un tableau différent.

Par exemple. define flags {1,2,3}

l'état de l'utilisateur sera de 1 au début, alors demandez lui par exemple. question 1 seulement et stocker ce que réponse-1, vous pouvez le faire en son état vérification, et après ce statut de mise à jour 2.

donc, de cette façon vous pouvez demander à chaque question de chaque élève selon leur état et lui répondre.

J'ai fait la même chose exactement de la manière ci-dessus.

J'espère que cela vous serait utile.

+0

J'aime assez cette approche de stocker l'état. Surtout si vous utilisez mySQL, vous pouvez avoir une table séparée avec toutes les questions et ensuite le champ d'état dans la table des utilisateurs peut référencer la question qu'ils posent. – Stretch0