phpでlineのbotを作りました。
そのやり方を紹介していきます。
ユーザーが入力した文字に対して返事を返すという単純な仕組みです。
そのやり方を紹介していきます。
ユーザーが入力した文字に対して返事を返すという単純な仕組みです。
a3rtとは
リクルート社の人工知能
説明ページ
A3RT(アート)は「ANALYTICS & ARTIFICIAL INTELLIGENCE API VIA RECRUIT TECHNOLOGIES」の略称です。
A3RTは機械学習のなかでもDeep Learningなどに代表される、いわば人工知能とよばれる分野のロジックをひとつのブランドで統一・整備をし、社内へ展開するためにプロジェクト化されたソリューションの総称です。
説明ページ
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は凄いと思ったけど、
まだまだ発展途上って感じだね。
それなりに対応してるけど、ロボットと話してるみたい。
これに加えてオリジナリティを出せればもっと面白くなりそう。