リクルートテクノロジーズの提供しているTalk APIと以前作成したLINEボットを繋げて、メッセージに応じて応答できるようにしてみます。
APIキーの発行
Talk APIに使用するAPIキーを発行します。
APIキー発行ページで利用規約とプライバシーポリシーを確認後、メールアドレスを入力して送信します。
確認メールにあるURLをクリックすると、APIキーの記載されたメールが送られてきます。
APIの使い方
実際にLINEボットに繋げる前に、APIの動作を試してみます。
詳しくは公式のリファレンスをご確認ください。
$url = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk'; $data = array( 'apikey' => 'APIキーをここに入れる', 'query' => 'いい天気ですね。' ); $context = array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", array('Content-Type: application/x-www-form-urlencoded',)), 'content' => http_build_query($data) ) ); $response_json = file_get_contents($url, false, stream_context_create($context)); $response_data = json_decode($response_json); var_dump($response_data);
「いい天気ですね。」というメッセージを投げて、レスポンスをvar_dump()で出力しています。
レスポンスは以下のようになりました。
object(stdClass)#1 (3) { ["status"]=> int(0) ["message"]=> string(2) "ok" ["results"]=> array(1) { [0]=> object(stdClass)#2 (2) { ["perplexity"]=> float(1.3575035889064) ["reply"]=> string(27) "晴れてよかったです" } } }
replyの中身が返答になります。
以前作成したLINEボットに追加してみます。
<?php require_once __DIR__ . '/vendor/autoload.php'; $input = file_get_contents('php://input'); $json = json_decode($input); $httpClient = new \LINE\LINEBot\HTTPClient\CurlHTTPClient('チャネルアクセストークンをここに入れる'); $bot = new \LINE\LINEBot($httpClient, ['channelSecret' => 'チャネルシークレットをここに入れる']); $event = $json->events[0]; if($event->type == 'message') { $messageData = $event->message; if($messageData->type == 'text') { $url = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk'; $data = array( 'apikey' => 'APIキーをここに入れる', 'query' => $messageData->text ); $context = array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", array('Content-Type: application/x-www-form-urlencoded',)), 'content' => http_build_query($data) ) ); $response_json = file_get_contents($url, false, stream_context_create($context)); $response_data = json_decode($response_json); if($response_data->status == 0) { $replyText = $response_data->results[0]->reply; } else { $replyText = 'ステータスコード:' . $response_data->status . ' 失敗した失敗した失敗した'; } } else { $replyText = "テキスト以外は対応していません。"; } } $textMessageBuilder = new \LINE\LINEBot\MessageBuilder\TextMessageBuilder($replyText); $response = $bot->replyMessage($event->replyToken, $textMessageBuilder); return;
試してみるとステータスコードが2000(応答テキストが空)になることがあったので、上手く取得できなかった場合の返答も追加しています。
実際にLINEでメッセージを送信してみると、返答されることが確認できました。
コメントが承認されるまで時間がかかります。