2014-11-17 10 views
0

Я пытаюсь отправить сообщения icq через jabber-transport. Я попытался использовать код из этого ответа XMPP transport to another protocol, но я получил это сообщение:XMPP транспорт в ICQ

DEBUG -- : SENDING: 
    <message to='[email protected]' xmlns='jabber:client'><body>test 
message from robot</body></message> 
=> nil 
DEBUG -- : RECEIVED: 
    <message from='[email protected]' to='[email protected]/83076 
14161416233482839674' type='error'><error code='401' type='auth'><not-authorized 
xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xmlns='urn:ietf:params:xml:n 
s:xmpp-stanzas'>Error. You must log into the transport before sending messages.< 
/text></error><body>test message from robot</body></message> 

Пожалуйста, объясните мне: что я делаю не так? Заранее спасибо.

Вот мой код

require 'rubygems' 
require 'xmpp4r/client' 
include Jabber 

Jabber.debug = true 
jid = JID::new('[email protected]') 
pass = 'pwd' 
server = 'jabber.blahblah.ru' 
port = '5223' 
subj = 'Nagios notification' 
user = '[email protected]' 
text = 'AAAA AAAA AAAA' 
cl = Jabber::Client::new(jid) 
cl.use_ssl = true 
cl.connect(server,port) 
cl.auth(pass) 

#connect to transport 
reg=Jabber::Iq.new_register "54321", "pwd2" 
reg.to="icq.jabber.blahblah.ru" 
cl.send reg 

mes = Message::new(user,text) 
cl.send(mes) 
cl.close() 

Обновленный код:

cl.connect(server,port) 
cl.auth(pass) 

# sending initial presence 
p = Jabber::Presence.new 
cl.send p 

mes = Message::new(user,text) 
mes.type = :chat 

cl.send(mes) 
cl.close() 

возвращается:

D, [2014-11-18T19:01:35.986182 #8084] DEBUG -- : SENDING: 
    <presence xmlns='jabber:client'/> 
=> nil 
irb(main):027:0> D, [2014-11-18T19:01:36.048980 #8084] DEBUG -- : RECEIVED: 
    <presence from='icq.jabber.blahblah.ru' to='[email protected]' type='subscri 
be'><status/></presence> 

и до сих пор не работает

+0

Транспорт отправляет вам запрос на подписку, вы должны его одобрить ('<присутствие to='[email protected] 'type =' подписанный '/>'), и транспорт сможет увидеть ваше присутствие и, при необходимости, отправить подписки на присутствие от каждого контакта icq, который вам тоже нужно одобрить. Фактически вы должны сделать это только в первый раз и можете сделать это с любым существующим клиентом xmpp. – vitalyster

ответ

0

Вам нужно только зарегистрировать транспорт только в первый раз , тогда вам необходимо отправить initial presence после создания сессии.

+0

Не могли бы вы написать, пожалуйста, как должно выглядеть это «первоначальное присутствие» в моем случае? (пример в XML) –