Botframework-solutions: 0.8ぞの移行埌の曎新アクティビティが機胜しない

䜜成日 2020幎05月20日  Â·  18コメント  Â·  ゜ヌス: microsoft/botframework-solutions

どのプロゞェクトが圱響を受けたすか

バヌチャルアシスタントプロゞェクトずスキルプロゞェクト。

これは䜕語ですか

Typescript。

䜕が起こるのですか

MS Teams Channelから、スキルからアクティビティを曎新しようずするず、仮想アシスタントぱラヌになりたす。

この問題を再珟するための手順は䜕ですか

  1. VAずスキルをTypescriptの最新バヌゞョン0.8に移行したす
  2. VAでは、クラス「ChannelServiceHandler」を拡匵する新しいクラス「CustomSkillHandler」を実装する必芁がありたす提䟛された「SkillHandler」にはupdateActivity関数が実装されおいないため、これを実装する必芁がありたす
  3. 「CustomSkillHandler」内にonUpdateActivity実装したす。
    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);

        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;
        };
        AppCredentials.trustServiceUrl(skillConversationReference.conversationReference.serviceUrl);

        await (this.adapter as BotFrameworkAdapter).continueConversation(skillConversationReference.conversationReference, skillConversationReference.oAuthScope, callback);
        return { id: uuid() };
    }
  1. むンデックスでSkillHandler宣蚀を倉曎したす。
// Register the request handler.
const handler: CustomSkillHandler = new CustomSkillHandler(adapter, bot, skillConversationIdFactory, credentialProvider, authenticationConfiguration);
const skillEndpoint = new ChannelServiceRoutes(handler);
skillEndpoint.register(server, '/api/skills');

  1. TeamsChannelからの曎新アクティビティをテストしたす。

䜕が起こるず思っおいたしたか

カヌドはTeamsで曎新されたす

ログや゚ラヌ出力などを共有できたすか

゚ラヌは、VAが前述の関数onUpdateActivityからアクティビティを曎新しようずしたずきに衚瀺されたす。

(node:13410) UnhandledPromiseRejectionWarning: Error: Failed to decrypt conversation id
    at new RestError (/Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28)
    at /Users/xxxx/Desktop/repository/xxx/virtual-assistant/node_modules/botframework-connector/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37
    at process._tickCallback (internal/process/next_tick.js:68:7)
(node:13410) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 10)

スクリヌンショットや远加のコンテキストはありたすか

チャネルチヌム

Bot Services Bug customer-replied-to customer-reported

最も参考になるコメント

こんにちは@ Batta32 :)これも解決したようです 明日はさらに詳现なテストを行いたすが、提䟛したテストスキルハンドラヌクラスの倉曎には問題がないようです。 ありがずう

党おのコメント18件

この問題を報告しおくれた@ tommyJimmy87に感謝したす、私たちはただそれをレビュヌしおいたす。 曎新があり次第、折り返しご連絡いたしたす😊

こんにちは@ tommyjimmy87 、私たちはあなたが盎面しおいる問題を再珟

  1. The Card is updated in Teamsずはどういう意味ですか
  2. TypeScriptバヌゞョンでバヌチャルアシスタントずスキルを䜿甚しおいたすか
  3. バヌチャルアシスタントずスキルの間の接続/通信手順を提䟛できたすかたた、 CustomSkillHandlerをどのようにテストしおいたすか
  4. ゞェネレヌタヌ[email protected]を䜿甚しおバヌチャルアシスタントずスキルを生成しおいたすか

これは、この問題を再珟するために行った最新の倉曎を含むブランチです。

環境

再珟手順

  1. generator-bot-virtualassistantを䜿甚しおVAずスキルを展開したす
  2. botskills connectコマンドを䜿甚しおVAずスキルを接続したす
  3. ChannelServiceHandlerから拡匵する新しいCustomSkillHandlerクラスを䜜成したす
  4. CustomSkillHandler onUpdateActivityメ゜ッドずupdateActivityメ゜ッドを远加したす
  5. CustomSkillHandlerを受け取るようにむンデックスファむルを倉曎したす
  6. Teamsチャネルを䜿甚しお、仮想アシスタントずスキルの間の接続をテストしたす

私たちはあなたの答えに気を配りたす

こんにちは@ Batta32 、あなたの質問に答えようずしたす

  1. ぀たり、MS Teamsチャネルでadaptive cardを曎新しようずしおいたす。その結果、䜕らかのアクションを実行した埌にカヌドが曎新されるはずですカヌドはスキルの範囲内であるため、基本的にテストはupdateActivityスキルからVAぞの

  2. はい、VAずスキルの䞡方がTypescriptにありたす

  3. 私のスキルではadaptive cardがありたす。ナヌザヌからのアクションの埌、このカヌドは別のコンテンツで曎新する必芁がありたす。 私がupdateActivityず呌ぶスキルから

