オンプレ系インフラエンジニアがAzureを勉強する

いつか誰かの何かの役に立つと嬉しいな

Bot Framework ComposerでLINEボットを作ったときにつまづいたところ

はじめに

Bot Framework ComposerというGUIBot Frameworkベースのチャットボットが作れるツールがあります。
これの公式チュートリアルで、郵便番号を送るとお天気を教えてくれるチャットボットが作れるようなので触ってみたいと思います。

せっかくチャットボットならば、ローカルで動かすだけではつまらないのでLINEで動くボットにします。

 

参考サイト様

Microsoft公式サイト チュートリアル

docs.microsoft.com

 

上記を日本語でわかりやすく書いてくださっている記事

qiita.com

 

LINEボットにするときに参考にさせていただいた記事

qiita.com

 

作成方法(つまづいたところ)

作成方法といっても、上記参考サイト様の通りにやれば作れてしまうので、
ここでは私が詰まったところについて書いていきます。

 

Azureのリソース作成

Composerで作ったチャットボットをLINEなどで使えるようにするにはAzure Bot Serviceを使う必要があります。
そのために必要なAzureのリソースは下記のコマンド一つで作成することができます。
参考資料:Publish a bot to Azure - Bot Composer | Microsoft Docs

node provisionComposer.js --subscriptionId=<YOUR AZURE SUBSCRIPTION ID> --name=<NAME OF YOUR RESOURCE GROUP> --appPassword=<APP PASSWORD> --environment=<NAME FOR ENVIRONMENT DEFAULT to dev>

 

しかしこれがこのままではうまくいかず…
下記のようなエラーが出ます。

f:id:mitsunooon:20200715220358j:plain

 

参考サイト様をたどった結果、上記のコマンドに--tenantIdのオプションを追加することで解決しました。
--tenantIdにはディレクトリIDをいれます。

node provisionComposer.js --subscriptionId=<YOUR AZURE SUBSCRIPTION ID> --name=<NAME OF YOUR RESOURCE GROUP> --appPassword=<APP PASSWORD> --environment=<NAME FOR ENVIRONMENT DEFAULT to dev> --tenantId=<ディレクトリID>

f:id:mitsunooon:20200715220640j:plain

f:id:mitsunooon:20200715220438j:plain

 

CosmosDBの無料プラン化

上記のコマンドでAzureリソースを作成すると、こんなラインナップのリソースが作られます。

f:id:mitsunooon:20200715220517j:plain

 

CosmosDBがありますね。
実はこのCosmosDBは有料プランです。恐ろしい!
しかも今は作成した後にプラン変更というものができないようです。
なので、無料プランにするには、上記のコマンドを実行する前に、設定ファイルにパラメータを一つ追加します。

参考資料:Create a free-tier Azure Cosmos DB account


Composerで作成したbotスクリプトの中に[template-with-preexisting-rg.json]というファイルがあります。
この中の下記の部分に一行追加します。

"enableFreeTier": true

f:id:mitsunooon:20200715220852j:plain

Functionsは使わないつもりでいますが、念のため[function-template-with-preexisting-rg.json]のファイルにも同様のパラメータを入れておきます。

これでAzureのリソース作成のコマンドを実行すれば、CosmosDBは無料プランになっています。
App Serviceなど他のリソースも無償プランにしておけばかなり低コストでbotを使うことができます。

 

ボットの更新

ボットを作った後も、機能の追加や修正で更新することがあると思います。
いざ更新後に公開しようとすると、アクセストークンが期限切れしていて、Publishに失敗することがあります。

f:id:mitsunooon:20200715221245j:plain

 

その場合には、下記のコマンドでアクセストークンを再発行します。

az account get-access-token

参考資料:Publish a bot to Azure - Bot Composer | Microsoft Docs

 

再発行したアクセストークンをpublish profileに書き直して保存すればOKです。

f:id:mitsunooon:20200715221350j:plain

f:id:mitsunooon:20200715221400j:plain

 

Bot analyticsを使う

せっかく作ったボットなので、アナリティクスが見たいです。
下記の項目を設定するだけで簡単に確認ができます。

  • Application Insights インストルメンテーション キー
  • Application Insights API キー
  • Application Insights アプリケーション ID

参考資料:

Bot analytics - Bot Service - Bot Service | Microsoft Docs

Application Insights keys - Bot Service - Bot Service | Microsoft Docs

 

●Application Insights インストルメンテーション キーの取得

[リソースグループ]>[Application Insights]>[インストルメンテーション キー]の部分になります。

f:id:mitsunooon:20200715221554j:plain


●Application Insights API キーの取得

[リソースグループ]>[Application Insights]>[APIアクセス]>[APIキーの作成]

f:id:mitsunooon:20200715221716j:plain

 

表示名を記入し、[利用統計情報の読み取り]にチェックを入れてキーを生成します。

f:id:mitsunooon:20200715221833j:plain
このAPIキーは生成直後しか確認できないのでしっかりコピーしておきます。

f:id:mitsunooon:20200715221846j:plain


●Application Insights アプリケーション ID

[リソースグループ]>[Application Insights]>[APIアクセス]>[アプリケーションID]の部分になります。

f:id:mitsunooon:20200715221631j:plain

 

上記3つを下記に設定します。
[ボット チャンネル登録]>[設定]>[分析]

f:id:mitsunooon:20200715221938j:plain

 

保存が終わり、しばらくすると[分析]のところでボットの利用状況が確認できます。

f:id:mitsunooon:20200715221951j:plain

完成品

作ったLINEボットのQRコードです。

「天気」と送ると郵便番号からお天気を教えてくれます。

ぜひ触ってみてください。

f:id:mitsunooon:20200715222344j:plain


おわりに

ComposerはGUIなので、直感的に作りやすいと思います。

Azure Bot Serviceとの連携もしやすいので、いろんなチャンネルで使えそうなのも魅力です。

LUISやQnAmakerなどの自然言語処理系との連携も簡単そうなので、挑戦してみたいです。

 

ちなみに、今回の内容は下記勉強会でお話した内容になります。

cogbot.connpass.com

くらでべさんのYouTubeチャンネルにアーカイブが上がると思いますので
ぜひそちらも見てみてください。
Composerだけでなく、TypeScriptやC#でのBot Frameworkの使い方が見れます!
デモがたくさんなのでおすすめです!

その時の資料です

www.slideshare.net