Выезд / Приветственное мероприятие, не стреляющее - PullRequest
1 голос
/ 19 февраля 2020

Мы пытаемся получить некоторые события / сообщения для публикации, когда пользователь выходит из окна чата (или сайта) (или приветственного сообщения), но пока события не запускаются.

I можно увидеть в инструментах инспектора:

Снимок экрана 2020-02-18 в 15.15 39

Созданы различные действия / разговоры, чатбот работает, но не приветствуется / выходные события запускаются.

Код, который мы используем, практически идентичен коду документации здесь: https://github.com/microsoft/BotFramework-WebChat/blob/master/docs/WELCOME_MESSAGE.md

и здесь: Как для обработки оставления разговора пользователя

У меня есть функция, которая срабатывает при закрытии окна, следующим образом:

    const store = window.WebChat.createStore( {}, ( { dispatch } ) => next => async action => {
    return next( action );});      

        window.addEventListener( 'sendEventActivity', ( { data } ) => {

          store.dispatch({
            type: 'WEB_CHAT/SEND_EVENT',
            payload: {
              name: 'user_event',
              value: {
                name: 'end_conversation',
                value: 'user ended conversation'
              },
              text: 'The user has left the conversation.'
            }
          })

        });

        function exitEvent(){
          const eventSendActivity = new Event( 'sendEventActivity' );
          eventSendActivity.data = 'User left conversation';
          window.dispatchEvent( eventSendActivity );
          console.log('Exit Event Submitted (hopefully)');
        }
        exitEvent();

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

Мы используем https://cdn.botframework.com/botframework-webchat/latest/webchat.js

Есть идеи, в чем проблема? Не уверен, где мы идем не так или почему это не срабатывает - теоретически копирование, как известно, работает код прямо в наш код, похоже, не сработает.

Заранее спасибо, пожалуйста, дайте мне знать, если я не удалось включить какие-либо необходимые детали - новичок в chatbot и не много публиковать на github. Большое спасибо,

РЕДАКТИРОВАТЬ:

Я смог жениться на вышеупомянутом коде и коде отсюда: https://github.com/microsoft/BotFramework-WebChat/issues/2120#issuecomment -516056614 , чтобы достичь того, что я хотел. Я опубликую ниже на случай, если это поможет кому-то еще ...

const store = window.WebChat.createStore({}, ({ dispatch }) => next => action => {
            if (action.type === 'DIRECT_LINE/CONNECT_FULFILLED') {
               dispatch({
                  type: 'WEB_CHAT/SEND_EVENT',
                  payload: {
                     name: 'webchat/join'
                  }
               });
            }
            return next(action);
         });

          window.addEventListener( 'sendEventActivity', ( { data } ) => {

          store.dispatch( {
              type: 'WEB_CHAT/SEND_EVENT',
              payload: {
                 name: 'webchat/exit'
              }
            } );
          } );

          document.getElementById("action_menu_btn").addEventListener( 'click', function() {
            const eventSendActivity = new Event( 'sendEventActivity' );
            eventSendActivity.data = 'User left conversation';
            window.dispatchEvent( eventSendActivity );
            console.log('End Converstaion Event Fired');
          });

Ура!

1 Ответ

2 голосов
/ 19 февраля 2020

Я не упомянул об этом в другом посте (я его обновлю), но причина, по которой код работает, заключается в функции window.onbeforeunload(). Без этого окно закрывается, прежде чем любой код сможет завершить выполнение. Результат, поскольку событие не создается, перехватывается слушателем и не отправляется через хранилище веб-чата боту.

Здесь, с использованием вышеизложенного, обновление страницы вызывает действие «Пользователь оставил разговор».

enter image description here


Кроме того, стоит отметить, что любая функция, которую вы создадите и передадите, как у вас с помощью exitEvent(), будет запущена в ближайшее время по мере загрузки страницы. Возьмите следующий код, который получает местоположение пользователя через браузер (помещается непосредственно перед закрывающим тегом </script>). Как видите, он загружается еще до веб-чата. Если вы хотите, чтобы функция выполнялась в соответствии с какой-либо активностью, переданной ботом, используйте store action (т.е. DIRECT_LINE / INCOMING_ACTIVITY или другое) или через доступную промежуточное ПО .

let geoLoc = async () => {
  await navigator.geolocation.getCurrentPosition(position => {
    console.log('Latitude: ', position.coords.latitude);
    console.log('Longitude: ', position.coords.longitude);
  });
}

geoLoc();

enter image description here


Что касается приветственного сообщения, у вас есть два варианта. Либо отправьте в качестве активности вашего бота (см. Этот образец ), либо инициируйте событие на своей странице после получения какой-либо начальной активности (см. Этот образец ).

Наконец, я бы порекомендовал, чтобы код работал как есть, прежде чем возиться с ним. Это обычно сбивает меня с толку, поэтому я подумал, что передам это.

Надежда на помощь!

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