Тайм-аут навыка Кортана - PullRequest
0 голосов
/ 28 января 2019

В навыках Cortana Bot, текущий тайм-аут навыка Cortana, ожидающего ответа бота, составляет 10 секунд.

Мы интегрируем инструменты автоматизации, такие как ServiceNow, для создания заявки на основе запроса пользователя в боте, где создание заявки занимает минуту и ​​возвращается обратно, чтобы бот ответил пользователю о деталях заявки.

Есть ли способ увеличить значение тайм-аута?Это настраивается?Нужна помощь в этом.

Заранее спасибо.

1 Ответ

0 голосов
/ 28 января 2019

К сожалению, в текущей версии комплекта навыков вы не можете изменить период ожидания.Этот тайм-аут фактически контролируется агентом (например, на стороне клиента, приложением или службой поиска).

Botframework поддерживает «ввод сообщений»;К сожалению, Кортана нет (пока).Он также поддерживает проактивные сообщения (вне полосы), и, к сожалению, Cortana не (пока).

Но есть надежда!Это зависит от того, как вы создали свой диалог и какие подсказки вы используете, и какое устройство является вашим основным человеческим интерфейсом.

Например, в Windows вы можете использовать подсказку «acceptingInput».Это означает, что разговор ждет пользователя в течение неопределенного времени.Часто это используется при представлении богатых карт.Если вы следуете по этому пути, ваш бот должен опросить о завершении задачи, а затем представить сообщение «Я все еще думаю» в ответ на ввод пользователя (на следующем ходу).

Этот UX не являетсяхорошо, что вы говорите, потому что пользователь не знает, когда задача выполнена ... но вы можете использовать replaceDialog, когда задача завершится, чтобы вернуть поток диалога в нужное русло!

Если вы хотите предоставить активную обратную связьчто задача выполняется, вы можете сделать это!Используйте подсказку ignoringInput с сообщением «Пожалуйста, подождите».Создайте цикл, который опрашивает о завершении задачи, и отправляйте это сообщение каждые 5 секунд.ignoringInput заставляет бота переходить к следующему ходу, пока он не получит подсказку о принятии или ожидании ввода.

    var restify = require('restify');
    var builder = require('botbuilder');

    // 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());

    // Create your bot with a function to receive messages from the user
    var bot = new builder.UniversalBot(connector);
    bot.set('storage',  new builder.MemoryBotStorage() );

    const kWelcomeText = 'Hi! Say \'start\' to create a timer and a polling loop.';
    const kMisunderstood = 'Sorry, I didn\'t get that.';
    const kStarting = 'Starting 30 second timer. Please wait.';
    const kWaiting = 'Please wait.';
    const kDone = 'My task is done.';

    bot.dialog('/', function (session) {
        var txt = session.message.text;
        if( !txt )
        { 
            var msg = new builder.Message(session)
                .text( kWelcomeText )
                .speak( kWelcomeText )
                .inputHint("acceptingInput");
            session.send(msg);
            return;
        }
        if( txt === 'start' )
            {
        console.log( 'entering pollerDialog' );
                session.conversationData.counter = 0;
                session.beginDialog('pollerDialog');
                return;
            }
        else {
            var msg = new builder.Message(session)
                .text( kMisunderstood )
                .speak( kMisunderstood )
                .inputHint("acceptingInput");
            session.send(msg);
            return;
        }
    });

    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }

    bot.dialog('pollerDialog', function (session) {
        console.log( 'entering pollerDialog' );
        var iter = session.conversationData.counter || 0;
        session.conversationData.counter = iter + 1;
        if( session.conversationData.done )
            {
                console.log( 'done' );
            var msg = new builder.Message(session)
                .text( kDone )
                .speak( kDone )
                .inputHint("acceptingInput");
            session.endDialog(msg);
                return;
            }
            console.log( `iteration is ${iter}` );
        if( iter === 0 )
        {
        console.log( 'setting timeout' );
        setTimeout(function () {
            console.log( 'timeout done' );
            session.conversationData.done = true;
            }, 30000);

            var msg = new builder.Message(session)
                .text( kStarting )
                .speak( kStarting )
                .inputHint("ignoringInput");
            session.sendTyping();
            session.send(msg);

        console.log( 'sent kStarting' );
        setTimeout( function( ) {      
       console.log( 'replacing kStarting' );
           session.replaceDialog('pollerDialog');
        }, 5000);
            sleep(4000);
            return;
        } else {
            var msg = new builder.Message(session)
                .text( kWaiting )
                .speak( kWaiting )
                .inputHint("ignoringInput");
            session.sendTyping();
            session.send(msg);
        console.log( 'sent kWaiting' );
        setTimeout( function( ) {       
       console.log( 'replacing kWaiting' );
           session.replaceDialog('pollerDialog');
        }, 5000);
            sleep(4000);
            return;
        }

    });
...