docomo Developer support 自然対話(雑談対話)APIについて

2018年6月6日

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