Botframework-solutions: Mecanografiado: marca de tiempo local sobrescrita en la solicitud de análisis

Creado en 21 ene. 2020  ·  4Comentarios  ·  Fuente: microsoft/botframework-solutions

¿Qué proyecto se ve afectado?

Habilidades y VA

¿En qué idioma es esto?

Mecanografiado

¿Lo que pasa?

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.

¿Cuáles son los pasos para reproducir este problema?

Intente enviar un mensaje de un cliente en una zona horaria y reciba el mensaje de una zona horaria diferente del cliente.

¿Qué esperabas que sucediera?

Al menos para tener en el contexto la zona horaria del usuario

¿Puede compartir algún registro, salida de error, etc.?

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); }

¿Alguna captura de pantalla o contexto adicional?

Bot Services Bug customer-replied-to customer-reported

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

  1. Vaya a la carpeta del Asistente virtual
  2. Instale las dependencias con npm install
  3. Compile la solución con npm run build
  4. Implemente el Asistente virtual usando el siguiente comando:
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. Abra Bot Framework Emulator y configúrelo para conectar el Asistente virtual que se ejecuta localmente
    image

  2. Establezca un punto de interrupción en la línea 1004 de botFrameworkAdapter.ts dentro de la biblioteca de Botbuilder
    image

  3. Cambie System Time zone por uno diferente (por ejemplo, UTC + 03: 00 Minsk)
    image

  4. Depurar el asistente virtual

  5. Inicie el chat con el Asistente virtual usando el emulador
  6. 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
    image

  7. Después de la asignación, la nueva fecha y hora de activity.localTimestamp tendrá la zona horaria del nuevo usuario
    image

Gracias: relajado:

Todos 4 comentarios

¡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

  1. Vaya a la carpeta del Asistente virtual
  2. Instale las dependencias con npm install
  3. Compile la solución con npm run build
  4. Implemente el Asistente virtual usando el siguiente comando:
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. Abra Bot Framework Emulator y configúrelo para conectar el Asistente virtual que se ejecuta localmente
    image

  2. Establezca un punto de interrupción en la línea 1004 de botFrameworkAdapter.ts dentro de la biblioteca de Botbuilder
    image

  3. Cambie System Time zone por uno diferente (por ejemplo, UTC + 03: 00 Minsk)
    image

  4. Depurar el asistente virtual

  5. Inicie el chat con el Asistente virtual usando el emulador
  6. 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
    image

  7. Después de la asignación, la nueva fecha y hora de activity.localTimestamp tendrá la zona horaria del nuevo usuario
    image

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:

  1. La primera suposición es que tenemos el Asistente virtual implementado localmente.

  2. 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.

  3. 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 .

  4. Luego, una vez que tenemos todo configurado, intentamos que el cliente envíe una solicitud al VA a través de Teams.

  5. Tan pronto como recibamos la solicitud, tenemos como parámetro en el cuerpo la zona horaria correcta del usuario:

Screen Shot 2020-01-23 at 14 30 02

Screen Shot 2020-01-23 at 14 29 49

  1. Dentro de la solicitud de análisis, obtenemos la zona horaria del cliente correcta:

Screen Shot 2020-01-23 at 14 34 12

  1. Pero luego de la asignación de la variable (básicamente la nueva Fecha (activity.localTimestamp)), tenemos el servidor Timezone:

Screen Shot 2020-01-23 at 14 36 52

¡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:

¿Fue útil esta página
0 / 5 - 0 calificaciones