Не удается отправить сообщение через пользовательский магазин / отправку в botframework-webchat для IE11 / es5 - PullRequest
0 голосов
/ 05 мая 2020

Моему клиенту требуется поддержка IE11 для нашего чат-бота. Мне пришлось изменить код веб-чата, чтобы не использовать функции es6, такие как функции стрелок, поскольку они не поддерживаются в IE11 / es5. По большей части мне это удавалось, но единственное, с чем я не мог работать, - это отправка отправляемого сообщения. Новый код работает в Chrome, но я получаю сообщение об ошибке Ожидаемый идентификатор в IE11. Вот соответствующий код:

const store = window.WebChat.createStore({}, function({dispatch}) { return function(next) { return function(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(function() {
            // 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: ''
                }
            });

        }, 3000)
    }
    return next(action);
}}});

Раньше первая строка выглядела как

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

Проблема возникает в function({dispatch}). IE консоль сообщает, что ожидается идентификатор, а весь веб-чат не загружается. В Chrome отлично работает. Если я изменю function({dispatch}) на function(dispatch), бот будет отображать, но оператор отправки, отправляющий неактивное сообщение боту (см. Ниже), больше не будет работать в IE ИЛИ Chrome.

// Notify bot the user has been inactive
dispatch({
    type: 'WEB_CHAT/SEND_EVENT',
    payload: {
        name: 'inactive',
        value: ''
    }
});

Почему IE не распознает {dispatch} как идентификатор, и что я могу сделать, чтобы это заработало?

Ответы [ 2 ]

3 голосов
/ 05 мая 2020

IE11 не поддерживает этот синтаксис. ES6 позволяет устанавливать свойства объекта по имени переменной, поэтому эквивалент ES5:

window.WebChat.createStore({}, { dispatch: dispatch }) {
  // ...
}

Edit:

После некоторой отладки окончательное решение заключалось в передаче только объекта dispatch к функции createStore напрямую и обращаясь к ее методу dispatch:

dispatch.dispatch({
    type: 'WEB_CHAT/SEND_EVENT',
    payload: {
        name: 'inactive',
        value: ''
    }
});

Вы можете переименовать аргумент, чтобы уменьшить избыточность, но это не нужно.

1 голос
/ 07 мая 2020

Проблема с вашим опубликованным кодом - вы никогда не return next(action). Следовательно, поток никогда не продвигается вперед, когда он проходит через store. Добавьте эту одну строку, и веб-чат будет работать, как и ожидалось, отправляя каждые 3 секунды. При необходимости вы можете сослаться на код в 05.custom-components / b.send-typing-indicator Web Chat.

Обратите внимание:

  • Я закомментировал PageTitleNotification, поскольку он не определен.
  • Мне пришлось определить interval, которое вы должны определить в другом месте вашего кода, но не указано.
  • Убедитесь, что вы используете webchat-es5.js CDN, поддерживаемый полифилами для работы на IE.

Надеюсь на помощь!

var interval;
const store = window.WebChat.createStore({}, function(dispatch) {
  return function(next) {
    return function(action) {
      console.log(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') {
          // Message sent by the bot
          clearInterval(interval);
          interval = setTimeout(function() {
              // Change title to flash the page
              // PageTitleNotification.On('Are you still there?');

              // Notify bot the user has been inactive
              dispatch.dispatch({
                  type: 'WEB_CHAT/SEND_EVENT',
                  payload: {
                      name: 'inactive',
                      value: ''
                  }
              });

          }, 3000)
      }
      return next( action )
    }
  }
} );

Консоль разработчика:

enter image description here

Ведение ботов:

enter image description here

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