Microsoft Bot Framework обрабатывает бездействие пользователя - PullRequest
1 голос
/ 22 сентября 2019

мы используем прямой канал для подключения к 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 раза видел, что у тебя все еще есть сообщения. Любая помощь оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...