Habilidades y VA
Mecanografiado
Cuando enviamos mensajes desde diferentes zonas horarias, la zona horaria local se sobrescribe cada vez con la zona horaria del servidor local y perdemos la zona horaria del usuario.
Intente enviar un mensaje de un cliente en una zona horaria y reciba el mensaje de una zona horaria diferente del cliente.
Al menos para tener en el contexto la zona horaria del usuario
Esto sucede en el BotFrameworkAdapter
, durante el método processActivity
y la función parseRequest
.
if (typeof activity.localTimestamp === 'string') { activity.localTimestamp = new Date(activity.localTimestamp); }
¡Hola @ tommyJimmy87! Gracias por informar del problema.
Reproducimos el problema y nos gustaría validar con usted los pasos de reproducción que seguimos para lograrlo. Además, continuaremos reproduciendo el problema utilizando un bot de C # para comparar las implementaciones y encontrar los siguientes pasos para resolver el problema.
Uso de la muestra del asistente virtual de 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 Bot Framework Emulator y configúrelo para conectar el Asistente virtual que se ejecuta localmente
Establezca un punto de interrupción en la línea 1004 de botFrameworkAdapter.ts dentro de la biblioteca de Botbuilder
Cambie System Time zone
por uno diferente (por ejemplo, UTC + 03: 00 Minsk)
Depurar el asistente virtual
La ejecución se detendrá en el punto de interrupción. El activity.localTimestamp
mostrará la fecha y hora con la zona horaria del servidor local anterior
Después de la asignación, la nueva fecha y hora de activity.localTimestamp
tendrá la zona horaria del nuevo usuario
Gracias: relajado:
Hola @VictorGrycuk ! ¡Gracias por la respuesta rápida en primer lugar!
No sé si entendí muy bien los pasos, pero intentaré explicarme mejor con todos los pasos que hicimos para reproducir el problema:
La primera suposición es que tenemos el Asistente virtual implementado localmente.
El segundo supuesto es que queremos realizar la prueba con 2 computadoras portátiles diferentes, donde la primera computadora portátil es el cliente (para nosotros es Teams) y la segunda computadora portátil es el servidor donde estamos ejecutando el VA.
La tercera suposición es que tenemos 2 zonas horarias diferentes configuradas en las 2 computadoras portátiles, digamos que la primera (cliente) tendrá GMT+0300
y el servidor tendrá GMT+0100
.
Luego, una vez que tenemos todo configurado, intentamos que el cliente envíe una solicitud al VA a través de Teams.
Tan pronto como recibamos la solicitud, tenemos como parámetro en el cuerpo la zona horaria correcta del usuario:
¡Hola @ tommyJimmy87! ¡Gracias por los pasos detallados! Revisaremos este escenario y te responderemos más tarde 😊.
¡Hola @ tommyJimmy87!
Llegamos a la conclusión de que esto se debe a una limitación en la forma en que JavaScript maneja el objeto Date
.
Sin embargo, queremos informarle que abrimos el número 1612 sobre este problema en el repositorio de BotBuilder-JS. Puede realizar un seguimiento del progreso de este problema allí, así que verifique allí también.
En cuanto al problema que encontramos, al convertir cualquier fecha en Date
objeto, JS lo convierte a UTC, lo que esencialmente elimina la zona horaria original. La única zona horaria que JavaScript puede manejar es la zona horaria del sistema que ejecuta JS.
Puede consultar la documentación de Date para obtener información.
Te haremos saber cualquier avance: relajado:
Comentario más útil
¡Hola @ tommyJimmy87! Gracias por informar del problema.
Reproducimos el problema y nos gustaría validar con usted los pasos de reproducción que seguimos para lograrlo. Además, continuaremos reproduciendo el problema utilizando un bot de C # para comparar las implementaciones y encontrar los siguientes pasos para resolver el problema.
Pasos de reproducción
Uso de la muestra del asistente virtual de TypeScript
npm install
npm run build
Abra Bot Framework Emulator y configúrelo para conectar el Asistente virtual que se ejecuta localmente
Establezca un punto de interrupción en la línea 1004 de botFrameworkAdapter.ts dentro de la biblioteca de Botbuilder
Cambie
System Time zone
por uno diferente (por ejemplo, UTC + 03: 00 Minsk)Depurar el asistente virtual
La ejecución se detendrá en el punto de interrupción. El
activity.localTimestamp
mostrará la fecha y hora con la zona horaria del servidor local anteriorDespués de la asignación, la nueva fecha y hora de
activity.localTimestamp
tendrá la zona horaria del nuevo usuarioGracias: relajado: