Botframework-solutions: Typescript:解析リクエストで上書きされたローカルタイムスタンプ

作成日 2020年01月21日  ·  4コメント  ·  ソース: microsoft/botframework-solutions

どのプロジェクトが影響を受けますか?

スキルとVA

これは何語ですか?

Typescript

何が起こるのですか?

異なるタイムゾーンからメッセージを送信すると、localTimezoneはローカルサーバーのタイムゾーンで毎回上書きされ、ユーザーのタイムゾーンが失われます。

この問題を再現するための手順は何ですか?

タイムゾーン内のクライアントからメッセージを送信し、クライアントの別のタイムゾーンからメッセージを受信して​​みてください。

何が起こると思っていましたか?

少なくとも、ユーザーのタイムゾーンをコンテキストに含める必要があります

ログやエラー出力などを共有できますか?

これは、 BotFrameworkAdapterで、 processActivityメソッドとparseRequest関数の間に発生します。

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

スクリーンショットや追加のコンテキストはありますか?

Bot Services Bug customer-replied-to customer-reported

最も参考になるコメント

こんにちは@ tommyJimmy87! 問題を報告していただきありがとうございます。

問題を再現しました。これを実現するために実行した再現手順を検証します。 また、実装を比較し、問題を解決するための次のステップを見つけるために、C#ボットを使用して問題を再現し続けます。

再現手順

TypeScriptバーチャルアシスタントサンプルの使用

  1. バーチャルアシスタントのフォルダに移動します
  2. npm install依存関係をインストールします
  3. npm run buildてソリューションをコンパイルします
  4. 次のコマンドを使用して、仮想アシスタントを展開します。
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. Bot Framework Emulatorを開き、ローカルで実行されているVirtualAssistantに接続するように構成します
    image

  2. Botbuilderライブラリの内部botFrameworkAdapter.tsのライン1004にブレークポイントを設定
    image

  3. System Time zoneを別のものに変更します(例:UTC + 03:00ミンスク)
    image

  4. バーチャルアシスタントをデバッグする

  5. エミュレーターを使用して仮想アシスタントとのチャットを開始します
  6. 実行はブレークポイントで停止します。 activity.localTimestampは、以前のローカルサーバーのタイムゾーンの日時が表示され
    image

  7. 割り当て後、 activity.localTimestampの新しい日時に新しいユーザーのタイムゾーンが設定されます
    image

ありがとう:リラックス:

全てのコメント4件

こんにちは@ tommyJimmy87! 問題を報告していただきありがとうございます。

問題を再現しました。これを実現するために実行した再現手順を検証します。 また、実装を比較し、問題を解決するための次のステップを見つけるために、C#ボットを使用して問題を再現し続けます。

再現手順

TypeScriptバーチャルアシスタントサンプルの使用

  1. バーチャルアシスタントのフォルダに移動します
  2. npm install依存関係をインストールします
  3. npm run buildてソリューションをコンパイルします
  4. 次のコマンドを使用して、仮想アシスタントを展開します。
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. Bot Framework Emulatorを開き、ローカルで実行されているVirtualAssistantに接続するように構成します
    image

  2. Botbuilderライブラリの内部botFrameworkAdapter.tsのライン1004にブレークポイントを設定
    image

  3. System Time zoneを別のものに変更します(例:UTC + 03:00ミンスク)
    image

  4. バーチャルアシスタントをデバッグする

  5. エミュレーターを使用して仮想アシスタントとのチャットを開始します
  6. 実行はブレークポイントで停止します。 activity.localTimestampは、以前のローカルサーバーのタイムゾーンの日時が表示され
    image

  7. 割り当て後、 activity.localTimestampの新しい日時に新しいユーザーのタイムゾーンが設定されます
    image

ありがとう:リラックス:

こんにちは@VictorGrycuk ! まず第一に速い答えをありがとう!

手順を十分に理解したかどうかはわかりませんが、問題を再現するために行ったすべての手順を使用して、自分自身をよりよく説明しようと思います。

  1. 最初の前提は、仮想アシスタントがローカルにデプロイされていることです。

  2. 2番目の仮定は、2つの異なるラップトップでテストを実行することです。最初のラップトップはクライアント(私たちにとってはTeams)であり、2番目のラップトップはVAを実行しているサーバーです。

  3. 3番目の仮定は、2つのラップトップに2つの異なるタイムゾーンが設定されていることです。たとえば、最初のタイムゾーン(クライアント)にはGMT+0300あり、サーバーにはGMT+0100ます。

  4. 次に、すべての設定が完了したら、クライアントからチームを介してVAにリクエストを送信しようとします。

  5. リクエストを受け取るとすぐに、本文にパラメータとしてユーザーからの適切なタイムゾーンがあります。

Screen Shot 2020-01-23 at 14 30 02

Screen Shot 2020-01-23 at 14 29 49

  1. 解析リクエスト内で、適切なクライアントタイムゾーンを取得します。

Screen Shot 2020-01-23 at 14 34 12

  1. ただし、変数(基本的には新しいDate(activity.localTimestamp))を割り当てた後、サーバーのタイムゾーンは次のようになります。

Screen Shot 2020-01-23 at 14 36 52

ねえ@ tommyJimmy87! 詳細な手順をありがとう! このシナリオを確認し、後で返信します😊。

こんにちは@ tommyJimmy87!

これは、JavaScriptがDateオブジェクトを処理する方法の制限によるものであるという結論に達しました。

ただし、BotBuilder-JSリポジトリでこの問題に関する問題#1612開いたことをお知らせします。 ここでこの問題の進行状況を追跡できるので、そこでも確認してください。

見つかった問題については、日付をDateオブジェクトに変換すると、JSはそれをUTCに変換します。これにより、基本的に元のタイムゾーンが削除されます。 JavaScriptが処理できる唯一のタイムゾーンは、JSを実行しているシステムのタイムゾーンです。
詳細については、日付のドキュメントを確認してください。

進捗状況をお知らせします:relaxed:

このページは役に立ちましたか?
0 / 5 - 0 評価