Botframework-solutions: [Typescript] GASDKスキルサポートをVA /スキルジェネレーターに追加

作成日 2019年10月08日  ·  64コメント  ·  ソース: microsoft/botframework-solutions

WebSocketへのスキルプロトコルの変更に続いて、以前はC#でのみ利用可能だった新しいStreamingExtensionsライブラリがTypescriptで利用可能になるのを待っていました。 これにより、Typescriptを使用する場合のVirtualAssistantのスキル呼び出しシナリオのブロックが解除されます。

ユーザーストーリー

として...開発者
スキルをVirtualAssistantのTypeScriptバージョンに接続できるようにしたい
そのため... C#とTypescriptの間に同等性があります

合否基準

  • [] VAとスキルジェネレーターを更新して新しいGASDKスキルを組み込む
  • [] typescript VAをデプロイし、C#スキル(カレンダーなど)を追加します
  • []必要に応じて、ジェネレーターによって作成された既存のVAソリューションおよびスキルに必要な変更に関するドキュメントを提供します
P0 Committed In Progress

最も参考になるコメント

@ Batta32 SkillConversationIdFactoryがencodeURIを使用している場合、スキルはそのconversation.idを受け取り、それに応じて応答します。 私はこれが必要であるとかなり確信しています。

また、はい、restifyの使用中に長い会話IDに問題があります。 このサンプルで問題を解決する方法について説明します: https

//このキーにはデフォルトで100文字の制限があります。 index.jsのrestify.createServer({ maxParamLength: 1000 });で増加します。

全てのコメント64件

こんにちはダレンジ、
修正する問題に関するETAはありますか?
ありがとう、
クマール

今週のテストのためにエンドツーエンドで作業することを望んでいます。

更新してくれてありがとう@darrenj

この問題に関する更新はありますか@darrenj

こんにちはダレン、

@darrenjは、この作業項目の更新を提供して

あなたの助けに感謝。

ありがとう、
クマール

こんにちは@darrenj

ご迷惑をおかけして申し訳ありませんが、これに関する更新はありますか?
ライブラリがバージョン4.6.0(https://botbuilder.myget.org/feed/botbuilder-v4-js-daily/package/npm/botframework-streaming)でリリースされていることを確認しました。これは、Botframeworkと互換性があります。 4.5.0と仮想アシスタント?

ここで飛行中のいくつかのことがあります。1つはあなたが見つけたストリーミング拡張機能の可用性であり、もう1つはスキルライブラリの新しいGAバージョンのタイプスクリプトの可用性です。 来週、Skillsライブラリの最初のパッケージビルドを期待しています。その時点で、C#テンプレートとTypescriptテンプレートの両方の更新を開始して、(単純な)移行手順をテストおよび提供できます。

この作業を1月に使用できるようにすることを目標としており、デイリービルドが利用可能になる時期など、進捗状況に応じてこの問題を更新し続けます。

それまでの間、Javascript / Typescript VAボットはJavaScript / Typescriptで作成されたスキルを呼び出すことができます。これは、ストリーミング拡張機能の依存関係がないため、HTTPを使用するためです。 この問題は、上記の変更がすべての言語に対応するカレンダーのようなC#スキルを呼び出したい場合に発生します。

@darrenjはこれが修正されており、typescript VAからC#スキルを接続できますか? 私はあなたの最後のコメントについて混乱しています。

こんにちは@darrenj

これが解決したら、VAのTypeScriptバージョンからToDoのようなcSharpスキルを呼び出すことは可能でしょうか?

現在、C#スキルで使用されるWebSocketTransportに関連するエラーが発生しています。 しかし、私のVAはタイプスクリプトです。

はい。GAバージョンのスキルに移行すると、Websocketへの依存がなくなり、プラットフォーム間でスキルをシームレスに組み合わせることができます。 C#とJSの最新情報を入手し、初期統合に取り組んでいます。目標は、シナリオのブロックを解除するために、今後数週間以内にデイリービルドに変更を加えることです。

こんにちは@darrenj

TypescriptVAとTypescriptSkillという別のユースケースがあります。

私の問題は、updateActivityがVA全体でスキルに利用できないことです。これにはストリーミングライブラリが必要です(私が理解している限り)。 WebSocketの依存関係が最新のスキルライブラリ(4.4.9)から削除されていることに実際に気づきました。
理由がわかりません:)別の場所に移動する予定ですか? または?

