мы используем прямой канал для подключения к BOT.Код бота использует c #, а прямая часть находится в приложении MVC.Недавно у нас был сценарий использования, чтобы выяснить бездействие пользователя, то есть если в течение 5 минут не было активности пользователя, мы хотим показать сообщение от бота, говорящее: «Вы все еще там?»и да и нет карт с ним.После некоторых исследований я смог получить код для прямой установки таймера
ниже приведен код:
let interval;
const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
if (action.type === 'WEB_CHAT/SEND_MESSAGE') {
// Message sent by the user
clearTimeout(interval);
} else if (action.type === 'DIRECT_LINE/INCOMING_ACTIVITY' && action.payload.activity.name !== "inactive") {
// Message sent by the bot
clearInterval(interval);
interval = setTimeout(() => {
// Notify bot the user has been inactive
dispatch({
type: 'WEB_CHAT/SEND_EVENT',
payload: {
name: 'inactive',
value: ''
}
});
}, 50000)
}
})
А затем внутри OnEventActivityAsync
на стороне c # мы имеем
if (turnContext.Activity.Name == "inactive") {
var receivedEvent = turnContext.Activity.AsEventActivity();
//if (receivedEvent.reactionsAdded != null)
//{
//await turnContext.SendActivityAsync("are you still there?");
var userCheck = ((Activity) turnContext.Activity).CreateReply("are you still there?");
userCheck.SuggestedActions = new SuggestedActions() {
Actions = new List < CardAction > () {
new CardAction() {
Title = "Yes", Text = "Yes", Type = ActionTypes.PostBack, Value = $ "yes-continue"
},
new CardAction() {
Title = "No", Text = "No", Type = ActionTypes.PostBack, Value = $ "no-exit"
}
}
};
await turnContext.SendActivityAsync(
userCheck,
cancellationToken);
}
Проблема заключается в том, что он постоянно продолжает публиковать сообщения в чате «Вы все еще там» через каждые 5 минут, как мы можем контролировать это, чтобы показывать только один раз, если пользователь этого не делаетпринять меры, и если пользователь скажет «Нет», мы не показываем таймер снова для этого чата?И если он говорит «да», мы сбрасываем таймер.
Примечание: прямо сейчас мы показываем сообщение по умолчанию на боте, как приветственное сообщение, поэтому, когда бот загружается на сайт, даже если значок бота нещелкнув это приветственное сообщение, оно уже есть в чате, и как только оно появилось, таймер начинает публиковать сообщения через каждые 5 минут, что является проблемой, если пользователь загружает страницу и не получает доступ к чату бота, но делает это после 20 минут.минут, он бы уже 4 раза видел, что у тебя все еще есть сообщения. Любая помощь оценена.