Есть несколько способов справиться с этим. Если вы вызываете это через скрипт (используя что-то вроде опции botframework-webchat с использованием канала Directline), вы можете проверить этот ответ на SO , который показывает, как его настроить, в файле HTML.
Если вы хотите реализовать это непосредственно в своем боте, вы можете использовать функцию времени, подобную Sainath Reddy. Тем не менее, я заметил, что объект контекста становится недействительным, поэтому вы должны использовать вместо этого Проактивный обмен сообщениями. Я не уверен, что это самый эффективный метод, но вот как я смог выполнить sh this.
Во-первых, вы должны импортировать TurnContext и BotFrameworkAdapter из botbuilder
const { TurnContext, BotFrameworkAdapter } = require('botbuilder');
Затем добавьте следующий код в функцию onMessage (или onTurn, если вы используете более раннюю настройку). setTimeout
будет работать только один раз. Вместо этого вы можете использовать setInterval
, если хотите, чтобы оно повторялось.
// Save the conversationReference
var conversationReference = TurnContext.getConversationReference(context.activity);
// Reset the inactivity timer
clearTimeout(this.inactivityTimer);
this.inactivityTimer = setTimeout(async function(conversationReference) {
console.log('User is inactive');
try {
const adapter = new BotFrameworkAdapter({
appId: process.env.microsoftAppID,
appPassword: process.env.microsoftAppPassword
});
await adapter.continueConversation(conversationReference, async turnContext => {
await turnContext.sendActivity('Are you still there?');
});
} catch (error) {
console.log(error);
}
}, 300000, conversationReference);
Я предпочитаю этот метод, потому что он также работает, если вы используете botframework-webchat или аналогичный. На самом деле, это будет работать на каждом канале. Если есть определенные каналы, где вы не хотите, чтобы это происходило, вам нужно добавить некоторые дополнительные логики c в функцию. Или, если вы хотите это только в чем-то вроде botframework-webchat, вы можете просто использовать первый метод, который я связал.