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

голоса
4

Построение посыльного бота Facebook с помощью Клаудии JS и план на хостинг на AWS Lambda.

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

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

Что такое лучший способ сохранить эту информацию?

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

Может быть, только простой сервер MySql?

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

Задан 13/09/2016 в 05:47
источник пользователем
На других языках...                            


2 ответов

голоса
5

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

С моей особенностью «дорожной картой» , я решил пойти с Монго , чтобы приблизиться к более стилю «ООП» при работе с пользователем «объект» без явного определения класса пользователя, благодаря нормированной структуре Монго. Я понимаю , что то же самое можно было бы сделать для MySQL, также, только , что обработка jsonданных является более «объект типа» для меня и flask, то user = getUserFromMongo, что дает мне Dict в 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 , если вы хотите взглянуть на него.

Ответил 15/09/2016 в 20:17
источник пользователем

голоса
3

я также использовал MySQL для Chatbot , но я использовал NodeJS для внутреннего интерфейса app.For , что тузд модуль будет очень полезно.

Вам нужно сохранить текущее состояние пользователей на вопрос ответ сессию , а также хранить сам ответ от пользователя , и вы должны сделать выключатель или если- то еще, если дело задавать вопросы к пользователю на основании его состояние , как переключатель (состояние) и в случае переключателя просто обновить его state.and у вас есть facebook идентификатор пользователя в объекте событий Chatbot , так что вы можете хранить данные каждого пользователя индивидуально с их состоянием и вопрос-ответ в другой таблице.

Для, например, определить флаги {1,2,3}

состояние пользователя будет 1 в так главную страницу спросить у него, например, вопрос-1 только, и сохранить это как ответ-1, вы можете сделать это, это состояние проверки, и после этого статуса обновления до 2.

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

Я сделал то же самое в точном вышеописанным образом.

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

Ответил 16/09/2016 в 09:38
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more