使用Claudia JS构建Facebook messenger机器人并计划在AWS Lambda上托管。
我想问用户一系列问题。
当用户回答答案时,我需要保存以供日后使用,一旦我掌握了所需的所有信息,我会将答案传递给函数。
保存此信息的最佳方法是什么?
我正在考虑一些缓存层,例如redis,但因为存储在RAM中,当lamda服务器关闭时我会丢失它。 Mongodb在连接时显然有很多开销,但至少会持久。
也许只是一个简单的mySQL服务器?
其他人如何做到这一点?我觉得我找不到一个简单的解决方案。
答案 0 :(得分:5)
我将首先回答有关我是如何做的的部分:我正在使用MongoDB。我玩弄了你提到的想法,但很快就克服了内存解决方案(Memcached,Redis)的原因。我的最终解决方案归结为关系数据库或像MongoDB这样的noSQL。说实话,在我的项目规模上,我没有考虑比较DB类型之间的性能。
凭借我的特殊功能“路线图”,由于Mongo的规范化结构,我决定在处理用户“对象”时使用Mongo来处理更“OOP”的风格而无需明确定义用户类。我也理解对MySQL也可以这样做,只是处理json
数据对于我和flask
来说更像“对象”,即user = getUserFromMongo
,这给了我一个字谜Python然后我可以做user['first_name']
。下面的代码将解释这种简单性:
(不知怎的,感觉就像......不必在Rails中为简单的数据库交互编写SQL命令)
最后,至于我如何管理用户输入,我采用了Wit.ai的context
概念。我不知道他们是怎么做到的,但对我来说context
是正在进行的谈话目的。我像堆栈一样使用它,并且一旦完成当前上下文,就将其从用户的上下文数据中弹出。对于机器人收到的每条消息,程序将获取当前上下文并指导流程。每当发生未知错误(异常处理)时,很可能因为用户正在说机器人不理解的内容,我也会清除context
数据。
关于MongoDB的一个好处是我可以塑造context
然而我想要它并将其视为一个对象。一个简单的就像{name: yelp-search, stage:ask-for-user-location}
,我想复杂的也可以建立在这个结构上。当然,context
的堆栈实现并不涉及复杂的过去引用的复杂对话。
我put my project on Github如果你想看看它。
答案 1 :(得分:3)
我还使用了 mysql for chatbot ,但我使用 NodeJS 作为后端应用程序。对于mysql模块非常有帮助。
您需要存储用户'问题回答会话的当前状态以及用户存储答案本身,您需要进行切换或if-else-if case 基于其状态为开关(状态)向用户提出问题,并且在切换的情况下只更新它的状态。并且您在聊天机器人的事件对象中具有用户的facebook-id 所以您可以将每个用户的数据与其状态和问题答案分别存储在不同的表中。
例如定义标志{1,2,3}
用户的状态将在开始时为1,所以请他例如问题1 只有,并将其存储为答案-1,您可以通过它的状态来执行此操作 检查,并在此更新后状态为2。
所以,通过这种方式,您可以按照每个学生的问题提出问题 他们的状态并回答他。
我以完全相同的方式做了同样的事情。
希望这会对你有所帮助。