目次
はじめに
LINEのMessaging APIをつかって、簡単なBotを作ってみました。
簡単につくれるので、ぜひ、やってみてください。
公式サイトはこちらです。
環境
# | 項目 | バージョン |
---|---|---|
1 | CentOS | 7.8 |
2 | PHP | 7.2.29 |
3 | Apache | 2.4.6 |
4 | ngrok(※) | 2.3.35 |
(※)
Messaging API を使用するには、HTTPSを使用し、
認定認証局で発行されたSSL証明書が必要となります。
お試しのために、証明書を発行するのはもったいないので、
今回は、ngrokを使って、一時的にローカルサーバを外部に公開しました。
ngrok の設定
インストールは公式サイトからZIPファイルをダウンロードして、/usr/bin
に解凍したngrok
を置くだけです。
インストール後、ngrok http 80
でサーバを公開してみましょう。
ポート番号は、ご自身の環境に合わせて変更してください。
コマンドを実行すると下記が表示されるので、Forwarding
にあるURLで接続します。
ドキュメントルートに簡易なファイル置いて、接続確認をしてみてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ ngrok http 80 # 下記が表示される Session Status online Session Expires 7 hours, 59 minutes Version 2.3.35 Region United States (us) Web Interface http://127.0.0.1:4040 Forwarding http://05da5e3f63de.ngrok.io -> http://localhost:80 Forwarding https://05da5e3f63de.ngrok.io -> http://localhost:80 Connections ttl opn rt1 rt5 p50 p90 1 0 0.01 0.00 5.80 5.80 |
公開を停止する場合は、Ctrl+C
で停止します。
公開、停止するたびに、サブドメインが変わるので注意してください。
LINE Developers の設定
1. LINE Developers にログインする
LINEアカウントでログインできるので、自身のLINEアカウントでログインします。
LINEアカウントをもってない場合は、LINEアカウントを作りましょう。
2. MessagingAPI の設定をする
プロバイダーを作って、チャネルを作成します。
チャネル作成をするときに、Messaging API
を選択します。
お好きなチャネル名にし、その他必須事項を入力し、作成
をクリックします。
3. Webhook URL の設定をする
Messaging API設定
タブにあるWebhook URL
に、先ほど、公開したサーバのURLを設定します。
さっきも言いましたが、ngrokは公開・停止のたびにURLが変わるので、URLが変わったらこの設定も変更してください。
応答メッセージ、あいさつメッセージも無効にしておきます。
ここの設定はお好きなように。
それと、チャネルアクセストークン
が必要になるので、発行しておきます。
4. IPアドレスの許可
セキュリティ設定
タブからサーバのIPを許可する
プログラム を書く
MessagingAPIから情報を受け取って返すためのコードを書いていきましょう。
1. メッセージを受け取る
1 2 3 4 5 6 |
//JSONデータを取得 $jsonAry = json_decode(file_get_contents('php://input'), true); //メッセージ取得(配列) $message = $jsonAry['events'][0]['message']; //返信用トークン $replyToken = $jsonAry['events'][0]['replyToken']; |
JSONデータを取得した配列$jsonAry
の中身は下記のようになっています。
ユーザが送ったメッセージと返信用のトークンが必要なので、変数にいれています。
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 |
Array ( [events] => Array ( [0] => Array ( [type] => message [replyToken] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [source] => Array ( [userId] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX [type] => user ) [timestamp] => 1591942605921 [mode] => active [message] => Array ( [type] => text [id] => 12130737336360 [text] => 送ったメッセージ ) ) ) [destination] => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ) |
2. メッセージを返す
ユーザが送ったメッセージに対して、「って、何ですか??」とつけて返してみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//チャネルアクセストークン(MessagingAPI設定から確認) define('TOKEN', 'チャネルアクセストークンを記載'); //返信用のメッセージ配列を設定 $messageData = [ 'type' => 'text', 'text' => '「'.$message['text'].'」って何ですか??', ]; //返信用の配列設定 $response = [ 'replyToken' => $replyToken, 'messages' => [ $messageData, ], ]; $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($response)); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charser=UTF-8','Authorization: Bearer ' . TOKEN )); $result = curl_exec($ch); curl_close($ch); |
ここまでコードを書いたら、Messaging API設定
タブにあるQRコードから
Botのチャネルをお友だち登録してみましょう。
そして、メッセージを送ってみると、「○○」って何ですか??
と返ってくるはずです。
3. メッセージを2つ返す
さっきはメッセージを1つだけ返していましたが、連続でメッセージを返してみましょう。
「って何ですか??」のあとに、「もう1回、何をするか教えてください」と返してみましょう。
response
配列のmessages
要素に、返信メッセージを複数設定することで、複数メッセージを返すことができます。
最大5つまでは、送ることができます。
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 |
//チャネルアクセストークン(MessagingAPI設定から確認) define('TOKEN', 'チャネルアクセストークンを記載'); //メッセージ1つ目 $messageData1 = [ 'type' => 'text', 'text' => '「'.$message['text'].'」って何ですか??', ]; //メッセージ2つ目 $messageData2 = [ 'type' => 'text', 'text' => 'もう1回、何をするか教えてください', ]; $response = [ 'replyToken' => $replyToken, 'messages' => [ $messageData1, //メッセージ1つ目 $messageData2, //メッセージ2つ目 ], ]; $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($response)); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charser=UTF-8''Authorization: Bearer ' . TOKEN )); $result = curl_exec($ch); curl_close($ch); |
4. テキストメッセージ以外を返す
テキストメッセージ以外にも、スタンプや画像、確認メッセージを返すことができます。
今回は、確認メッセージを返してみましょう。
PC用のLINEアプリでは確認メッセージは使用できないのでご注意ください。
ユーザが送ったメッセージに対し確認メッセージを返します。
「はい」「いいえ」以外のメッセージがきた場合に、確認メッセージを出すようにして、
「はい」、「いいえ」の返答に応じて、返すメッセージを変えてみましょう。
ユーザの返答に応じて、さまざま処理を分岐させることができます。
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 |
//チャネルアクセストークン(MessagingAPI設定から確認) define('TOKEN', 'チャネルアクセストークンを記載'); if ($message['text'] == 'はい') { $messageData = [ 'type' => 'text', 'text' => 'あってた!良かった!', ]; } elseif ($message['text'] == 'いいえ') { $messageData = [ 'type' => 'text', 'text' => '違うのー。。。', ]; } else { $messageData = [ 'type' => 'template', 'altText' => '確認メッセージ', //PCでこのテンプレートは使用できないため、その場合にこのテキスが表示される 'template' => [ 'type' => 'confirm', 'text' => $message['text'].'と送りましたか?', //確認ボタンの上部のメッセージ部分 'actions' =>[ [ 'type' => 'message', 'label' => 'はい', //確認ボタンに表示させたい文字 'text' => 'はい', //ボタンを押した際に送信させる文字(ボタンを押したタイミングLINE上に表示) ], [ 'type' => 'message', 'label' => 'いいえ', 'text' => 'いいえ', ], ], ], ]; } $response = [ 'replyToken' => $replyToken, 'messages' => [ $messageData, ], ]; $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($response)); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charser=UTF-8','Authorization: Bearer ' . TOKEN )); $result = curl_exec($ch); curl_close($ch); |
おわりに
今回は、簡単にメッセージを返すだけのBotを作りました。
公式のガイドラインに詳細があるので、いろいろ試してみてください。