К сожалению, в текущей версии комплекта навыков вы не можете изменить период ожидания.Этот тайм-аут фактически контролируется агентом (например, на стороне клиента, приложением или службой поиска).
Botframework поддерживает «ввод сообщений»;К сожалению, Кортана нет (пока).Он также поддерживает проактивные сообщения (вне полосы), и, к сожалению, 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;
}
});