PHP
linebot
A3RT

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

More than 1 year has passed since last update.


作ったもの

phpでlineのbotを作った。

ユーザーが入力した文字に対して、

返事を返す仕組み。


a3rtとは?

リクルート社の人工知能

説明ページ

A3RT(アート)は「ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES」の略称です。

A3RTは機械学習のなかでもDeep Learningなどに代表される、いわば人工知能とよばれる分野のロジックをひとつのブランドで統一・整備をし、社内へ展開するためにプロジェクト化されたソリューションの総称です。

なんかよくわからないけど凄そう!

しかも無料だし使ってみよう。


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

公式サイト見たが早い


ステップ2 a3rtの登録

こっからできる


ステップ3 bot開発

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


lineControl.php

ライン関係のCLASS

アクセストークン設定して、

入力値取得してテキストを返すだけのやつ


filename.rb

<?php

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設定してテキスト投げて返事もらうやつ


filename.rb

<?php

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つのクラス使ってるだけ


filename.rb

<?php

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は凄いと思ったけど、

まだまだ発展途上って感じだね。

それなりに対応してるけど、ロボットと話してるみたい。

これに加えてオリジナリティを出せればもっと面白くなりそう。