エミュレーターの使い方

エミュレーターの使い方

作成したアプリケーションがChatbotとしてきちんと動作していることを、エミュレーターを使って確認してみましょう。スタートメニューから「botframework-emulator」を選択します。

エミュレーターを起動

エミュレーターを起動

「Enter your endpoint URL」をクリックして、ChatbotのWebアプリケーションPIとしてのURL「http:// localhost:3979」に「/api/messages」を追加した「http:// localhost:3979/api/messages」をエンドポイントURLとして入力します。この段階では「Microsoft App」の設定は不要なので、このまま「CONNECT」ボタンをクリックします。このとき右下のLogウィンドウに赤字でエラーが表示された場合はエンドポイントのURLやポートが間違っているか、ファイアウォールの設定でポートが許可されていない可能性がありますので、再度確認をしましょう。

エンドポイントURLの設定

エンドポイントURLの設定

では、早速Chatbotを使ってみましょう。Bot Applicationのテンプレートにあらかじめ作成されているサンプルアプリケーションは、ユーザーが入力した文字の文字数を返す簡単なものです。エミュレーター下部のテキストボックスに「こんにちは」と入力してEnterキーを押すか、右の入力ボタンをクリックしてメッセージを送ります。Chatbotアプリケーションから「『こんにちは』の文字数は5文字」との返事が返ってきます。この「メッセージを送る」と「答えが返ってくる」というのが、Chatbotアプリケーションの基本的な使い方となります。Chatbotアプリケーションは、軽量なデータ交換用フォーマットのJSONを使ってデータのやりとりを行っています。エミュレーターで入力したメッセージや、返答されたメッセージをクリックするとアプリケーションとやりとしているJSONの内容をDetailsウィンドウで確認することができるようになっています。エンドポイントURL横のメニューからは、チャットの初期化や、各種設定、テスト項目など必要に応じで利用することができます。

サンプルアプリケーションを使ったテスト

サンプルアプリケーションを使ったテスト

Chatbotの構成確認

サンプルのChatbotアプリケーションが問題なく動くことを確認したら、実際にChatbotの開発にとりかかりましょう。まずは、Visual Studioでファイル構成を確認してみましょう。Chatbotに特化した特徴としては、Controllersフォルダの中に、MessagesController.csファイルがあります。Chatbotとの会話はこのMessagesControllerクラスのPostメソッドがメッセージを受け取るところから始まります。

Chatbotのファイル構成

Chatbotのファイル構成

以下がMessagesControllerクラスのPostメソッドが、ユーザーからのメッセージを受け取る部分となります。if文でユーザーからの入力がメッセージ(ActivityTypes.Message)の場合、Dialogs.RootDialogクラスを作成して処理しています。

リスト1:メッセージを受け取った際の処理

public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
    if (activity.Type == ActivityTypes.Message)
    {
        await Conversation.SendAsync(activity, () => new Dialogs.RootDialog());
    }
    else
    {
        HandleSystemMessage(activity);
    }
    var response = Request.CreateResponse(HttpStatusCode.OK);
    return response;
}

ユーザーからのメッセージを処理するDialogs.RootDialogクラス(RootDialog.cs)を見てみましょう(※ダイアログの詳細については次回解説します)。

最初に実行されるStartAsyncメソッドは、下にあるMessageReceivedAsyncメソッドを非同期で呼び出しています。MessageReceivedAsync メソッドではactivity.Textがユーザーから入力されたメッセージ文字列となります。入力されたメッセージの文字数をカウントして、context.PostAsyncでユーザーにメッセージを送り返しています。最後のcontext.Wait(MessageReceivedAsync)はメッセージを送り返した後、次にユーザーからのメッセージがあるまで待機しています。再びメッセージが入力されたら、MessageReceivedAsyncメソッドを実行します。これによって、ユーザーが何か文字を入力するたびに、毎回入力文字数を返す仕組みになっています。

リスト2:メッセージ処理を行っている部分

public Task StartAsync(IDialogContext context)
{
    context.Wait(MessageReceivedAsync);

    return Task.CompletedTask;
}

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;

    // calculate something for us to return
    int length = (activity.Text ?? string.Empty).Length;

    // return our reply to the user
    await context.PostAsync($"You sent {activity.Text} which was {length} characters");

    context.Wait(MessageReceivedAsync);
}

この、MessageReceivedAsyncメソッドを少しだけ変更して、ユーザーの入力メッセージをそのまま返す「オウム返しChatbot」に変えてみましょう。

リスト3:入力メッセージをそのまま返すように変更してみる

private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
    var activity = await result as Activity;

    await context.PostAsync($"「{activity.Text}」");

    context.Wait(MessageReceivedAsync);
}
オウム返しChatbot

オウム返しChatbot

このようにBot FrameworkのBot Builder SDK、Bot Applicationテンプレートを利用することで、ユーザーインターフェースや細かいロジックの仕様を考慮することなく、メッセージのやり取りの部分に集中して開発を行うことができるので、とても効率良く開発を進めることができます。

次回は、サンプルを用いたBot BuilderのDialog(ダイアログに)ついて解説します。

この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30