Cortana技能超时

时间:2019-01-28 13:32:46

标签: timeout botframework cortana cortana-skills-kit

在Cortana Bot Skills中,等待机器人响应的Cortana技能的当前超时为10秒。

我们在bot中集成了ServiceNow之类的自动化工具,用于根据用户的查询来创建票证,在该机器人中,创建票证需要一分钟,然后返回以使bot响应用户有关票证详细信息。

有什么办法可以增加这个超时值?这是可配置的吗? 需要帮助。

谢谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,在当前版本的技能套件中,您无法更改超时期限。此超时实际上是由代理(例如,客户端,应用或搜索服务)控制的。

Botframework支持“键入”消息;不幸的是,Cortana还没有。它还支持主动消息(带外),但遗憾的是Cortana尚不支持。

但是有希望!这取决于您如何构建对话框,使用哪些输入提示以及主要的人机界面。

例如,在Windows上,您可以使用提示“ acceptingInput”。这意味着对话将无限期地等待用户做某事。出示富卡时通常使用此功能。如果您遵循此路径,则您的漫游器应轮询任务是否完成,然后响应用户输入(在下一回合)显示“我仍在思考”消息。

您说的这个UX不好,因为用户不知道任务何时完成...但是您可以在任务完成后使用replaceDialog来使对话框重新回到正轨!

如果您想提供正在进行的任务的积极反馈,则可以执行此操作!将“ ignoringInput”提示与“ Please wait message”一起使用。创建一个轮询以完成任务的循环,然后每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;
        }

    });