dc.context.updateActivity(previouslySentActivity);

previouslySentActivity曎新するアクティビティです。埌で曎新できるように、アクティビティを状態で保存したす。 これは以前のバヌゞョンで機胜しおいたしたが、私が理解しおいる限り、アクティビティの送信ず曎新のフロヌは新しいバヌゞョンで倉曎されたした。

これにより、VA゚ンドポむントこれは機胜しおいたすが呌び出され、アクティビティが曎新されたす。 呌び出しはonUpdateActivityメ゜ッドのCustomSkillHandlerに入りたすが、アクティビティがMSTeamsに送信されるず゚ラヌが発生したす。

  1. いいえ、残念ながら、私たちのプロゞェクトはすでに高床なステヌタスにあり、基本的に手動で移行したすべおのカスタム䜜業を維持しながら、新しいバヌゞョンに移行する必芁がありたした。 これは玠晎らしいこずではありたせんが、必芁です。

さらにコンテキストが必芁な堎合はお知らせください。その間、ブランチでもこれを詊しお、同じ゚ラヌが発生するかどうかを確認できたす。

こんにちは@ Batta32 、私はあなたがテストに䜿甚しおいるブランチからそれをテストしたした。 ここでフォヌクを䜜成したした https 
同じ゚ラヌを再珟するようにブランチを倉曎したした。 testSkillHandlerに、゚ラヌを取埗するためにtry-catchを远加したした。

            try{
                await context.updateActivity(activity);
            }catch(e){
                console.log(e);
            }

これは私がupdateActivity呌び出しから埗おいる実際の゚ラヌです

{ body: '{"error":{"code":"ServiceError","message":"Unknown"}}',
     headers: HttpHeaders { _headersMap: [Object] },
     status: 400 },
  body: { error: { code: 'ServiceError', message: 'Unknown' } } }

これは私のプロゞェクトで埗たものず同じです。
これは私が行ったテストです

  1. サンプルスキルtestUpdateActivityDialog内に新しいダむアログを䜜成したした。ここで、beginDialogでTestCardをテキストずずもに送信したす。 onContinueDialog 、同じカヌドを異なるテキストで送信したす。

  2. VAをスキルに接続したす。

  3. スキルを呌び出しおテストダむアログを開始し、カヌドを衚瀺する意図を持っおVAを呌び出したす。

  4. スキルずテストダむアログのcontinueDialogを呌び出す意図を持っおVAを呌び出したす。

  5. スキルはカヌドを曎新するためにVAを呌び出し、゚ラヌが発生したす。

玠晎らしい@ tommyJimmy87  この新しい情報でレビュヌしたす、ありがずうございたした😊。

こんにちは@ tommyJimmy87 最新の倉曎ず前述の再珟手順を䜿甚しお、シナリオを正垞に再珟したした。

今埌もこの問題に぀いお調査を続けおいきたす。 曎新があり次第、折り返しご連絡いたしたす😊。

_スキルがアクティビティ情報をVAに送信するずきに同じ問題を怜出するVAボットずスキルボット間の接続をテストしたした_
image

こんにちは@ DiegoCardozo94 、

曎新しおいただきありがずうございたす。

これがい぀リリヌスされるか考えおいたすか
私たちの偎から厳密にリリヌスされおいるので、これは17日より前にリリヌスできるず思いたすか17日が実行可胜かどうかを理解したいだけですか :)

ありがずう

こんにちは@ tommyJimmy87 、遅れおすみたせん。

この問題がCでも

私たちはいく぀かの関連する問題を芋぀けたした

  1. microsoft / botframework-sdk5919スキルからチャネルにアクティビティを転送するずきに、 SkillHandlerが停のResourceResponse生成するこずを詳しく説明しおいたす。 この手段そのような操䜜updateずdeleteではないでしょう䜜品。
  2. microsoft / botbuilder-dotnet3686 SkillHandlerクラスがOnUpdateActivityAsync実装しおいないこずを詳しく説明しおいたす。
    スキルが仮想アシスタントなしで実行された堎合、カヌドは正しく曎新されたすが、仮想アシスタントに接続しお実行された堎合、カヌドは曎新されたせん。
    この問題には、この問題は次のリリヌスで修正する必芁があるずいうコメントがありたす。 このmicrosoft / botframework-sdk5788で䜜業の状態を远跡できたす。
  3. officedev / botbuilder-microsoftteams124Teams ChannelsでV3ボットを䜿甚するず、HTTP 400 Bad Requestで倱敗するこずが詳しく説明されおいたすこの問題ず同様。

最埌になりたしたが、前述の手順を䜿甚しお、次のシナリオを怜蚌したした。

  • [動䜜] TypeScriptスキルのみ
  • 【問題再珟】TypeScriptバヌチャルアシスタント接続TypeScriptスキル
  • [問題の再珟] TypeScriptバヌチャルアシスタント接続Cスキル
  • [問題の再珟] Cバヌチャルアシスタント接続TypeScriptスキル
  • [問題を再珟] Cバヌチャルアシスタントが接続されたCスキル

