Azure Bot Service : Web App Bot の詳細を確認

[前回](https://qiita.com/kenakamu/items/13478609120a39b7f952)は Azure Bot Service の概要と、初めての Web App Bot 作成をしました。今回は作成した Web App Bot の詳細を見ていきます。

※尚、Azure Bot Service シリーズでは Bot Builder で開発されたコードの解説はしないため、Bot Builder シリーズを確認してください。

# ボットのコード

Web App Bot を作成した際いくつかのリソースが追加されましたが、ボットは App Service 上で動いています。またそこで動作するコードは以下の手順で取得できます。

1\. メニューより「ビルド」を選択し、「zip ファイルをダウンロード」をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/337dda26-20c7-47c0-6ec3-357e5d6ac27b.png)

2\. 暫くしたら zip をダウンロードできるので、「zip ファイルのダウンロード」をクリックして、任意のフォルダに保存。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/214ff586-055e-605c-a54f-ba11faf269e7.png)

3\. ダウンロードしたファイルを解凍し、ソリューションを Visual Studio で開く。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/1db0ae2d-58a2-5a89-ebad-41cc96211c52.png)

4\. EchoWithCounterBot.cs ファイルに実際のボットの処理が存在。

# ボットの設定

ボット管理メニューにある「設定」では、ボットの設定が行えます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/68d321bf-c6d4-8d10-577c-2dc719968c77.png)

- 各種プロパティ : アイコンや表示名、説明を任意に変更。
- メッセージング エンドポイント : ボットがホストされている、POST メソッドを実行する実際のフルアドレス
- OAuth 接続設定 : 他サービスへの接続が必要な場合に設定を行う。こちらについては別の記事で紹介。

# アプリケーション設定

ボットは、単に Web API アプリであり、今回の場合 App Services にホストされています。そこで Web アプリで利用されるアプリケーション設定についても見ていきます。

1\. ダウンロードして開いたソリューションにある appsettings.json を開いて中身がないことを確認。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/92d0e2b4-9f0f-8ad9-9a82-71c7b0d171f5.png)

2\. Azure ポータルに戻り、「アプリケーション設定」をクリック。ここで重要な設定は「botFilePath」および「botFileSecret」。botFilePath の値をクリックして確認。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/f58aea6c-d846-ef8f-190b-a5acc629c025.png)

3\. Secret も同様に確認して安全なところにコピー。

アプリケーション設定には設定があまりなく、ボットの設定は botFile にあることが分かります。

## ボット用構成ファイル

ボット用の構成ファイルは拡張子「.bot」となっており、アプリケーション設定からこのボットのファイルは「myfirstbot20181015.bot」であることが分かります。実際に中身を見ていきます。

1\. myfirstbot20181015.bot を開く。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/47bce3c7-c408-20ba-e5b8-2675723047b6.png)

2\. 設定がいくつかあるが、ボットの接続に使う値は以下の設定。

- type : endpoint
- name : production
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/89ea383c-70a1-666e-9524-60d9b09b6ad2.png)

3\. ここにある appId と appPassword は、Web App Bot 作成時に自動作成したものだが、暗号化されているため実際の値は不明。暗号化のキーはアプリケーション設定にあった「botFileSecret」。

4\. ここの値が使われている根拠は Startup.cs の以下コード。ここで botFileSecret と botFilePath を使って構成ファイルを読み取り、endpoint の情報を利用している。(開発中は development)

```csharp
var secretKey = Configuration.GetSection("botFileSecret")?.Value;
var botFilePath = Configuration.GetSection("botFilePath")?.Value;

// Loads .bot configuration file and adds a singleton that your Bot can access through dependency injection.
BotConfiguration botConfig = null;
try
{
    botConfig = BotConfiguration.Load(botFilePath ?? @".\BotConfiguration.bot", secretKey);
}
catch
{
    var msg = @"Error reading bot file. Please ensure you have valid botFilePath and botFileSecret set for your environment.
- You can find the botFilePath and botFileSecret in the Azure App Service application settings.
- If you are running this bot locally, consider adding a appsettings.json file with botFilePath and botFileSecret.
- See https://aka.ms/about-bot-file to learn more about .bot file its use and bot configuration.
";
    logger.LogError(msg);
    throw new InvalidOperationException(msg);
}

services.AddSingleton(sp => botConfig);

// Retrieve current endpoint.
var environment = _isProduction ? "production" : "development";
var service = botConfig.Services.Where(s => s.Type == "endpoint" && s.Name == environment).FirstOrDefault();
if (!(service is EndpointService endpointService))
{
    throw new InvalidOperationException($"The .bot file does not contain an endpoint with name '{environment}'.");
}
```

# ボット構成ファイルの復号化と暗号化

今回は Web App Bot からアプリを取得したため既に暗号化が終わっていますが、新規にボットを作った場合などは自分で暗号化して登録する必要があります。ここではボット構成ファイルの暗号化に関する手順を確認します。

尚、暗号化はファイル全体に行われているわけではなく、connectionString や appPassword に対して行われるため、構成ファイルを読むこと自体に復号化は不要です。

1\. npm のツールを入れるため、まず Node.js をインストール。

- [Node.js](https://nodejs.org/ja/download/)

2\. 以下コマンドを実行してツールを取得。

```shell
npm install -g msbot
```

3\. 以下コマンドで暗号化されているファイルの読み取り。

```shell
msbot list -b myfirstbot20181015.bot --secret <アプリケーション設定から取得したシークレット>
```

4\. 復号化された値を確認。

5\. 暗号化を解除したい場合は、以下のコマンドを実行。

```shell

msbot secret -c -b myfirstbot20181015.bot --secret <アプリケーション設定から取得したシークレット>
Your bot file and keys are now unencrypted
```

6\. 暗号化したい場合は以下のコマンドを実行。

```shell
>msbot secret -n -b myfirstbot20181015.bot
Your bot is encrypted with secret:
<新しいシークレット>
```

7\. 新しいシークレットは「アプリケーション設定」に登録して、ボットの「発行」を行う。

# Web チャットでテスト

前回の記事で紹介した通り、ポータルからボットを試すことが出来ます。

# 分析

各チャンネルの利用状況など分析結果を確認できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/1d19e116-0fc5-4fa1-4d45-7859d8f10c49.png)

# チャンネル

Facebook Messenger や Skype など複数のチャンネルの管理を行います。既定では Web チャットだけですが、前回の記事で Skype も登録しました。各チャネルの登録方法は [ボットをチャネルに接続する](https://docs.microsoft.com/en-us/azure/bot-service/bot-service-manage-channels?view=azure-bot-service-4.0) を参照。

# Speech priming

Cortana や Web チャットで音声入力をした際、LUIS で認識精度を上げることが出来ます。紐づく LUIS アプリの一覧が既定で表示されます。詳細はまた別の記事で紹介します。

# Bot Service の料金

パフォーマンスとコストのバランスをここで調整できます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/214116/567459ba-4a1d-e8b6-ead8-513cfcb7c444.png)

# まとめ

今回は Web App Bot を作成した際の設定類を確認していきました。次回は新規で開発したボットの登録手順について見ていきます。

次の記事へ
[目次へ戻る](https://qiita.com/kenakamu/items/6dc043cfc1f199032883)