自然対話API(docomo)+hubotによりBOTと雑談してみた

# 自然対話API(docomo)+hubotによりBOTと雑談してみた
## はじめに

Hubotにdocomoの[自然対話API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=natural_dialogue&p_name=api_usage_scenario)を導入することでBOTと雑談できるようにしてみました。

※docomoの雑談対話APIは2018年06月に終了し、新たに自然対話APIがリリースされたようです


## 自然対話APIの設定

- 1: [docomo Developer support](https://dev.smt.docomo.ne.jp/?p=login)にアクセスし、新規に登録する
- 2: docomo Developer supportにログイン
- 3: [新規API利用申請]でアプリケーションを登録
<img width="657" alt="2018-09-09_0.20.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/278224/2728668c-dafa-ffd0-f1b7-c8e4d53069b7.png">

必須項目は任意の内容を記入

```shell
  アプリケーション名：hogehoge
  アプリケーション概要：ユーザと雑談可能なBOT
  サービス開始予定日：20xx/xx/xx
  アプリケーションタイプ：ウェブアプリケーション
  コールバックURL：https://dummy
  提供者名：hoge
  サポートメールアドレス：hoge@hoge
```

<img width="656" alt="2018-09-09_0.26.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/278224/84a851f6-806d-d487-3dc9-3412d685616c.png">

API機能は`自然対話：雑談対話`をチェックする


- 4: アプリケーション登録後、[マイページ]→[API利用申請・管理]から`API Key`をメモ
- 5: API経由で[ユーザ登録](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=natural_dialogue&p_name=api_4_user_registration#tag01)を実施
  1. [POSTMAN](https://www.getpostman.com/)のインストール
  2. 以下の画像を参考に`API Key`や`URL:https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration`を記入し、Sendを押下
    ※hogehogeはマイページから取得したAPIに変更
    <img width="1204" alt="2018-09-09_0.35.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/278224/ea8f52f2-9b13-0188-c074-5be41af57807.png">
  3. レスポンスから`appId`を取得
<img width="1202" alt="2018-09-09_0.39.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/278224/3089482b-792a-a0d4-2ea0-be58228834ae.png">


## Hubot側設定

- 1: 必要パッケージのインストール

```shell
$npm install -g require
```

- 2: ./scripts/docomoapi.coffeeの追加

```coffeescript
module.exports = (robot) ->
  status = {}

  robot.respond /(\S+)/i, (msg) ->

    message = msg.match[1]
    HUBOT_DOCOMO_DIALOGUE_API_KEY = process.env.HUBOT_DOCOMO_DIALOGUE_API_KEY
    HUBOT_DOCOMO_DIALOGUE_APPID   = process.env.HUBOT_DOCOMO_DIALOGUE_APPID
    url = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY='+HUBOT_DOCOMO_DIALOGUE_API_KEY
    headers = {'Content-Type':'application/json'}

    d = new Date()
    appSendTime = d.getFullYear() + '-' + ('0' + (d.getMonth() + 1)).slice(-2) + '-' + ('0' + d.getDate()).slice(-2) + ' '\
                   + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()

    request = require('request');

    request.post 
      url: url
      headers: headers
      json: 
        language: "ja-JP"
        botId: "Chatting"
        appId: HUBOT_DOCOMO_DIALOGUE_APPID
        voiceText: message
        clientData: {"option": {"mode":"dialog","t":"kansai"}}
        appRecvTime: status['appRecvTime']
        appSendTime: appSendTime
      , (err, response, body) ->

        msg.send body.systemText.expression
        status =
          "appRecvTime": body.serverSendTime

```

自然対話APIに変更され仕様も変わった影響か(?)、自分の環境で上手く動作するパッケージやソースがありませんでした。
そのため、今回は以下のURLのソースコードを参考に作成しました。
※リクエストキーの値は適宜変更してください。
  
  1. https://gist.github.com/FromAtom/066215d061eb9837e77e
  2. https://github.com/bouzuya/hubot-docomo-dialogue/blob/master/src/scripts/docomo-dialogue.coffee
  3. https://github.com/toshimaru/hubot-docomochatter/blob/master/src/scripts/docomochatter.coffee
  4. https://github.com/mako09/hubot-wapuu-scripts/blob/master/docomo-dialogue.coffee


- 3: 環境変数の追加

  `HUBOT_DOCOMO_DIALOGUE_API_KEY`： APIキー
  `HUBOT_DOCOMO_DIALOGUE_APPID`： POSTMANで取得した`appID`

## 動作状況
<img width="281" alt="2018-09-09_1.22.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/278224/bf69d3a9-f8b5-b97c-32ce-c0f138291298.png">