SlackBotにDocomo雑談対話APIを組み込む
はじめに
SlackBotと会話するのが夢だったので、実現します。
前提
雑談対話APIの準備
今回は、Docomo雑談対話APIを使う。
事前に色々登録を済ませてAPIキーを取得しておく。
申請に時間が〜みたいな事書いてあるけど、すぐ帰ってくるはず。
登録したらAPIを使うためにAppIDが必要なので、ここを参考に事前に取得しておく。
PostmanでもCurlでもPOST飛ばせれば何でもいいと思われる。
準備が出来たらようやくプログラムが作れる。
Botに組み込む
とりあえず全部に反応してくれれば問題ないので、@default_reply
で指定しとく。
ソースは以下を参照。
# -*- coding: utf-8 -*- import requests import json from slackbot.bot import default_reply import base64 # エンドポイントの設定 KEY = '取得したAPIキー' endpoint = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY=REGISTER_KEY' url = endpoint.replace('REGISTER_KEY', KEY) appid = '取得したAppId' # requestパラメータ # voiceTextがAPIに投げる会話文になる # language,botIdはこれで固定 payload = {'language': 'ja-JP', 'botId': 'Chatting', 'appId': appid, 'voiceText': '', 'clientData': {'option': {'mode': ''}}} # レスポンス data = { 'systemText': { 'expression': '', 'utterance': '' }} HEADERS = {'Content-type': 'application/json'} @default_reply() def chat(message): global payload global data payload['voiceText'] = message.body['text'] try: # 送信 r = requests.post(url, data=json.dumps(payload), headers=HEADERS) data = r.json() # jsonの解析 response = data['systemText']['expression'] # command取り出し # しりとりのときはモードを'srtr'に設定するため、レスポンスからモードを受け取る # base64でエンコードされてるので、デコードしてリクエストに詰める command = json.loads(base64.b64decode(data['command']).decode('utf-8')) payload['clientData']['option']['mode'] = command['mode'] except Exceptin as e: # エラーだとスタックトレースが出るので、一応ハンドリングしておく message.reply('は?何言ってんの?') # 表示 message.reply(response)
話しかけて雑談してくれればOK。
まぁ、上辺の会話は出来てそう・・・?
最後に
会話の精度はそこそこないイメージ。
簡単な雑談くらいなら問題ないと思います。
的はずれな会話はご愛嬌というこで。