LINE BOT API でのハマりどころ

LINE BOT API

こんにちは、🌸満開で花見日和ですね。 LINE BOT API が公開されたので golangbot を一番手軽に出来そうな環境 heroku 上で作ってみました。
プログラム自体は JSON をコールバックで受け取り、メッセージを送るにはセキュリティ情報を設定し所定のフォーマットで JSON を POST するだけなので特に難しいところはないですが環境面や設定でハマりそうなポイントがあったので、まとめておきます。
ソースコードのサンプルは PHP であれば、ネット上にたくさんあるようなので Qiita などで参考にしてみてください。

github.com

手順

  1. LINE developer に登録し BOT API を利用出来る準備を整える LINE Developers

  2. BOT が LINE メッセージを受け取った際のコールバック実装
    LINE BOT には証明書および固定 IP アドレスが必要になるので、手軽なのは heroku + Fixie で試すのが良いと思います。

ハマりポイント

LINE developer 登録などに関しては特に問題はないと思います。先着で人数制限があるようなので試したい方は早めに登録をした方が良いでしょう。
コールバック実装において私がすんなりいかなかったポイントを本BLOGに記載しておきます。 コールバック以外の API 実装に関しては、とにかく LINE からのレスポンスを確認すること。これに尽きます。ステータスコードとエラー内容(レスポンスの BODY)を常にデバッグ出力して API コール時の何に不備があるか確認してください。だいたいは以下のようになるでしょう。
・セキュリティの設定が不正(CHANNEL関連のキーを正しく HTTP ヘッダに設定出来ていない)
API コール時のパラメータが不正(メッセージを送る際に宛先が配列だったのに string 単体で送っていたのでメッセージ送信は何度か失敗しました)
・IP アドレスのホワイトリストが正しくない

Callback URL

LINE develper の設定画面から Callback URL を設定するのですが、ここで指定する URL は https であることと :443 のポート番号指定をする必要があります。
例)

https://yourdomain.com:443/bot/callback

設定し保存時に Not secure URL or port number not sepcified. とエラーメッセージが出た場合はプロトコルとポート番号を確認しましょう。

設定したコールバックが呼ばれない

私は1日ほどして正常にコールバックが呼ばれるようになりましたが、作成当初は bot にLINE メッセージをしてもコールバックが呼ばれず、何が悪いのか検討もつかなかったです。 しかし翌日になると正常にコールバックが呼ばれるようになったので、LINE developer で Callback URL を設定しても即反映ではなさそうですので気をつけてください。

Server IP Whitelist

BOT がメッセージ送信する際に許可する IP アドレスを登録するのですが、これも反映まで時間がかかるようです。
BOT がメッセージを送信した際に、LINE サーバからこのIPアドレスは許可してないよというレスポンスが届くのですがこちらも Fixie の画面から得られる IP アドレスを LINE developer 設定画面から設定してしばらくするまでは正常に BOT が機能しませんでしたので気をつけてください。 しばらくはメッセージ送信時には以下のようなレスポンスが返ってきます。([X.X.X.X]は実際のIPアドレス)

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

メッセージの送信が成功した場合は以下のような JSON がレスポンスとして返ってくるので、このレスポンスが返ってくるまで諦めずに頑張りましょう。

{"failed":[],"messageId":"1460222924676","timestamp":1460222924676,"version":1}

f:id:yone098:20160410031824p:plain:w300

LINE さんに要望

コールバックが呼ばれない間は、何が問題で呼ばれないのかさっぱり分からずここで断念する人が結構いるのでは?と思いました。
管理コンソールなどで、エラーログだけ見られるようにしてもらえると非常に良いと思いました。