获取发送消息的机器人和用户回复之间的持续时间

时间:2017-02-06 13:32:30

标签: node.js bots botframework chatbot

首先感谢您在构建和维护此库方面所做的出色工作。 我有一个场景,我需要检查该人是否在10秒内回答。我有一些看起来与此类似的代码,我在第一个瀑布步骤中测量开始时间,并在下一个瀑布步骤中测量结束时间,我将在第二个瀑布步骤中找到两者之间的差异。

bot.dialog('/duration', [(session, args)=>{
    session.dialogData.startTime = new Date().getTime()
}, (session, results)=>{
    session.dialogData.endTime = new Date().getTime()
}])

我觉得上面的代码不准确。我见过session.message.timestamp属性。它与上面的代码有什么不同

有没有更好的方法来衡量这些时差? 如何在这种情况下考虑网络延迟? 提前感谢您的回答

2 个答案:

答案 0 :(得分:2)

您可以设置发送消息的时间,然后使用消息时间戳重新评估,如:

var bot = new builder.UniversalBot(connector, [
    function (session) {
        session.userData.lastMessageSent = new Date();
        builder.Prompts.text(session, 'Send something in 10 seconds or you die.');
    },
    function (session, result) {
        if (session.userData.lastMessageSent) {
            var lastMessageSent = new Date(session.userData.lastMessageSent);
            var lastMessageReceived = new Date(session.message.timestamp);

            var diff = lastMessageReceived - lastMessageSent / 1000;

            if (diff >= 10) {
                session.send('Game over.');
            } else  {
                session.send('Good boy!');
            }
        }
    }
]);

答案 1 :(得分:1)

更好的方法是在注册机器人时使用Application Insights连接。 通过这种方式,Bot Framework服务可以测量您的请求/响应,并将时间戳自动存储到Application Insights中。

copy the instrumentation key到机器人注册页面后,Application Insights Analytics customEvents 下的事件。

如果你只是要有一个可操作的代码,上面的答案是一个更好的解决方案。