はじめに
今回は、ボットの作成から公開までを行うことのできるAzure Bot Servicesについて紹介します。
Azure Bot Servicesとは
Azure Bot Servicesは、Azure上でのボットの作成、開発、公開などを行うことができるマネージドサービスです。一般的なボット同様、テキスト形式による対話インターフェースによってユーザーからのメッセージを処理するシンプルなボットの作成から、他のAzureサービスと組み合わせることで自然言語や音声の解釈のできる高機能なボットの作成まで可能となっています。
ボットとは
ここでボットとは何かについて簡単に説明します。ボットの語源はロボットから来ており、そのイメージの通り自分で思考して動作する機械のソフトウェア版と捉えると分かりやすいかと思います。現在普及しているボットとしては、以下のような種類のものがあります。
・Webクローラ
Webサイトを巡回してサイトの内容や画像などを収集するボットはWebクローラやスパイダーなどと呼ばれています。Webクローラが収集した内容をもとに検索エンジンを構築することなどが可能です。
・チャットボット
SkypeやSlack、Lineなどのチャットツール上で使用するボット。通常のユーザーと同様にアカウントを持ち、ユーザーから受け取ったメッセージの内容に応じてメッセージを返信します。
・コンピュータウイルスの一部としてのボット
コンピュータウィルス内に含まれるプログラムで、感染したコンピュータ内に常駐して不正な動作を行うものもボットと呼ばれています。パスワードやクレジットカード情報などを盗み取り、他のコンピュータへ報告するなど、利用者に気づかれないように動作するものがボットとして存在しています。
近年よく耳にするボットとは、厳密にはインターネットボットあるいはWebボットを指しており、インターネットを介して自動化されたタスクを実行するアプリケーションを意味しています。特に、メールに変わるコミュニケーションツールとしてチャットツールが普及していることもあり、さまざまなチャットボットの作成が特に活発に行われています。Azure Bot Servicesが対象とするボットも、上記の中ではチャットボットを代表とするメッセージのやりとりを行うボットです。
Azure Bot Servicesの提供する機能
Azure Bot Servicesによるボット開発では、以下の機能を使用することができます。
・Microsoft Bot Framework
Microsoft Bot Frameworkはボット作成のための開発フレームワーク(SDK)です。Bot Frameworkを使った実装で要件にあったボットを作成していき、それをAzure Bot Service上に展開することでボットを公開することができます。執筆時点でMicrosoft Bot FrameworkはSDKバージョン4まで提供されており、C#、JavaScript、Pythonによる実装が可能となっています。
・他のAzureサービスとの連携
特にAI関連サービスであるCognitive Servicesと連携することでボットに自然言語や音声の解釈を行わせられるため、より柔軟なボットを作成することができるようになります。
・さまざまなチャンネルとの連携
ユーザーとボットが対話する際に必要となるのが、ユーザーがボットに対してアクションを伝えるためのチャンネルです。チャットボットの場合であれば、Skype、Slack、Lineなどのメッセージングアプリがボットとのチャンネルとなります。
Azure Bot Servicesはマネージドサービスのため、すばやくボットを作成することが可能である一方で、Bot Frameworkによるコーディングによって高度な機能をもつボットの開発まで可能となっています。
Azure Bot Servicesで簡単なボットを作成してみよう
ここからは実際にAzure Bot Servicesを使用してボットを作成してみましょう。今回はボットの作成方法とチャンネルとの連携方法に着目するため、ボット自体は最も単純なオウム返し(エコー)ボットを作成します。
Bot Serviceの作成
ボットの作成にあたり、まずはボットが稼働する環境をAzure Bot Servicesから作成していきます。ブラウザでAzureポータルにログインし、メニューから「リソースの作成」を選択し、検索エリアに「bot」と入力して表示された「Web App Bot」を選択します。
Web App Botの概要画面が表示されたら、「作成」を選択します。
次に必要事項の入力を行っていきます。「ボット ハンドル」はAzure上でこのボットを一意に識別するためのIDです。任意の名称を入力します。「サブスクリプション」、「リソースグループ」はお持ちのものを使用し、「場所」には自身に近いロケーションを選択します。「価格」は「F0 (10K Premium メッセージ)」という無料で使用できるプランを選択します。「アプリ名」は任意のものを指定できますが、「ボット ハンドル」を入力すると同じ名称でアプリ名が入力されるので、特にこだわりがなければボットハンドルと同じ名称のものを使用します。
「ボットテンプレート」では、言語・用途別にあらかじめ用意されているテンプレートを選択することができます。ボットテンプレートを選択することで、用途にあったコードテンプレートを最初から使用することができます。「ボットテンプレート」を選択してボットテンプレートの選択画面を表示したら、「SDK言語」として「Node.js」を選択し、テンプレートとして「Echo Bot」を選択します。最後に「OK」を選択してボットテンプレートの選択画面を終了します。
Web App Botとして作成したボットは、App Service上のサービスとして公開されます。「App Service プラン/場所」では、App Serviceのプランを決定します。既存のApp Serviceプランか、新規作成でApp Serviceプランを作成します。なお、ここでApp Serviceプランを新規作成すると価格の変更ができないため、Web App Botを作成後に改めてApp Serviceプランの価格を変更します。 「Application Insights」はAzureのサービスを横断したログ管理のサービスです。今回はサンプルアプリであり、またApplication Insightsの利用には別途料金がかかるため、ここではApplication Insightsは「オフ」に設定します。 「Microsoft アプリIDとパスワード」は作成したアプリのIDとパスワードをAzure Active Directoryに登録する仕組みです。ここではデフォルトのまま(「アプリIDとパスワードの自動作成」が選択されている状態)とします。
ここまで入力すると、以下の図のような内容になるかと思います。最後に「作成」ボタンを選択してWeb App Botの作成を開始します。しばらく待つとWeb App Botの作成が完了します。
App Serviceプランのプラン内容変更
Web App Botが作成できたらまずはApp Serviceプランのプランを変更しましょう。上記の手順の通りにWeb App Botを作成した場合、新規作成したApp Serviceプランは課金対象となるプランで作成されてしまっています。これを無料プランに変更していきます。 「すべてのサービス」から「Bot Service」を選択し、先程作成したWeb App Botを選択します。その中から「すべてのApp Service設定」を選択します。
選択するとApp Serviceの画面に遷移します。この中からさらに「スケールアップ」を選択するとApp Serviceプランの価格変更画面が表示されるので、「開発 / テスト」タブの「F1」という無料プランを選択して「適用」を選択します。
しばらく待つとApp Serviceプランに無料プランが適用されます。
Webチャットでのボットの動作確認
現時点で既に、先程作成したWeb App Botはエコーボットとして完成した状態となっています。これは、ボット作成時にボットテンプレートとして「Echo Bot」という種類のテンプレートを選択したためで、このテンプレートに含まれているコードがエコーボットとして機能しています。 そこで、Azureポータル上からエコーボットの動作確認をしてみましょう。Azure Bot Servicesのメニューには、Webチャットと呼ばれるボットと対話できるクライアントツールが付属しているので、それを使ってボットに対してメッセージを送ってみます。 作成したBot Serviceの画面に戻り、「Webチャットでテスト」という項目を選択します。するとボットとのチャット画面が表示されます。画面下部にある「メッセージを入力してください」と表示されている箇所に何かメッセージを入力し、右側にある紙飛行機マークでメッセージを送信します。少し待つと、ボットが「You said」に続いて自分が入力した内容をエコーバックします。
チャット画面の右側が自身の送信したメッセージで、左側がボットからのメッセージです。このように、この画面では作成したボットの動作確認をいち早く行うことができるようになっています。なお、Webチャットの他にも「Bot Framework Emulator」というテスト用のツールも提供されています。こちらはPC上にインストールして使用するもので、ボットの開発中にローカル環境でWeb App Botを起動して動作確認を行いたい場合に使用します。Bot Framework Emulatorは次回、ボットの機能を拡張する際に使用する予定です。
Azure Bot Servicesをチャンネルと連携してみよう
ここからは作成したエコーボットをチャンネルと連携して使用できるようにしてみましょう。今回はチャンネルとしてSlackを利用し、エコーボットとのやり取りができるように構成していきます。 なお以降の説明は、連携可能なSlackのワークスペースをすでに有している前提で説明をします。
ボット用のSlackアプリケーションを作成する
Slackとの連携にあたり、まずはSlackアプリケーションを作成する必要があります。SlackアプリケーションはSlack上で動作するツールのことで、さまざまなサードパーティ製のアプリケーションを使用することができます。エコーボットに関しても、Slackアプリケーションとして作成することでSlackのワークスペースにインストールすることでWeb App Botと連携できるようになります。 Slackアプリケーションを作成するためには、まずSlack APIのサイトをWebブラウザで表示し、「Create New App」を選択します。
「Create a Slack App」というダイアログが表示されたら、Slackアプリケーションの名前とアプリケーションをインストールするSlackのワークスペースを選択し、「Create App」を選択します。
これでSlackアプリケーションが作成できました。次に、Web App Botとの連携のための設定を行っていきます。
Slackアプリケーションの設定
Slackアプリケーションの作成後に遷移した画面からWeb App Botとの連携のための設定を行っていきます。まずは画面左側にあるメニュー内から、「OAuth & Permissions」を選択します。この画面内の「Redirect URLs」の部分に、「https://slack.botframework.com」と入力して「Add」を選択し、最後に「Save URLs」を選択します。この設定により、SlackアプリケーションとAzure Bot Services間の連携が設定されます。
次に、「Event Subscriptions」を選択します。「Enable Events」の右側にあるトグルを操作してオン状態にし、「Request URL」の欄に「https://slack.botframework.com/api/Events/
同じ画面の「Subscribe to bot events」という項目を選択すると、Slack上での特定の操作やイベントをボットに検知させるための設定画面が表示されます。「Add Bot User Event」ボタンを選択してボットに検知させたいイベントとして、以下のイベントを追加していきます。
・message.im
・message.groups
・message.channels
・message.mpim
これらのイベントは、ユーザーがSlack上でメッセージを送信した際に発生するイベントです。メッセージの送信に反応してエコーバックするエコーボットにはこれらのイベントの検知を設定します。設定後は以下の図のように4つのイベントが追加されている状態で、画面下部の「Save Changes」ボタンを選択します。
最後に「Basic Information」の画面を表示します。「Add features and functionality」の項目を展開し、以下の図のように「Event Subscriptions」、「Bots」、「Permissions」の3項目が有効(緑色のラベルとチェックマークが付いている)となっていることを確認します。(無効となっている項目がある場合は、その項目を選択して設定をやり直します。)
項目が有効化されていることを確認したら、「Install your app to your workspace」を展開して「Install App to Workspace」ボタンを選択します。
すると画面が遷移してSlackアプリケーションをワークスペースにインストールするための確認画面が表示されるので、「Allow」を選択してインストールを許可します。
「Basic Information」の画面に戻り、「Install your app to your workspace」の横に緑色のチェックマークが付いていれば成功です。なお、この画面は以降の手順で再度必要となりますので、開いたままにします。
Web App BotにSlackアプリケーションの情報を入力する
Slackアプリケーションをワークスペースにインストールすることができたら、次はWeb App Bot側での設定を行います。AzureポータルでWeb App Botのページを表示し、「チャンネル」メニューを選択して「Slack」を選択します。
「Slack の資格情報を入力」という部分に、Slackアプリケーションの情報を入力していきます。入力する内容は、Slackアプリケーションの「Basic Information」のページ内の「App Credentials」という項目内にあります。この中から「Client ID」、「Client Secret」、「Verification Token」の3項目の内容をそれぞれコピーし、「保存」ボタンを選択します。
画面が遷移して、Slackアプリケーションのワークスペースに対する権限の確認画面が表示されます。「Allow」を選択してSlackアプリケーションへの権限付与を許可します。
以上でSlackとWeb App Botを連携する準備が完了しました。
Slackでボットとやりとりしてみよう
Web App BotをSlackに連携することができたら、Slack上でボットに対してメッセージを送信してみましょう。Slackでボットを追加したワークスペースを開くと、「Recent Apps」の一覧に先程連携したボットが追加されています。これを選択してメッセージを送信してみると、Azureポータル上のWebチャットでやりとりしたものと同様に、ボットからおうむ返しでメッセージが送信されてくるかと思います。
ここまで確認することができれば、SlackとWeb App Botとの連携は完了となります。
まとめ
今回はAzure Bot Serviceの概要とボットの作成方法、チャネルとの連携方法について説明しました。今回はボットを使い始める上で必要となる設定に焦点をあてて説明をしました。そのためボットの機能としてはとても単純なエコーボットを例に取り上げました。次回はボットの中身に変更を加えて、FAQを扱うボットへと変更(実装)していく手順について説明していく予定です。
WINGSプロジェクト 秋葉龍一著/山田祥寛監修
<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。一緒に執筆をできる有志を募集中