読者です 読者をやめる 読者になる 読者になる

one's way blog

ワクワクを生み出せるWebエンジニアを目指して。

【50:LINE BOT API】PHP+HerokuでオウムBOT

f:id:seintoseiya:20160409231056j:plain
プロジェクトNo.50:LINE BOT API

4/7にLINEの「BOT API Trial Account」が10,000名限定で無償提供されたということで、早速試してみました。
サクッとできるかなと思ったら意外とハマりました・・・
作成したのは送信したメッセージをそのまま返すオウムBOT

ハマったところ

ロリポップの共有SSHは使えない

当初、ロリポップサーバの共有SSHを使って、callback.phpをサーバにアップして使おうと思ったけど、
そもそもIPアドレスはどれになるのかわからんし使えないだろうということで、
HerokuというPaaSのサービスを使うことに。

PaaSのサービスに慣れてない

今までレンタルサーバーでやってたので、ファイルがどこにあるかなどの概念を理解することに戸惑いました。
でも公式サイトのチュートリアル通りやれば、難しいことはなかったです。
(2016/4/10追記)
わかりやすい図で構成を紹介されている記事があったのでご紹介します。
Heroku使い方メモ(Java) - Qiita

Line側の設定

Callback URLを「https://サーバー:443/linebot/callback」にすることや(:443が必要)、
Server IP Whitelistの登録すること。HerokuではFixieというアドオンを入れてOutbound IPsの部分を入力すればOKらしい。
・・・が!デプロイすると毎回違うIPアドレスではじかれる。
heroku logs --tailでログ見て、はじかれてるIPをWhite Listに追加。
デプロイする度に変更すれば動くのだが、なぜなんだろう。がんばって、未来の自分。

(2016/4/10追記)
PHP側でproxyを経由するという記述が抜けていました。
Fixieで作られたproxyのURLをcurl_setoptで設定したら正常に動作しました。

    //プロキシ経由フラグ
    curl_setopt($curl, CURLOPT_HTTPPROXYTUNNEL, 1);
    //プロキシアドレス設定(プロキシのアドレス:ポート名)
    curl_setopt($curl, CURLOPT_PROXY, $GLOBALS['proxy']);

Line側のバグ?

上記のような問題はあったが、4/8の夜に登録して、その日中に環境もソースも準備できて、
さー動かそうとすると動かない。callbackのログも出ない。なぜだー!!!と悩んでると、Twitter上で同じような症状の人達を発見。
諦めて寝た後、4/9の夕方ぐらいに復旧しているというツイート発見。僕のオウムちゃそがやっと返信してくれました。
トライアルだから仕方ないかもだけど、アナウンスほしかったなー。

こちらからオウムちゃそと友達になってあげてください。
f:id:seintoseiya:20160409231341p:plain
気が向いたらアップデートします。

(2016/4/10追記)
HerokuのFixieでは月に500アクセスしかproxy経由のアクセスができない様なので、
本稼働させるにはFixieの有償版にするか、そもそもサーバーをVPSとかにするかしかない様です。

(2016/4/13追記)
ソースを公開しました。
github.com