Wiz テックブログ

Wizは、最新のIoTやICTサービスをお客様に届ける「ITの総合商社」です。

LINEBotをPHPで自作する

https://kazzstorage.com/wp-content/uploads/2019/10/trial-messaging-api-00-300x300.png

こんにちは、バックエンドエンジニアの米山です。

今回はPHP(Laravel)を使ってLINEBotを自作するための環境を作ってみようと思います。

実は、社内で先日リリースしたシステムがこれを実施しています。

LINE公式アカウントを作成し、LINE Official Account Managerで自動応答を作ることは可能です。

ですが、このコンソールで受け答えの設定ができるのは一部の機能で、返し方もある程度決められているため

より柔軟に自動応答させるにはbotの自作が必要なのです。

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

PHP(Laravel)のライブラリ管理ではおなじみの、Composerを使います。

composer require linecorp/line-bot-sdk

これでインストール完了です。

Tokenを設定する

LINEBot(LINE Messaging API)を利用するには「ビジネスアカウント」というものを作成し

LINE公式アカウント(コンソール内で「チャネル」と呼んでいるもの)を作成し

「チャネルトークン」「チャネルシークレット」というものを取得し、環境変数として設定する必要があります。

公式アカウントの作成方法はググれば沢山出てくるので、ここでは割愛します。

インストール後の状態だと、vendor/linecorp/line-bot-sdk/src/Laravel/config/line-bot.php

<?php

return [
    'channel_access_token' => env('LINE_BOT_CHANNEL_ACCESS_TOKEN'),
    'channel_secret' => env('LINE_BOT_CHANNEL_SECRET'),
];

とあるので、.envファイルで設定してあげれば良さそうです。

(私の場合はこのファイルの存在を知らず、プロジェクト内ファイルとしてconfig/line-bot.phpに作ってしまいました。笑)

LINEBot用のコントローラクラスを作成

通常のLaravelで、RESTfulな処理を作る時と同様にAPIを作成します。

php artisan make:controller LINEController

ルーティングも設定します(HTTP MethodはPOSTで作ります)

Route::post('/line/callback', [LINEController::class, 'callback']);

LINEControllerは全体的にこんな感じで作ります

public function callback(Request $request)
{
    $bot = app('line-bot');
    // LINE シグネチャのチェック
    $signature = $_SERVER['HTTP_' . LINEBot\Constant\HTTPHeader::LINE_SIGNATURE];
    if (!LINEBot\SignatureValidator::validateSignature($request->getContent(), config('line-bot.channel_secret'), $signature)) {
        abort(400);
    }

    // ここに自動応答処理を書く

    // JSONでステータスコード=200のレスポンスを返す
    response()->json(['return-data' => 'data'], 200);
}

ステータスコードは常に200を返すように作ります。

何故こんなことをしているかと言うと、開発ガイドラインで指示されているからです。

https://developers.line.biz/media/partner-docs/LINE_BOT_Development_Guidelines.pdf

ここまで作れると、こんな感じのイメージになるかと思います。 (下図のYour Systemの部分がここまで構築した内容になります)

https://cdn-ak.f.st-hatena.com/images/fotolife/s/shirakiya/20160530/20160530104247.png

まとめ

PHP(Laravel)で、自作のLINEBotプログラムを作る場合は

  • ComposerでSDKをインストールする
  • LINE公式アカウントを作成し、ChannelToken・ChannelSecretを取得。環境変数として設定する
  • APIを作る要領で、ルーティングの設定、Controllerを作成する
  • Controller以降を実装する(レスポンスは必ずHTTPステータス=200を返すようにする)

こんなところですね。

ここまでの内容はあくまで疎通レベルのものなので、実際はDBを使ったり、サービスクラスを作ったりしながら、特定のキーワードや挙動に反応する処理を作っていくことになります。

ここまで読んで頂き、ありがとうございました。


Wizではエンジニアを募集しております。

興味のある方、ぜひご覧下さい。

careers.012grp.co.jp