Botframework-solutions: Typescript : horodatage local écrasé dans la demande d'analyse

Créé le 21 janv. 2020  ·  4Commentaires  ·  Source: microsoft/botframework-solutions

Quel projet est concerné ?

Compétences et AV

C'est dans quelle langue ?

Manuscrit

Ce qui se produit?

Lorsque nous envoyons des messages à partir de fuseaux horaires différents, le fuseau horaire local est remplacé à chaque fois par le fuseau horaire du serveur local et nous perdons le fuseau horaire de l'utilisateur.

Quelles sont les étapes pour reproduire ce problème ?

Essayez d'envoyer un message d'un client dans un fuseau horaire et de recevoir le message d'un fuseau horaire différent du client.

Que vous attendiez-vous à ce qu'il se passe ?

Au moins pour avoir dans le contexte le fuseau horaire de l'utilisateur

Pouvez-vous partager des journaux, des sorties d'erreur, etc. ?

Cela se produit dans le BotFrameworkAdapter , pendant la méthode processActivity et la fonction parseRequest .

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

Des captures d'écran ou un contexte supplémentaire ?

Bot Services Bug customer-replied-to customer-reported

Commentaire le plus utile

Salut @tommyJimmy87 ! Merci d'avoir signalé le problème !

Nous avons reproduit le problème et nous aimerions valider avec vous les étapes de repro que nous avons suivies pour y parvenir. De plus, nous continuerons à reproduire le problème à l'aide d'un bot C# afin de comparer les implémentations et de trouver les prochaines étapes pour résoudre le problème.

Étapes de reproduction

Utilisation de l' exemple d'assistant virtuel TypeScript

  1. Allez dans le dossier de l'assistant virtuel
  2. Installez les dépendances avec npm install
  3. Compilez la solution avec npm run build
  4. Déployez l'assistant virtuel à l'aide de la commande suivante :
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. Ouvrez l' émulateur Bot Framework et configurez-le pour connecter l'assistant virtuel exécuté localement
    image

  2. Définir un point d'arrêt dans la ligne 1004 de botFrameworkAdapter.ts à l' intérieur de la bibliothèque Botbuilder
    image

  3. Remplacez le System Time zone par un autre (par exemple UTC+03:00 Minsk)
    image

  4. Déboguer l'assistant virtuel

  5. Démarrez le chat avec l'assistant virtuel à l'aide de l'émulateur
  6. L'exécution s'arrêtera au point d'arrêt. Le activity.localTimestamp affichera la date et l'heure avec le fuseau horaire du serveur local précédent
    image

  7. Après l'affectation, la nouvelle date/heure de activity.localTimestamp aura le nouveau fuseau horaire de l'utilisateur
    image

Merci :détendu:

Tous les 4 commentaires

Salut @tommyJimmy87 ! Merci d'avoir signalé le problème !

Nous avons reproduit le problème et nous aimerions valider avec vous les étapes de repro que nous avons suivies pour y parvenir. De plus, nous continuerons à reproduire le problème à l'aide d'un bot C# afin de comparer les implémentations et de trouver les prochaines étapes pour résoudre le problème.

Étapes de reproduction

Utilisation de l' exemple d'assistant virtuel TypeScript

  1. Allez dans le dossier de l'assistant virtuel
  2. Installez les dépendances avec npm install
  3. Compilez la solution avec npm run build
  4. Déployez l'assistant virtuel à l'aide de la commande suivante :
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. Ouvrez l' émulateur Bot Framework et configurez-le pour connecter l'assistant virtuel exécuté localement
    image

  2. Définir un point d'arrêt dans la ligne 1004 de botFrameworkAdapter.ts à l' intérieur de la bibliothèque Botbuilder
    image

  3. Remplacez le System Time zone par un autre (par exemple UTC+03:00 Minsk)
    image

  4. Déboguer l'assistant virtuel

  5. Démarrez le chat avec l'assistant virtuel à l'aide de l'émulateur
  6. L'exécution s'arrêtera au point d'arrêt. Le activity.localTimestamp affichera la date et l'heure avec le fuseau horaire du serveur local précédent
    image

  7. Après l'affectation, la nouvelle date/heure de activity.localTimestamp aura le nouveau fuseau horaire de l'utilisateur
    image

Merci :détendu:

Salut @VictorGrycuk ! Merci pour la réponse rapide tout d'abord!

Je ne sais pas si j'ai très bien compris les étapes, mais je vais essayer de mieux m'expliquer avec toutes les étapes que nous avons suivies pour reproduire le problème :

  1. La première hypothèse est que l'assistant virtuel est déployé localement.

  2. La deuxième hypothèse est que nous voulons effectuer le test avec 2 ordinateurs portables différents, où le premier ordinateur portable est le client (pour nous, Teams) et le deuxième ordinateur portable est le serveur sur lequel nous exécutons le VA.

  3. La troisième hypothèse est que nous avons 2 fuseaux horaires différents configurés sur les 2 ordinateurs portables, disons que le premier (client) aura GMT+0300 et le serveur aura GMT+0100 .

  4. Ensuite, une fois que tout est configuré, nous essayons depuis le client d'envoyer une demande au VA via Teams.

  5. Dès que nous recevons la requête nous avons en paramètre dans le corps le bon fuseau horaire de l'utilisateur :

Screen Shot 2020-01-23 at 14 30 02

Screen Shot 2020-01-23 at 14 29 49

  1. Dans la requête d'analyse, nous obtenons le bon fuseau horaire client :

Screen Shot 2020-01-23 at 14 34 12

  1. Mais après l'affectation de la variable (essentiellement la nouvelle Date(activity.localTimestamp) ), nous avons le serveur Timezone :

Screen Shot 2020-01-23 at 14 36 52

Salut @tommyJimmy87 ! Merci pour les étapes détaillées ! Nous allons revoir ce scénario et nous reviendrons vers vous plus tard 😊.

Salut @tommyJimmy87 !

Nous sommes arrivés à la conclusion que cela est dû à une limitation sur la façon dont JavaScript gère l'objet Date .

Cependant, nous souhaitons vous informer que nous avons ouvert le problème #1612 à propos de ce problème sur le référentiel BotBuilder-JS. Vous pouvez suivre la progression de ce problème là-bas, alors vérifiez-y également.

En ce qui concerne le problème que nous avons trouvé, lors de la conversion d'une date en objet Date , JS le convertit en UTC, ce qui supprime essentiellement le fuseau horaire d'origine. Le seul fuseau horaire que JavaScript peut gérer est le fuseau horaire du système exécutant JS.
Vous pouvez consulter la documentation Date pour plus d'informations.

Nous vous tiendrons au courant de tout progrès :relaxé:

Cette page vous a été utile?
0 / 5 - 0 notes