文章をお嬢様風やギャル風の話し方に変換する期待のdocomo産APIを使ってみた

#はじめに
近年チャットツールの普及、AI、機械学習の発達によって、
チャットボットが加速度的に増えてきています。

私も流行りに乗ってナレッジベースから情報を参照してくれるチャットボットを作ってみたりしました。
しかし、普通にチャットボットを作ると文面が非常にお堅い感じになってしまいます。

![erhwheehj.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/ef3c417d-1279-72aa-4aeb-2f036403a7f5.png)


これでは機械に話しかけているようで非常に冷たいです。
チャットボットにはもう少し人に寄り添った話し方をして欲しいものです。

おそらくチャットボットを作ったことのあるエンジニアの方ならば
以下のようにbotの口調を変えようと苦心された方が多いかと思います。
![erhhjesjhehs.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/b87be16e-6d3f-d854-8b31-040adc054320.png)


#キャラクタ変換機能の自然対話API
こんな悩みを持った全国数千万のエンジニアを思ってか、
先日docomo Developer supportが提供している自然対話APIにキャラクタ変換機能が追加されました。
docomo Developer supportの詳細はこちら
https://dev.smt.docomo.ne.jp/?p=index

今回はチャットボットに組み込むまではせずに、実際に動かしてどのように文章が変換できるかを試してみます。
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=natural_dialogue&p_name=api_6_usage_scenario#tag01

#検証環境
requestsのライブラリが入ったpython3実行環境
docomo Developer supportのアカウント

#API使用準備
##APIの利用申請をしよう
下記のページから「申請する」をクリック
ログインしてない場合は先にログインしてください
https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=natural_dialogue&p_name=api_usage_scenario
![ahahahhe.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/3b430a4e-5f97-800b-f612-7b5d24d23d4c.png)



「新規API利用申請へ」をクリック
![gfjsrjrjawsj5.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/6d3b7937-242c-e100-a060-d7fff08ac599.png)


必須項目を入力してください
![haejhej.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/bbc9dcac-03a7-b606-506c-86e5f430bf85.png)

自然対話：キャラクタ変換をチェック
![ahheahahe.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/54322b61-810a-7285-7878-55671e933511.png)


確認をして完了です
![dhaehah.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/288b34df-3a75-2d66-0cb8-b3ccaeafac1a.png)


