Edited at

PHP+HerokuでLINE BOT作ってみた

More than 3 years have passed since last update.


はじめに

先人の知恵があったのでサクッと作れました :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()とかでプリントデバッグしながら開発するのがお手軽です