IT技術者のAIに関する雑記

AI関連のMicrosoft技術やデータサイエンスの話をメインに。

Bot Serviceの.NET SDKであるDialogからQnAMakerを呼びたい場合

Bot Serviceの.NET SDKを使ってQnAMakerを呼び出す基本的な方法は、GitHubにあるサンプルのように、MessageControllerからQnAMakerDialogを継承したクラス、例えばQnADialogを以下のように呼び出すやり方になります。

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                await Conversation.SendAsync(activity, () => new Dialogs.QnADialog());
            }
......


サンプルはこちら:
BotBuilder-CognitiveServices/CSharp/Samples at master · Microsoft/BotBuilder-CognitiveServices · GitHub


ですが、いきなりFAQに行くのではなく、Botでの会話フローの中でQnAMakerを呼び出したいですよね。つまり、MessageControllerからRootDialogを呼び出し、その中でQnAMakerを呼び出したいということになります。

通常、ダイアログから別のダイアログを呼び出す場合は、マニュアルに記述されているようにIDialogContext .Forwardを使って別のダイアログの呼び出しを行います。
Manage conversation flow with dialogs - Bot Service | Microsoft Docs


IDialogContext .Forwardは別ダイアログのStartAsyncメソッドを呼び出すのですが、QnAMakerDialogに対してはうまく動かず(StartAsyncを使っていない?)、ダイアログ呼び出し後の処理に移ってしまうようです。

QnAMakerのREST APIを直接呼び出すことで対応できるのですが、.NET SDKを使った場合の対応方法については継続して調査しようと思っています。