PHP+HerokuでLINE BOT作ってみた

  • 57
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

先人の知恵があったのでサクッと作れました :relieved:

作ったもの

「ぬるぽ」に「ガッ」するbotです。以下のQRコードで友だちになれます。

準備

  • HerokuアプリにFixieアドオンを入れる
  • LINEのCallback URLhttps://{アプリ名}.herokuapp.com:443/callbackって感じで設定
  • Herokuの環境変数にLINEのCannel ID Channel Secret Channel MIDを設定
  • LINEのServer IP WhitelistにFixieのOutbound IPsxxx.xxx.xxx.xxx/24って感じで登録

コード

以下で公開してます。
https://github.com/ttskch/line-nullpo

<?php
require_once __DIR__ . '/vendor/autoload.php';

use Symfony\Component\HttpFoundation\Request;

$app = new Silex\Application();

$app->post('/callback', function (Request $request) use ($app) {
    $client = new GuzzleHttp\Client();

    $body = json_decode($request->getContent(), true);
    foreach ($body['result'] as $msg) {
        if (!preg_match('/(ぬるぽ|ヌルポ|ヌルポ|nullpo)/i', $msg['content']['text'])) {
            continue;
        }

        $resContent = $msg['content'];
        $resContent['text'] = 'ガッ';

        $requestOptions = [
            'body' => json_encode([
                'to' => [$msg['content']['from']],
                'toChannel' => 1383378250, # Fixed value
                'eventType' => '138311608800106203', # Fixed value
                'content' => $resContent,
            ]),
            'headers' => [
                'Content-Type' => 'application/json; charset=UTF-8',
                'X-Line-ChannelID' => getenv('LINE_CHANNEL_ID'),
                'X-Line-ChannelSecret' => getenv('LINE_CHANNEL_SECRET'),
                'X-Line-Trusted-User-With-ACL' => getenv('LINE_CHANNEL_MID'),
            ],
            'proxy' => [
                'https' => getenv('FIXIE_URL'),
            ],
        ];

        try {
            $client->request('post', 'https://trialbot-api.line.me/v1/events', $requestOptions);
        } catch (Exception $e) {
            error_log($e->getMessage());
        }
    }

    return 'OK';
});

$app->run();

ひとこと

  • ローカルで$ heroku logs -tしながら、必要に応じてerror_log()とかでプリントデバッグしながら開発するのがお手軽です