当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2017年2月9日木曜日

IBM Watson Workspaceのイベントを取得してみよう

皆さん、こんにちは。
寒い日が続いています。(自戒を込めて)体調管理には十分気を付けましょう。

さて、今日もIBM Watson Work Serviceについての話題です。

前回は、Node-RED上でプログラムを実行してIBM Watson Workspaceのスペースにメッセージを投稿するということをやってみました。

今回は逆に、「IBM Watson Workspaceのスペースにメッセージが投稿されたら、それを取得してTwitterにその内容をカスタマイズしてツイートしてみる」ということをやってみます。


流れは以下のようになります。
※IBM Watson Workspaceに行ったり、Node-REDに行ったりとするので間違えないようにしてください(アプリの設定をする関係上、このような順番になります)。

  1. IBM Watson Workspaceにスペースを作成する
  2. Node-REDアプリケーションを作成する
  3. IBM Watson Work Serviceでアプリを作成する
  4. webhook を設定したアプリケーションを作成する
  5. IBM Watson Work Serviceのアプリのwebhookを有効にする
  6. スペースにアプリを設定する
  7. IBM Watson Workspaceにメッセージを投稿する
  8. Twitterで投稿されたかどうかを確認する

1.IBM Watson Workspaceにスペースを作成する

前回の記事を参考にして、新しくスペースを作成します。
※面倒であれば、同じスペースを使ってもよいです。

2.Node-REDアプリケーションを作成する

今回もIBM BluemixにNode-REDのアプリを作成します。
wwsNodes - Waton Work Services Nodes for NodeRedを導入するのを忘れないようにしてください。
※面倒であれば、同じスペースを使ってもよいです。

3.IBM Watson Work Serviceでアプリを作成する

前回の記事を参考にして、新しくアプリを作成します。
※App IDとApp secretを控えておくのを忘れないように!
アプリが作成できたら、作成完了画面で「Listen to events」のリンクをクリックします。画面が変わるので、[Add an outbound webhook]ボタンをクリックします。
webhookイベントを生成する
Edit event Listenerのダイアログが表示されるので必要事項を入力/選択して[Save]をクリックします。
Webhook name:webhookの名前を入力します。任意の値で良いですが必須です!
Callback URL:「2.」で作成したNode-REDアプリケーションのURL(https://xxxxxxxx.mybluemix.net/になるはず)に、コールバックURLの値を入力します。
例)https://xxxxxxxx.mybluemix.net/webhook_callback
Events:「message-created」と「message-annotation-added」の2つにチェックを付けます。
イベントリスナの設定画面
すると、アプリにwebhookの設定が行われて、「Success! Your app has been updated.」というダイアログが表示されます。
ここで「webhook secret」が表示されるので必ず控えておきます!
webhookが設定された
また、Webhook nameとcallback URLも後で使うので覚えておきます(こちらは確認可能なので、メモしなくても大丈夫です)。
[Close]をクリックするとアプリの画面に戻ります。
追加したwebhookが表示されていることが分かります。
Webhookが追加された

4.webhook を設定したアプリケーションを作成する

「2.」で作成したNode-REDアプリケーションののフローエディタを開きます。
ここで、IBM Watson Work Serviceのアプリのwebhookイベントに対応するNode-REDのフローを作成します。
1つ目はwwsInのノードを追加します。
wwsInのノードを配置する
追加したらノードをダブルクリックして、設定します。
WWS Appのところにある鉛筆アイコンをクリックします。
wwsInノードの設定画面
アプリの情報を入力する画面に切り替わるので、先ほど作成したIBM Watson Work Serviceのアプリ情報を入力して[追加]をクリックします。
アプリの情報を入力
入力したら[追加]をクリックします。
先ほどの画面に戻るので、「Webhook ID」「Callback URL」「Webhook secret」を入力して[完了]をクリックします。
※Webhook IDはIBM Watson Work Serviceのアプリでは「Webhook Name」と表示されているものを入力します。
※Callback URLはIBM Watson Work Serviceで設定したURLのうち、最後の「/」より後ろを入力します(今回の場合、"/webhook_callback"です)。
Webhookの設定を入力する

2つ目はswitchノードを追加します。これは、IBM Watson Workspaceに投稿されたメッセージを条件分岐するのに使用します(何でもかんでもツイートするのが嫌なので)。
分岐判定用のノードを追加
追加したら、functionノードをダブルクリックして設定を行います。
switchノードの設定
Propertyは「msg.payload.content」にします。 これはスペースに投稿されたメッセージの内容を表しています。
分岐条件は、containsにして、その値はtestにします。
これはメッセージに"test"という文字が含まれていたら。ということを表します。
※ここの値に日本語文字列を設定しても反映されませんので、必ず英文字(シングルバイト)を設定してください(原因はわかってません、悪しからず・・・)

設定できたら[完了]ボタンをクリックします。

3つ目はfunctionノードです。ツイートする前に、このメッセージはIBM Watson Workspaceに書かれたものをツイートしてますよ。ということを追加します。
functionノードを追加
functionノードをダブルクリックして式を記述します。
functionノードの式

式の内容は以下の通りです。
msg.payload = msg.payload.content + "\nこのメッセージはIBM Watson Workspaceに投稿されたものです。";
return msg;


msg.payloadが実際にわたる値です。
そこにスペースに投稿された値(msg.payload.content)とオリジナルの値("\n・・・以降)を連結して代入しています。

4つ目がtwitterノードの追加です。
twitterノードは入力用と出力用の2つがあるので、出力用のノードを追加します。
ツイートするためのノード
追加したらノードをダブルクリックしてアカウントの定義を行います。
TwitterアカウントをNode-REDと連携する

設定できたら、[追加]、[完了]をクリックしてフローの画面に戻ります。
後は、各ノード同士を線でつなげていきます。
つなげたら画面右上の[デプロイ]をクリックしてアプリケーションをデプロイします。
アプリケーションをデプロイする

5.IBM Watson Work Serviceのアプリのwebhookを有効にする

IBM Watson Work Serviceのアプリの画面に戻ります。
wbhookのところにある[Enable]をクリックします。
Enableをクリックする
成功すると、[Enable]の表示が[Disable]に代わるだけで何も起きません。
逆に失敗した場合は、赤文字でメッセージが表示されます。その場合、コールバックURLのURLにアクセスできないなどの原因が考えられます。

6.スペースにアプリを設定する

最後にアプリをスペースに設定します(前回の記事の「3.スペースにアプリを設定する」を参考にしながら設定してください)。
これでアプリケーションが完成しました。


7.IBM Watson Workspaceにメッセージを投稿する

では、実際にスペースにメッセージを投稿してみましょう。
まずは、本当にツイートされるか、"test"を含む英文のメッセージを投稿します(日本語文字が含まれていると動作しません!)
スペースにメッセージを投稿

8.Twitterで投稿されたかどうかを確認する

さぁ、Twitterの方を見てみましょう。
確かにツイートされました。
ツイートされてる!

ちなみに、"test"が含まれないメッセージを投稿しても何もツイートされません。

どうでしょうか?
Node-REDはJSONデータを扱っているので、IBM Notes/DominoのREST APIも利用できます。
これを応用すれば、IBM Watson Workspaceに投稿されたメッセージをNotes DBに格納するなんてこともできるようになります。

ここから先は、みなさん各自でどのように応用するのかを考えてみてください。




それでは今日はこの辺で・・・




Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: