14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

laravelでLineBot開発

Posted at

laravelでLineBotを作ってみた際のメモ

前提条件

  • laravel5.7の開発環境がそろっていること
    • laravel/homesteadを使用
  • Lineアカウント

手順

プロバイダー&チャネル作成

  • LINE Developers Consoleにログイン
  • 『新規プロバイダー作成』ボタンからプロバイダーを作成する
  • 『Messaging API』のチャネルを作成する
    • プラン:Developer Trial

チャネル基本設定

  • 『Channel Secret』をメモする
  • 『アクセストークン』を『再発行』しメモする
  • 『Webhook送信』を『利用する』に変更する
    • ※ngrokで動作確認するため『Webhook URL』は 後で設定する
  • 『自動応答メッセージ』を『利用しない』に変更する
  • 『友だち追加時あいさつ』を『利用しない』に変更する

Botアプリケーションの作成

  • なにかEventが発生したら、ハローと応答させるアプリケーションとする

line-bot-sdk-phpのインストール

composer require linecorp/line-bot-sdk

env設定

  • 上記でメモした『Channel Secret』と『アクセストークン』を.envに設定
.env
LINE_ACCESS_TOKEN=*****メモしたアクセストークン*****
LINE_CHANNEL_SECRET=*****メモしたChannel Secret*****

コントローラー作成

/app/Http/Controllers/Api/LineWebhookController.php
<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use LINE\LINEBot;
use LINE\LINEBot\Constant\HTTPHeader;
use LINE\LINEBot\SignatureValidator;
use LINE\LINEBot\HTTPClient\CurlHTTPClient;
use LINE\LINEBot\MessageBuilder\TextMessageBuilder;
use Exception;

class LineWebhookController extends Controller
{

    public function webhook (Request $request)
    {
        $lineAccessToken = env('LINE_ACCESS_TOKEN', "");
        $lineChannelSecret = env('LINE_CHANNEL_SECRET', "");

        // 署名のチェック
        $signature = $request->headers->get(HTTPHeader::LINE_SIGNATURE);
        if (!SignatureValidator::validateSignature($request->getContent(), $lineChannelSecret, $signature)) {
            // TODO 不正アクセス
            return;
        }

        $httpClient = new CurlHTTPClient ($lineAccessToken);
        $lineBot = new LINEBot($httpClient, ['channelSecret' => $lineChannelSecret]);

        try {
            // イベント取得
            $events = $lineBot->parseEventRequest($request->getContent(), $signature);

            foreach ($events as $event) {
                // ハローと応答する
                $replyToken = $event->getReplyToken();
                $textMessage = new TextMessageBuilder("ハロー");
                $lineBot->replyMessage($replyToken, $textMessage);
            }
        } catch (Exception $e) {
            // TODO 例外
            return;
        }

        return;
    }
}

ルーティング設定

\app\routes\api.php
Route::group(['namespace' => 'Api'], function() {
    // LineからのWebhookを受信
    Route::post('/line/webhook', 'LineWebhookController@webhook')->name('line.webhook');
});

動作確認

ngrokで外部に公開する

ngrok http 80

Webhook URLの設定

  • LINE Developers Consoleのチャネル基本設定の『Webhook URL』を編集し、ngrokで発行されたURL(httpsのほう)を登録する

  • QRコードでともだち登録して、Botにメッセージを送る

    • Botは「ハロー」と答えてくれるはずである
14
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?