我正在尝试使用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?"}}>
答案 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。