wit.ai runActions 如何处理后续消息中的上下文

wit.ai runActions how to handle context in follow-up message

我正在使用 node-wit 开发聊天机器人应用程序。 这大部分工作正常,但我 运行 遇到了使用上下文的问题。

我正在使用 运行Actions api :

       this.witClient.runActions(customer._key, messageText, witContext).then((newContext => {}
)).catch(reject);

我定义了一些设置上下文的动作。

这工作正常,只要上下文发生在一条消息上。 例如,如果我要调用一个名为 addProduct 的操作:

addProduct({sessionId, context, text, entities}) {

                return new Promise((resolve, reject) => {

                            context.product = `myNewProduct';
                            resolve(context);

                });
            },

然后它将使用 'product' 上下文键显示一条消息。

但是,当我尝试在 2 条消息上使用它时,它似乎已经失去了上下文(例如,当提出多项选择题,然后处理该响应时)。

如果我理解它是如何正确工作的,那么 node-wit 不会保留消息之外的上下文(我一开始就这么认为是因为我正在传递会话密钥)。

我看到的一个解决方案是以 session/user 特定方式存储生成的上下文(在本例中为 newContext),然后在用户发送新消息时恢复并再次传递它。

意思是这样的:

witContext = getContextFromSession();
this.witClient.runActions(customer._key, messageText, witContext).then((newContext => { setContextInSession(newContext) } )).赶上(拒绝);

这是正确的处理方式吗?

当然你必须存储你的上下文状态,你决定如何存储它。但是,如果您要拥有大量用户并且您的资源可用,请考虑最有效的方法。

正如您在 nodeJs 的官方示例中看到的那样,在 https://github.com/wit-ai/node-wit/blob/master/examples/messenger.js 上有一个名为 findOrCreateSession 的方法,它们在调用机智操作之前获得会话。

在我的特定情况下,我将它存储在数据库中,所以我在调用操作之前获取会话,因此我可以发送上下文,然后在操作中我再次查询会话以修改生成的上下文并再次存储,尝试满足您需求的最佳实施方式。