المهارات و VA
المطبوع
عندما نرسل رسائل من مناطق زمنية مختلفة ، يتم استبدال المنطقة الزمنية المحلية في كل مرة بالمنطقة الزمنية للخادم المحلي ونفقد المنطقة الزمنية للمستخدم.
حاول إرسال رسالة من عميل في منطقة زمنية واستلام الرسالة من منطقة زمنية مختلفة للعميل.
على الأقل أن يكون لديك في السياق المنطقة الزمنية للمستخدم
يحدث هذا في BotFrameworkAdapter
، خلال processActivity
طريقة و parseRequest
وظيفة.
if (typeof activity.localTimestamp === 'string') { activity.localTimestamp = new Date(activity.localTimestamp); }
مرحبا @ tommyJimmy87! شكرا للإبلاغ عن هذه المسألة!
أعدنا إنتاج المشكلة ونود أن نتحقق معك من خطوات repro التي اتبعناها لإنجاز ذلك. أيضًا ، سنستمر في إعادة إنتاج المشكلة باستخدام C # bot لمقارنة عمليات التنفيذ والعثور على الخطوات التالية لحل المشكلة.
استخدام نموذج 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 Emulator وقم بتكوينه لتوصيل المساعد الافتراضي الذي يعمل محليًا
عيّن نقطة توقف في السطر 1004 من Botbuilder
قم بتغيير System Time zone
إلى رمز مختلف (مثل UTC + 03:00 مينسك)
تصحيح أخطاء المساعد الظاهري
سيتوقف التنفيذ عند نقطة التوقف. سيظهر activity.localTimestamp
التاريخ والوقت مع المنطقة الزمنية للخادم المحلي السابقة
بعد المهمة ، سيكون للتاريخ والوقت الجديد activity.localTimestamp
المنطقة الزمنية للمستخدم الجديد
شكرا: استرخاء:
مرحبًا VictorGrycuk ! شكرا على الإجابة السريعة أولا وقبل كل شيء!
لا أعرف ما إذا كنت أفهم الخطوات جيدًا ، لكنني سأحاول شرح نفسي بشكل أفضل بكل الخطوات التي فعلناها لإعادة إظهار المشكلة:
الافتراض الأول هو أنه تم نشر المساعد الظاهري محليًا.
الافتراض الثاني هو أننا نريد إجراء الاختبار باستخدام جهازي كمبيوتر محمول مختلفين ، حيث يكون الكمبيوتر المحمول الأول هو العميل (بالنسبة لنا هو Teams) والكمبيوتر المحمول الثاني هو الخادم حيث نقوم بتشغيل VA.
الافتراض الثالث هو أن لدينا منطقتان زمنيتان مختلفتان تم إعدادهما على جهازي الكمبيوتر المحمول ، دعنا نقول أن الأول (العميل) سيحتوي على GMT+0300
وسيحصل الخادم على GMT+0100
.
ثم بعد الانتهاء من إعداد كل شيء ، نحاول من العميل إرسال طلب إلى VA من خلال Teams.
بمجرد أن نحصل على الطلب ، لدينا كمعامل في الجسم المنطقة الزمنية المناسبة من المستخدم:
يا @ tommyJimmy87! شكرا على الخطوات التفصيلية! سنراجع هذا السيناريو وسنعود إليك لاحقًا.
مرحبا @ tommyJimmy87!
لقد توصلنا إلى استنتاج مفاده أن هذا يرجع إلى قيود على كيفية تعامل JavaScript مع الكائن Date
.
ومع ذلك ، نود إعلامك بأننا فتحنا المشكلة رقم 1612 حول هذه المشكلة في مستودع BotBuilder-JS. يمكنك تتبع تقدم هذه المشكلة هناك ، لذا تحقق من ذلك أيضًا.
بالنسبة إلى المشكلة التي وجدناها ، عند تحويل أي تاريخ إلى كائن Date
، يقوم JS بتحويله إلى UTC الذي يزيل المنطقة الزمنية الأصلية بشكل أساسي. المنطقة الزمنية الوحيدة التي يمكن لـ JavaScript التعامل معها هي المنطقة الزمنية للنظام الذي يقوم بتشغيل JS.
يمكنك التحقق من وثائق التاريخ للحصول على معلومات.
سنخبرك بأي تقدم: مريح:
التعليق الأكثر فائدة
مرحبا @ tommyJimmy87! شكرا للإبلاغ عن هذه المسألة!
أعدنا إنتاج المشكلة ونود أن نتحقق معك من خطوات repro التي اتبعناها لإنجاز ذلك. أيضًا ، سنستمر في إعادة إنتاج المشكلة باستخدام C # bot لمقارنة عمليات التنفيذ والعثور على الخطوات التالية لحل المشكلة.
خطوات Repro
استخدام نموذج TypeScript
npm install
npm run build
افتح Bot Framework Emulator وقم بتكوينه لتوصيل المساعد الافتراضي الذي يعمل محليًا
عيّن نقطة توقف في السطر 1004 من Botbuilder
قم بتغيير
System Time zone
إلى رمز مختلف (مثل UTC + 03:00 مينسك)تصحيح أخطاء المساعد الظاهري
سيتوقف التنفيذ عند نقطة التوقف. سيظهر
activity.localTimestamp
التاريخ والوقت مع المنطقة الزمنية للخادم المحلي السابقةبعد المهمة ، سيكون للتاريخ والوقت الجديد
activity.localTimestamp
المنطقة الزمنية للمستخدم الجديدشكرا: استرخاء: