オリジナルのlinebotを作成する際に、ローカル環境でngrok
を利用して、動作確認を行っていたのですが、デプロイ後、本番環境から開発環境に戻してngrok
を使って動作確認をする際に、Webhook URLをngrok用のURLに書き換え、通信状況の確認を行うのですが、毎回、403Forbiddenエラー
が表示されてしまい、ん?なんでだ?と悩んでしまうことがあったので、解決方法をメモしておきます。
開発環境
macOS BigSur
ruby-2.6.5
Rails 6.0.3.6
ngrok(エングロック)
というのは、ローカルサーバーを外部公開して、どこまらでもアクセスできるようにするツールのことです。
403Forbiddenエラー
messagingAPIの公式リファレンスでは、ステータスコード403エラーについて
リソースにアクセスする権限がありません。ご契約中のプランやアカウントに付与されている権限を確認してください。
と記載されており、リクエストを送っても、権限がないので、アクセスできないということだと分かります。
つまりは、Webhook URLに設定した
https://xxxxxxx.ngrok.io/callback
のxxxxxxx.ngrok.io
の部分からの通信を許可するような設定をアプリケーション側に設定しないといけません。
解決方法
rails6以降を使用する場合、config/application.rb
内に先程説明したxxxxxxx.ngrok.io
の部分をコピーし、そこからの通信を許可する設定を行うとエラーが解決できます。
(省略)
config.hosts << "xxxxxxxxx.ngrok.io"
(省略)
ngrokは立ち上げるたびに、このURLが変更され、毎回、このエラーにハマってしまったので、忘れないように記事にさせていただきました。