在Cortana Bot Skills中,等待机器人响应的Cortana技能的当前超时为10秒。
我们在bot中集成了ServiceNow之类的自动化工具,用于根据用户的查询来创建票证,在该机器人中,创建票证需要一分钟,然后返回以使bot响应用户有关票证详细信息。
有什么办法可以增加这个超时值?这是可配置的吗? 需要帮助。
谢谢。
答案 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;
}
});