OK、ボットフレームワークSDK内のスキル機能のGAに関する進捗状況についての最新情報があります。 これにより、VirtualAssistantによってインキュベートされた作業が正式なGAバージョンに移行しました。

ボットが別のボット(スキル)を呼び出す方法を示すサンプルが利用可能です。 主な変更点は、アダプターが統合されたことです。つまり、別のアダプターやストリーミング拡張機能を利用する必要はありません。 C#およびJS

私たちは、仮想アシスタント/スキルテンプレートの更新に取り組んでおり、箱から出して(小さな)変更提供し、既存のスキルを更新するために必要ないくつかの手順に関するドキュメント

あなたがこれに先んじて進歩を遂げることに熱心であるならば、上記のサンプルはあなたにあなたが必要とするすべてを与えるはずです。 準備ができ次第、デイリービルド/変更へのポインターでこの問題を更新します。

@darrenjこの素晴らしいアップデートをありがとう。 本番のバーチャルアシスタントでユニファイドアダプターを活用する前に、

これは、Typescript VAで統合アダプターを使用でき、それでもc#スキルを呼び出すことができることを意味しますか?

待望のアップデート!

昨日0.8リリースを投稿しました。これには、新しいGAスキル機能をサポートし、プレビューを終了するために、すべてのサンプルスキルの更新が含まれています。 Websocketは廃止され、スキル間のWebサービス通信が優先されます。スキルは、「コールバック」HTTP接続を使用して非同期的にボットに通信します。

その結果、既存のバーチャルアシスタントとスキルにいくつかの簡単な更新が行われます。 C#VAの更新はここに記載さここに記載さ

同等のJS / Typescriptジェネレーターの変更は、2月14日までに、既存のVA /スキルの新しいジェネレーターとドキュメントの公開を目指して話し合うときに最終決定されます。 背景の参考として、呼び出しスキルをサポートするための高レベルの手順は、ここにあります。

これらの変更が完了すると、JS / typescript VAがC#スキルを呼び出すことができ、その逆も可能であり、実際にはPythonも呼び出すことができます。

@ darrenj 、typescriptプロジェクトに関する上記のコメントについて何か考えはありますか?

上記のように、はい、いくつかの移行手順があり、それに従って最終決定します

ありがとうございました。

@darrenjさん、JS / TSジェネレーターが変更されてドキュメントの更新がいつリリースされるかについてのニュースはありますか?