登録アプリケーション一覧に先程作成したものが増えているはずです。
![aehesheah.PNG](https://qiita-image-store.s3.amazonaws.com/0/181554/5fa72094-7f09-72d1-ae3e-abc2eae575f7.png)


これでAPIの利用申請は完了です

##ユーザ登録をする
次にpython3の実行できる環境に入ってください。
そして下記のpythonファイルを作成してください
KEY＝の部分は変更してください。

```
[centos@108-72-slackbot ~]$ cat chara_api.py

import requests
import json
import types

#APIKeyは先程のアプリケーション情報に書いてある自分のAPIKEYを入れてください
KEY = 'hogehogeAPIKRYhogehoge'

#エンドポイント指定
endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalCharaConv/v1/registration?APIKEY=REGISTER_KEY'
url = endpoint.replace('REGISTER_KEY', KEY)
# appKindも利用シーンに合わせて指定ください
payload = {'botId': "CharaConv", 'appKind': "Server"}
headers = {'Content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
print(r.json())

```

作成したファイルを実行してください。
appIdが返ってくるはずです。
これは後ほど使うのでメモっていてください。

```
[centos@108-72-slackbot ~]$ python3.6 chara_api.py
{'appId': 'hoge-hoge-hoge-hogehoge'}

```

#APIを叩いてみる
あとはAPIを叩くだけです。
下記のファイルを作成してください。
KEY＝とappID:は変更してください

```
[centos@108-72-slackbot ~]$ cat chara_api.py
import requests
import json
import types

#APIKeyは先程のアプリケーション情報に書いてある自分のAPIKEYを入れてください
KEY = 'hogehogeAPIKRYhogehoge'

#エンドポイント指定
#appIdには先程取得した値を入れてください
endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalCharaConv/v1/dialogue?APIKEY=REGISTER_KEY'
txt = "Qiitaブログに投稿しました。みんなに見てもらえると嬉しいな"
url = endpoint.replace('REGISTER_KEY', KEY)
payload = {'language': "ja-JP", 'botId': "CharaConv", 'appId': "hoge-hoge-hoge-hogehoge", 'voiceText': txt, 'clientData': {'option': {'t': "ojo"}}, "appRecvTime": "2018-06-01 00:00:00", "appSendTime": "2018-06-01 00:00:00" }
headers = {'Content-type': 'application/json'}
r = requests.post(url, data=json.dumps(payload), headers=headers)
print(r.json())
```

そして実行します！今回はお嬢様口調を指定してみました！

```
[centos@108-72-slackbot ~]$ python3.6 chara_api.py
{'systemText': {'expression': 'Qiitaブログに投稿しましたのよ。みんなに見てもらえると嬉しいですわ', 'utterance': 'Qiitaブログに投稿しましたのよ。みんなに見てもらえると嬉しいですわ'}, 'dialogStatus': {'commandId': '00000000000', 'task': {'taskId': '00000000'}, 'loopCount': '0'}, 'serverSendTime': '2018-06-28 17:53:26'}
```

"Qiitaブログに投稿しました。みんなに見てもらえると嬉しいな"
が
'Qiitaブログに投稿しましたのよ。みんなに見てもらえると嬉しいですわ'
に変わりましたね。いい感じです。
入力してから思いましたがQiitaって多分ブログじゃないですよね。

##他の口調も試してみる
コード内のojoを他に変えると口調が変わります。

```
'clientData': {'option': {'t': "ojo"}}
```

種類は執筆時点で下記になります

|パラメータ|口調|
|:-:|:-:|:-:
|指定なし|変換なし|
|ehime1|愛媛県今治市弁|
|ehime2|愛媛県四国中央市弁|
|ehime3|愛媛県松山市弁|
|kansai|関西弁|
|hakata|博多弁|
|fukushima|福島弁|
|mie|三重弁|
|maiko|舞妓風|
|ojo|お嬢様風|
|bushi|武士風|
|gyaru|ギャル風|
|burikko|ぶりっ子風|
|akachan|赤ちゃん風|

ギャルやぶりっ子を試してみましょう

```
[centos@108-72-slackbot ~]$ python3.6 chara_api.py
{'systemText': {'expression': 'Qiitaブログに投稿したんだけどぉ。みんなに見てもらえると嬉しいしぃー', 'utterance': 'Qiitaブログに投稿したんだけどぉ。みんなに見てもらえると嬉しいしぃー'}, 'dialogStatus': {'commandId': '00000000000', 'task': {'taskId': '00000000'}, 'loopCount': '0'}, 'serverSendTime': '2018-06-28 17:56:03'}

[centos@108-72-slackbot ~]$ vi chara_api.py
[centos@108-72-slackbot ~]$ python3.6 chara_api.py
{'systemText': {'expression': 'Qiitaブログに投稿したのだ。みんなに見てもらえると嬉しいんだにゃん', 'utterance': 'Qiitaブログに投稿したのだ。みんなに見てもらえると嬉しいんだにゃん'}, 'dialogStatus': {'commandId': '00000000000', 'task': {'taskId': '00000000'}, 'loopCount': '0'}, 'serverSendTime': '2018-06-28 18:00:56'}
```


#感想
文章を食わせるだけでいい感じに変えてくれましたね。
すでにあるチャットボットやTwitterbotに挟むと面白そうです！
私の作っているチャットボットにもいずれ組み込んでみたいものですね。

#API利用にあたって
開発や検証目的以上で本APIを使う場合は必ず下記の注意事項を確認の上で利用ください。

https://dev.smt.docomo.ne.jp/?p=common_page&p_name=attention