前回 の記事ではテンプレートで作成されるユニットテストを見ました。今回はスキルのデバッグについて考えてみます。
メッセージタイプアクションのデバッグ
メッセージタイプのスキルは通常のボットと同じであるため、Bot Framework エミュレーターでデバッグが可能です。よって特別な対応は必要がありません。
イベントタイプアクションのデバッグ
イベントタイプのデバッグは 2 つの種類があります。
- ローカルデバッグ
- リモートデバッグ
ローカルデバッグ
まずは Bot Framework エミュレーターを使ったローカルデバッグを見ていきます。イベントタイプのアクションは ActivityType が Event である必要ですが、現在のバージョンのエミュレーターでは、アクション用のイベントタイプを送ることができません。
しかし、シリーズのその 5 でも紹介した通り、EventDebuggerMiddleware は /event:
で始まる文字列が来た場合はイベントとして処理してくれるため、以下の情報を送ることで任意のアクションをトリガーできます。
/event:{name:"アクション名",value:"<入力パラメーター>"}
さらにもう 1 点、ITurnContextEx.cs の IsSkill 拡張メソッドでスキル呼び出しかを確認していますが、このチェックをパスするためには、リクエストが他のボットから呼び出されたものである必要があるため、スキルとみなされません。そこでコードを以下のように書き換えます。
public static class ITurnContextEx
{
public static bool IsSkill(this ITurnContext turnContext)
{
if (turnContext.Activity.Type == ActivityTypes.Event && turnContext.Activity.ChannelId == "emulator")
return true;
return turnContext.TurnState.Get<ClaimsIdentity>("BotIdentity") is ClaimsIdentity botIdentity && SkillValidation.IsSkillClaim(botIdentity.Claims) ? true : false;
}
}
これでエミュレーターから実行すると、イベントをデバッグすることができます。
リモートデバッグ
アシスタントボットや Power Virtual Agent から呼び出した際のデバッグをしたい場合、マニフェストを変更して対応します。以下に PVA の例を紹介します。
1. ngrok でローカルサーバーを立てる。
ngrok http --host-header=localhost:3987 3978
2. manifest-1.0.json を ngrok のアドレスで更新。
3. Azure AD 上のアプリケーションの Homepage アドレスを更新。
まとめ
ライブデバッグも無事できました。これで開発もはかどりそうです。