書籍「Laravelの教科書」Laravel13対応サポートガイド公開中 → ダウンロードはこちら

LaravelとLINE連携:LINE Messaging APIで自動返信やメッセージ送信する

LaravelとSNS API連携

LaravelとLINEを連携させて、LaravelからLINEにメッセージを送信したり、送信されたメッセージに自動返信したりしてみます。

Junko
Junko

前回はLaravelにLINEでログインを試してみました。

引き続き、LaravelとLINE連携、楽しんでいきましょう♪

なお、LaravelのバージョンはLaravel8を使ってテストしています。

LINE側の設定

まずはLINE側の設定から。

LINE Developpersを使います。既存のLINEアカウントまたはビジネスアカウントでログインをします。その先の設定は、次のとおりです。

LINE Messaging API チャンネルを作成

LINE DeveloppersのページからLINE Messaging APIを選択。

【今すぐはじめよう】ボタンをクリックして、登録スタート。

下記に入力して、開発者契約同意にチェックを入れ、【作成】ボタンをクリックします。

  • プロバイダー:新規プロバイダー作成
  • プロバイダー名:お好きなもの
  • チャンネルアイコン:お好きなもの
  • チャンネル名:お好きなもの
  • チャンネル説明:お好きなもの
  • 大業種・小業種:選択
  • メールアドレス

チャンネルシークレットとチャンネルアクセストークン取得

設定に必要な2つの情報をLINEから取ってきます。

まずはチャンネル作成後、ページ内の「チャンネルシークレット」をコピーします。

【チャンネルシークレット】

さらに隣の 【Messaging API設定】タブに移動。

下のほうの「チャンネルアクセストークン」を発行して、コピーしておきます。

【チャンネルアクセストークン】

LINE側に設定を行う

次に、LINE側の設定を行っておきます。

【Messaging API設定】タブページの真ん中あたりに、Webhook設定があります。

「https://ドメイン/line/webhook」と入れておきます。「ドメイン」はご利用のものに変えてください。さらに下の「Webhookの利用」の部分をクリックして、有効にしておきます。

なお、まだURLを準備していない場合には、NGROKを使って、https://で始まるテスト用URLを簡単に作成できます。詳しくはこちらの記事をご覧ください。

次に【チャンネル基本設定】タブに戻ります。

LINE OFFICIAL ACCOUNT MANAGERへのリンクをクリックします。

Botが使えるよう、応答設定を次のように設定しておきます。

Laravel側の設定

上記までがLINEの設定です。次にLaravelにうつります。

Laravelプロジェクトを準備

前準備として、プロジェクトの作成を行っておきます。前回の「LaravelにLINEログイン搭載」で使った設定をそのまま利用したいと思います。

前回の記事の 「Laravelプロジェクトを準備」の部分をご覧ください。

Laravelのユーザーテーブルの準備

データベースも作っておきます。こちらも前回の設定を使用します。

前回の記事の 「Laravelのユーザーテーブルの準備」の部分をご覧ください。

LaravelのCSRF例外設定

なお今回は、API経由でpostメソッドを使うため、CSRFの例外設定を行う必要があります。

app/Http/Controllers/Middlewareの中のVerifyCsrfToken.phpファイルを開き、次のようにいれておきます。これによって、「ドメイン/line」で始まるルート設定は、CSRFの対象外にできます。

【VerifyCsrfToken.php】

    protected $except = [
        'line/*',
    ];

LaravelとLINE連携準備

プロジェクトとデータベース作成後、プロジェクト内の.envファイルを開きます。

LINE側で設定してきた 「チャンネルシークレット」 「チャンネルアクセストークン」を入れておきます。

【.env】

LINE_MESSENGER_SECRET=チャンネルシークレット
LINE_CHANNEL_TOKEN=チャンネルアクセストークン

次にconfigにも、この設定を反映します。config/servicesの中に下記コードを追加します。

【services.php】

    'line' => [
        'channel_token'=>env('LINE_CHANNEL_TOKEN'),
        'messenger_secret'=>env('LINE_MESSENGER_SECRET')
    ],

ライブラリのインストール

さらに、LineとLaravelを連携させるためのライブラリをインストールしておきましょう。

composer require linecorp/line-bot-sdk

LINEメッセージ送受信用ルート設定

ルート設定は、こちら。

【web.php】

// LINE メッセージ受信
Route::post('/line/webhook', 'LineMessengerController@webhook')->name('line.webhook');

// LINE メッセージ送信用
Route::get('/line/message', 'LineMessengerController@message');

LINEログイン用コントローラの作成

次にLINEログイン用のコントローラを作成します。

php artisan make:controller LineMessengerControllers

色々と手順がありましたが、ここからいよいよ動きをつけていきます。

①LINEでつながったユーザーにメッセージを返す

まずはLINEでつながったユーザーに、メッセージを返してみましょう。

コントローラに次のように記述します。これによって、メッセージを送ったユーザーに、自動でメッセージが返信されます。

【LineMessangerController.php】

<?php

namespace App\Http\Controllers;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use App\Models\User;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;

use Illuminate\Http\Request;

