Facebook的使者:: ::博特:: RecipientNotFound

时间:2017-01-11 16:24:17

标签: ruby facebook facebook-graph-api facebook-messenger

我正在尝试使用Hypersolo提供的facebook messenger gem构建一个messenger机器人:https://github.com/hyperoslo/facebook-messenger

我总是收到以下错误: Facebook :: Messenger :: Bot :: RecipientNotFound(不支持的帖子请求。标识为“我”的对象不存在,由于缺少权限而无法加载,或者不支持此操作。请阅读{{3}上的Graph API文档}})

我认为错误是由于access_token无效或无效,但我反复请求新错误,错误仍然存​​在。我检查了我的页面订阅,这似乎很好,并禁用webhooks中的message_echoes。

我正在使用的代码很简单:

require 'facebook/messenger'
include Facebook::Messenger

Facebook::Messenger::Subscriptions.subscribe(access_token: ENV["ACCESS_TOKEN"])

Bot.on :message do |message|
  message.reply(text: 'Hello, human!')
end

此外;省略回复并检查消息变量给我一个有效的消息对象。

#<Facebook::Messenger::Incoming::Message:0x007fdd2d4a40e0 @messaging={"sender"=>{"id"=>"1349987331712XXX"}, "recipient"=>{"id"=>"1683630555268XXX"}, "timestamp"=>1484149162343, "message"=>{"mid"=>"mid.1484149162343:d5a47f1649", "seq"=>121620, "text"=>"Why wont this work?"}}>

1 个答案:

答案 0 :(得分:1)

我从来没有像你一样使用过hyperoslo框架,但我找到了可以解释你问题的东西。

您的留言值:

#<Facebook::Messenger::Incoming::Message:0x007fdd2d4a40e0 @messaging={"sender"=>{"id"=>"1349987331712XXX"}, "recipient"=>{"id"=>"1683630555268XXX"}, "timestamp"=>1484149162343, "message"=>{"mid"=>"mid.1484149162343:d5a47f1649", "seq"=>121620, "text"=>"Why wont this work?"}}>

这意味着,要获取发件人ID,代码应为@message['sender']['id'] 但我发现在hyperoslo源(https://github.com/hyperoslo/facebook-messenger/blob/master/lib/facebook/messenger/incoming/common.rb)上,它似乎不一致:

    def sender
      @messaging['sender']
    end

    def recipient
      @messaging['recipient']
    end

    def reply(message)
      payload = {
        recipient: sender,
        message: message
      }

      Facebook::Messenger::Bot.deliver(payload, access_token: access_token)
    end

我认为,它应该是@messaging['sender']['id']而不是@messaging['sender']

无论如何,请看一下这个问题:https://github.com/hyperoslo/facebook-messenger/issues/96

相关问题