2017-02-16
LINE Messaging API 使い方の基本について

最近、賑わいを見せている LINE Messaging APIですが、実際にいじってみようと使い方をWEBで検索すると、Herokuがどうとか、SDKがどうとか、composerがどうとかなど、シンプルに利用するための情報が少ないように思えたので、個人的に一番シンプルと思えるPHPでの利用方法を紹介したいと思います。なお、今回は発生したイベントに対して返信を行う「Reply message」を例に致します。
事前準備1:サーバーの用意
専用でも共用でも何でも構いませんが、httpsでアクセスできる環境が必要です。独自SSLの導入が難しければ、レンタルサーバーが用意している共用SSLでも構いません。
事前準備2:LINE Developers 基本情報の用意
LINE Messaging APIを利用するためには、LINE Developersの基本情報である「Channel Secret」と「Channel Access Token」が必要になります。登録取得方法は他のサイトにたくさん情報がありますのでここでは省略します。「Webhook URL」は、botとして動作させるPHPプログラムのURLになりますので、例えば、ttps://www.cyberbrain.co.jp/line-bot/reply.php など、自分の環境に合ったもので登録しておきます。
コードサンプル
事前準備が整えば、後は「reply.php」にコードを記述するのみです。
※LINE API Referenceを参照しながらだと理解しやすいです
https://devdocs.line.me/ja/
//チャンネルシークレット
$channelSecret = 'チャンネルシークレット';
//チャンネルアクセストークン
$channelAccessToken = 'チャンネルアクセストークン';
//ユーザーからのメッセージ取得
$inputData = file_get_contents('php://input');
//受信したJSON文字列をデコードします
$jsonObj = json_decode($inputData);
//Webhook Eventのタイプを取得
$eventType = $jsonObj->{"events"}[0]->{"type"};
//メッセージイベントだった場合です
//テキスト、画像、スタンプなどの場合「message」になります
//他に、follow postback beacon などがあります
if ($eventType == 'message') {
//メッセージタイプ取得
//ここで、受信したメッセージがテキストか画像かなどを判別できます
$messageType = $jsonObj->{"events"}[0]->{"message"}->{"type"};
//ReplyToken取得
//受信したイベントに対して返信を行うために必要になります
$replyToken = $jsonObj->{"events"}[0]->{"replyToken"};
//メッセージタイプがtextの場合の処理
if ($messageType == 'text') {
//メッセージテキスト取得
//ここで、相手から送られてきたメッセージそのものを取得できます
$messageText = $jsonObj->{"events"}[0]->{"message"}->{"text"};
//返答準備1
//単純にテキストで返す場合です
//よくあるオウム返しでは、text に $messageText を入れればOKです
$response_format_text = [
"type" => "text",
"text" => "返答メッセージ"
];
//返答準備2
//先程取得したトークンとともに、返答する準備です
$post_data = [
"replyToken" => $replyToken,
"messages" => [$response_format_text]
];
}
//上記以外のメッセージタイプ
//画像やスタンプなどの場合です
else {
//返答準備1
$response_format_text = [
"type" => "text",
"text" => "メッセージ以外は受け取りません!"
];
//返答準備2
$post_data = [
"replyToken" => $replyToken,
"messages" => [$response_format_text]
];
}
}
//後は、Reply message用のURLに対して HTTP requestを行うのみです
$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($post_data));
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json; charser=UTF-8',
'Authorization: Bearer ' . $channelAccessToken
));
$result = curl_exec($ch);
curl_close($ch);
LINE Messaging APIの基本的な使い方は以上ですが、単にテキストで返答する以外にAPIで用意されているレイアウトテンプレート Buttons (画像、テキストとアクションボタン)、Confirm (OK、キャンセル)、 Carousel (複数の Buttons の横スクロール) で返答すると、より便利なbotになりますね。
LINE BUSINESS CENTERで見れるサンプル動画では、おススメのレストランを探してくれるbotの例を紹介しています。レイアウトテンプレートのButtonsで、「ご予約をご希望の日時を選択してください」というテキストと「今日、明日、今週金曜、その他」というアクションボタンがあります。
これを実現するためには、返答準備1の$response_format_textを、LINE API ReferenceのTemplate messageを参考に構成すれば良いだけです。アクションボタンの選択肢はご自分のやりたいようにすれば良いということですね。
今回は、LINE Messaging APIの基本的な使い方の紹介なので、Template messageについてはまたの機会にさせて頂きます。