#目的
status500エラーを解決し、webhookの検証を成功させたい。
発生している問題・エラーメッセージ
#####railsでlinebotを作っているが、webhookの検証がstatus500エラーで成功しない。callbackURLを記載し、検証を実行すると下記エラーが発生します。
#エラー
- Webhookイベントオブジェクトを送信したときにエラーが発生しました
#エラー
- ボットサーバーから200以外のHTTPステータスコードが返されました
デプロイは済んでいるのでheroku logsコマンドを打つと、ターミナルには下記エラーが出ます。NoMethodError (undefined method `include?' for nil:NilClass):。これがstatus500の原因に直結すると思っているのですが、その原因に分からないです。
2020-08-13T03:04:33.796590+00:00 app[web.1]: [277c2d75-ee0c-4c8e-9c93-ae1fd97f813b] NoMethodError (undefined method `include?' for nil:NilClass): 2020-08-13T03:04:33.796590+00:00 app[web.1]: [277c2d75-ee0c-4c8e-9c93-ae1fd97f813b] 2020-08-13T03:04:33.796591+00:00 app[web.1]: [277c2d75-ee0c-4c8e-9c93-ae1fd97f813b] app/controllers/linebots_controller.rb:30:in `block in callback' 2020-08-13T03:04:33.796591+00:00 app[web.1]: [277c2d75-ee0c-4c8e-9c93-ae1fd97f813b] app/controllers/linebots_controller.rb:27:in `each' 2020-08-13T03:04:33.796591+00:00 app[web.1]: [277c2d75-ee0c-4c8e-9c93-ae1fd97f813b] app/controllers/linebots_controller.rb:27:in `callback' 2020-08-13T03:04:33.798999+00:00 heroku[router]: at=info method=POST path="/callback" host=shinobi01bot.herokuapp.com request_id=277c2d75-ee0c-4c8e-9c93-ae1fd97f813b fwd="203.104.156.76" dyno=web.1 connect=1ms service=562ms status=500 bytes=1827 protocol=https
疑わしいソースコード部分(linebots_contoroller.rb)
入力された文章に対して特定の台詞を返したい
class LinebotsController < ApplicationController require 'line/bot' # gem 'line-bot-api' # callbackアクションのCSRFトークン認証を無効 protect_from_forgery :except => [:callback] def client @client ||= Line::Bot::Client.new { |config| config.channel_secret = ENV['LINE_BOT_CHANNEL_SECRET'] config.channel_token = ENV['LINE_BOT_CHANNEL_TOKEN'] } end def callback # Postモデルの中身をランダムで@postに格納する @post=Post.offset( rand(Post.count) ).first body = request.body.read signature = request.env['HTTP_X_LINE_SIGNATURE'] unless client.validate_signature(body, signature) head :bad_request end events = client.parse_events_from(body) events.each { |event| # event.message['text']でLINEで送られてきた文書を取得 if event.message['text'].include?("パスワード") response = "パスワードが違う!曲者め!" elsif event.message["text"].include?("退け") response = "我が剣の切れ味、身を以て知るがいい" elsif event.message['text'].include?("覚悟") response = "ふん、意気込みだけでは儂に勝てぬぞ" elsif event.message['text'].include?("姫はどこだ") response = "そんな小娘のことより、己自身の心配をせい" else response = @post.name end #if文でresponseに送るメッセージを格納 case event when Line::Bot::Event::Message case event.type when Line::Bot::Event::MessageType::Text message = { type: 'text', text: response } client.reply_message(event['replyToken'], message) end end } head :ok end end
include?メソッドが定義されていないという事ですが、def callback〜endの書き方がおかしいのかな?と思いつつも解決に至っておりません。
試したこと
①MVCなので、一応ビューファイルやモデルファイルをチェックしましたが、今回はbotという事もあり、scaffoldでほとんど生成しており手を加えていないです。
②検索エンジンでもエラー文を調べましたが、定義する場所はコントローラー内とあるのみで原因解明の糸口が見つけられないでいます。
③他の過去記事もみましたが、自分とは微妙に違う内容ばかりで結果、混乱しました。
ここがおかしいなどの指摘がありましたら指摘を頂きたく投稿しました。先人の方々の知恵をお借りしたく思います。よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/13 11:12
2020/08/13 13:05
2020/08/13 14:31