爆速！Watson Assistant入門

## はじめに

今回はIBM WatsonのAssistant(旧Conversation)という機能の使用方法を解説したいと思います。

この記事を最後まで読んでいただくと、あなたはオリジナルのBotを作成しAPIとして利用することができます。

なお質問などございましたら、コメント欄などにお気軽にどうぞ。

それでは早速はじめましょう。まずは[こちら](https://idaas.iam.ibm.com/idaas/mtfim/sps/authsvc?PolicyId=urn:ibm:security:authentication:asf:basicldapuser)からIBM Cloudのアカウントを作成してください。

次に[My IBM Dashboard](https://myibm.ibm.com/dashboard/?lnk=mmi_jpja)にアクセスして

![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/a4d453e0-1efe-ee43-8e15-31baceb892eb.png)

上記の起動ボタンをクリック。

##  ワークスペースを作成する

IBM Cloudのトップ画面です。画面上部の `リソースの作成` をクリック。

<img width="1425" alt="スクリーンショット 2018-05-13 12.20.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/34313607-e37f-ddc6-a852-5f03a4bed0ce.png">


画面左のmenu最下部に`Watson`があるのでクリック。 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/14147bbb-42aa-a4e9-6a84-cd9de3a516be.png)

Assistantをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/a64e9afe-f85d-4f1f-68ba-56a32c9f8c3d.png)

こんな画面が出るはず
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3133363533332f37653066653266312d393633352d386637332d643130642d3139333762333733366331642e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/136533/8616b201-3bad-c210-4021-9cfa43ef86b9.png)


画面下部にスクロールをすると以下の設定が表示される。ライトプランのままで作成ボタンをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/e59a3ea4-acca-d582-1bb3-ee8f673cfcd4.png)

作成するとこんな画面になるので`ツールの起動`をクリック。
<img width="1423" alt="スクリーンショット 2018-05-13 12.39.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/3ea483b9-97c5-89a0-d0f2-b75036658395.png">

新しいタブが開きます。`Workspaceタブ`をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/c86b5517-a671-1054-b6bd-c408c1252d7d.png)

`Create a new workspace` の `create+` ボタンをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/e64f7261-e38f-fc55-b5a7-7a02674800e5.png)


こんなポップアップが出現。任意の値を入力して `create` をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/ea859ff5-beda-9808-7f24-9458f4ccd89d.png)


ワークスペース作成完了。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/acbff689-5de9-84a1-d1fc-775e74ff6124.png)


## Intentsについて
Intent(意図・思考のような意味）
つまりユーザーが何をしたいのか判定するための概念です。

for example

- ピザが食べたい
- 旅行に行きたい
- 病気かもしれない
- ネットに接続できない
- ホテルを予約したい

### `Intent`を作成します。

`Add intent`をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/acbff689-5de9-84a1-d1fc-775e74ff6124.png)

## Intents概要

今回のサンプルはこんな感じに定義しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/09e955d3-db0a-83af-e3d1-23e0e621dbf9.png)


作成し終わったら画面上部の `←` ボタンをクリック。

### Content Catalogについて

<img width="1423" alt="スクリーンショット 2018-05-13 13.27.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/48c5ff42-7520-bc0f-a8d8-4fb6c743c88d.png">

よく使う会話などIntentを自動的に追加してくれる機能です。
割と最近追加された機能で筆者もまだ詳しくはないです。


## entityについて

目的語の部分にあたります
〜を、〜がのような

for example

- スマートフォン
    - スマートフォン
    - スマフォ
    - Smart Phone
    - IPhone
    - Android
- ゲーム機
    - PS4
    - PS3
    - プレイステーション4
    - プレイステーション3
    - 任天堂Switch
    - ニンテンドーDS
    - Wii U
    - Wii
    - Xbox One

## entity概要

Entitiesタブをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/103eacc2-7429-e569-1603-2fb764dda482.png)

Add entityをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/6e98ac19-99c4-45b6-97ff-578521c78f98.png)


今回のサンプルはこんな感じに定義しました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/e601d734-b882-08cd-2909-72eeb3c2b338.png)
作成し終わったら画面上部の `←` ボタンをクリック

