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很抱歉。。。我已经编辑了我的答案。仅供参考,每次使用时,似乎都会再次从存储中加载数据,而不仅仅是访问已加载的数据