Лучший способ хранить ответы от пользователей в Facebook bot chat?
Создание бота Facebook messenger с помощью Claudia JS и планирование хостинга на AWS Lambda.
Я хочу задать пользователю ряд вопросов.
Когда пользователь отвечает ответом, мне нужно сохранить его на потом, и как только у меня будет вся необходимая информация, я передам ответы функции.
Как лучше всего сохранить эту информацию?
Я думал о некотором слое кэширования, таком как redis, но поскольку он хранится в оперативной памяти, я потеряю его, когда сервер lamda завершать работу. Mongodb, по-видимому, имеет много накладных расходов при подключении, но, по крайней мере, будет настойчивым.
Может быть, просто простой сервер mySQL?
Как это делают все остальные? Я чувствую, что есть простое решение, которое я упускаю.
2 ответа:
Сначала я отвечу на часть о том, как я это делаю : я использую MongoDB. Я играл с идеями, которые вы упомянули, но быстро вычеркнул решения в памяти (Memcached, Redis) по той же причине. Мое окончательное решение сводилось либо к реляционной БД, либо к noSQL, как MongoDB. Честно говоря, в масштабах моего проекта я не думал о том, чтобы надежно сравнивать производительность между типами БД.
С моей конкретной функцией "дорожная карта", я решил пойти с Монго, чтобы приблизиться к больше стиля " ООП "при работе с пользовательским" объектом " без необходимости явно определять пользовательский класс, благодаря нормализованной структуре Mongo. Я понимаю, что то же самое можно было бы сделать и для MySQL, просто обработка
json
данных более "объектно-подобна" для меня иflask
, т. е.user = getUserFromMongo
, что дает мне дикт в Python, тогда я могу просто сделатьuser['first_name']
. Приведенные ниже коды объясняют эту простоту:(Так или иначе, это было похоже... не нужно писать команды SQL для простых взаимодействие с базой данных в Rails)
Мои данные объекта пользователя на MongoDB
Наконец, что касается того, как я управляю пользовательским вводом , я принял Wit.ai понятие
Хорошая часть MongoDB заключается в том, что я могу формироватьcontext
. Я не знаю, как именно они это делают, ноcontext
для меня-это тип цели разговора, который происходит. Я использую его как стек, и как только текущий контекст будет выполнен, вытащите его из контекстных данных пользователя. Для каждого сообщения, полученного ботом, программа будет получать текущий контекст и направьте поток. Всякий раз, когда возникает неизвестная ошибка (обработка исключений), скорее всего, потому, что пользователь говорит что-то, чего бот не понимает, я также очищаю данныеcontext
.context
, Как я хочу, и относиться к нему просто как к объекту. Простой из них похож на{name: yelp-search, stage:ask-for-user-location}
, и я думаю, что сложные тоже могут быть построены на этой структуре. Конечно, реализация стекаcontext
не имеет дела со сложным разговором со сложным прошлым ссылка.Я помещаю свой проект на Github, Если вы хотите взглянуть на него.
Я также использовал mysql для чат-бота, но я использовал NodeJS для серверного приложения.Для этогоmysql модуль был бы очень полезен.
Вам нужно хранить текущее состояние пользователя для сеанса ответа на вопрос, а также хранить сам ответ от пользователя, и вам нужно сделать переключатель или if-else-if case для задания вопросов пользователю на основе его состояния как switch(state), а в случаях switch просто обновить его состояние.и у вас есть facebook-id пользователя в событийном объекте чат-бота , так что вы можете хранить данные каждого пользователя индивидуально с их состоянием и вопросом-ответом в разных таблицах.
Например, определить флаги{1,2,3}
Состояние пользователя будет 1 в начале, поэтому задайте ему, например, вопрос-1 только, и сохранить это как ответ-1, Вы можете сделать это по его состоянию проверка, и после этого обновление статуса до 2.
Таким образом, вы можете задать каждому отдельному студенту вопрос в соответствии с свое государство и отвечай ему.
Я сделал то же самое точно таким же образом.
Надеюсь, это будет полезно для вас.