Botframework-solutions: Машинопись: местная метка времени перезаписывается в запросе синтаксического анализа

Созданный на 21 янв. 2020  ·  4Комментарии  ·  Источник: microsoft/botframework-solutions

Какой проект затронут?

Навыки и VA

На каком это языке?

Машинопись

Что просходит?

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

Что нужно сделать, чтобы воспроизвести эту проблему?

Попробуйте отправить сообщение от клиента в часовом поясе и получить сообщение из другого часового пояса клиента.

Чего вы ожидали?

По крайней мере, чтобы иметь в контексте часовой пояс пользователя

Можете ли вы поделиться журналами, выводом ошибок и т. Д.?

Это происходит в BotFrameworkAdapter , во время метода processActivity и функции parseRequest .

if (typeof activity.localTimestamp === 'string') { activity.localTimestamp = new Date(activity.localTimestamp); }

Есть скриншоты или дополнительный контекст?

Bot Services Bug customer-replied-to customer-reported

Самый полезный комментарий

Привет @ tommyJimmy87! Благодарим за сообщение о проблеме!

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

Шаги репродукции

Использование примера виртуального помощника TypeScript

  1. Перейдите в папку виртуального помощника
  2. Установите зависимости с помощью npm install
  3. Скомпилируйте решение с помощью npm run build
  4. Разверните виртуального помощника с помощью следующей команды:
pwsh.exe -File deployment\scripts\deploy.ps1 -name "<BOT_NAME>" -location "<LOCATION>" -appId "<APP_ID>" -appPassword "<APP_PASSWORD>" -luisAuthoringKey "<LUIS_AUTHORING_KEY>" -luisAuthoringRegion "<LUIS_AUTHORING_REGION>"
  1. Откройте эмулятор Bot Framework и настройте его для подключения виртуального помощника, работающего локально.
    image

  2. Установите точку останова в строке 1004 Botbuilder.
    image

  3. Измените System Time zone на другой (например, UTC + 03: 00 Минск)
    image

  4. Отладка виртуального помощника

  5. Начните чат с виртуальным помощником с помощью эмулятора
  6. Выполнение остановится в точке останова. activity.localTimestamp покажет дату и время с предыдущим часовым поясом локального сервера.
    image

  7. После назначения новое datetime activity.localTimestamp будет иметь новый часовой пояс пользователя.
    image

Спасибо: расслабленно:

Все 4 Комментарий

Привет @ tommyJimmy87! Благодарим за сообщение о проблеме!

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

Шаги репродукции

Использование примера виртуального помощника TypeScript

  1. Перейдите в папку виртуального помощника
  2. Установите зависимости с помощью npm install
  3. Скомпилируйте решение с помощью npm run build
  4. Разверните виртуального помощника с помощью следующей команды:
pwsh.exe -File deployment\scripts\deploy.ps1 -name "<BOT_NAME>" -location "<LOCATION>" -appId "<APP_ID>" -appPassword "<APP_PASSWORD>" -luisAuthoringKey "<LUIS_AUTHORING_KEY>" -luisAuthoringRegion "<LUIS_AUTHORING_REGION>"
  1. Откройте эмулятор Bot Framework и настройте его для подключения виртуального помощника, работающего локально.
    image

  2. Установите точку останова в строке 1004 Botbuilder.
    image

  3. Измените System Time zone на другой (например, UTC + 03: 00 Минск)
    image

  4. Отладка виртуального помощника

  5. Начните чат с виртуальным помощником с помощью эмулятора
  6. Выполнение остановится в точке останова. activity.localTimestamp покажет дату и время с предыдущим часовым поясом локального сервера.
    image

  7. После назначения новое datetime activity.localTimestamp будет иметь новый часовой пояс пользователя.
    image

Спасибо: расслабленно:

Привет, @VictorGrycuk ! Прежде всего, спасибо за быстрый ответ!

Я не знаю, хорошо ли я понял эти шаги, но я постараюсь лучше объяснить все шаги, которые мы сделали, чтобы воспроизвести проблему:

  1. Первое предположение заключается в том, что у нас есть виртуальный помощник, развернутый локально.

  2. Второе предположение состоит в том, что мы хотим провести тест с двумя разными ноутбуками, где первый ноутбук является клиентом (для нас это Teams), а второй ноутбук - сервером, на котором мы запускаем виртуальное устройство.

  3. Третье предположение состоит в том, что у нас есть 2 разных часовых пояса, настроенных на 2 ноутбуках, скажем, первый (клиент) будет иметь GMT+0300 а сервер будет иметь GMT+0100 .

  4. Затем, после того, как все настроено, мы пытаемся от клиента отправить запрос виртуальному устройству через Teams.

  5. Как только мы получаем запрос, мы получаем в качестве параметра в теле нужный часовой пояс от пользователя:

Screen Shot 2020-01-23 at 14 30 02

Screen Shot 2020-01-23 at 14 29 49

  1. Внутри запроса на синтаксический анализ мы получаем правильный часовой пояс клиента:

Screen Shot 2020-01-23 at 14 34 12

  1. Но затем после присвоения переменной (в основном новой даты (activity.localTimestamp)) у нас есть часовой пояс сервера:

Screen Shot 2020-01-23 at 14 36 52

Привет, @ tommyJimmy87! Спасибо за подробные инструкции! Мы рассмотрим этот сценарий и вернемся к вам позже 😊.

Привет @ tommyJimmy87!

Мы пришли к выводу, что это связано с ограничением того, как JavaScript обрабатывает объект Date .

Однако мы хотим сообщить вам, что мы открыли выпуск №1612 об этой проблеме в репозитории BotBuilder-JS. Вы можете отслеживать прогресс решения этой проблемы там, так что проверяйте и там.

Что касается обнаруженной нами проблемы, при преобразовании любой даты в объект Date JS преобразует ее в UTC, что по существу удаляет исходный часовой пояс. Единственный часовой пояс, который может обрабатывать JavaScript, - это часовой пояс системы, в которой запущен JS.
Дополнительную информацию можно найти в документации Date .

Мы сообщим вам о любых успехах: расслабленно:

Была ли эта страница полезной?
0 / 5 - 0 рейтинги