class LineMessengerController extends Controller
{
    public function webhook(Request $request) {
        // LINEから送られた内容を$inputsに代入
        $inputs=$request->all();

        // そこからtypeをとりだし、$message_typeに代入
        $message_type=$inputs['events'][0]['type'];

        // メッセージが送られた場合、$message_typeは'message'となる。その場合処理実行。
        if($message_type=='message') {
            
            // replyTokenを取得
            $reply_token=$inputs['events'][0]['replyToken'];

            // LINEBOTSDKの設定
            $http_client = new CurlHTTPClient(config('services.line.channel_token'));
            $bot = new LINEBot($http_client, ['channelSecret' => config('services.line.messenger_secret')]);

            // 送信するメッセージの設定
            $reply_message='メッセージありがとうございます';

            // ユーザーにメッセージを返す
            $reply=$bot->replyText($reply_token, $reply_message);
            
            return 'ok';
        }
    }
}

LINEのチャンネル設定ページ/Messenging APIのQRコードをLINEで読み取ってつながった後、LINEからメッセージを送信してみてください。

成功すれば、コントローラで設定したメッセージが返信されます。

②LINEユーザーがデータベースになければ、ユーザーを追加する

ユーザーをデータベースに保存したい場合は、上記の return ‘ok’ の上に、次のようなコードを追加します。

【LineMessangerController.php】

            // LINEのユーザーIDをuserIdに代入
            $userId=$request['events'][0]['source']['userId'];

            // userIdがあるユーザーを検索
            $user=User::where('line_id', $userId)->first();

            // もし見つからない場合は、データベースに保存
            if($user==NULL) {
                $profile=$bot->getProfile($userId)->getJSONDecodedBody();

                $user=new User();
                $user->provider='line';
                $user->line_id=$userId;
                $user->name=$profile['displayName'];
                $user->save();
            }
            return 'ok';

③ユーザーにメッセージを送ってみる

特定のユーザーにメッセージを送るには、次のようにします。

【LineMessangerController.php】

<?php

namespace App\Http\Controllers;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot;
use App\Models\User;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;

use Illuminate\Http\Request;

class LineMessengerController extends Controller
{
    // メッセージ送信用
    public function message() {

        // LINEBOTSDKの設定
        $http_client = new CurlHTTPClient(config('services.line.channel_token'));
        $bot = new LINEBot($http_client, ['channelSecret' => config('services.line.messenger_secret')]);

        // LINEユーザーID指定
        $userId = "LINEユーザーID";

        // メッセージ設定
        $message = "こんにちは!";

        // メッセージ送信
        $textMessageBuilder = new TextMessageBuilder($message);
        $response    = $bot->pushMessage($userId, $textMessageBuilder);

    }
}

ルート設定でメッセージ送信用に指定したページ【http://ドメイン/line/message】を開きます。

そのあと、指定したLINEユーザーのLINEを確認してください。

コントローラから送信したメッセージが表示されていれば成功!

APIを使って他にどんなことができるか、詳しくはLINEの公式マニュアルをご覧ください。

Laravel・LINE連携がうまくいかない時の対策

最後に、うまくいかない場合の対策をいくつか紹介しますね。

webhookが送られているかチェックして

もし「API連携がうまくいかない!」場合、そもそもwebhookがちゃんと通っていない可能性も。

まずはコントローラに return ‘ok’ ;のみのコードを書きましょう。

class LineMessengerController extends Controller
{
    public function webhook(Request $request) {
        return 'ok';
    }
}

LINE Developperにて、検証ボタンをおします。

ちゃんと通っていれば、次のように「成功」がでてきます。ダメな場合は、ルート設定など見直してみてください。

 

コントローラで値が取得できているかチェックして

上記で問題ない場合、コントローラのどこかで、処理がつまづいている可能性があります。

値がちゃんと取れているかチェックして確認しつつ、進めていくと良いですよ。

このとき、file_put_contentsを使うと、可視化できます。

file_put_contentsの使い方は、こちらの記事にまとめています。

さいごに

Laravelを使って、LINEへメッセージを送信してみました。

連携の設定は面倒ですが^^; 運用によって、色々なことができます。

特定のキーワードのメッセージを送ってくれたら動作を変えるとか。

ユーザーが会員制サイト内でボタンを押したり、何かの操作をしたと同時にLINEでメッセージを送るとか。

あなたのサイトにあった運用方法を取り入れてくださいね。

Junko
Junko

連携させると、可能性が広がっていきますよね♪

わたしも引き続き、色々と楽しんでみます。

LaravelとSNS API連携

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる
 

生成AIを「安全に」使うための研修・セミナー

お問い合わせ

生成AIの業務活用で気になるのは、効率だけでなくセキュリティです。 実践的な活用に加え、セキュリティ対策もお伝えします。

詳細を見てみる

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新版Laravel13への対応に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel13に対応。Laravel8からの各バージョンのテキストもご覧になれます♪

Laravelの本を書きました。


ひつじが目印♪

Laravelの使い方を分かりやすく解説した本を書きました。 書店やAmazon等のオンラインショップにて販売中
最新版Laravel13対応用サポートガイド(PDF)あり

書籍の詳細を見てみる

Laravelの本書きました。


ひつじが目印♪
クリックするとamazonページへ。
最新版Laravel13対応用
サポートガイド(PDF)あり

書籍の詳細を見てみる
シェアする
Twitter始めました。

コメント

  1. miriwo より:

    非常に参考になりました!
    本当にありがとうございます!

タイトルとURLをコピーしました