Лучший способ хранить ответы от пользователей в Facebook bot chat?


Создание бота Facebook messenger с помощью Claudia JS и планирование хостинга на AWS Lambda.

Я хочу задать пользователю ряд вопросов.

Когда пользователь отвечает ответом, мне нужно сохранить его на потом, и как только у меня будет вся необходимая информация, я передам ответы функции.

Как лучше всего сохранить эту информацию?

Я думал о некотором слое кэширования, таком как redis, но поскольку он хранится в оперативной памяти, я потеряю его, когда сервер lamda завершать работу. Mongodb, по-видимому, имеет много накладных расходов при подключении, но, по крайней мере, будет настойчивым.

Может быть, просто простой сервер mySQL?

Как это делают все остальные? Я чувствую, что есть простое решение, которое я упускаю.

2 4

2 ответа:

Сначала я отвечу на часть о том, как я это делаю : я использую MongoDB. Я играл с идеями, которые вы упомянули, но быстро вычеркнул решения в памяти (Memcached, Redis) по той же причине. Мое окончательное решение сводилось либо к реляционной БД, либо к noSQL, как MongoDB. Честно говоря, в масштабах моего проекта я не думал о том, чтобы надежно сравнивать производительность между типами БД.

С моей конкретной функцией "дорожная карта", я решил пойти с Монго, чтобы приблизиться к больше стиля " ООП "при работе с пользовательским" объектом " без необходимости явно определять пользовательский класс, благодаря нормализованной структуре Mongo. Я понимаю, что то же самое можно было бы сделать и для MySQL, просто обработка json данных более "объектно-подобна" для меня и flask, т. е. user = getUserFromMongo, что дает мне дикт в Python, тогда я могу просто сделать user['first_name']. Приведенные ниже коды объясняют эту простоту:

Взаимодействие с MongoDB (Так или иначе, это было похоже... не нужно писать команды SQL для простых взаимодействие с базой данных в Rails)

Мои данные объекта пользователя на MongoDB пользователь

Наконец, что касается того, как я управляю пользовательским вводом , я принял Wit.ai понятие context. Я не знаю, как именно они это делают, но context для меня-это тип цели разговора, который происходит. Я использую его как стек, и как только текущий контекст будет выполнен, вытащите его из контекстных данных пользователя. Для каждого сообщения, полученного ботом, программа будет получать текущий контекст и направьте поток. Всякий раз, когда возникает неизвестная ошибка (обработка исключений), скорее всего, потому, что пользователь говорит что-то, чего бот не понимает, я также очищаю данные context.

Хорошая часть MongoDB заключается в том, что я могу формировать 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.

Таким образом, вы можете задать каждому отдельному студенту вопрос в соответствии с свое государство и отвечай ему.

Я сделал то же самое точно таким же образом.

Надеюсь, это будет полезно для вас.