【未完】LINEBOTをCONOHAで建てようとしたらなぜかherokuにたどり着いた


軽い気持ちで始めたらハマったでござる

最近話題のLINEBOTを作ってみようと軽い気持ちで始めた午後三時、思いの外ハマり今でもハマっているので後から来る皆さんのためにちょっと情報共有しておきます。あとから書きますがLINEのDEVELOPERの内容が反映されてないようでまだ動いていないので、とりあえず未完にしておきます。

conohaにletsencryptを試してみる

結果から言うとダメでした。べつにconoha嬢の問題ではなく、単に letsencryptの証明書をLINEさんが受け付けないことが原因です。
(なので興味のないかたは次の段落に飛んでください)
ちなみにLetsencryptは無料で証明書を出してくれる有難い取り組み
https://letsencrypt.org/
Lineではなく単にちょっと「オレオレ証明」よりましな感じのものを作る時には良いかなと思います。

ちょっと注意してほしいのはconohaのcentOSはデフォルトで443が閉じているので、firewalldで開いてやらなきゃいけないということですね。
ここでちょっと古いCentの人はiptablesを探して/etc界隈を15分ほど彷徨うことでしょう。←やった

firewall-cmd
# firewall-cmd --permanent --add-port=443/tcp

こんな感じですね。それにしてもsystemctlに変更されたり、最近はちょっとcentの変化について行けません。コマンドを手に入れ墨した方がいいかもしれないですね。

お試し証明書でやってみることもできる

そんな訳でやっぱりちゃんとした証明書が必要だということが分かった。まあ、既に「いやうちはverisign入ってるから」とかそういう勝ち組はあっちいけw
まあ、rapidsslさんとかいろいろ格安の所をこの機会に契約しても良いし(それにしてもこのLINEBOTでずいぶん新規の契約が取れたんじゃないかとおもったりもする。ここにそっとアフィリを仕込んだら儲かるかとも思うがそんなことはしない)
まあ、とりあえずちょっとだけ試してみたいという方はグローバルサインさんのお試し証明書(45日有効)を使ってみる方法もありますね。
この方の記事がそこら辺詳しいです
http://osa030.hatenablog.com/entry/2016/04/08/214939

とはいえ私はまた45日後にバタバタとするのはめんどくさいなあと思ったので、あっさりconohaさんをあきらめ他の方法を探すことにした

heroku+fixie

まあ、AWS API gatewayでも出来るのではあるのだけど、ここはぐっと渋くherokuでやってみることにする。(単なる好み)
herokuでのやり方に関してはこのページを参考にさせて頂きました。
http://djangoapplab.com/47/

まあ、ざっくり言うとherokuはもともとhttpsなので、証明書をごちゃごちゃする必要がない。まあIPはちょっと動くことがあるのだけどそれはfixieというアドオンで解決できるということでした。(ざっくりとした報告)
herokuさんにももちろん無料枠あり、そして無料のaddonsもクレジットカードを登録すれば(使わなくても良い)使えるようになる。との事なのでちょっとクレジットカードを登録してみました。

heroku
$ heroku addons:create fixie:tricycle
=> Your IP addresses are xx.xx.xx.xx, xx.xx.xx.xx

クレジットカードをherokuで登録してから上のコマンドを叩くとこのようにIPアドレスが表示されるようになります(登録してないとエラーになる)
fixieはプロキシのように働くようで、これをLINE DEVELOPERの Server IP Whitelistに登録することになります。(後で書きます。なぜ二つ出て来るのか分からなかったが両方登録してみた)

これでSSLと静的IPアドレスが整ったのでいよいよLINE BOTの方に登録する
(あ、実際にはここでherokuに対してindex.phpで何らかのプログラムを当然書いてdeployしなきゃいけないです。こちら参照)
http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku

コールバックの設定

さて、先ほどherokuをdeployして作ったurlを、このcallback URLのところにコールバックされる(呼ばれるURL)を入れるわけです。ただ最初はちょっとエラーがでて登録できず「???」となりました。
落ち着いて英文エラーメッセージを読んでみると「URLとポートを指定しろよ」と言っているので両方を指定する必要がありそう。つまりこんな感じ

https://hogehoge.com:443/callback.php

まあ、考えてみれば443のデフォルトのままではなんなんだろうという考えなんだけどサンプルを一行入れてくれればすぐ分かるのにとLINEさんの薄情さにしびれる

うまく通ればSAVEが表示されるので保存します。

Server IP Whitelist を設定する

ここからはうまくいっているかどうかまだ自信がないので小声になるんですけど、(たぶん)callbackを呼び出すサーバーのIPをここで指定するんだろうなと思います。

うんと...ちょっとsrever IP whitelistって言葉曖昧じゃない?
callback origin list とかもう少しはっきりしてくれるとうれし...あ、すみません。ごめんなさい。なんでもないです。

で、IPの指定の仕方はオーソドックスな XXX.XXX.XXX.XXX/(24-30)だそうです。(これもまあ英文の説明しかないですけどお察しですね)

さきほどfixieで表示されたIPアドレスをここに登録する
とくに「よし!分かったよ!」とか「オッケー、それでいいよ!」というリアクションもなく淡々と登録が終わって一抹の不安。ただ上の方に「These settings will take effect immediately.(この設定はすぐに反映されますよ)」と書いてあるので、まあ信じることにしましょう。

デバックできねえ

さて、そんなこんなで一通り設定が終わったので、Basic informationに表示されているQRをスマホで読み取って見る。ラインが起動し(入ってなければ入れなきゃ!)登録したBOTさんのプロフィールが表示されるので素早く友達になって、話しかけてみる
ドキドキ...さあ、どうなるかな

こんにちは!

素早く既読になるが何も返事がない。これが噂の既読スルーと言うやつか。

こんにちは!」「元気?」「ねえ、聞こえてる?

反応なし

IPを確認したり、PHPの文法チェックしてみてもダメ。もう何が悪いのかわからねえよ!

泣きながらいろいろググったらこちらのページで
http://yone098.hatenablog.com/entry/2016/04/10/032451
このような記述が

作成当初は bot にLINE メッセージをしてもコールバックが呼ばれず、何が悪いのか検討もつかなかったです。 しかし翌日になると正常にコールバックが呼ばれるようになった

それ!まさに私がいまその状態ですよ!ナカーマ!と思いましたがそうするともうどうすることもできません。

何が問題で呼ばれないのかさっぱり分からずここで断念する人が結構いるのでは?と思いました。

ホントですよ!いま、まさに私が断念しかけてます。よねさん、あなたいい人だ!(泣

じゃあ、しかたない。明日まで待とうかな。
という訳でとりあえず今日はここまで。明日になったら反応していると良いなあ。
上記の「よね」さんも書かれていますが「ホントにLINE developerにエラーログ表示してほしい」と心から願う次第です。
参考にさせて頂いた皆さん、ありがとうございました!

参考にさせて頂いたサイトたち:
http://djangoapplab.com/47/
heroku+fixieを使ってlinebotを設定する方法を説明されてます

http://developers.mobage.jp/blog/how-to-use-for-beginners-heroku
herokuの初心者向けガイダンス

http://blog.ko31.com/201604/line-bot-api-php/
phpで画像検索ロボットを作ってらっしゃいます