Cortana技能超时



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

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

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

提前感谢。

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

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

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

例如,在Windows上,可以使用"acceptingInput"提示。这意味着对话无限期地等待用户做某事。这通常用于出示丰富的卡片。如果你遵循这条路径,你的机器人应该轮询任务的完成情况,然后根据用户输入(在下一轮)显示一条"我还在思考"消息。

你说这种用户体验并不好,因为用户不知道任务什么时候完成。。。但是,您可以在任务完成时使用replaceDialog使对话框流回到正轨!

如果你想主动反馈任务正在进行中,你可以这样做!使用带有"Please wait message"的"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;
}
});

最新更新