ServiceNowのOutbound REST MessageでWatson Assistant APIを起動する

# 概要

IBMのWatson AssistantによるChat BOT作成のために作成した[Watson Assistantでユーザーまたは部門を追加するチャットボットを作成する](https://qiita.com/sukkyxp/items/a3375382f17bff8556af)をServiceNowのOutbound REST Messageを使用して起動する。

## 前提条件
IBM Watson Assistant APIを使用するには、事前にIBM Bluemixへのアカウント登録と、Watson AssistantのLight版（無料版）の利用登録と、AssistantのWorkspaceの作成が必要だ。
AssistantのWorkspaceの作成方法については、[Watson Assistantでユーザーまたは部門を追加するチャットボットを作成する](https://qiita.com/sukkyxp/items/a3375382f17bff8556af)が参考になる。

## バージョン

ServiceNow : KINGSTONE
Watson Assistant API : 2018-02-16

# 手順

# ServiceNowでRest Messageの作成

ServiceNowのStudioのCreate Applicatio Fileで「Outbound Integrations」の「REST Message」を選択してCreateをクリックする。

Nameは任意の名前を入力し、End PointにはWatson Assistant APIにアクセスする下記のURLを入力する。

```URL
https://gateway.watsonplatform.net/assistant/api/v1/workspaces/a2bab5cd-970a-4d89-8a94-c6c186332362/message?version=2018-02-16
```

なお、workspaces/より右側の文字列は、Watson Assistantで作成したWorkspaceの実際のworkspace-idに置き換える必要がある。

また、最後のversion=2018-02-16の部分は、Assistant APIのバージョンを指定している。これにより、2018-02-16の日付に最も近いバージョンのAPIが起動することになる。

AuthenticationタブのAuthentication typeでBasic(BASIC認証）を選択し、Basic auth profileは、虫眼鏡アイコンをクリックし、Assistant APIを起動するための、ユーザー名とパスワードを設定する。（IBM Bluemixの認証用ではなく、Assistant APIにアクセスするためのユーザー名とパスワードを使用する）
![auth.png](https://qiita-image-store.s3.amazonaws.com/0/197947/15333ad9-733b-4d2f-bfa3-6dfdca614c34.png)

HTTP Requestタブでは、HTTP Headerに「Content-Type = application/json」を追加する。

![contenttype.png](https://qiita-image-store.s3.amazonaws.com/0/197947/44f7ba86-1d06-a4ef-a5d3-a1972083248c.png)

次にHTTP Methodsを追加する。

![httpmethods.png](https://qiita-image-store.s3.amazonaws.com/0/197947/87656000-6dda-40cc-9343-01b5c5408055.png)

Variable Substitionsにmessageとcontextのパラメーターを追加し、初期値を設定しておく。（これはテスト起動の時に使用される）

|パラメータ名|初期値|
|---|---|
|message|こんにちは|
|context|{}|


![variable substitutions.png](https://qiita-image-store.s3.amazonaws.com/0/197947/5514aa41-9227-7b17-d872-727afde61533.png)

次に、HTTP RequestタブのcontentにPOST送信するJSONメッセージを設定する。

![httpqueryparameters.png](https://qiita-image-store.s3.amazonaws.com/0/197947/a0743824-24ea-b823-77e5-25e802abd158.png)

```json
{
"input":{
  "text":"${message}"
},
"context":${context}

}
```

以上により設定は完了だ。

#動作確認

HTTP Method設定画面の中段付近のRelated Linksの「Test」をクリックする。

![test.png](https://qiita-image-store.s3.amazonaws.com/0/197947/a856c45c-8711-d4f0-f947-7542ca00bcb2.png)

設定されたEndpoint、Basic認証情報、Content-type、content、Variable Substitionsの初期設定にしたがって、APIが起動され結果が表示される。

![assistantresponse.png](https://qiita-image-store.s3.amazonaws.com/0/197947/2ec057e5-f54f-9a5f-f64b-8892139bd0fe.png)

status=200になっていたら起動成功だ。
Responseには下記のようにWatson Assistantの応答内容が下記の通りのJSONメッセージとして返ってきている。

```json
{
    "intents": [
        {
            "intent": "greetings",
            "confidence": 1
        }
    ],
    "entities": [],
    "input": {
        "text": "こんにちは"
    },
    "output": {
        "text": [
            "こんにちは。こちらサポートデスクです。用件をどうぞ！"
        ],
        "nodes_visited": [
            "node_4_1524918503718"
        ],
        "log_messages": []
    },
    "context": {
        "conversation_id": "dea8cf19-5f81-43e3-a177-f773dd58fd44",
        "system": {
            "dialog_stack": [
                {
                    "dialog_node": "root"
                }
            ],
            "dialog_turn_counter": 1,
            "dialog_request_counter": 1,
            "_node_output_map": {
                "node_4_1524918503718": [
                    0
                ]
            },
            "branch_exited": true,
            "branch_exited_reason": "completed"
        }
    }
}
```