docomo Developer support 自然対話(雑談対話)APIについて
docomo Developer supportの自然対話APIがリリースされたので、今までの雑談対話APIは2018年6月末で終了するそうです。
当ブログに自然対話(雑談対話)APIで「レスポンスはどうやって取るの?」と質問が来ていたので、ちょっと簡単(非常に簡単)に説明します。
主に変わった点
・会話を継続する場合、contextからappIdに変わった。会話を行うにはまずappId取得のためのユーザー登録が必要。
・関西弁キャラクタ(桜子)が居なくなった。代わりにマリコが登場。桜子は結構人気者だったんですがね。。。
・2018年10月以降は有償となる。マジですか!?
ユーザー登録のサンプルソース
会話を行うにはまずはユーザー登録。これがないと始まらない。これにて各個人を特定し会話を継続させる。
取得したappIdをセッション等に格納し、そのappIdを利用して会話を開始します。
$url = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/registration?APIKEY='.$this->apikey; $headers = array( 'Content-Type: application/json; charset=UTF-8', ); $data = array( 'botId' => 'Chatting', 'appKind' => 'AI Chat' ); $options = array('http' => array( 'method' => 'POST', 'header' => implode("\r\n", $headers), 'content' => json_encode($data) )); $context = stream_context_create($options); $response = file_get_contents($url, false, $context); $res = json_decode($response); $_SESSION['appId'] = $res->appId; // appIdをセッションに格納し、会話を継続できるようにする
会話を行うサンプルソース
以下のソースはイマスグチャットにて実際に利用している部分を記述します。実際はもう少し書いてありますが。
class aireq{ var $apikey = "{取得したAPIキー}"; function ai_msg($text,$nickname,$chara){ $url = 'https://api.apigw.smt.docomo.ne.jp/naturalChatting/v1/dialogue?APIKEY='.$this->apikey; $headers = array( 'Content-Type: application/json; charset=UTF-8', ); $data = array( 'language' => 'ja-JP', 'botId' => 'Chatting', 'appId' => {ユーザ登録で取得したappId}, 'voiceText' => $text, 'clientData' => array( 'option' => array( 'nickname' => $nickname, 'mode' => $_SESSION['chat_mode'], 't' => $chara ), ), 'appRecvTime' => {アプリが最後に取得パラメータを受信した時刻}, 'appSendTime' => {アプリが送信パラメータを送信した時刻} ); $options = array('http' => array( 'method' => 'POST', 'header' => implode("\r\n", $headers), 'content' => json_encode($data) )); $context = stream_context_create($options); $response = file_get_contents($url, false, $context); $res = json_decode($response); // 対話モードがBase64で来るのでdecodeして、さらにjson_decodeして取得 $cmd_mode = base64_decode($res->command); $chat_mode = json_decode($cmd_mode); $_SESSION['chat_mode'] = $chat_mode->mode; // 対話モードをセッションに格納 return $res->systemText->expression; // システム発話を返す } } $aireq = new aireq(); $text = urldecode("あなたの名前は?"); $nickname = urldecode("テスト"); $chara = "kansai"; // 指定なし:デフォルトキャラ(ゼロ)、akachan:赤ちゃんキャラ(ハナ)、kansai:関西弁キャラ(マリコ) // 発言 $msg["airespo"] = $aireq->ai_msg($text,$nickname,$chara); $json = json_encode($msg); header("Content-Type: text/javascript charset=utf-8"); print $json;
こんな感じです。
最終的に$res->systemText->expressionにてシステム側からの回答が入ります。それをreturnして$msg[“airespo"]で受け取って、あとは表示。
それにしても桜子が居なくなったのと、有償になるというのは残念ですね。
まぁ、マリコを桜子に置換すればOKじゃね?ってこともあるようですが、年齢も違うのでそれもどうかな?と思います。
追記:2018/06/06
対話モードがbase64で届くので、decodeして取得するように変更
end
ディスカッション
コメント一覧
まだ、コメントがありません