Как добавить задержку к ответам ботов, чтобы она казалась более реальной в Microsoft Bot Framework Node.js?

Есть ли способ добавить небольшую задержку к ответам? Так бот кажется более реальным, как если бы он печатал? Только немного. Прямо сейчас реакция тестировщиков заключалась в том, что это слишком быстро. Это здорово, но… кажется слишком «холодным». Через некоторое время, когда будет казаться, что бот печатает, он будет казаться немного более теплым и нечетким: :)

Мне нужно добавить задержку между двумя строками

    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?"
    }
);

person Vigneswaran A    schedule 02.01.2018    source источник
comment
Используйте 1_. По моему опыту, искусственные задержки также могут заставить ваших пользователей думать, что есть проблемы с производительностью.   -  person nilsw    schedule 03.01.2018
comment
Мне нужна задержка в 2 секунды. Итак, это не проблема. session.sendTyping() у меня не работает   -  person Vigneswaran A    schedule 03.01.2018


Ответы (5)


Вы можете использовать timeout на стороне клиента или на стороне сервера.

function (session, results, next) {

    session.send("Account created successfully. Wait 10 seconds...");
    setTimeout(function() {
            session.send("Please login");
    }, 10000); //10 seconds
}
person hurricane    schedule 02.01.2018
comment
@VigneswaranA Можете ли вы показать нам свою структуру и коды на node.js? - person hurricane; 03.01.2018
comment
@VigneswaranA Я изменился. Можешь попробовать? - person hurricane; 03.01.2018
comment
@VigneswaranA вы можете подать заявку? - person hurricane; 03.01.2018
comment
Давайте продолжим обсуждение в чате. - person Vigneswaran A; 03.01.2018

Вы можете использовать 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

person Amit be    schedule 20.02.2018

SDK платформы Bot v4:

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

Ссылка на документацию SDK v4

Bot Framework SDK v3:

session.sendTyping()

Ссылка на документацию SDK v3

person Ron    schedule 20.03.2019

То, как я реализовал это с помощью 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'}])

Попробуйте добавить приведенный выше код в Изменить SendActivity на SendActivities с Dealy Попробуйте протестировать в эмуляторе.

person Satish Patel    schedule 11.03.2020

Вместо того, чтобы добавлять задержку, вы можете просто отправить индикатор ввода

session.sendTyping();

Дополнительные сведения см. по адресу https://docs.microsoft.com/en-us/bot-framework/nodejs/bot-builder-nodejs-send-typing-indicator

person Ezequiel Jadib    schedule 02.01.2018
comment
Не уверен, что это значит... индикатор набора текста работает хорошо, это также зависит от операций, которые вы выполняете дальше. Как я указал, а также указал в комментариях, добавление задержки не является хорошей практикой. - person Ezequiel Jadib; 03.01.2018
comment
имейте в виду, что session.sendTyping() не работает для каждого канала. Может быть, поэтому у @VigneswaranA это не работает. - person Victor Lia Fook; 02.05.2018