我正在尝试使用由Hypersolo提供的facebook messenger gem构建一个messenger机器人:https://github.com/hyperoslo/facebook-messenger
我总是收到以下错误: Facebook::Messenger::Bot::RecipientNotFound (不支持post请求。ID为'me‘的对象不存在,由于缺少权限而无法加载,或者不支持此操作。请在https://developers.facebook.com/docs/graph-api上阅读Graph API文档)
我假设错误是由于无效或非活动的access_token造成的,但是我一次又一次地请求一个新的new,错误仍然存在。我检查了我的页面订阅,这看起来很好,并且在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此外,省略回复并检查message变量会得到一个有效的message对象。
#<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?"}}>发布于 2017-01-15 05:49:13
我从来没有像你一样使用过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。
https://stackoverflow.com/questions/41595847
复制相似问题