28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-04-13

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 ※画像は適当に拾ってきたやつです。

ソースコード

参考サイト

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

28
27
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?