はじめに

今回は、ボットの作成から公開までを行うことのできる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の検索

    Web App Botの検索

Web App 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設定を選択する

選択するとApp Serviceの画面に遷移します。この中からさらに「スケールアップ」を選択するとApp Serviceプランの価格変更画面が表示されるので、「開発 / テスト」タブの「F1」という無料プランを選択して「適用」を選択します。

  • App Serviceプランを変更する

    App Serviceプランを変更する

しばらく待つとApp Serviceプランに無料プランが適用されます。

Webチャットでのボットの動作確認

現時点で既に、先程作成したWeb App Botはエコーボットとして完成した状態となっています。これは、ボット作成時にボットテンプレートとして「Echo Bot」という種類のテンプレートを選択したためで、このテンプレートに含まれているコードがエコーボットとして機能しています。 そこで、Azureポータル上からエコーボットの動作確認をしてみましょう。Azure Bot Servicesのメニューには、Webチャットと呼ばれるボットと対話できるクライアントツールが付属しているので、それを使ってボットに対してメッセージを送ってみます。 作成したBot Serviceの画面に戻り、「Webチャットでテスト」という項目を選択します。するとボットとのチャット画面が表示されます。画面下部にある「メッセージを入力してください」と表示されている箇所に何かメッセージを入力し、右側にある紙飛行機マークでメッセージを送信します。少し待つと、ボットが「You said」に続いて自分が入力した内容をエコーバックします。

  • Webチャットでのエコーボットとのやりとり

    Webチャットでのエコーボットとのやりとり

チャット画面の右側が自身の送信したメッセージで、左側がボットからのメッセージです。このように、この画面では作成したボットの動作確認をいち早く行うことができるようになっています。なお、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」を選択します。

  • 新しいSlackアプリケーションの作成

    新しいSlackアプリケーションの作成

「Create a Slack App」というダイアログが表示されたら、Slackアプリケーションの名前とアプリケーションをインストールするSlackのワークスペースを選択し、「Create App」を選択します。

  • Slackアプリケーション名とワークスペースの選択

    Slackアプリケーション名とワークスペースの選択

これでSlackアプリケーションが作成できました。次に、Web App Botとの連携のための設定を行っていきます。

Slackアプリケーションの設定

Slackアプリケーションの作成後に遷移した画面からWeb App Botとの連携のための設定を行っていきます。まずは画面左側にあるメニュー内から、「OAuth & Permissions」を選択します。この画面内の「Redirect URLs」の部分に、「https://slack.botframework.com」と入力して「Add」を選択し、最後に「Save URLs」を選択します。この設定により、SlackアプリケーションとAzure Bot Services間の連携が設定されます。

  • SlackアプリケーションとAzure Bot Servicesの連携設定

    SlackアプリケーションとAzure Bot Servicesの連携設定

次に、「Event Subscriptions」を選択します。「Enable Events」の右側にあるトグルを操作してオン状態にし、「Request URL」の欄に「https://slack.botframework.com/api/Events/」を入力します。URL内の「Web App Botのハンドル名」の部分には、Web App Botを作成した際に使用したボットのハンドル名を入力します。URLが妥当なものであれば、入力後に「Verified」と表示されます。

  • Event Subscriptionsの設定

    Event Subscriptionsの設定

同じ画面の「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アプリケーションをワークスペースに追加する

    Slackアプリケーションをワークスペースに追加する

すると画面が遷移してSlackアプリケーションをワークスペースにインストールするための確認画面が表示されるので、「Allow」を選択してインストールを許可します。

  • ワークスペースへのSlackアプリケーション追加を許可する

    ワークスペースへのSlackアプリケーション追加を許可する

「Basic Information」の画面に戻り、「Install your app to your workspace」の横に緑色のチェックマークが付いていれば成功です。なお、この画面は以降の手順で再度必要となりますので、開いたままにします。

Web App BotにSlackアプリケーションの情報を入力する

Slackアプリケーションをワークスペースにインストールすることができたら、次はWeb App Bot側での設定を行います。AzureポータルでWeb App Botのページを表示し、「チャンネル」メニューを選択して「Slack」を選択します。

  • 連携チャンネルとしてSlackを選択する

    連携チャンネルとしてSlackを選択する

「Slack の資格情報を入力」という部分に、Slackアプリケーションの情報を入力していきます。入力する内容は、Slackアプリケーションの「Basic Information」のページ内の「App Credentials」という項目内にあります。この中から「Client ID」、「Client Secret」、「Verification Token」の3項目の内容をそれぞれコピーし、「保存」ボタンを選択します。

  • Slackの資格情報をコピーする

    Slackの資格情報をコピーする

画面が遷移して、Slackアプリケーションのワークスペースに対する権限の確認画面が表示されます。「Allow」を選択してSlackアプリケーションへの権限付与を許可します。

  • Slackアプリケーションへの権限付与を許可する

    Slackアプリケーションへの権限付与を許可する

以上でSlackとWeb App Botを連携する準備が完了しました。

Slackでボットとやりとりしてみよう

Web App BotをSlackに連携することができたら、Slack上でボットに対してメッセージを送信してみましょう。Slackでボットを追加したワークスペースを開くと、「Recent Apps」の一覧に先程連携したボットが追加されています。これを選択してメッセージを送信してみると、Azureポータル上のWebチャットでやりとりしたものと同様に、ボットからおうむ返しでメッセージが送信されてくるかと思います。

  • Slack上でエコーボットとやりとりする

    Slack上でエコーボットとやりとりする

ここまで確認することができれば、SlackとWeb App Botとの連携は完了となります。

まとめ

今回はAzure Bot Serviceの概要とボットの作成方法、チャネルとの連携方法について説明しました。今回はボットを使い始める上で必要となる設定に焦点をあてて説明をしました。そのためボットの機能としてはとても単純なエコーボットを例に取り上げました。次回はボットの中身に変更を加えて、FAQを扱うボットへと変更(実装)していく手順について説明していく予定です。

WINGSプロジェクト 秋葉龍一著/山田祥寛監修
<WINGSプロジェクトについて>テクニカル執筆プロジェクト(代表山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・雑誌/Web記事の執筆、講演等を幅広く手がける。一緒に執筆をできる有志を募集中