代码之家  ›  专栏  ›  技术社区  ›  Vigneswaran A

如何为机器人程序响应添加延迟,以便在Microsoft bot Framework节点中感觉更真实。js?

  •  4
  • Vigneswaran A  · 技术社区  · 8 年前

    有没有办法给回复增加一点延迟?所以机器人感觉更真实,就像是在打字?就一点点。 现在测试人员的反应是速度太快了。 这很好,但感觉太冷了。用一点时间让机器人看起来好像在打字,它会感觉更温暖和模糊:)

    我需要在两行之间增加延迟

        session.send("Account created successfully");
        session.send("Please login");
    

    以下是完整代码

    var restify = require('restify');
    var builder = require('botbuilder');
    var botbuilder_azure = require("botbuilder-azure");
    
    // Setup Restify Server
    var server = restify.createServer();
    server.listen(process.env.port || process.env.PORT || 3978, function () {
    console.log('%s listening to %s', server.name, server.url); 
    });
    
    // Create chat connector for communicating with the Bot Framework Service
    var connector = new builder.ChatConnector({
        appId: process.env.MicrosoftAppId,
        appPassword: process.env.MicrosoftAppPassword,
        openIdMetadata: process.env.BotOpenIdMetadata 
    });
    
    // Listen for messages from users 
    server.post('/api/messages', connector.listen());
    
    var bot = new builder.UniversalBot(connector);
    
    bot.on('conversationUpdate', (message) => {
        if (message.membersAdded) {
            message.membersAdded.forEach(function (identity) {
                if (identity.id === message.address.bot.id) {
                    bot.beginDialog(message.address, 'accountCheck');
                }
            });
        }
    });
    
    bot.dialog('accountCheck', [
        function (session, results, next) {
    
             session.send("Account created successfully");
             session.send("Please login");
    
        }
    ]).endConversationAction("stop",
        "",
        {
            matches: /^cancel$|^goodbye$|^exit|^stop|^close/i
            // confirmPrompt: "This will cancel your order. Are you sure?"
        }
    );
    
    5 回复  |  直到 8 年前
        1
  •  2
  •   Amit be    8 年前

    您可以使用 session.delay()

    bot.dialog('accountCheck', [
        function (session, results, next) {
    
             session.send("Account created successfully");
             // 0.5 sec delay between messages
             session.delay(500)
             session.send("Please login");
    
        }
    ]).endConversationAction("stop",
        "",
        {
            matches: /^cancel$|^goodbye$|^exit|^stop|^close/i
            // confirmPrompt: "This will cancel your order. Are you sure?"
        }
    );

    参见文档: https://docs.botframework.com/en-us/node/builder/chat-reference/classes/_botbuilder_d_.session.html#delay

        2
  •  2
  •   Ron    7 年前

    Bot framework SDK v4:

    await turnContext.sendActivity({ type: ActivityTypes.Typing })
    

    Documentation link SDK v4

    Bot Framework SDK v3:

    session.sendTyping()
    

    Documentation link SDK v3

        3
  •  2
  •   Satish Patel    6 年前

    我使用nodejs SDK 4.0实现这一点的方法是 ActivityTypes.Typing 在SendActivities中,如下所示

    await context.sendActivities([
    {type: ActivityTypes.Typing},
    {type: 'delay', value:2000},
    {type: ActivityTypes.Message, text: 'Bot Response goes here is only text else send attachments as reply'}])
    

    尝试在中添加以上代码 Change SendActivity to SendActivities with dealy 尝试在emulator中进行测试。

        4
  •  1
  •   hurricane    8 年前

    您可以使用 timeout 在客户端或后端。

    function (session, results, next) {
    
        session.send("Account created successfully. Wait 10 seconds...");
        setTimeout(function() {
                session.send("Please login");
        }, 10000); //10 seconds
    }
    
        5
  •  1
  •   Ezequiel Jadib    8 年前

    您可以只发送一个键入指示器,而不是增加延迟

    session.sendTyping();
    

    更多信息,请访问 https://docs.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-send-typing-indicator

    推荐文章