かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azure Bot Services でボットを公開するための最小のコードと手順

Azure Bot Services にボットを公開する最小のコードと手順をやってみようと思います。

というのも、必要最低限を把握してないとその他の応用の部分がどのコードなのかっていうのが把握しにくいと思うので自分は最低限のコードを組むのは一回流行ってる気がします。 いらないと思うものを省いてスリムにね。

ということで、ASP.NET Core の空のプロジェクトからスタートして最終的に Azure にデプロイして動かしてみたいと思います。

プロジェクトの作成

Visual Studio 2017 で ASP.NET Core Web アプリケーションを作成します。空のプロジェクトをさくっとね。HTTPS も特に今はいいのでオフにしてます。

f:id:okazuki:20190223163025p:plain

Bot Framework SDK の ASP.NET Core との統合をしてくれるパッケージを NuGet で入れます。 パッケージ名は Microsoft.Bot.Builder.Integration.AspNet.Core です。

最小ボットのコードの追加

では、ボットのクラスを作ります。EchoBot とかいう名前で IBot インターフェースを実装したコードを追加します。ボットの対話処理のエントリーポイントになるクラスですね。OnTurnAsync の中にボットでやりたいことを書きます。

using Microsoft.Bot.Builder;
using Microsoft.Bot.Schema;
using System.Threading;
using System.Threading.Tasks;

namespace MinimumBot
{
    public class EchoBot : IBot
    {
        public async Task OnTurnAsync(ITurnContext turnContext, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (turnContext.Activity.Type == ActivityTypes.Message)
            {
                await turnContext.SendActivityAsync(turnContext.Activity.Text);
            }
        }
    }
}

ボットのクラスが出来たので、Bot Framework SDK にこれが俺のボットだよ!っていうのを教えてあげます。また、ASP.NET Core で Bot Framework SDK の初期化処理を書きます。

Startup.cs を開いて Configure メソッドを以下のようにして Bot Framework を使うというのを書きます。

// using Microsoft.Bot.Builder.Integration.AspNet.Core;
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseBotFramework();
}

そして、ConfigureServices メソッドに先ほど作ったボットのクラスの登録処理を書きます。

public void ConfigureServices(IServiceCollection services)
{
    services.AddBot<EchoBot>();
}

ローカルで動作確認

デバッグ実行して URL を確認します。そして、Bot Framework Emulator (V4) を起動してファイルメニューから New Bot Configuration を選択して先ほどの URL に /api/messages を追加したものを指定します。あとは適当に名前を入れて Save and connect します。

f:id:okazuki:20190223164218p:plain

Azure に公開

では、Azure で Web App を一つ作ります。そして、作成した Web App の URL を控えておきます。

続けて Azure に Bot Channels Registration を作成します。日本語だとボット チャンネル登録ですね。作成時のメッセージング エンドポイントに先ほどゲットした Web App の URL に /api/messages を追加したものを設定します。

ボット チャンネル登録をデプロイしたリソースグループのデプロイを開くとボットチャンネル登録をデプロイしたときのログが見れるので、それの入力から APPIDAPPSECRET をコピーして控えておきます。

そして、ボットのアプリの Startup.csConfigureServices メソッドに、その値を設定する処理を追加します。

public void ConfigureServices(IServiceCollection services)
{
    services.AddBot<EchoBot>(options =>
    {
        options.CredentialProvider = new SimpleCredentialProvider("<ここに APPID>", "<ここに APPSECRET>");
    });
}

追加したら先ほど作成した Web App にデプロイします。

動作確認

ボットチャンネル登録の Web チャットでテストを選択するとチャット画面が出るので適当に文字を入力して動くことを確認します。

f:id:okazuki:20190223171000p:plain

まとめ

これが多分最低限だと思います。

あとは Bot Framework SDK で提供されている便利な設定ファイルの読み込みクラスや、対話の状態を管理してくれるダイアログ関連のクラスや、状態管理のクラスや、その他サービスとの連携クラスなどを組み込んでいく感じになります。 Bot Framework SDK 使う人は、ボットとして必要最低限必要なコードがこれで、残りの追加のコードでは何をしてるのだろうというのを把握したうえで書いたり読んだりすると、理解が捗ると思います。

ということで、LINE も対応したみたいだし流行るといいな。