Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何访问';会话数据';拦截时';发送';来自中间件的钩子?_Node.js_Botframework - Fatal编程技术网

Node.js 如何访问';会话数据';拦截时';发送';来自中间件的钩子?

Node.js 如何访问';会话数据';拦截时';发送';来自中间件的钩子?,node.js,botframework,Node.js,Botframework,我一直在跟踪这位官员,同时试图截获用户/机器人信息 bot.use({ botbuilder (session, next) { logger.info("MESSAGE RECEIVED:" + session.message.text); next(); }, send (event, next) { logger.info("MESSAGE SENT:" + event.text); next(); } }); 虽然botbuilderh

我一直在跟踪这位官员,同时试图截获用户/机器人信息

bot.use({
  botbuilder (session, next) {
    logger.info("MESSAGE RECEIVED:" + session.message.text);
    next();
  },

  send (event, next) {
    logger.info("MESSAGE SENT:" + event.text);
    next();
  }
});
虽然
botbuilder
hook的行为符合预期,但从不调用
send

当我能够解决这个问题时,我的目标是 从
send
方法中间件访问
session
对象,更精确地访问
session.conversationData
存储容器

我做了什么?

我一直遵循自述文件中的说明:

中间件上的
botbuilder
钩子是
ISessionMiddleware
的一个示例。使用此钩子而不是
receive
的主要优点是我们可以访问
会话

send
receive
钩子使用
IEventMiddleware
。第一个参数是事件本身。要查看事件是否为消息,请检查
event.type
是否为
'message'

目前,我已将
会话.send
包装在一个自定义函数中,这样我就可以记录bot发送的消息,以及另一个从对话框中记录用户响应的函数。虽然这个解决方案解决了我的问题,但感觉很糟糕(需要手动更新每个对话框),而且我无法创建可以从模块加载的通用中间件

我想要实现什么?

我的中间件的目的是拦截用户/bot消息,并使用以下模式将它们记录到SQL表中:
会话id、消息文本、时间戳

conversation id
存储在
session.conversationData
存储容器中,因此我需要从
send
钩子访问
session
对象


使用
“botbuilder”:“^3.13.1”

您可以通过调用LoadSession在send中加载会话,而无需调度:

send: function (message, next) {
    bot.loadSessionWithoutDispatching(message.address,function (error,session){
        console.log(session.userData);
    });

    next();
}

看一看,看看是否有帮助you@Alexander很抱歉。。。我已经编辑了我的答案。仅供参考,每次使用时,似乎都会再次从存储中加载数据,而不仅仅是访问已加载的数据