## Dialogについて

Dialogは実際に会話のフローを定義します。フローはノードとよばれるブロックの連続で成り立ちます。

Dialogタブをクリックし、 `Creaet+` をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/dda0c6ce-20f7-7a85-db47-ad4761b2a125.png)

このような画面が表示される。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/4039aad6-3f01-8a49-444e-4b9cf124d542.png)



### 主な機能

![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/618945f5-e5b9-e308-574e-b6ca82c2f5b7.png)

#### if bot recognizes
対象のノードが選択される条件をしていします。
`Intent`, `entity`, `context` などが条件に指定できます。

#### Then respond with
返却するメッセージを指定します。（複数パターンを定義することができます）
`<? input.text ?>` はユーザーの入力値を保持しています。

#### And finally
最後に何をするかを設定します。
次のnodeの選択や、なにがトリガーで次のnodeを呼び出すかなどを定義できます。

- Wait for user input はユーザーの入力を待ちます。
- Jump toはレスポンスが終了次第、次のノードへ自動的に移動します。

### ノードを追加

Add nodeボタンをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/4039aad6-3f01-8a49-444e-4b9cf124d542.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/1b930fb1-3e27-ac37-2f9a-1f7147b052eb.png)

会議室を予約する会話を追加する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/136533/2db3413e-7e1a-5296-79a2-2d9ddecafe07.png)
作成できたらホテルを予約するノードも追加しましょう。

時間を指定できるようにします。EntitiesタブをクリックしてからSystem entitiesタブをクリック。

<img width="1420" alt="スクリーンショット 2018-05-13 13.35.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/0d36df9f-3b84-600d-1f4b-d42b1d9d012a.png">

sys-dateをonにします。
<img width="1418" alt="スクリーンショット 2018-05-13 13.38.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/8792edaa-f669-c1ac-a9c6-bdf96c9618da.png">

Dialogにまた戻ります。会議室を予約ノードに右にある○が連続しているところをクリックして `Add child node` をクリック。
<img width="1425" alt="スクリーンショット 2018-05-13 13.47.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/0c6876df-ee1e-d3b1-1a25-f5575ef03480.png">

以下のように値を設定してください。
<img width="1440" alt="スクリーンショット 2018-05-13 13.49.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/f8d0d9c0-94b0-3b3d-0d2c-647036c76477.png">

If bot recognizes:
@sys-date

Then respond with:
<?entities['sys-date']?.value.reformatDateTime('yyyy年MM月dd日')?>でございますね。予約しました。ありがとうございました！

## try it out
try it outというチャットをすぐにテストできる機能もあります。
Dialogを定義したら使って見ましょう。

<img width="1426" alt="スクリーンショット 2018-05-13 13.32.06.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/3274153c-cc85-7351-c831-254fdeba1ae2.png">

このようにDialogのテストを行うことができます。
<img width="1428" alt="スクリーンショット 2018-05-13 13.33.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/5985f650-db70-a5a3-402e-df18fd528af9.png">

<img width="1430" alt="スクリーンショット 2018-05-13 13.52.59.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/e8a95033-4c3c-203a-8a22-c9f796e68b29.png">

## APIとして利用する際

[APIリファレンス](https://console.bluemix.net/developer/watson/documentation)を参考にご自身のアプリケーションに設定します。（他にもSlackやLineを利用することもできます。）

Assistantのリファレンスは[こちら](https://www.ibm.com/watson/developercloud/assistant/api/v1/node.html?node&cm_mc_uid=97184057401815261872401&cm_mc_sid_50200000=89293461526187240167)

NodeとJavaとPythonで利用することができます。

認証情報は以下から確認することができます。
<img width="1421" alt="スクリーンショット 2018-05-13 13.58.15.png" src="https://qiita-image-store.s3.amazonaws.com/0/136533/6052e597-e6bb-bd04-5bef-31cdea3b8694.png">


[API Explorer](https://watson-api-explorer.mybluemix.net/)でAPIの動作確認をすることもできます。