2012-10-12 2 views
2

http://dalibornasevic.com/posts/35-how-to-send-private-messages-with-facebook-api에 제시된 지침에 따라 친구에게 메시지를 보내고 현재 명령 행에서 테스트하고 있습니다. 다음은 내가 사용하고있는 코드입니다. 페이스 북 계정을 열고 보낸 메시지를 확인하면 명령 줄을 통해 보내려는 메시지가 표시되지 않습니다. 나는 내가하고있는 실수를 이해하지 못한다.xmpp4r_facebook을 사용하여 페이스 북 메시지를 보낼 수 없습니다.

1.9.3-p194 :017 > require 'xmpp4r_facebook' 
=> true 

1.9.3-p194 :00 3 > id = '-<my facebook id>@chat.facebook.com' 
=> "-<my facebook id>@chat.facebook.com" 

1.9.3-p194 :00 4 > to = '-<friend facebook id>@chat.facebook.com' 
=> "-< friend's facebook id>@chat.facebook.com" 

1.9.3-p194 :00 5 > body = "hello, Im not spam!" 
=> "hello, Im not spam!" 

1.9.3-p194 :00 6 > subject = 'message from ruby' 
=> "message from ruby" 

1.9.3-p194 :00 7 > message = Jabber::Message.new to, body 
=> <message xmlns='jabber:client' to='-<friend facebook id>@chat.facebook.com'> ... </> 

1.9.3-p194 :00 8 > message.subject = subject 
=> "message from ruby" 

1.9.3-p194 :00 9 > 
1.9.3-p194 :010 > client = Jabber::Client.new Jabber::JID.new(id) 
=> #<Jabber::Client:0x007fc47e4d8498 @fd=nil, @status=1, @xmlcbs=#<Jabber::CallbackList:0x007fc47e4d8470 @list=[]>, @stanzacbs=#<Jabber::CallbackList:0x007fc47e4d8420 @list=[]>, @messagecbs=#<Jabber::CallbackList:0x007fc47e4d83d0 @list=[]>, @iqcbs=#<Jabber::CallbackList:0x007fc47e4d8380 @list=[]>, @presencecbs=#<Jabber::CallbackList:0x007fc47e4d8330 @list=[]>, @send_lock=#<Mutex:0x007fc47e4d82e0>, @last_send=2012-10-12 23:29:34 +0530, @exception_block=nil, @tbcbmutex=#<Mutex:0x007fc47e4d8290>, @threadblocks=[], @wakeup_thread=nil, @streamid=nil, @streamns="jabber:client", @features_sem=#<Jabber::Semaphore:0x007fc47e4d8218 @tickets=0, @lock=#<Mutex:0x007fc47e4d81f0>, @cond=#<ConditionVariable:0x007fc47e4d81c8 @waiters=[], @waiters_mutex=#<Mutex:0x007fc47e4d8178>>>, @parser_thread=nil, @processing=0, @host=nil, @port=nil, @allow_tls="constant", @tls=false, @ssl_capath=nil, @ssl_verifycb=nil, @features_timeout=10, @keepalive_interval=60, @use_ssl=false, @jid=-<my facebook id>@chat.facebook.com> 

