LINE bot echoするやつ書いた

n番煎じ感あるけど書いたので一応.ハマリポイントの共有にちょうど良さそう.

コード

github.com

環境変数BotのChannel IDとかMIDとか突っ込むと良い.

herokuにデプロイしてFixieというherokuからProxyして固定IPゲットするaddonを使う必要がある.

ハマりポイント

Callback URL問題

f:id:programmerMOT:20160408121909p:plain

なんでや!と思ったら :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ゲットして登録した.