LINE Messaging APIをPHPで使ってみる
日常生活に溶け込んでいるLINEですが、実はプログラムから応答させることができます。
それが LINE Messaging API です。
今回はそんな LINE Messaging API をPHPから使ってみようと思います。
目次
はじめに
今回はCURLを使ったプログラムに関する記事です。
PHPでCURLを使用する方法や詳細なオプションなどは公式を参照してください。
開発環境
今回開発する環境は下記のとおりです。
PHP Version 7.1.11
curl 7.29.0
また、ライブラリの導入に Composer が必要です。
※Composerのインストールや使用については割愛します
Composerが使えない環境でComposer用のライブラリを使う場合は コチラ を参考にしてください。
今回、LINE側からメッセージを受信するために、公開されているURL(SSL Webhook URL)が必要です。
公開サーバーの用意が難しい場合は ngrok というサービスがありますので、導入してみてはいかがでしょうか?
LINE for Bussinessを用意
LINE Messaging APIを使用するには Line Developers に登録する必要があります。
下記URL内の「今すぐはじめよう」から LINE Bussiness アカウント を作成しましょう。
(既にお持ちの方はスキップできます)
次に LINE Bussiness アカウントとLINEアカウントを連携 します。
コチラからLINEアカウント連携をしましょう。
LINEアカウント連携をしないとLINE Messaging APIが使用できません
LINE Messaging APIを設定する
Channelを作る
LINEアカウント連携が出来たら、いよいよLINE Messaging APIを使うことができます。
まずは Channel を作成しましょう。
コチラから新規でChannelが作成できます。
入力内容は下記のような感じです。
【Channel type】
「Messaging API」を選択
【Provider】
作成済みのプロバイダーを選択 or 「Create a new provider」で新規プロバイダを作成
【Channel name】
作成するチャンネル名を入れる
【Channel description】
作成するチャンネル詳細を入れる
【Category】
チャンネルのカテゴリを選択
【Subcategory】
チャンネルのサブカテゴリを選択
【Email address】
チャンネルに関する重要なお知らせを送るメールアドレスを入れる
【I have read and agree to the LINE Official Account Terms of Use】
LINE公式アカウント利用規約を読んでチェックを入れる
【I have read and agree to the LINE Official Account API Terms of Use】
LINE公式アカウントAPI利用規約を読んでチェックを入れる
これでChannelが作成できました。
Channelの詳細設定をする
チャンネル設定画面から詳細を設定しましょう。
作成したチャンネルの詳細にある「Messaging API」をクリックし、詳細を設定していきます。
Webhookを設定
Webhook settings の 「Edit」 をクリックし、公開しているWebhookURLを設定します。
ここには後ほど作るPHPプログラムを設定しますが HTTPS(SSL対応済み) である必要があります。
最後に、設定後に出てくる Use webhook のボタンをオン にします。
Channel access tokenを有効化
Messaging APIの下部にある「Channel access token」の「Channel access token (long-lived) 」から「Issue」をクリック。
発行されたトークンは PHP側のプログラムから使用します ので、控えておきましょう。
PHPからLINE Messaging APIで返事をする
いよいよ本題、PHPからLINE Messaging APIを利用してみましょう。
まずはWebhookで設定したファイル名で、PHPファイルを作成します。
※https://www.example.com/ の場合はindex.php、https://www.example.com/test.php の場合はtest.phpです
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<!--?php // 入力ストリームからパラメータを取得 $raw = file_get_contents('php://input'); $receive = json_decode($raw, true); // イベントを取得 $event = $receive['events'][0]; // 返信するトークンを取得 $replyToken = $event['replyToken']; // 返事するメッセージを作成 // テキスト $message = [ 'type' => 'text', 'text' => 'こんにちは!', ]; // アクセストークン $accessToken = '[管理画面で発行したアクセストークン]'; // ヘッダーを設定 $headers = [ 'Content-Type: application/json', 'Authorization: Bearer '.$accessToken, ]; // ボディーを設定 $body = json_encode([ 'replyToken' => $replyToken, 'messages' => [ $message, ] ]); // CURLオプションを設定 $options = [ CURLOPT_URL => 'https://api.line.me/v2/bot/message/reply', CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => $body, ]; // 返信 $curl = curl_init(); curl_setopt_array($curl, $options); curl_exec($curl); curl_close($curl); </pre> <p>プログラムはこれで完成です。</p> <h3>LINEアカウントを友達登録してテストする</h3> <p>ではLINEで実際に動くかテストをしてみましょう。</p> <p> </p> <p>LINEの友達登録でQR読取画面を開き、管理画面の Messaging API にある 「QR code」を読み取りましょう。</p> <p> </p> <p>友達登録をしたら、適当なメッセージを送信してみると・・・・どうでしょうか?</p> <p> </p> <p>「こんにちは!」 と返ってきたら成功です。</p> <h3>メッセージをカスタマイズしてみる</h3> <p>返信するメッセージは様々なカスタマイズができます。<br ?--> 下記は一例ですので参考程度にどうぞ。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
<!--?php // スタンプ (https://developers.line.biz/media/messaging-api/sticker_list.pdf) $message = [ 'type' => 'sticker', 'packageId' => 1, 'stickerId' => 1, ]; // 画像 $message = [ 'type' => 'image', 'originalContentUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'previewImageUrl' => 'プレビュー画像のURL(SSL/240×240の1MB以下)', ]; // 動画 $message = [ 'type' => 'video', 'originalContentUrl' => '動画ファイルのURL(SSL/1分未満で10MB以下)', 'previewImageUrl' => 'プレビュー画像のURL(SSL/240×240の1MB以下)', ]; // 音声 $message = [ 'type' => 'audio', 'originalContentUrl' => '音源のURL(SSL/1分未満で10MB以下)', 'duration' => 1500, // 音声ファイルの長さ(ミリ秒) ]; // 位置情報 $message = [ 'type' => 'location', 'title' => 'ここにタイトル', 'address' => '住所だよ', 'latitude' => 35.169752, // 緯度 'longitude' => 136.916767, // 経度 ]; // ボタンテンプレート $message = [ 'type' => 'template', 'altText' => '代替テキスト', 'template' => [ 'type' => 'buttons', 'thumbnailImageUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'title' => 'タイトル最大40文字' , 'text' => 'テキストメッセージ。タイトルがないときは最大160文字、タイトルがあるときは最大60文字', 'actions' => [ ['type'=>'message', 'label'=>'ラベルです', 'text'=>'アクションを実行した時に送信されるメッセージ',], ], ] ]; // カルーセルテンプレート $message = [ 'type' => 'template', 'altText' => '代替テキスト', 'template' => [ 'type' => 'carousel', 'columns' => [ [ 'thumbnailImageUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'title' => 'タイトル最大40文字', 'text' => 'タイトルか画像がある場合は最大60文字、どちらもない場合は最大120文字', 'actions' => [ ['type' => 'message', 'label' => 'ラベル1です', 'text' => 'メッセージ1',], ], ], [ 'thumbnailImageUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'title' => 'タイトル最大40文字', 'text' => 'タイトルか画像がある場合は最大60文字、どちらもない場合は最大120文字', 'actions' => [ ['type' => 'message', 'label' => 'ラベル2です', 'text' => 'メッセージ2',], ], ], ], ], ]; // 画像カルーセルテンプレート $message = [ 'type' => 'template', 'altText' => '代替テキスト', 'template' => [ 'type' => 'image_carousel', 'columns' => [ [ 'imageUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'action' => [ 'type' => 'message', 'label' => 'ラベル1です', 'text' => 'メッセージ1', ], ], [ 'imageUrl' => '画像のURL(SSL/1024×1024の1MB以下)', 'action' => [ 'type' => 'message', 'label' => 'ラベル2です', 'text' => 'メッセージ2', ], ], ], ], ]; // 確認テンプレート $message = [ 'type' => 'template', 'altText' => '代替テキスト', 'template' => [ 'type' => 'confirm', 'text' => 'テキストメッセージ。最大240文字', 'actions' => [ ['type'=>'message', 'label'=>'YES', 'text'=>'YESを押しました',], ['type'=>'message', 'label'=>'NO', 'text'=>'NOを押しました',], ], ], ]; </pre> <p> </p> <p>その他、細かい仕様などについては下記のAPIリファレンスを参照してください。</p> <p> </p> <p><a href="https://developers.line.biz/ja/reference/messaging-api/" target="_blank" rel="noopener noreferrer">LINE Message API リファレンス</a></p> <h2>さいごに</h2> <p>会社の公式LINEアカウントもこんな感じで作成することが可能です。<br ?--> (今回作成したアカウントは [marker weight="narrow" color="red"]非公式[/marker] です。 公式アカウントにするには申請が必要です。) |
この他にも通知も設定することができますので、興味のある方は試してみてはいかがでしょうか?
1 2 3 |
- おすすめ記事
POPULAR
のえる
Full-stack Developer