Sebastienでボットを喋らせて、Clovaとボット同士の会話をさせる

Sebastienについては[こちら](https://qiita.com/hiroka/items/30d673e8c8ba54afbf45)

## 作るもの（動画）
<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">SebastienとClovaの会話: <a href="https://t.co/SrNUh3PNu6">https://t.co/SrNUh3PNu6</a>、<a href="https://twitter.com/YouTube?ref_src=twsrc%5Etfw">@YouTube</a> がアップロード</p>&mdash; Hiroka Koizumi (@hirokanet) <a href="https://twitter.com/hirokanet/status/915789792117444608?ref_src=twsrc%5Etfw">2017年10月5日</a></blockquote>
<script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

## 準備するもの
- Googleアカウント、またはｄアカウント
- AWSアカウント、LambdaとAPI Gatewayの知識
- LINEのWave、Android端末

## 作業工程
1. UDSにデバイスを設定
2. アプリをインストール
3. DDSにボットを設定
4. AWSに接続
5. Clovaと会話させる

### 1.UDSにデバイスを設定
Googleアカウントを取得し、[UDS](https://users.sebastien.ai/)にアクセスします。
<img width="927" alt="スクリーンショット 2017-10-03 14.29.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/121909/98c3f06a-934a-1f00-172d-0f81e56808ee.png">

dアカウントでもログインできます。
利用規約に同意して進みます。

<img width="1195" alt="スクリーンショット 2017-10-03 14.31.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/121909/a5e5d204-f5a5-d814-f3e7-ebf314f3eb27.png">

新規デバイス登録画面が出ます。本来はここでデバイスを登録するのですが、現在はトライアル版のため登録できません。次に進みましょう。

### 2.アプリをインストール
Android端末でPlayストアを起動し、「cotobadesign」を検索すると見つかる対話アプリをインストールします。

<img width="430" alt="スクリーンショット 2017-10-03 14.39.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/121909/80c6091d-17a5-8b8d-2943-eaaf2faf6ece.png">

起動して先ほどと同じGoogleアカウントでログインすると、認証が自動で行われます。
UDSへ戻って画面をリロードしてみてください。

<img width="1180" alt="スクリーンショット 2017-10-03 14.41.27.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/121909/b30b1575-9677-ecad-4a7e-a93b7f90a0cd.jpeg">

SHADOWSの欄に、DOCOMOのTrialが出現しました。
SHADOWとは、大量にボットを作ったときに紐付けることが出来る単位です。今回は、SHADOWやデバイス追加について気にせず先へ進みます。

<img width="362" alt="スクリーンショット 2017-10-03 14.48.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/121909/300139ac-8a78-0735-ed96-ea1ea2b8afe5.png">

開発したボットは有効化しないと動きません。左のアイコンをクリックしてプルダウンを出し最下段の「サービス追加」画面から、ボットの有効化を行います。

<img width="1055" alt="スクリーンショット 2017-10-03 14.49.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/121909/2d15d92b-fba7-f673-b971-d1c5950341b1.png">

今は何もないですね。先にボットを開発しましょう。

### 3.DDSにボットを設定
先ほどと同じアカウントで、[DDS](https://developers.sebastien.ai/)にログインします。利用規約に同意して進みます。

[リファレンス](http://docs.sebastien.ai/dds/tutorial.html)に詳しく載っていますが、デフォルトで用意されているシステムCGSを使えば天気やニュースなどを呼び出すボットが簡単につくれます。

では、クローバと会話するボットを作りましょう。こんな感じで設定します。
![スクリーンショット 2017-10-05 12.48.27.png](https://qiita-image-store.s3.amazonaws.com/0/121909/61e859a3-5604-2554-b051-117ea66f00cd.png)

作成したボットは、ユーザダッシュボード（UDS）に出現します。忘れずにボットを有効化してください。
![スクリーンショット 2017-10-05 12.19.32.png](https://qiita-image-store.s3.amazonaws.com/0/121909/5ac92292-f6a6-5426-0aaf-af02adf8a8fa.png)

ボットに好きな言葉を喋らせようとすると、コードを書く必要があります。ここでは、AWSのLambdaを使います。

### 4.AWSに接続
Lambdaのテンプレートを選択します。PythonでAPI Gatewayを使うテンプレートで作成します。
![スクリーンショット 2017-10-05 11.44.44.png](https://qiita-image-store.s3.amazonaws.com/0/121909/4d2e414a-0e34-bb93-c42c-37d1428295dd.png)

このように設定します
![スクリーンショット 2017-10-05 11.46.41.png](https://qiita-image-store.s3.amazonaws.com/0/121909/5ccb05b3-a58e-2e67-ed01-9baf85b0838e.png)

定型文を返すPythonコードです。

```
# coding: UTF-8
import logging
import json

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.info('Loading Lambda function')

def lambda_handler(event, context):
    data = json.loads(event['body'])
    log('data = {}'.format(data))

    bot_id = data['bot_id']
    user_id = data['user_id']

    body = {
        "error_code": "success",
        "status": "true",
        "bot_id": bot_id,
        "user_id": user_id,
        "params": {
            "status": "true",
            "message": 'あ、、、い、いや。何でもないです。'
        }
    }
    response = {
        'statusCode': 200,
        'body': json.dumps(body)
    }
    log('response = {}'.format(response))
    return response

def log(message):
    logger.info(message)
```

保存したら、API Gatewayでデプロイします
![スクリーンショット 2017-10-05 11.53.28.png](https://qiita-image-store.s3.amazonaws.com/0/121909/9adb44a1-21da-c7ff-69f6-8f4b116b9232.png)

ステージの「URLの呼び出し」をコピーします。
![スクリーンショット 2017-10-05 11.54.09.png](https://qiita-image-store.s3.amazonaws.com/0/121909/4f08f5e7-dfd0-cdf0-2702-c18d79074ff1.png)

デベロッパダッシュボード（DDS）へ戻って、Endpoint Settingへ貼り付けましょう。URLの最後にメソッド名をつけるのを忘れずに。
![スクリーンショット 2017-10-05 11.55.20.png](https://qiita-image-store.s3.amazonaws.com/0/121909/a265a3cc-abe4-0a85-d0ce-c9412147aaa0.png)

DDSの画面右でテストをしましょう。
まずは、(Invocation name)を呼んで、(Invocation name)をお願い、などと発言し、ボットを呼び出します。

![スクリーンショット 2017-10-05 11.58.24.png](https://qiita-image-store.s3.amazonaws.com/0/121909/f6669c03-150f-a4fb-c730-32e8e984bfa2.png)

「こんにちは」と、発言します。

![スクリーンショット 2017-10-05 12.50.51.png](https://qiita-image-store.s3.amazonaws.com/0/121909/e6659ab0-a7c5-fc97-0ea8-60bc6203bc91.png)

先ほどの定型文が返ってきました。その後に、Goodbye messageがつながっています。Goodbye messageを設定しなければ、会話を終わらせずに続けることが出来ます。

### 5.Clovaと会話させる
Androidアプリを立ち上げ「(Invocation name)を呼んで」と発言すれば、ボット同士の会話が始まります。
「クローバ、◯◯」などと発言の前に「クローバ」を入れれば、Clovaが反応してくれます。Goodbye messageを設定せずにNLUを使えば、会話のバリエーションを増やすことも出来そうですね。