Тайм-аут навыка Кортаны

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

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

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

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


person ravi kishore    schedule 28.01.2019    source источник


Ответы (1)


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

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

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

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

Вы говорите, что этот 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;
        }

    });
person Micromuncher    schedule 28.01.2019
comment
Версия dotnet Bot Builder V3 того же: docs.microsoft.com/en -us / cortana / skills / show-progress - person Eric Dahlvang; 30.01.2019
comment
Большое спасибо за ваш ответ. Попробую - person ravi kishore; 30.01.2019
comment
Если это ответило на вопрос - отметьте это как ответ :-) - person Micromuncher; 06.02.2019