LINE bot echoするやつ書いた
n番煎じ感あるけど書いたので一応.ハマリポイントの共有にちょうど良さそう.
コード
環境変数にBotのChannel IDとかMIDとか突っ込むと良い.
herokuにデプロイしてFixieというherokuからProxyして固定IPゲットするaddonを使う必要がある.
ハマりポイント
Callback URL問題
なんでや!と思ったら :443
が必要らしい.
https://URL:443/callback
みたいにしないといけない.
SSL問題
最初自分のVPSでやろうとして,HTTPS必要らしいのでLet's encryptしてみた.
ところが,一向にアクセスが来ない.あれれ〜おかしいぞ〜と思いHerokuにデプロイするとちゃんとアクセス来た.
Let's encryptがvaildな証明書じゃないらしい.めんどくせえ...
X_LINE_CHANNELSIGNATURE問題
正しいLineからのreceiveかどうかのvalidationチェックをするにあたり,HTTP headerを見る必要がある.
LINE Developers - BOT API - Getting started with BOT API Trial
ここを参考に X_LINE_CHANNELSIGNATURE
を見てたんだけど,なんか空文字であれ〜ってなってた.
よく見ると HTTP_X_LINE_CHANNELSIGNATURE
というヘッダーだった...ドキュメントェ...
channel_secret = ENV['CHANNEL_SECRET'] http_request_body = request.body.read hash = OpenSSL::HMAC::digest(OpenSSL::Digest::SHA256.new, channel_secret, http_request_body) signature = Base64.strict_encode64(hash) x_line_channelsignature = request.env["HTTP_X_LINE_CHANNELSIGNATURE"] if signature == x_line_channelsignature ...
(追記)
これもしかしたらSinatraが勝手に HTTP_
ってつけてるかもしれない.
Heroku固定IP問題
echoするためにSend API叩く必要があるんだけど,その際にWhitelistにIPを登録しないといけないみたい.
Herokuには固定IPがないので,FixieというaddonでProxy作って固定IPゲットして登録した.