1.9.3-p194 :011 > client.connect 
=> #<Jabber::Client:0x007fc47e4d8498 @fd=#<OpenSSL::SSL::SSLSocket:0x007fc47c852260>, @status=2, @xmlcbs=#<Jabber::CallbackList:0x007fc47e4d8470 @list=[]>, @stanzacbs=#<Jabber::CallbackList:0x007fc47e4d8420 @list=[]>, @messagecbs=#<Jabber::CallbackList:0x007fc47e4d83d0 @list=[]>, @iqcbs=#<Jabber::CallbackList:0x007fc47e4d8380 @list=[]>, @presencecbs=#<Jabber::CallbackList:0x007fc47e4d8330 @list=[]>, @send_lock=#<Mutex:0x007fc47e4d82e0>, @last_send=2012-10-12 23:29:35 +0530, @exception_block=nil, @tbcbmutex=#<Mutex:0x007fc47e4d8290>, @threadblocks=[], @wakeup_thread=nil, @streamid="10BAB5BB", @streamns="jabber:client", @features_sem=#<Jabber::Semaphore:0x007fc47e4d8218 @tickets=0, @lock=#<Mutex:0x007fc47e4d81f0>, @cond=#<ConditionVariable:0x007fc47e4d81c8 @waiters=[], @waiters_mutex=#<Mutex:0x007fc47e4d8178>>>, @parser_thread=#<Thread:0x007fc47c852008 sleep>, @processing=0, @host="chat.facebook.com", @port=5222, @allow_tls="constant", @tls=true, @ssl_capath=nil, @ssl_verifycb=nil, @features_timeout=10, @keepalive_interval=60, @use_ssl=false, @[email protected], @socket=#<OpenSSL::SSL::SSLSocket:0x007fc47c852260>, @stream_mechanisms=["X-FACEBOOK-PLATFORM", "DIGEST-MD5"], @stream_features={}, @parser=#<Jabber::StreamParser:0x007fc47c852030 @stream=#<OpenSSL::SSL::SSLSocket:0x007fc47c852260>, @listener=#<Jabber::Client:0x007fc47e4d8498 ...>, @current=nil, @started=true>, @keepaliveThread=#<Thread:0x007fc47c899868 run>> 
1.9.3-p194 :012 > client.auth_sasl(Jabber::SASL::XFacebookPlatform.new(client, '<App ID>', '<access token>', 'App Secret'), nil) => <iq xmlns='jabber:client' type='result' id='2071'> ... </> 

1.9.3-p194 :013 > client.send message 
=> nil 

1.9.3-p194 :014 > client.close 
=> #<Thread:0x007fc47c899868 dead> 

답변

2

이 보석의 형식은 to에 대한

-<id>@chat.facebook.comid

하지

<id>@chat.facebook.com

공지 사항입니다 초기 대시 - (확실하지 왜)

그래서

message = Jabber::Message.new to, body 

후 응답은 당신이 할 수있는 생각 당신이 페이스 북 사용자의 ID 번호를 사용해야합니다 내가, 사용자 이름은 상호 교환 여부되지 확신

<message xmlns='jabber:client' to='-<friend facebook id>@chat.facebook.com'> ... </>

해야한다 채팅 API를 사용하여 Gmail에있는 사람이 아닌 Facebook 친구들간에 만 통신 할 수 있습니다. Facebook 메시지는 Facebook Chat과 완전히 다른 플랫폼입니다.

프로필이 facebook.com/zuck이고 ID가 4 인 경우 ID가 필요합니다. to = '[email protected]' 사용자 이름은 내가 믿는 보석입니다.

+0

변경했지만 여전히 수정되지 않았습니다. 이들은 'xmpp4r_facebook'을 필요로하는 업데이트 된 지침입니다. id = '[email protected]' to = '[email protected]' body = "안녕하세요, 스팸이 아닙니다. ! " 메시지 = '루비에서 메시지' 대상 = 재버 :: Message.new에, 몸 message.subject = 대상 클라이언트 = 재버 :: Client.new 재버 :: JID.new (ID) client.connect client.auth_sasl (Jabber :: SASL :: XFacebookPlatform.new (클라이언트, '517770868251374', '<액세스 토큰>', '933a3a61307af64f773460b4a7dc2c4e'), nil) client.send message client.close – raju

+1

@santu 사용자 이름이 바뀔 수 있는지 확인해야합니다. 따라서 Facebook 사용자의 ID 번호도 사용해야합니다. Gmail의 다른 사용자가 아닌 Facebook 친구 사이에서만 채팅 API를 사용할 수 있다고 생각합니다. Facebook 메시지는 Facebook Chat과 완전히 다른 플랫폼입니다. – phwd

+0

@ chat.facebook.com '으로 바꿨지 만 여전히 작동하지 않습니다. ( – raju

관련 문제