2017-01-11 3 views
3

Я пытаюсь построить матричный бот с помощью facebook мессенджера камня предоставленного Hypersolo: https://github.com/hyperoslo/facebook-messengerFacebook :: Коммуникатор :: Bot :: RecipientNotFound

Я всегда получаю следующее сообщение об ошибке: Facebook :: Курьер :: Бот :: RecipientNotFound (Неподдерживаемый почтовый запрос. Объект с идентификатором «me» не существует, не может быть загружен из-за отсутствия разрешений или не поддерживает эту операцию. Пожалуйста, прочитайте документацию по графическому API на https://developers.facebook.com/docs/graph-api)

Я предположил, ошибка была вызвана недействительным или неактивным access_token, однако я снова и снова запрашивал новый, и ошибка остается. Я проверил подписки на страницы, которые, как представляется, прекрасны, а также отключить message_echoes в webhooks.

код я использую просто:

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

Вы проверяли разрешения на использование facebook? –

ответ

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?"}}> 

То есть, чтобы получить идентификатор отправителя, код должен быть @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.