LoginSignup
6
5

More than 5 years have passed since last update.

Slackbot備忘録(2) ~docomoAPIを使ったbot~

Last updated at Posted at 2017-09-30

はじめに

Slackbot備忘録(1)に引き続き、今回はdocomo雑談対話APIを使ってbotと簡単な会話に挑戦。
※docomoさんのAPIに新たに自然対話プラットフォームが追加されました。
それに伴って、雑談対話APIは2018年6月を目途に廃止となるそうです。
詳しい変更対応は追記をご覧ください。

docomo雑談対話APIからAPIを取得

API取得方法

  1. ここからdocomoAPIを取得します。
  2. アクセスしたら、"申請する"ボタンをクリックします。
  3. ログイン画面が表示されるので、新規登録をクリックして登録処理を行ってください。
  4. ログインするとAPIの申請・管理画面に入れます。そこから"新規API利用申請へ"をクリックします。
  5. 利用申請画面に飛ぶので、必要な情報を入力して申請して下さい。
  6. 申請後、審査が通ると、APIKeyがもらえます。(審査は数分で終わります。)下の画像のAPI keyの部分を使うので、メモしておいて下さい。 キャプチャ10.JPG

とりあえずコードをかいて動かしてみる

my_mention.pyにコードを追加

前回(Slackbot備忘録(1))作成したmy_mention.pyに以下のコードを追加します。

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を起動

キャプチャ9.JPG

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 のリクエストの確認ができる)を使って登録しました。
image.png

詳しいレスポンスサンプルはこちらから確認できます。

拡張機能を登録したら、下記の画像のように入力していきます。
Request URLにはhttps://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration?APIKEY=xxxxxxxxxxxxx
とし、APIKEYの部分に先ほど取得したAPIを入力してください。
Headerタブの内容は基本的にデフォルトのままで大丈夫です。
image.png

続いてタブのBodyに移動します。
下記のJsonを入力します。

{
    "botId": "Chatting",
    "appKind": "Smart Phone"
}

image.png

設定できたらSENDボタンをぽちっ

取得できれば下のようにappIdが表示されます。
image.png

コードの変更

今回JSONの形式が変わったので何点か変更がありますが、基本的にやってることは同じです。
雑談対話のレスポンスサンプルはこちらになります。

修正したコードは以下の通りです。

my_mention.py
@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にも面白いものがたくさんあるので試してみたいところです。

参考ページ

前回のもの

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5