Bot Framework Composerを使ってノーコードでボットを作ってみた

こんばんは。今日は、Bot Framework Composerを使ったボット開発に触れてみましたので、学んだことを整理がてらこの記事をまとめたいと思います。

#最近、データベースやら、チャットボットやら、機械学習やら記事のテーマが発散しててすみません笑 学ばないといけないことが急に増えまして・・がんばる。

それではまいります。

Bot Framework Composerって?

一言でいうと、「GUI上でノーコードでボットを開発できる」ツールです!

こんな感じで、チャットのフローをノーコードで定義してコードを生成できます。見るからにとても便利そうです・・・!

https://github.com/microsoft/BotFramework-Composer

GithubリポジトリのRelease Historyを見ると、2020年5月に初めてStable Buildが公開されたのち、1~3ヶ月に一度くらいのペースで更新が続けられているようです。

まだ新しいツールだからか、公式ドキュメントがなぜか英語しかないという・・・。日本語版が待たれますね・・

https://docs.microsoft.com/ja-jp/composer/introduction?tabs=v2x

上のページによると、このツールの特徴として以下が挙げられています。

  • ビジュアルを使ってテンプレートからボットアプリを簡単に作成できる
  • LUIS、QnAメーカーとの統合も簡単に構成できる
  • Power Virtual Agentsとの統合もできる(プレビュー)
  • Azure App Service, Azure Functionsへのボットのデプロイもできる
  • など・・・

Githubリポジトリはこちら。

https://github.com/microsoft/BotFramework-Composer

Bot Framework Composerを使ってEchoボットを作ってみる

これはもう実際に使ってみた方が早いので、以下手順でボットを作ってみました。

Bot Framework Composerのインストール

以下からBot Framework Composerをダウンロード・インストールしておきます。

https://docs.microsoft.com/ja-JP/composer/install-composer?tabs=windows

なお、このツールを利用するためには、以下のランタイムが必要ですので、まだであればあわせて上のサイト経由でインストールしておきます。

  • .NET Core 3.1以降
  • Node.js 14LTS以降

新しいアプリを作成

まずはアプリの新規作成です。QnA MakerやLanguageテンプレートでの作成もできるんですね。これもまた試してみたいと思いますが、今回はEmpty Botで。

次の画面ではボットの名前と、デプロイ先(Runtime Type)、ローカルのプロジェクト作成先を指定します。Runtime Typeは規定値のApp Service (Web App)のままとします。

アプリ作成ステップはたったこれだけ。これで空のアプリができました。

[いちおう] 空アプリの構成をみておく

一応、どんな空アプリができているか確認しておきます。

ボットプロジェクトを右クリックすると「Start Bot」オプションがあるので、選択するとボットがローカルで起動します。Open Web Chatで適当な会話を投げてみます。

Hello Worldと投げたらそんなの知らんわと返されました・・・冷たい・・

どういう動きなのでしょうか。

プロジェクトの「Unknown Intent」を選択すると、Unknown Intent(知らない意図)だった場合に”Sorry, I didn’t get that”を返す、という設定がされていることが確認できました。

じゃあこの知らない意図かどうかはどこで判断してるんだ?

公式Docによると、投げかけた言葉が理解されなかったか、Intent recognized triggerのどれにも一致しない場合に発火するトリガーと説明がある。

The Unknown intent trigger is used to define actions to take when a user input is unrecognized or no match is found in any of the Intent recognized triggers. You can also use this as your first trigger in your main dialog in place of the OnBeginDialog to perform any needed tasks when the dialog first starts.

https://docs.microsoft.com/ja-jp/composer/how-to-define-triggers?tabs=v2x#unknown-intent

Intent Recognized Triggerってなんだ?以下を見ると、LUISで意図が解釈されない場合、とあるので、今回のケースには該当しなさそう。となると”user input is unrecognized”の方の条件に一致して発火したっぽい。

https://docs.microsoft.com/ja-jp/composer/how-to-define-triggers?tabs=v2x

確かに、Greetingトリガーしか用意されてない。この状態でメッセージが送られると、一致するトリガーがなくUnknown Intentが発火されてしまうのかな?と理解した。

アプリケーションの開発

さて、基本的な構成を確認したところで、アプリの開発です。今回はEchoボットなので、こちらが投げかけた言葉と同じ言葉を返してくれたらOKです。

また、今回はUnknown Intentトリガーの中身の処理を変えて実現しようと思います。

Unknown Intentトリガーの中身のResponseテキストを、You said と変えた上に、{x}を選択して、”turn.activity.text”を選択すると、こちらが送付したメッセージを返してくれるようになります。

アプリのテスト

このアプリをテストしてみたいと思います。先ほどと同じ要領でWebチャットを開いてHello Worldとうつと・・・

おお、Echoが返ってきた!たしかに、C#コードを書くことなくEcho Botができてしまいました。簡単ですね。

[未解決問題あり] アプリのデプロイ

最後に、このボットをAzureにデプロイする手順も確認しておこうと思います。

Publishタブに進むと、まずはProfile(デプロイの設定)を作成しろといわれますので、Add newで追加します。

こんな感じで設定し

必要なAzureリソースの作成に進みます。

デプロイ先リソースの情報を埋めていきます。EmptyテンプレートのボットなのにLUISのRegionが必須になっているのは違和感がありますが・・・

次の画面に進むと、デプロイするリソースの選択になります。最低限必要なリソースに加えて、Optionalリソース(QnA MakerやLanguage, LUISなども)もすべてチェックがはいっています。(めっちゃデプロイさせようとするやん・・)これは今回不要なのでチェックを外しておきます。

最終的には、App Serviceと、Bot Service?だけをデプロイします。

デプロイが完了したらAzureポータルからリソースを確認します。想定通り、App Service (+App Serviceプラン)とBot Serviceがデプロイされていることが確認できました。

最後に、このアプリをテストしてみます。Azure Bot > Webチャットでテストを開くと・・

あれ?Welcomeメッセージでてこないし、チャット送っても反応しない・・?

チャネルに何かエラーが出ている模様。おかしいなぁ・・・

ちょっとこのエラーパッと解決できなかったので、またわかったら更新します。

There was an error sending this message to your bot: HTTP status code NotFound

いったんおしまい

参考文献

https://jpdsi.github.io/blog/azure-bot-service/bot-merry-christmas/

https://github.com/seosoft/BfCompQnaBot/blob/master/docs/02_composer_basic.md

この記事を気に入っていただけたらシェアをお願いします!

コメントを残す

メールアドレスが公開されることはありません。

ABOUT US
Yuu113
初めまして。ゆうたろうと申します。 兵庫県出身、東京でシステムエンジニアをしております。現在は主にデータ分析、機械学習を活用してビジネスモデリングに取り組んでいます。 日々学んだことや経験したことを整理していきたいと思い、ブログを始めました。旅行、カメラ、IT技術、江戸文化が大好きですので、これらについても記事にしていきたいと思っています。