Навыки и VA
Машинопись
Когда мы отправляем сообщения из разных часовых поясов, localTimezone каждый раз перезаписывается часовым поясом локального сервера, и мы теряем часовой пояс пользователя.
Попробуйте отправить сообщение от клиента в часовом поясе и получить сообщение из другого часового пояса клиента.
По крайней мере, чтобы иметь в контексте часовой пояс пользователя
Это происходит в BotFrameworkAdapter
, во время метода processActivity
и функции parseRequest
.
if (typeof activity.localTimestamp === 'string') { activity.localTimestamp = new Date(activity.localTimestamp); }
Привет @ tommyJimmy87! Благодарим за сообщение о проблеме!
Мы воспроизвели проблему и хотели бы подтвердить вместе с вами действия по воспроизведению, которые мы выполнили для ее решения. Кроме того, мы продолжим воспроизводить проблему с помощью бота C #, чтобы сравнить реализации и найти следующие шаги для решения проблемы.
Использование примера виртуального помощника TypeScript
npm install
npm run build
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>"
Откройте эмулятор Bot Framework и настройте его для подключения виртуального помощника, работающего локально.
Установите точку останова в строке 1004 Botbuilder.
Измените System Time zone
на другой (например, UTC + 03: 00 Минск)
Отладка виртуального помощника
Выполнение остановится в точке останова. activity.localTimestamp
покажет дату и время с предыдущим часовым поясом локального сервера.
После назначения новое datetime activity.localTimestamp
будет иметь новый часовой пояс пользователя.
Спасибо: расслабленно:
Привет, @VictorGrycuk ! Прежде всего, спасибо за быстрый ответ!
Я не знаю, хорошо ли я понял эти шаги, но я постараюсь лучше объяснить все шаги, которые мы сделали, чтобы воспроизвести проблему:
Первое предположение заключается в том, что у нас есть виртуальный помощник, развернутый локально.
Второе предположение состоит в том, что мы хотим провести тест с двумя разными ноутбуками, где первый ноутбук является клиентом (для нас это Teams), а второй ноутбук - сервером, на котором мы запускаем виртуальное устройство.
Третье предположение состоит в том, что у нас есть 2 разных часовых пояса, настроенных на 2 ноутбуках, скажем, первый (клиент) будет иметь GMT+0300
а сервер будет иметь GMT+0100
.
Затем, после того, как все настроено, мы пытаемся от клиента отправить запрос виртуальному устройству через Teams.
Как только мы получаем запрос, мы получаем в качестве параметра в теле нужный часовой пояс от пользователя:
Привет, @ tommyJimmy87! Спасибо за подробные инструкции! Мы рассмотрим этот сценарий и вернемся к вам позже 😊.
Привет @ tommyJimmy87!
Мы пришли к выводу, что это связано с ограничением того, как JavaScript обрабатывает объект Date
.
Однако мы хотим сообщить вам, что мы открыли выпуск №1612 об этой проблеме в репозитории BotBuilder-JS. Вы можете отслеживать прогресс решения этой проблемы там, так что проверяйте и там.
Что касается обнаруженной нами проблемы, при преобразовании любой даты в объект Date
JS преобразует ее в UTC, что по существу удаляет исходный часовой пояс. Единственный часовой пояс, который может обрабатывать JavaScript, - это часовой пояс системы, в которой запущен JS.
Дополнительную информацию можно найти в документации Date .
Мы сообщим вам о любых успехах: расслабленно:
Самый полезный комментарий
Привет @ tommyJimmy87! Благодарим за сообщение о проблеме!
Мы воспроизвели проблему и хотели бы подтвердить вместе с вами действия по воспроизведению, которые мы выполнили для ее решения. Кроме того, мы продолжим воспроизводить проблему с помощью бота C #, чтобы сравнить реализации и найти следующие шаги для решения проблемы.
Шаги репродукции
Использование примера виртуального помощника TypeScript
npm install
npm run build
Откройте эмулятор Bot Framework и настройте его для подключения виртуального помощника, работающего локально.
Установите точку останова в строке 1004 Botbuilder.
Измените
System Time zone
на другой (например, UTC + 03: 00 Минск)Отладка виртуального помощника
Выполнение остановится в точке останова.
activity.localTimestamp
покажет дату и время с предыдущим часовым поясом локального сервера.После назначения новое datetime
activity.localTimestamp
будет иметь новый часовой пояс пользователя.Спасибо: расслабленно: