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()); } ......
ですが、いきなり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を使った場合の対応方法については継続して調査しようと思っています。