#はじめに
Slackbot備忘録(1)に引き続き、今回はdocomo雑談対話APIを使ってbotと簡単な会話に挑戦。
※docomoさんのAPIに新たに自然対話プラットフォームが追加されました。
それに伴って、雑談対話APIは2018年6月を目途に廃止となるそうです。
詳しい変更対応は追記をご覧ください。
#docomo雑談対話APIからAPIを取得
##API取得方法
- ここからdocomoAPIを取得します。
- アクセスしたら、"申請する"ボタンをクリックします。
- ログイン画面が表示されるので、新規登録をクリックして登録処理を行ってください。
- ログインするとAPIの申請・管理画面に入れます。そこから"新規API利用申請へ"をクリックします。
- 利用申請画面に飛ぶので、必要な情報を入力して申請して下さい。
- 申請後、審査が通ると、APIKeyがもらえます。(審査は数分で終わります。)下の画像のAPI keyの部分を使うので、メモしておいて下さい。
#とりあえずコードをかいて動かしてみる
##my_mention.pyにコードを追加
前回(Slackbot備忘録(1))作成したmy_mention.pyに以下のコードを追加します。
@default_reply()
def default(message):
import requests
import json
import types
KEY = 'ここに取得したdocomoAPIを記入'
#エンドポイントの設定
endpoint = 'https://api.apigw.smt.docomo.ne.jp/dialogue/v1/dialogue?APIKEY=REGISTER_KEY'
url = endpoint.replace('REGISTER_KEY', KEY)
text = message.body['text']
payload = {'utt' : text, 'context': ''}
headers = {'Content-type': 'application/json'}
#送信
r = requests.post(url, data=json.dumps(payload), headers=headers)
data = r.json()
#jsonの解析
response = data['utt']
context = data['context']
#表示
message.reply('%s' % response)
##slackbotを起動
botと会話ができました。会話が成り立っているかは別です。
なかなか面白い返答が返ってくるので楽しいです。
##コードの中身解説
簡単に解説。
まず今回は @default_reply()
を使いました。
こちらは DEFAULT_REPLY
と同じ働き、つまりこのbot宛のメッセージで、どの応答にも当てはまらない場合に返したいメッセージをここに記入します。
botに送ったメッセージの取り出しは message.body['text']
で行っています。Unicode文字列形式です。
続いて、docomoAPIで使われるjsonのパラメータについて。
真ん中辺りの utt
という部分。
こちらは255文字以下で、ユーザの発話を入力します。
これを下の#送信という部分でjson形式で送ることによって返事が同じくjsonで返ってくるんですね。
そしてもうひとつ context
という部分。
こちらは255文字以下で、システムから出力されたcontextを入力することにより会話を継続するみたいです。つまり、このcontextを次の対話データ送信時に一緒に送信すると、会話がつながるそうです。
1回目のみを想定していたため、今回このcontext部分を空白にしたのですが、若干ちぐはぐな会話になってしまった原因はここにありました。
2回目以降を想定したバージョンを近日中に公開したいと思います。
そして最後に message.reply('%s' % response)
部分。
こちらはひとつ上の行で定義したresponse部分を表示してくださいという意味。
カウントアップとかしたいときに使われるみたい。
なんとなくSlackbotを使いこなせてきました。
次回はDjangoを使ったpythonのwebページ作成の紹介とかできればと…
追記
この度、docomoさんのAPIに新たに自然対話プラットフォームが追加されました。
それに伴って、雑談対話APIは2018年6月を目途に廃止となるそうです。
自然対話プラットフォームのAPIに切り替えたことで、URLやJSONの形式がもろもろ変更になったので備忘を乗せておきます。
API取得
雑談対話と基本的には同様です。APIの選択で、自然対話プラットフォームを選択しましょう。
APIKeyのメモを忘れずに。
ユーザー情報登録
今回新たな作業として、ユーザー情報を登録する必要があります。
そのため、下記画像のクロームの拡張機能(API のリクエストの確認ができる)を使って登録しました。
詳しいレスポンスサンプルはこちらから確認できます。
拡張機能を登録したら、下記の画像のように入力していきます。
Request URLにはhttps://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration?APIKEY=xxxxxxxxxxxxx
とし、APIKEYの部分に先ほど取得したAPIを入力してください。
Headerタブの内容は基本的にデフォルトのままで大丈夫です。
続いてタブのBodyに移動します。
下記のJsonを入力します。
{
"botId": "Chatting",
"appKind": "Smart Phone"
}
設定できたらSENDボタンをぽちっ
コードの変更
今回JSONの形式が変わったので何点か変更がありますが、基本的にやってることは同じです。
雑談対話のレスポンスサンプルはこちらになります。
修正したコードは以下の通りです。
@default_reply()
def default(message):
import requests
import json
import types
KEY = '取得したAPIキー'
#エンドポイントの設定
endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY=REGISTER_KEY' #変更
appid = '上記で取得したappID' #変更
url = endpoint.replace('REGISTER_KEY', KEY)
text = message.body['text']
#会話の入力
payload = {'language':'ja-JP', 'botId':'Chatting','appId':appid,'voiceText':text} #変更
headers = {'Content-type': 'application/json'}
#送信
r = requests.post(url, data=json.dumps(payload), headers=headers)
data = r.json()
#jsonの解析
response = data['systemText']['utterance'] #変更
#表示
message.reply('%s' % response)
大きな変更点としては、ユーザー登録が必要になったことと、
キーの名前や必須のものが変わったことでしょうか。
ですが、一度書き方がわかってしまえば、他のAPIにも面白いものがたくさんあるので試してみたいところです。
参考ページ
##前回のもの