linebot開発の流れ ついでにリクルートの人工知能a3rtを使ってみる

phpでlineのbotを作りました。
そのやり方を紹介していきます。
ユーザーが入力した文字に対して返事を返すという単純な仕組みです。

a3rtとは

リクルート社の人工知能
説明ページ
A3RT(アート)は「ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES」の略称です。
A3RTは機械学習のなかでもDeep Learningなどに代表される、いわば人工知能とよばれる分野のロジックをひとつのブランドで統一・整備をし、社内へ展開するためにプロジェクト化されたソリューションの総称です。

なんかよくわからないけど凄そう!
しかも無料だし使ってみよう。

ステップ1-lineのアカウント登録

公式サイト見たが早い

ステップ2 a3rtの登録

こっからできる

ステップ3 bot開発

基本的な流れは入力値受け取ってそれをもとに返信文作って送信するだけ

lineControl.php

ライン関係のCLASS
アクセストークン設定して、
入力値取得してテキストを返すだけのやつ

class lineControl {
 private $accessToken;

 //トークン設置
 function __construct($token){
   $this->accessToken = $token;
 }

 /**
  * 入力情報取得
  */
 function getInput(){
  //ユーザーからのメッセージ取得
  $json_string = file_get_contents('php://input');
  $json_object = json_decode($json_string);

  //取得データ
  $data = array();
  $data['replyToken'] = $json_object->{"events"}[0]->{"replyToken"};
  $data['messageType'] = $json_object->{"events"}[0]->{"message"}->{"type"};
  $data['messageText'] = $json_object->{"events"}[0]->{"message"}->{"text"};

  $data['messageText'] = trim($data['messageText']);
  return $data;
 }

 /**
  * ライン送信
  */
 function sending($message){
  $input = $this->getInput();

  //レスポンスフォーマット
  $response = [
   "type"=>$input['messageType'],
   "text"=>$message
  ];

  //ポストデータ
  $postData = [
   "replyToken" =>$input['replyToken'],
   "messages" => [$response]
  ];

  //curl実行
  $ch = curl_init("https://api.line.me/v2/bot/message/reply");
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
  curl_setopt($ch, CURLOPT_HTTPHEADER, array(
   'Content-Type: application/json; charser=UTF-8',
   'Authorization: Bearer ' . $this->accessToken
  ));
  $result = curl_exec($ch);
  curl_close($ch);
 }
}

a3rt.php

a3rtの操作class
apikey設定してテキスト投げて返事もらうやつ

class a3rt {
  private $apiKey;

  //ApiKey設置
  function __construct($apiKey){
   $this->apiKey = $apiKey;
  }

 /**
  * a3rtテキスト渡して返事をもらう
  */
 function getMessage($data){
  // Talk API の URL
   $url = 'https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk';

   // ストリームコンテキストの作成
   $opts['http'] = array(
    'method'    => 'POST',
    'header'    => 'Content-type: application/x-www-form-urlencoded;charset=UTF-8',
    'content'   => http_build_query(array(
      'apikey' => $this->apiKey,
      'query'  => $data['messageText']
    ), '', '&', PHP_QUERY_RFC3986)
   );
   $context = stream_context_create($opts);

   //リクエスト実行
   $responseJson = file_get_contents($url, false, $context);

   //JSON を 配列に変換
   $responseArr = json_decode($responseJson, true);

   // 表示処理
   $message = $responseArr['results'][0]['reply'];

   return $message;
  }
 }

main.php

メイン処理 上2つのクラス使ってるだけ

 require('lineControl.php');
 require('a3rt.php');

 $lineAccessToken = 'ラインのアクセストークン';
 $a3rtApiKey = 'a3rtのapiキー';

 $clsLine = new lineControl($lineAccessToken);
 $clsA3rt = new a3rt($a3rtApiKey);

 //ユーザー情報取得
 $input = $clsLine->getInput();

 //メッセージタイプが「text」以外のときは何も返さず終了
 if($input['messageType'] != "text") exit;

 //a3rt返信メッセージ
 $message = $clsA3rt->getMessage($input);

 //返信実行
 $clsLine->sending($message);
 exit;

感想

LINEbot面白いね!
作ってて楽しかった

a3rtは凄いと思ったけど、
まだまだ発展途上って感じだね。
それなりに対応してるけど、ロボットと話してるみたい。
これに加えてオリジナリティを出せればもっと面白くなりそう。