はじめに
前回は「IBM Watson Conversation Service」と、弊社のリアルタイムチャットソリューション「Spika for Business」(以下、Spika)を連携しました。
今回は、Microsoft Azure(以下、Azure)にて提供されている「Azure Bot Service」と「Azure Functions」を使い、Spikaにチャットボットを作成してみたいと思います!
Azure Bot Serviceとは
Azure Bot Serviceは、Microsoft Azureから提供されているBotを簡単に作成できるサービスです。
※ 現在(2017年4月時点)はプレビュー版です
Microsoft Bot FrameworkとAzure Functionsで構成されており、以下のような特徴があります。
・5つのテンプレートからBotを作成することができる
・ブラウザ上の開発環境が提供されているので、作成後すぐに開発・使用できる
・LUISやQnA MakerなどのMicrosoft Cognitive Servicesと連携するためテンプレートも用意されている
さらに、作成したBotをSlackやSkype、Facebook Messengerなどのチャットサービスで使用することが簡単にできます。
構成
今回は、以下の構成でAzure Bot Serviceで作成したBotを、Spikaで使用できるようにしました。
[構成図]
Spikaには前回も記載したとおり、Webhook機能が搭載されているので、外部サービスとのメッセージのやりとり(つまり、Bot連携)が簡単に行えます。
Webhook機能でメッセージの送受信ができるように、Azure Functionsを経由してAzure Bot Serviceと連携しています。
Azure Bot Serviceには、作成したBotをREST APIとして使えるようにするDirect Line APIという接続方法が提供されています。
今回は、BotをこのDirect Line APIを利用して、 Azure Bot ServiceとAzure Functions間のやりとりを行います。
Azure Functions
Azure Functionsについては、以前Azureを触ってみる(Azure FunctionsとAzure SQL Databaseの連携)という記事にてご紹介させていただいたので、詳細はそちらをご参照ください!
まず、Azure PortalからFunction Appを作成します。
Function Appに実装する処理は以下の通りです。
[参考資料:webhook または API Azure Function を作成する]
SpikaからWebhookで送信されたメッセージを受け取る
受け取ったメッセージをAzure Bot Serviceに送る
Azure Bot Serviceからの返答メッセージをWebhookでSpikaに送る
「Get function URL」ボタンをクリックすると、このFunctionのURLが表示されます。
このURLをコピーします。
コピーしたURLをSpikaのWebhookの送信先URLとして設定します。
ここで合わせて受信用のWebhookも作成しておきましょう(FunctionからSpikaへのWebhookにて使用します)。
これで、対象のルームからメッセージを送信すると、Function Appにデータが送信されます。
Azure Bot Serviceを使ってみる
Azure PortalからAzure Bot Serviceを作っていきます。
Botのデプロイが終わると、以下画面が表示されるので、案内にそってApp IDを作成します。
ここで生成されるパスワードは1度限りしか表示されないので、確実にコピーして保存しましょう。
言語はC#とNode.JSが選択できます。今回はNode.JSを選択。 Botのテンプレートは、Basicを選択してみます。
しばらくすると、Botが編集できるようになります。 ブラウザでも開発できますが、ソース一式をダウンロードできるので、お好みのエディタで開発することもできます。
ChannelsタブからDirect Lineの「Add」ボタンをクリックします。
Direct Lineの設定画面に遷移するので、「Add new site」を選択し、名前を設定します。 今回はSpikaと接続するので、「Spika」としてみました。
作成後に発行される「Secret keys」をコピーしておきます。
Direct Line API
ここで、Azure Function Appに戻ります。
BotとSpikaがやりとりをするための処理が必要なので、Direct Line APIの処理をFunction Appに実装しました。
[参考資料:Direct Line APIのドキュメント]
conversation IDを取得する
Botにメッセージを送る
Botから返答メッセージを受け取る
1.conversation IDを取得する
先ほどコピーした「Secret keys」のうちの一つをAuthorizationとしてheaderに設定しHTTPリクエストを送るだけです。 送信先のエンドポイントは、「https://directline.botframework.com」です。
レスポンスの「conversationId」を使用し、以降のメッセージ送受信を行います。
2. Botにメッセージを送る
HTTPリクエストのbodyのtextに、Botに送るメッセージを送信するだけです。
これで、Botへのメッセージ送信は完了です。
3. Botから返答メッセージを受け取る
最後に、Bot側で生成された返答メッセージを受け取る必要があります。 ここでは、bodyに何も設定する必要はありません。
最初に送ったメッセージと返答メッセージとが配列に入って返されます。
Spika for Businessと連携する
Azure Bot Serviceでは、受け取ったメッセージに「!!」をつけて返答するBotを作成しました。
こちらが、3の返答メッセージを受け取った結果です。
「テストです。」と送信すると、「テストです。!!」と返ってきました
前回同様に、Spika側にWebhookを設定すると、以下のようにBotと連携することができました!
今回、受け取ったメッセージに「!!」をつけるだけの処理でしたが、Azure Bot Serviceでは、Microsoft Cognitive Servicesの各サービス(QnA MakerやLUIS)と簡単に連携できるので、様々な用途に応じたBotを作成することができそうですね!
「Spika for Business」を使用してみませんか?
ご興味持った方はisana.netまでお問い合わせ下さい。 詳細・お問い合せはこちら
Comments