【问题标题】:Cortana skill timeoutCortana 技能超时
【发布时间】:2019-01-28 13:32:45
【问题描述】:

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

我们正在集成 ServiceNow 等自动化工具,用于根据用户在机器人中的查询创建工单,其中工单创建需要一分钟,然后返回让机器人回复用户工单详细信息。

有没有办法增加这个超时值?这是可配置的吗? 在这方面需要帮助。

提前致谢。

【问题讨论】:

    标签: timeout botframework cortana cortana-skills-kit


    【解决方案1】:

    很遗憾,在当前版本的技能包中,您无法更改超时时间。此超时实际上由代理控制(因此,客户端、应用程序或搜索服务。)

    Botframework 支持“键入”消息;不幸的是,Cortana 还没有。它还支持主动消息(带外),不幸的是 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;
            }
    
        });
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-10-15
    • 2017-11-11
    相关资源
    最近更新 更多