首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cortana技能超时

Cortana技能超时
EN

Stack Overflow用户
提问于 2019-01-28 21:32:46
回答 1查看 118关注 0票数 1

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

我们正在集成ServiceNow等自动化工具,用于基于机器人中用户的查询创建票据,其中票据创建需要一分钟,然后返回给机器人,以响应用户有关票据详细信息的信息。

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

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2019-01-29 01:02:43

不幸的是,在当前版本的技能工具包中,您不能更改超时期限。此超时实际上是由代理(因此,客户端、应用程序或搜索服务)控制的。

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

但还是有希望的!这取决于你如何构建你的对话框,你使用了什么输入提示,以及什么设备是你的主要人机界面。

例如,在Windows上,您可以使用提示"acceptingInput“。这意味着会话将无限期地等待用户执行某些操作。这通常在展示富卡片时使用。如果您遵循此路径,您的机器人应该轮询任务的完成,然后在用户输入时(在下一轮)显示“我仍在思考”消息。

你会说这个UX不是很棒,因为用户不知道任务什么时候完成……但是,您可以在任务完成时使用replaceDialog使对话框流程回到正轨!

如果你想提供一个任务正在进行中的积极反馈,你可以这样做!将"ignoringInput“提示与”请等待消息“一起使用。创建一个轮询任务完成情况的循环,并每5秒发送一次此消息。ignoringInput使机器人进入下一轮,直到它得到接受或期望的输入提示。

代码语言:javascript
复制
    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;
        }

    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54403130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档