無料で使えるIBM Cloudライト・アカウントを使ってWatsonとSlackのBotと連携させてみましょう。(※2018年1月現在IBM Cloudライト・アカウントでNode-RED Starterが利用できるようになっていたので記事を更新します)
IBM Cloudライト・アカウント作成
IBMは2017年11月1日からクラウド開発基盤である「IBM Cloud」を開始しました。
これまで「Bluemix」ブランドとして提供していた各種クラウドサービスを統合したものです。
そしてIBM Cloudでは無料で使える「IBM Cloudライト・アカウント」も提供されています。
IBM Cloudライトは無料、無期限で使えますが幾つかの制限があります。
特に以下の2つは念頭においてください。
- 10日間開発なしでアプリを自動停止
- 30日間活動なしでサービスの自動削除
それではさっそく以下のURLからIBM Cloudライト・アカウントを作成しましょう。
主な特徴や他の制限事項なども記載しています。
「ライト・アカウントを今すぐ登録」をクリックすると各情報を入力するページが表示されます。
メールアドレス、名前、電話番号、パスワードを入力します。
登録すると以下の画面が表示されて、登録したアドレス宛に確認メールが送られます。
メールの確認をクリックすると登録は完了です。
IBM Cloudへログインするとダッシュボードが表示されます。
はじめてのログイン時は何も表示されませんが、アプリ開発をするとここに表示されます。
ダッシュボードがアプリを管理するメインのページになります。
アプリ開発をはじめる
IBM Cloudでアプリ開発をはじめる基本的な流れとして以下になります。
- カタログから開発するアプリの項目を選ぶ
- アプリに必要な機能などをカタログから選んでアプリと接続する
IBM Cloudでは作りたいものをカタログから選んで開発していくことになります。
カタログを開くには画面上部の「カタログ」をクリックします。
とても単純に見えますが、カタログの項目を選んだ後にそのアプリのワークスペースの作成や各種設定、プログラミングなどにそれなりの作業量が必要になります。
その後の普段の作業は、「ログイン>ダッシュボードでアプリ選択>プログラム修正や設定など」になるかと思います。
WatsonとSlackbotとの連携アプリ開発
まずこのアプリを開発するにはカタログから以下のものを使用します。
- Node-RED Starter
- Watson API
IBM Cloudライト・アカウントでもNode-RED Starterが使用できるようになっています。
Node-RED Starterを使ってアプリを作る準備
WatsonとSlackの連携アプリはNode-REDを使って作成します。IBM Cloudはアプリ開発ツールとしてNode-REDを採用しています。
Node-REDはサーバサイドスクリプトをビジュアルプログラムで作成できる開発ツールです。
IBM CloudではNode-RED Starterというのがカタログのボイラーテンプレートで選択できますが、これはライト・アカウントでは使用できません。
そこで、一部制限があると思いますが、ライト・アカウントでも選択できるNode-RED Starterを使用してアプリを開発していきます。
それでは始めていきましょう。
カタログのボイラーテンプレートからNode-RED Starterをクリックするとアプリ作成画面が表示されます。
適当にアプリ名を入力し、デプロイする地域は米国南部を選択します。
あとは自動で入力されます。入力したら作成ボタンをクリックします。
するとダッシュボードにCloud Foundryアプリが追加されます。
ダッシュボードへ行くには、画面左上のメニューから選択します。
そして、ダッシュボードに追加されたアプリの「経路」に表示されているURLをクリックします。
もしくは、作成したアプリを選択した時に表示される概要画面から、右上の「経路」プルダウンメニューからURLをクリックします。
するとブラウザの新しい画面でNode-REDのセットアップがはじまります。
Node-REDは使用する際に別途ログインが必要となるので、アカウントとパスワードを設定します。
「Go to your Node-RED flow editor」をクリックすると、初めての場合はユーザー名とパスワードを設定する画面が表示されます。
これはNode-REDを開くためのユーザー名とパスワードです。(以前はURLにアクセスできると誰でも作成しているアプリ画面を開くことができたので、その対策がされています)
以降はこのURLでNode-REDを開くにはユーザー名とパスワードを入力します。
そしてNode-REDを開くと、プログラミング作業画面が表示されます。
Node-REDの使い方について詳細は説明しませんが、ある程度直感的にわかるようになっているかと思います。
左ペインに一覧で表示されているノードをドラッグ・アンド・ドロップして右の画面に配置していき、各ノードを線で繋げることでプログラミングしていきます。
これでNode-REDを使ってアプリを作成する準備ができました。
次にWatson APIを使えるようにします。
Watson APIのConversationを設定
ここで作成するSlackbotとの連携アプリは、Watson APIのConversationを利用します。
これは、アプリに自然言語インターフェースを追加してエンドユーザーとのやり取りを自動化します。
つまり会話のパターンを設定して、入力に適した応答を自動でするAPIです。
これを使ってSlackbotと会話します。
それでは画面上部のカタログをクリックしてカタログを開いてください。
そしてWatsonカテゴリーにあるConversationをクリックしてください。
表示される作成画面で、適当なサービス名を入力(自動で入る名前でいいです)し、デプロイする地域は米国南部を選択してください。
画面下の作成ボタンを押して作成します。
作成できるとConversationを使うための設定ができるようになります。
そしてConversationのWorkspaceを選択する画面が表示されます。
もしログインを要求する画面が表示されてもログインボタンを押せば入力せずにWorkspace画面が表示されます。
Createボタンを押して今回のアプリで使用するConversationのWorkspaceを作成します。
次の画面で名前を入力してcreateボタンをクリックします。
作成したら表示される管理画面の「Launch Tool」ボタンを押してツール画面を開きます。
ツール画面ではConversionが動作するためにIntentsとDialogを構築します。
「Create new」をクリックすると、上部にIntents、Entities、Dialogのタブメニューが表示される作成画面になります。
まずはIntentsを作成します。
Intentsは言葉が意図する集まりをカテゴライズします。
ここでは、「#あいさつ」と「#お別れ」のIntentsを作成します。
IntentsタブのCreate newをクリックしてこれらのIntentsを作成します。
#あいさつでは、おはよう、こんにちは、こんばんは、どうも、どーも、ちわっす、など挨拶で使う言葉を最低5つ以上作成します。
#お別れでは、さよなら、ばいばい、またね、じゃね、じゃーね、ばいちゃ、などお別れするときに使う言葉を最低5つ以上作成します。
次にDialogを作成します。Dialogでは会話の流れを作成します。
DialogタブのCreateをクリックします。
すると、「ようこそ」と「その他」ダイアログがデフォルトで作成されます。
この2つのダイアログの間に、先程作成したIntentsに対応するダイアログを作成します。
ようこそダイアログの右にあるメニューをクリックして、「Add node below」を選択します。
追加された新しいノードをクリックして、中身を設定していきます。
まず「If bot recognizes:」を設定します。
Enter an intente …フィールドをクリックしてFilter by:のIntents:を選択します。
するとIntentsを選択できるようになります。
そして「Then respond with:」を設定します。Add a variation to this responseをクリックして#あいさつにカテゴライズされた言葉を受け取ると返信する言葉を入力します。
ここでは例として「こんにちは。ご機嫌いかがですか?」と入力しています。
同じように#お別れのダイアログも作成します。
作成できると以下のようになっているかと思います。
ここではThen respond with:に「ばいばい。またねー!」と入力しています。
Conversationでは正しく動作するかをテストすることができます。
画面右上にある吹き出しアイコンをクリックします。
Try it out画面が表示され会話を入力できます。
「おはよう」「ばいばい」を入力すると、それぞれ設定した返信が返ってきます。
正しく動作してる感じですね。
これで、Conversationの作成は完了です。これをNode-REDで使用するために、作成したConversationのWorkspaceIDをコピーしておきます。
画面の左メニューからダッシュボードへ戻り、表示される一覧の中から作成したConversationのメニューアイコンをクリックして、View detailsを選択します。
そして表示されるWorkspaceIDをアイコンをクリックしてコピーします。
それをメモして後で使えるようにします。
後ほどNode-REDのノードにこのWorkspaceIDを設定します。
作成したConversationをIBM Cloudで作成したアプリで有効にするために接続を行います。
アプリのダッシュボード画面から「接続の作成」ボタンを押します。
そして、表示されるConversationにあるConnectボタンを押して接続します。
これでWatson APIのConversationを使う準備が整いました。この後はNode-REDでプログラムを作成します。
SlackのBot作成
IBM Cloudと連携するSlackbotを作成します。
ここではBotを作成できるSlackのワークスペースがすでにあることとします。
Slack画面のメニューからApp管理をクリックします。
次に表示される画面でカスタムインテグレーションを選択してBotsをクリックします。
次に表示される画面の左Botアイコンの下にある「設定を追加」ボタンを押します。
するとBotが作成されます。
作成されたときに表示される画面にAPIトークンが表示されているのでこれをメモしておきます。
後ほど、Node-REDのノードにこのAPIトークンを設定します。
Node-REDでSlack連携をプログラミング
いよいよNode-REDを使って具体的にアプリをプログラミングしていきます。
Node-REDの使い方としては、画面中央に左にあるノードをドラッグ・アンド・ドロップで配置して、それぞれのノードを線で繋ぐだけです。
各ノードで必要な設定をして、繋ぎ終わると画面右上のデプロイをクリックして実行します。
今回のSlack連携プログラムは以下のノードを使います。
- Slack Bot In, Slack Bot Out (node-red-contrib-slack)
- conversation (Watson API)
- function (msg.payloadから文字列だけを抽出)
この内、Slackのノードはデフォルトでは左のメニューから選択できません。
なので、パレットの管理から「node-red-contrib-slack」ノードを追加します。
Node-RED画面右上のメニューからパレットの管理をクリックします。
そしてスライド表示される画面から「ノードを追加」タブをクリックします。
検索ワードに「slack」を入力するといくつかのノードが表示されます。
この中のnode-red-contrib-slackのノードを追加ボタンをクリックします。
すると画面左のノード一覧にslackノードが追加されます。
ここから、Slack Bot InとSlack Bot Outノードをドラッグ・アンド・ドロップして中央画面に配置します。
それから、IBM WatsonにあるConversationノードと、機能にあるfunctionノードも配置します。
それをそれぞれ以下のように繋ぎます。そして各ノードを設定します。
Slack Bot InとSlack Bot Outノードの配置と設定
SlackのノードはSlack Bot InとSlack Bot Outのどちらも設定内容は同じです。
配置したノードをダブルクリックして設定画面を表示します。
先程作成したSlackボットのAPIトークンをここで設定します。
Nameはノードの表示テキストです。
チャンネルを使う場合はChannelにチャンネル名を入力します。
SlackはダイレクトメッセージするとBotのメッセージを削除できないので、Channelを利用した方がいいかもしれません。Channelを使う時は、設定にChannel名を入力してください。
conversationノードの設定
conversationノードはIBM Watson一覧にあります。
配置したノードをダブルクリックして設定画面を表示します。
先程作成したWatson APIのConversionのWorkspaceIDを設定します。
Nameはノードの表示テキストです。
functionノードの設定
functionノードは機能一覧にあります。
これはconversationノードで出力されるのがオブジェクトなので、そこからConversationが返す文字列を抜き出してSlack Bot Outに渡すために、このfunctionノードにプログラムを記述します。
といっても一行以下の文を記述するだけです。
配置したノードをダブルクリックして設定画面を表示します。
以下のプログラムを記述して完了ボタンを押します。
return {payload:msg.payload.output.text[0]};
配置したノードを接続してプログラミング完成です。
全ての設定が終わるとNode-RED画面の右上にあるデプロイをクリックして完了です。
動作確認
それでは動作確認してみましょう。Slackの画面に戻って、先程作成したBot宛に「こんにちは」と送信してみましょう。
すると、Dialogで設定した「こんにちは。ご機嫌いかがですか?」とBotが返信してきたかと思います。
そして、お別れの言葉を入力するとBotは「ばいばい。またねー!」と返したかと思います。
まとめ
お疲れ様でした。いかがでしたか?IBM Cloudは設定や操作などの作業量が多くてプログラミングが少ないと思ったかもしれません。
これも慣れてくるともっと少ない作業量で迅速にできるようになるかもしれません。
今回のアプリもConversationのIntents、Entities、Dialogをもっと多くの設定をすれば複雑な会話もできます。
Watson APIはこの他にもライト・アカウントで使えるものがあるので、アイデア次第ではいろんなことができるかと思います。
11月1日時点では無料ではなかったAPIも、いくつか無料で使えるようになっていたので、時間の経過とともに増えてくるのかもしれません。
是非いろいろ挑戦してみてください。是非いろいろ挑戦してみてください。