PHP + HerokuでLINE BOTを試してみる&ハマったこと

  • 23
    Like
  • 7
    Comment
More than 1 year has passed since last update.

BOT API Trial Account が提供されていると聞いて試してみました。
既に1週間経っているため、皆様の記事を参考にさせていただきました。
特にHello World的な作業ではなく、何箇所かハマったのでそれを書きます。

開発環境

Heroku + FIXIE
PHP

FIXIEはHerokuのアドオンとなっているため、無料ですがクレジットカードの登録が必要です。

LINE BOT → Heroku へのコールバック

コールバックURL

BOTアカウントを作成したら、
LINE DevelopersのページにコールバックURLを設定します。

Herokuで動かす場合のコールバックURLですが、
色々調べていると多数の設定方法がありました。

https://xxxxx.herokuapp.com
https://xxxxx.herokuapp.com:443/linebot/callback
https://xxxxx.herokuapp.com:443/callback

などなど、色々な設定が記載されていましたが、
私は https://xxxxx.herokuapp.com:443/callback に落ち着きました。

設定から反映までに時間がかかる

コールバックURLを設定後、
heroku logs -t でログを見ながらBOTに話かけてみましたが、
うんともすんとも反応せず。

HerokuアプリのURLをブラウザで直接叩いてみるとログが出力されるので動いてはいる。
が、BOTからは叩かれていない模様。

私も すぐには反映しないかもしれない の情報通り、時間が解決してくれました。

(追記)
私の場合は、だいたい20分〜30分は放置していました。
※その間離れてしまっていたので、詳しい反映時間は不明です。

Heroku → LINE BOT API → LINE

Herokuを使ってる人はFIXIEで指定されたIPをホワイトリストに登録していると思います。
私も登録しました。

しかし、どうもPOSTに失敗している模様。
curl_exec() の戻り値をログにちゃんと出力して確認すれば問題なく解決できるはず。
CURLOPT_RETURNTRANSFER の設定もお忘れなく。

私の場合は以下の通り、
ホワイトリストに登録されていないIPアドレス で叩いていました。

{"statusCode":"427","statusMessage":"Your ip address [xxx.xxx.xxx.xxx] is not allowed to access this API."}

原因は、FIXIEのproxyURLの設定をせずにリクエストしてしまったため、
IPがproxy経由のアウトバウンドIPではなく、herokuアプリのIPになってしまっていたようです。
CURLOPT_HTTPPROXYTUNNEL , CURLOPT_PROXY , CURLOPT_PROXYPORT の辺りを設定してあげることで解決しました。

終わり

ということで、
ここまでで、LINE BOTが動くようになりました。

Evernote Camera Roll 20160413 222437.png
※画像は適当に拾ってきたやつです。

ソースコード

https://gist.github.com/chibi929/fcf065322cd6435ac5cdc109e1cc0cd7

参考サイト

最後に参考にさせて頂いた記事です。
皆様ありがとうございました。