Мой метод работает для Directline Webchat, но вы можете использовать эту концепцию и использовать ее в решении, которое будет работать для Slack.
При использовании botframework-webchat вы могут настроить пользовательский магазин для отслеживания бездействия. В моем примере ниже я использую комбинацию заголовка страницы «уведомление» с отправкой сообщения. Но вы можете просто установить интервал и отправить сообщение без каких-либо изменений заголовка страницы.
let interval;
var PageTitleNotification = {
Vars:{
OriginalTitle: document.title,
Interval: null
},
On: function(notification, intervalSpeed){
var _this = this;
_this.Vars.Interval = setInterval(function(){
document.title = (_this.Vars.OriginalTitle == document.title)
? notification
: _this.Vars.OriginalTitle;
}, (intervalSpeed) ? intervalSpeed : 1000);
},
Off: function(){
clearInterval(this.Vars.Interval);
document.title = this.Vars.OriginalTitle;
}
}
// We are using a customized store to add hooks to connect event
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'WEB_CHAT/SEND_MESSAGE') {
// Message sent by the user
PageTitleNotification.Off();
clearTimeout(interval);
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY' && action.payload.activity.name !== "inactive") {
// Message sent by the bot
clearInterval(interval);
interval = setTimeout(() => {
// Change title to flash the page
PageTitleNotification.On('Are you still there?');
// Notify bot the user has been inactive
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'inactive',
value: ''
}
});
}, 300000)
}
return next(action);
});
Сложность при использовании канала Slack заключается в том, что вы не можете внедрить что-то подобное на стороне клиента Slack. , так что вам нужно будет сделать это внешне. Лучшее руководство, которое я могу вам дать, - это начать с образца предварительного уведомления . Вам нужно будет получить ссылку на разговор из turnContext через что-то вроде turnContext.getConversationReference()
и сохранить ее. Затем вы можете отправить его в функцию и запустить таймер. Если функция не получает другое сообщение по этой ссылке в течение указанного вами периода времени, вы можете отправить упреждающее сообщение.
Я думаю, вы захотите сделать это как локальную функцию в вашем боте, а не как Azure Функция, потому что вы хотите сбросить таймер каждый раз, когда пользователь отправляет новое сообщение. Я не уверен, как вы будете отслеживать это, используя внешнюю функцию Azure. Надеюсь, этого будет достаточно, чтобы дать вам некоторые идеи по реализации этой функциональности в канале Slack.