ねえ@ darrenj 、VA(C#)からタイプスクリプトスキル作業への通信が上記の新しいフレームワーク(SDK)で行われたかどうかをお知らせください。 あなたはそれが2月14日までに行われると言った。
あなたの助けに感謝

@darrenjこのチケットの更新はありますか?

@darrenj今日、VA / RootBot(Typescript)からC#スキルを呼び出すように移行または修正しようとしました。 typescript rootbot / VAの例がないスキルコンシューマー

新しいタイプスクリプトVA /スキルが新しいGAスキルを使用できるようにする変更について、一連のプルリクエストが進行中です。 チケットがマージされ、デイリービルドが利用可能になったら、チケットを更新します。

それまでの間、既存のVAを移行する手順に関するドラフトドキュメントをご覧ください。フィードバックをお待ちしております。

https://github.com/microsoft/botframework-solutions/pull/3123

こんにちは@darrenj 、更新に感謝します。現時点で私が持っている唯一の質問は、「botbuilder-solutions」についてです。 ローカルバージョンを使用する必要がありますか? どこから? 将来のリリースのように見えるこのブランチをここで見つけました(https://github.com/microsoft/botframework-solutions/tree/feature/southworks/0.7/parity-botbuilder-solutions/sdk/typescript/libraries/botbuilder-solutions) 、そうですか?

前もって感謝します。

@ Batta32人々が命令をテストするために使用できるコードのブランチをすばやく確認できますか(新しいライブラリが公開される前に)

@ tommyJimmy87 - -TypeScriptのGAスキルSDKのソリューション。
ブランチ: feature / southworks / ga-skills-sdk / botbuilder-solutions

ライブラリをローカルで使用するには、次の手順に従ってください(前述のブランチを使用)。

  1. Visual StudioCodeでライブラリを開きます
  2. 依存関係をインストールするためにnpm installを実行します
  3. ソリューションをコンパイルするためにnpm run buildを実行します
  4. npm packを実行して、ライブラリの.tgzファイルを作成します
  5. Visual Studio Codeでバーチャルアシスタントのpackage.jsonファイルを開きます
  6. 作成されたtgzのパスを指すbotbuilder-solutionsの参照を更新します
  7. ローカルパッケージをインストールする依存関係をインストールするためにnpm installを実行します

現在、これらの変更を検証しています。そのPRでフィードバックを送信することを躊躇しないでください。できるだけ早く、それらを確認します。

この問題は30日間開いており、アクティビティがないため、古くなっています。 古いラベルやコメントを削除しないと、5日で閉鎖されます

@ darrenj -VA(C#)からノードjsであるスキルへの接続に対して以下に記載されている変更を行うことができるかどうかをお知らせください。

https://microsoft.github.io/botframework-solutions/overview/whats-new/0.8-beta/migrate-existing-va-to-0.8/

はい-ドキュメントはPRであり、チームは私たちが話しているようにこの作業をまとめています! (@ Batta32)。 進行中の作業はここで確認できます: https

SDKに関連する変更とともに: https

約束どおり、SDK全体で一連の変更を行ったので、しばらくお待ちいただきますようお願いいたします。

  • 既存のtypescriptVAをGABFスキルに更新する手順はこちらです
  • 既存のtypescriptスキルをGABFスキルに更新する手順はこちらです

さらに、VAジェネレーター

これは、現在Azureの変更ウィンドウを待機している1.0リリースを処理するときに、npmに公開されます。 私たちは月末までに期待しています。

上記に関するご質問/問題は、新たな問題を提起してください。私たちがお手伝いします。

移行のための@ Batta32 botbuilder-solutions 4.5.0-preview? 移行の新しいリリースは正しいと思いますか?

@ Batta32新しいSDK

こんにちは@ tommyJimmy87@ tomSauret847 、公開される前に、MyGetで公開されたパッケージをデイリービルドとして使用できます。

botbuilder-solutionsデイリービルドを統合するには、2つの異なるオプションがあります。最初のオプションが最も簡単なので、最初のオプションをお勧めします(ボットのpackage-locknode_modulesを削除することを考慮してください) :

  • オプション1:追加.npmrcレジストリにファイルポインティングをhttps://botbuilder.myget.org/F/aitemplates/npm 、および更新package.json指すようにbotbuilder-solutionsにバージョンを4.5.0-preview223
  • オプション2:絶対パスを使用してpackage.jsonで直接参照するbotbuilder-solutionsのtgzをダウンロードします
npm pack [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

generator-botbuilder-assistantを使用する場合は、すでに持っている場合はアンインストールしてから、MyGetのいずれかをインストールする必要があります。

npm uninstall -g generator-botbuilder-assistant
npm install -g [email protected] --registry https://botbuilder.myget.org/F/aitemplates/npm

@ Batta32プレビュービルドで見つかった問題をどこに報告する必要がありますか? プレビュージェネレーターを使用して新しいVAを生成し、プレビューSDKを使用しましたが、カスタマイズせずにVAを実行しようとすると、無効なダイアログが追加されているというエラーが表示されます。
エラー:DialogSet.add():無効なダイアログが追加されています。

@ darrenj-デイリービルドの問題を報告するための最良のアプローチは何ですか?

@ tomSauret847-その間、このスレッドで問題を環境や再現手順と共有できます😊!

環境はWindows10コンピューターでローカルに実行されています
手順:プレビュージェネレーターを実行して、空白のVAを作成します
appsettings.jsonとcognitivemodels.jsonを更新します
https://botbuilder.myget.org/F/aitemplates/npmを指す.npmrcファイルを追加し
node_modulesとpackage-lock.jsonを削除します
npm [email protected]実行します
npm installを実行して、他のすべてのパッケージをインストールします
NPMビルドを実行する
npm runstartを実行します
次に、次のエラーが表示されます
C:UsersuserDesktopBlankVAtestassistantnode_modulesapplicationinsightsoutAutoCollectionExceptions.js:34
THIS_IS_APPLICATION_INSIGHTS_RETHROWING_YOUR_EXCEPTIONをスローします。 //エラーはアプリのどこかで発生しました
^

エラー:DialogSet.add():無効なダイアログが追加されています。
DialogSet.addで(C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibdialogSet.js:87:19)
MainDialog.addDialog(C:UsersuserDesktopBlankVAtestassistantnode_modulesbotbuilder-dialogslibcomponentDialog.js:148:22)
新しいMainDialogで(C:UsersuserDesktopBlankVAtestassistantlibdialogsmainDialog.js:34:14)
オブジェクトで。(C:UsersuserDesktopBlankVAtestassistantlibindex.js:159:24)
Module._compileで(internal / modules / cjs / loader.js:778:30)
Object.Module._extensions..js(internal / modules / cjs / loader.js:789:10)で
Module.load(internal / modules / cjs / loader.js:653:32)で
tryModuleLoad(internal / modules / cjs / loader.js:593:12)で
Function.Module._load(internal / modules / cjs / loader.js:585:3)で
Function.Module.runMain(internal / modules / cjs / loader.js:831:12)で

ありがとう! 手順に従って問題を再現しましたが、依存関係のインストール方法にエラーがあり、 botbuilder-solutionsをインストールすると、残りの部分が分離されて競合が発生します。

image

次の手順に従ってください:( node_modulespackage-lock削除します

  1. 更新package.jsonして4.5.0-preview223でバージョンbotbuilder-solutions

image

  1. npm install実行するすべての依存関係をインストールします
  2. npm run build実行するソリューションを構築する
  3. npm run start実行してバーチャルアシスタントを開始します

image

@ tomSauret847他に問題が発生した場合は、お知らせください。 最終検証を完了しており、完了したら新しいビルドをnpmにプッシュします。

こんにちは@darrenj 、新しいテンプレートマネージャーでlgファイルを解決しようとするとエラーが発生しました。基本的には、MS Teamsからロケールen-USを受信して​​いますが、en-us(小文字)と認識されません。 たぶんここで下部ケースを追加するif (this.templateEnginesPerLocale.has(locale))問題を解決します(LocaleTemplateEngineManager.tsは、61行目)。 今のところこの問題を回避するために、これをindex.tsに追加する必要がありました。

const supportedLocales: string[] = ['en-us', 'en-US','de-de'];

supportedLocales.forEach((locale: string) => {
    const localeTemplateFiles: string[] = [];
    templateFiles.forEach(template => {
        // LG template for en-us does not include locale in file extension.
        if (locale === 'en-us' || locale === 'en-US') {
            localeTemplateFiles.push(path.join(__dirname, 'responses', `${ template }.lg`));
        }
        else {
            localeTemplateFiles.push(path.join(__dirname, 'responses', `${ template }.${ locale }.lg`));
        }
    });

    localizedTemplates.set(locale, localeTemplateFiles);
});

これはうまくいきますが、もっと良い方法でできるかどうかはわかりません。

ありがとう。 @ Batta32-提供されたSDK MultiLanguageLGを使用するソリューションLibでLocaleTemplateEngineに変更があるかどうかを確認できますか? これが混合ケースをエレガントに処理することを願っていますが、いくつかのテストは検証するのに適しています。

@ lzc850612 csharp GA RCを使用してクイック検証を実行し、アクティビティのボットに入る混合ケースロケールで期待どおりに機能することを再確認できますか?

確かに@darrenj 、その変更を確認します!

@darrenj進捗状況の更新をありがとう! tommyJimmyが指摘したのと同じロケールの問題がありましたが、localeTemplateManagerにlocale.toLowerCaseを追加することでそれを乗り越えました。 現在、カスタムスキルをVAにアタッチしていますが、追跡しようとしているエラーが発生します。 スキルはVAに501エラーを返していますが、defaultActitivityHandler.tsのonMessage関数でメッセージを処理しています。スキルが処理するために、アクティビティをメインダイアログに渡していないだけです。 appSettings.jsonファイルを更新してスキルを追加しましたが、スキルはアクティビティを受信して​​います。

@ Batta32転送パスにまだlocalTemplateEngineManagerが含まれているかどうかを確認したかったのです。 プレビュービルドから欠落していて、responseManagerのみが存在することに気付きました。 今後は、応答マネージャーを使用する必要がありますか、それともロケールテンプレートを追加し直しますか?

@ Batta32VAのスキルとの通信で受け取ったエラーを追跡することができました。 dialogExモジュールには、スキルが開始されたVAにトレースを送り返す送信トレースがあります。 このsendActivityは、呼び出されると次のエラーをスローします。
エラー:/ api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo / Activities / 5b61c920-841b-11ea-b148-8581dc55a9bb is not present
会話IDがSkillConversationIdFactoryに追加されると、スキルは新しい会話IDにポストバックできません。

アップデート:
この問題の原因となっているskillHostEndpointにタイプミスがありました。 修正したら、スキルを添付してVAと対話させることができるようになりました。

@ Batta32 @darrenj VAでチットチャットを使用しようとすると、予期しない動作が発生します。基本的に、ユーザーがボットに何かを要求するたびに、イントロステップで最初のメッセージが再表示されます。チットチャットの場合、UXほど優れていません。 。 これは予想されることですか、それとも何かが足りないのですか?

Screen Shot 2020-04-23 at 11 25 46

(メッセージを保持してくださいはカスタムメッセージですのでご安心ください

@ Batta32VAのスキルとの通信で受け取ったエラーを追跡することができました。 dialogExモジュールには、スキルが開始されたVAにトレースを送り返す送信トレースがあります。 このsendActivityは、呼び出されると次のエラーをスローします。
エラー:/ api / messages / v3 / conversations / 5659a380-841b-11ea-bed3-831b5a6aa1eb%7Clivechat-dlpskill-emulator-skillconvo / Activities / 5b61c920-841b-11ea-b148-8581dc55a9bb is not present
会話IDがSkillConversationIdFactoryに追加されると、スキルは新しい会話IDにポストバックできません。

アップデート:
この問題の原因となっているskillHostEndpointにタイプミスがありました。 修正したら、スキルを添付してVAと対話させることができるようになりました。

@ tomSauret847あなたの問題は何でしたか? 同じエラーが発生していて、それが何であるかがわからないためです。 私の仮想アシスタントにはこれがあります:
"skillHostEndpoint": "https://1c34e472.ngrok.io/api/skills"
これはVAのエンドポイントです。

Error: /api/skills/v3/conversations/a%3A1QIRXOg6VwVn2aGC-eTj9sj3YYd6YUVrRKf8J7wLrjH1fPYcpn2dYpMyQpr_aHLHSp9Z2SHVzu8lKbdj_ArEh06kvjyF48IG1tgE1ctKTWdIASDloNgy51_eBFoGzwwIN-waSearchSkill-msteams-skillconvo/activities/1588679971133 does not exist at new RestError (/Users/em.tomaselli/Desktop/repository/BMW/wa-search-skill/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28) at /Users/em.tomaselli/Desktop/repository/BMW/wa-search-skill/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37 at process._tickCallback (internal/process/next_tick.js:68:7)

@ Batta32VAと1つのスキルをAzureにデプロイできました。 Webチャットを使用すると、すべてが期待どおりに機能します。 チームチャネルを使用しようとすると、次のエラーが表示されます。 Webチャットが正しくルーティングされているため、これはTeamsチャネルに分離されているようです。
エラー:スキルIDの呼び出し中にエラーが発生しました:「https:// {appname} .azurewebsites.net / api / kill / messages」の「dlpskill」(ステータスは500)。
エラー:/ API /スキル/ V3 /会話/:1lFWWXG9CVtdrkA76VLFeS9CbYWzsHVr9mQ4S7BqDpL4K5WNIc0ND6mqaaj_QsSqH-qUU-Gb2vLX3HQ4CpG3ZDPCbR0XKLtJGOqW0kwKUbe2HKv5C9fs1sjLSO4EvoE5h-dlpskill-msteams-skillconvo /活動/ 1588712064379は存在しません。
SkillDialogで。(D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:164:23)
Generator.nextで(
達成時(D:homesitewwwrootnode_modulesbotbuilder-dialogslibskillDialog.js:11:58)
process._tickCallback(internal / process / next_tick.js:68:7)で

@ tommyJimmy87 VAからスキルにローカルで通信するためにngrokを使用していなかったため、skillHostEndpointにlocalhost:3979 / api / killsを使用して

こんにちは@ Batta32 、私は@ tomSauret847に同意します。おそらく

少しデバッグした後、私が見つけたものを説明しようとするかもしれません:

1) ChannelServiceHandlerすべてのメソッドが実装されていません。つまり、 /api/skillsが呼び出されると、毎回エラーコードが返されます。

すなわちファイル:ChannelServiceHandler.ts(botbuilder)、行:219

    protected async onGetActivityMembers(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string): Promise<ChannelAccount[]> {
        throw new StatusCodeError(StatusCodes.NOT_IMPLEMENTED, `ChannelServiceHandler.onGetActivityMembers(): ${StatusCodes.NOT_IMPLEMENTED}: ${STATUS_CODES[StatusCodes.NOT_IMPLEMENTED]}`);
    }

2) /api/skills/v3/conversations/a%3A1QIRXOg6VwVn2aGC-eTj9sj3YYd6YUVrRKf8J7wLrjH1fPYcpn2dYpMyQpr_aHLHSp9Z2SHVzu8lKbdj_ArEh06kvjyF48IG1tgE1ctKTWdIASDloNgy51_eBFoGzwwIN-waSearchSkill-msteams-skillconvo/activities/1588761991793この場合、代わりに会話IDの解析に問題があり、エラー結果は常にリソースが存在しないことですが、同じURLを呼び出そうとすると、より単純な文字列でconversationIdを変更しますそれは機能します(ただし、前のポイントのためにメソッドが実装されないという結果になります)。

こんにちは@ tommyJimmy87@ tomSauret847-遅れてすみません。 GA Skills SDKの変更を使用して、Teams Channelのシナリオを確認し、後でこのスレッドに戻ります😊。

@ tommyJimmy87 -Microsoft 正常に再現しました。 問題が修正され次第、このスレッドに戻ります。

ありがとう!

こんにちは@ tommyJimmy87@ tomSauret847 、問題の原因を見つけることに成功しました。

問題は、アクティビティがスキルから仮想アシスタントに返送されるときに_ ':' _文字_ '%3A'_に
どうやら、この動作は、前述のように文字を置き換えるaxios依存関係で実行されます。

最後になりましたが、microsoft / botbuilder-js#2182に問題があり、botbuilderのaxiosが置き換えられ、_R10_の準備ができているというタグが付けられ

問題を説明する

最後に、皆さんのために新しいアップデートがあり次第、このスレッドに戻ります😊

_conversationIdsの不一致_
image

_axios依存関係は ':'を '%3A'_に置き換えます
image

@ Batta32間もなく修正されると思いますか、それとも少し時間がかかると思いますか?

@ tommyJimmy87、@ tomSauret847 -私たちは、問題がであることに気づいたMS-残り-jsの代わりにaxios

問題は、スキルとバーチャルアシスタントの間のconversationId不一致です。 この問題は、Teamsの_conversationId_の_ ':' _文字が_ '%3A'_に置き換えられているために発生します。これ戻す必要があります。 最後の変換_axios_のようにsendOperationRequestに実装されていません。

間違いでごめんなさい😊。

_encodeURIComponentは '%3A'を 'に置き換えません:' _
image

_axiosとms-rest-jsのエンコーディングの違い_
image

@ Batta32ms -rest-jsバージョン<2.0のデフォルトエージェントは://github.com/Azure/ms-rest-js/blob/1.x/lib/axiosHttpClient.ts

この問題を解決する1つの方法は、SkillConversationIdFactory実装内でencodeURIを使用することだと思います。 このように、基盤となるエージェントは、conversation.idをファクトリ内に保存されているものから変更しません。

@EricDahlvangに感謝します。 encodeURI内でSkillConversationIdFactory encodeURIを使用する代替案を検討します。

@EricDahlvangは-追加encodeURIでのSkillConversationIdFactoryスキルが既にエンコードされたとして、問題が解決しないconversationId仮想アシスタントに戻って活動を送信する前に。

この問題は、MicrosoftTeamsから受信したときのconversationIdの長さに関連している可能性があることがわかりました。 元のconversationIdすると、VAのエンドポイントがヒットしないことに気付きましたが、 conversationIdから一部の文字をトリミングすると正しくヒットします。

最後になりましたが、この問題はC#には存在しません。

_エンドポイントは元のconversationIdでヒットしません_
image

_エンドポイントはトリミングされたconversationIdでヒットします_
image

_この問題はC#には存在しません_
image

@ Batta32 SkillConversationIdFactoryがencodeURIを使用している場合、スキルはそのconversation.idを受け取り、それに応じて応答します。 私はこれが必要であるとかなり確信しています。

また、はい、restifyの使用中に長い会話IDに問題があります。 このサンプルで問題を解決する方法について説明します: https

//このキーにはデフォルトで100文字の制限があります。 index.jsのrestify.createServer({ maxParamLength: 1000 });で増加します。

@EricDahlvangこの情報をありがとうございます。 VAとスキルの両方にアップデートを追加しました。 これで、VAがTeamsチャネルのスキルとエラーなしで通信できるようになりました。

提供された情報をありがとう@EricDahlvang ! 我々は改善するPR#3359を作成したmaxParamLengthとものバージョンに更新@types/restify@^8.4.2

@ tommyJimmy87@ tomSauret847に感謝します。これらの変更がマージされるとすぐに、テストできるようになります😊。

image

@ Batta32もう一度ご迷惑を

こんにちは@ tommyJimmy87C#JSSkillHandlerには、前述のようにonUpdateActivity()が含まれていないことに気付きました。その間、 SkillHandlerまたはChannelServiceHandlerから拡張する独自のハンドラーを追加できChannelServiceHandler

@ darrenj - onUpdateActivity()メソッドがないことが正しいことを確認できますか、それとも実装する計画はありますか?

@ Batta32私は実際にこれを試しました、実装は次のようになります:

    protected async onUpdateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, activityId: string, activity: Activity): Promise<ResourceResponse> {
        return await this.updateActivity(claimsIdentity, conversationId, activityId, activity);
    }

また、 updateActivity関数は次のとおりです。

private async updateActivity(claimsIdentity: ClaimsIdentity, conversationId: string, replyToActivityId: string, activity: Activity): Promise<ResourceResponse> {

        let skillConversationReference: SkillConversationReference;
        try {
            skillConversationReference = await this.conversationIdFactory.getSkillConversationReference(conversationId);
        } catch (err) {
            // If the factory has overridden getSkillConversationReference, call the deprecated getConversationReference().
            // In this scenario, the oAuthScope paired with the ConversationReference can only be used for talking with
            // an official channel, not another bot.
            if (err.message === 'Not Implemented') {
                const conversationReference = await this.conversationIdFactory.getConversationReference(conversationId);
                skillConversationReference = {
                    conversationReference,
                    oAuthScope: JwtTokenValidation.isGovernment(this.channelService) ?
                        GovernmentConstants.ToChannelFromBotOAuthScope :
                        AuthenticationConstants.ToChannelFromBotOAuthScope
                };
            } else {
                // Re-throw all other errors. 
                throw err;
            }
        }

        if (!skillConversationReference) {
            throw new Error('skillConversationReference not found');
        }
        if (!skillConversationReference.conversationReference) {
            throw new Error('conversationReference not found.');
        }

        const activityConversationReference = TurnContext.getConversationReference(activity);

        /**
         * Callback passed to the BotFrameworkAdapter.createConversation() call.
         * This function does the following:
         *  - Caches the ClaimsIdentity on the TurnContext.turnState
         *  - Applies the correct ConversationReference to the Activity for sending to the user-router conversation.
         *  - For EndOfConversation Activities received from the Skill, removes the ConversationReference from the
         *    ConversationIdFactory
         */
        const callback = async (context: TurnContext): Promise<void> => {
            const adapter: BotFrameworkAdapter = (context.adapter as BotFrameworkAdapter);
            // Cache the ClaimsIdentity and ConnectorClient on the context so that it's available inside of the bot's logic.
            context.turnState.set(adapter.BotIdentityKey, claimsIdentity);
            context.turnState.set(this.SkillConversationReferenceKey, activityConversationReference);
            activity = TurnContext.applyConversationReference(activity, skillConversationReference.conversationReference) as Activity;
            const client = adapter.createConnectorClient(activity.serviceUrl);
            context.turnState.set(adapter.ConnectorClientKey, client);

            context.activity.id = replyToActivityId;
            await context.updateActivity(context.activity);
            return;
        };

        // Add the channel service URL to the trusted services list so we can send messages back.
        // the service URL for skills is trusted because it is applied based on the original request
        // received by the root bot.
        AppCredentials.trustServiceUrl(skillConversationReference.conversationReference.serviceUrl);

        await (this.adapter as BotFrameworkAdapter).continueConversation(skillConversationReference.conversationReference, skillConversationReference.oAuthScope, callback);
        return { id: uuid() };
    }

これは基本的に、 SkillHandlerすでに実装されているprocessActivity関数のコピーですが、最後にcontext.updateActivity(context.activity)を呼び出します。

私はこのエラーが発生していると言いました:

(node:68325) UnhandledPromiseRejectionWarning: Error: Failed to decrypt conversation id 

おそらく私が欠けているか、間違っていることがあります。

@ tommyJimmy87-私たちはあなたのシナリオを再現しようとします、そして私たちは後であなたに戻ります😊。

@ Batta32バーチャルアシスタントの「ヘルプカード」で、アクティブスキルのヘルプカードが表示されていないことに気づきました。 スキルダイアログで「ヘルプ」割り込みを押すと、スキルではなくVAのヘルプカードが表示されます。 アクティブなスキルでactiveSkillProperty状態を設定することを含む最後のリリースに更新しました。 この問題を修正する方法についてのアイデアはありますか? アクティブなダイアログがまだVAにあるダイアログとして登録されており、アクティブなスキルではない状態をログアウトします。

こんにちは@ tommyJimmy87@ tomSauret847 、これらの問題を報告していただきありがとう

generator -bot-virtualassistant @ 1.0.0bot -solutions @ 1.0.0 、および[email protected]npmjsで公開され、ブランチmasterにマージれると、リポジトリに問題を作成して、問題をよりよく説明し、フォローアップします😊。

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