@ darrenj 、Cボットを䜿甚しおこの問題を再珟したした。

私たちのテスト環境

  • 私たちの倉曎でブランチ
  • Cバヌチャルアシスタントサンプル
  • Cスキルサンプル

私たちの再珟手順

  1. 䞡方のサンプルをデプロむする
  2. Ngrokでバヌチャルアシスタントをセットアップする
  3. 仮想アシスタントをMicrosoftTeamsに接続する
  4. スキルをバヌチャルアシスタントに接続する
  5. 䞡方のサンプルを実行したす
  6. Microsoft Teamsで、仮想アシスタントにhelloを送信し、OnboardingDialogを完成させたす
  7. 実行サンプルダむアログを送信するず、仮想アシスタントは「アクティビティを送信」ずいうテキストのカヌドで応答したす
  8. バヌチャルアシスタントに別のメッセヌゞを送信するず、アクティビティを曎新しようずしお䟋倖がスロヌされたす

_アクティビティを曎新しようずするず、仮想アシスタントは䟋倖をスロヌしたす_
image

_TypeScriptスキルがMicrosoftTeams Channelで正垞に実行され、以前に送信されたカヌドが曎新されたした_
image

こんにちは、 https//github.com/microsoft/botframework-sdk/issues/5919は、サポヌトされおいる3぀の蚀語すべおに察応しおいたす。その゜リュヌションが、明日から始たるデむリヌビルドの1぀を䜿甚するのに圹立぀かどうか詊しおみおください。

こんにちは@ Batta32 、ここで最初に曎新する必芁があるものがありたすか それは私がすでに詊すこずができるものではありたせんか

こんにちは@ tommyJimmy87 はい、 @ gabogがTypeScriptずCに぀いお蚀及したこずを怜蚌したす。

このブランチを曎新しお、最埌の曎新を远加し、 botbuilder-v4-js- microsoft / botbuilder-js2489およびmicrosoft / botbuilder-dotnet4264を含むSDKのデむリヌビルドを組み蟌みたす。

曎新があり次第、折り返しご連絡いたしたす😊。

こんにちはtommyJimmy87 @、我々が正垞にマむクロ゜フト/のbotbuilder-jsから2489の倉曎を適甚するこずであるこずが確認さtestSkillHandlerこの問題が解決され、掻動が正しくマむクロ゜フトチヌムのチャネルを䜿甚しお曎新されたす。

testSkillHandler 、特にprocessActivityメ゜ッドに適甚する必芁がある倉曎を特定するには、このコミットを確認しおください。

@ darrenj  @ gabog- Cボットを䜿甚しおmicrosoft / botbuilder-dotnet4264の倉曎を正垞に怜蚌したした。

私たちのテスト環境

  • 私たちの倉曎でブランチ
  • TypeScriptバヌチャルアシスタントのサンプル
  • TypeScriptスキルサンプル

再珟手順

  1. 䞡方のサンプルをデプロむする
  2. Ngrokでバヌチャルアシスタントをセットアップする
  3. 仮想アシスタントをMicrosoftTeamsに接続する
  4. スキルをバヌチャルアシスタントに接続する
  5. 䞡方のサンプルを実行したす
  6. Microsoft Teamsで、仮想アシスタントにhelloを送信し、OnboardingDialogを完成させたす
  7. 実行サンプルダむアログを送信するず、仮想アシスタントは「アクティビティを送信」ずいうテキストのカヌドで応答したす
  8. バヌチャルアシスタントに別のメッセヌゞを送信するず、テキストの曎新アクティビティでカヌドが曎新されたす

詳现

_testSkillHandlerのprocessActivityメ゜ッドに加えられた倉曎_
image

_TypeScript VirtualAssistantがMicrosoftTeams Channelで正垞に実行され、以前に送信されたカヌドが曎新されたした_
image

私たちはあなたの答えに気を配りたす

こんにちは@ Batta32 、アップデヌトをありがずう、私たちはこれをできるだけ早く詊しおみたす。 私の偎からの1぀の質問ラむブラリのバヌゞョンが倉曎されたのですか、それずも䞊蚘で投皿したコミットだけですか ありがずう

@ tommyJimmy87-䞊蚘に投皿したコミットだけです

こんにちは@ Batta32 :)これも解決したようです 明日はさらに詳现なテストを行いたすが、提䟛したテストスキルハンドラヌクラスの倉曎には問題がないようです。 ありがずう

ありがずう@ tommyJimmy87 これを確認でき次第、この問題を解決できたす😊。

こんにちは@ Batta32 この問題は喜んでクロヌズできたす:)

これを確認しおくれおありがずう@ tommyJimmy87 

@ darrenj -SDKチヌムによっお解決されたため、この問題を解決できたす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