Habilidades e AV
Dactilografado
Quando enviamos mensagens de fusos horários diferentes, o fuso horário local é sempre substituído pelo fuso horário do servidor local e perdemos o fuso horário do usuário.
Tente enviar uma mensagem de um cliente em um fuso horário e receba a mensagem de um fuso horário diferente do cliente.
Pelo menos ter no contexto o fuso horário do usuário
Isso acontece no BotFrameworkAdapter
, durante o método processActivity
e a função parseRequest
.
if (typeof activity.localTimestamp === 'string') { activity.localTimestamp = new Date(activity.localTimestamp); }
Olá @ tommyJimmy87! Obrigado por relatar o problema!
Reproduzimos o problema e gostaríamos de validar com você as etapas de reprodução que seguimos para realizar isso. Além disso, continuaremos reproduzindo o problema usando um bot C # para comparar as implementações e encontrar as próximas etapas para resolver o problema.
Usando o exemplo de assistente virtual 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>"
Abra o Bot Framework Emulator e configure-o para conectar o Virtual Assistant rodando localmente
Defina um ponto de interrupção na linha 1004 de botFrameworkAdapter.ts dentro da biblioteca Botbuilder
Altere o System Time zone
para um diferente (por exemplo, UTC + 03: 00 Minsk)
Depure o Assistente Virtual
A execução irá parar no breakpoint. O activity.localTimestamp
mostrará a data e hora com o fuso horário do servidor local anterior
Após a atribuição, a nova data e hora de activity.localTimestamp
terá o novo fuso horário do usuário
Obrigado: relaxado:
Olá @VictorGrycuk ! Obrigado pela resposta rápida em primeiro lugar!
Não sei se entendi muito bem as etapas, mas tentarei me explicar melhor com todas as etapas que fizemos para reproduzir o problema:
A primeira suposição é que temos o Assistente Virtual implantado localmente.
A segunda suposição é que queremos realizar o teste com 2 laptops diferentes, onde o primeiro laptop é o cliente (para nós é o Teams) e o segundo laptop é o servidor onde estamos executando o VA.
A terceira suposição é que temos 2 fusos horários diferentes configurados nos 2 laptops, digamos que o primeiro (cliente) terá GMT+0300
e o servidor terá GMT+0100
.
Depois de ter tudo configurado, tentamos desde o cliente enviar um pedido ao VA através do Teams.
Assim que recebemos a solicitação, temos como parâmetro no corpo o fuso horário correto do usuário:
Ei @ tommyJimmy87! Obrigado pelas etapas detalhadas! Estaremos revendo este cenário e retornaremos a você mais tarde 😊.
Olá @ tommyJimmy87!
Chegamos à conclusão de que isso se deve a uma limitação de como o JavaScript lida com o objeto Date
.
No entanto, gostaríamos de informar que abrimos a edição # 1612 sobre esse problema no repositório BotBuilder-JS. Você pode acompanhar o andamento desse problema lá, portanto, verifique também.
Quanto ao problema que encontramos, ao converter qualquer data em Date
objeto, JS converte para UTC que essencialmente remove o fuso horário original. O único fuso horário que o JavaScript pode manipular é o fuso horário do sistema que executa JS.
Você pode verificar a documentação da
Avisaremos você sobre qualquer progresso: relaxado:
Comentários muito úteis
Olá @ tommyJimmy87! Obrigado por relatar o problema!
Reproduzimos o problema e gostaríamos de validar com você as etapas de reprodução que seguimos para realizar isso. Além disso, continuaremos reproduzindo o problema usando um bot C # para comparar as implementações e encontrar as próximas etapas para resolver o problema.
Etapas Repro
Usando o exemplo de assistente virtual TypeScript
npm install
npm run build
Abra o Bot Framework Emulator e configure-o para conectar o Virtual Assistant rodando localmente
Defina um ponto de interrupção na linha 1004 de botFrameworkAdapter.ts dentro da biblioteca Botbuilder
Altere o
System Time zone
para um diferente (por exemplo, UTC + 03: 00 Minsk)Depure o Assistente Virtual
A execução irá parar no breakpoint. O
activity.localTimestamp
mostrará a data e hora com o fuso horário do servidor local anteriorApós a atribuição, a nova data e hora de
activity.localTimestamp
terá o novo fuso horário do usuárioObrigado: relaxado: