2010-05-18 10 views
1

J'essaie de réaliser du code simple sur Perl qui devrait simplement recevoir/envoyer des messages depuis/vers des comptes gtalk. J'utilise Net :: XMPP :: *Envoyer une invitation à n'importe quel utilisateur de Google Chat (est-ce possible?)

modules. Tout fonctionne très bien pour les utilisateurs, qui sont mes amis (dans ma liste "buddy"). Mais je ne peux pas envoyer de message à un utilisateur inconnu. Je sais, que pour ce cas, je dois d'abord envoyer une invitation, mais

Net :: XMPP :: * ne fournissent pas cette possibilité. Il n'y a qu'une seule façon d'inviter personne - construire mon propre xml selon

au protocole "XEP-0155 Stanza Session Negotiation". Mais cela ne fonctionne pas correctement. Quand j'envoie un fichier xml au serveur, le message

renvoie l'erreur "service-unavailable".

J'envoyer:

<message to='[email protected]'> 
<sxde xmlns='http://jabber.org/protocol/sxde' 
    xmlns:sxde='http://jabber.org/protocol/sxde#metadata' 
    session='0AEF4278DC4B6577' 
    id='b'> 
    <negotiation> 
    <invitation> 
     <feature var='http://jabber.org/protocol/whiteboard' /> 
    </invitation> 
    </negotiation> 
</sxde> 
</message> 

avant mon message.

RÉPONSE:

<message from='' to='[email protected]/TALKCDDCCE63' type='error'> 
    <sxde id='b' session='0AEF4278DC4B6577' xmlns='http://jabber.org/protocol/sxde' xmlns:sxde='http://jabber.org/protocol/sxde#metadata'> 
    <negotiation> 
     <invitation> 
     <feature var='http://jabber.org/protocol/whiteboard'/> 
     </invitation> 
    </negotiation> 
    </sxde> 
<nos:x value='disabled' xmlns:nos='google:nosave'/> 
<arc:record otr='false' xmlns:arc='http://jabber.org/protocol/archive'/> 
<error code='503' type='cancel'> 
    <service-unavailable xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/> 
</error> 
</message> 

Peut-être que j'ai perdu lissée ou devrait envoyer une autre information avant (ou après ..)?

Ou peut-être existe-t-il une autre façon d'envoyer un message sans invitation?

Merci à l'avance

Répondre

0

Vous devez d'abord authentifier votre JID, vous pouvez envoyer strophe message au serveur XMPP. Abonnement requis uniquement pour les notifications de présence.

<message to='[email protected]/TALKCDDCCE63' type='chat' xmlns='jabber:client'> 
<body>TEST MESSAGE</body> 
</message> 
+0

Si je comprends bien, mon processus auth exécution correcte, s'il vous plaît, jetez un oeil à mon code et dit, s'il est faux smth:

  $xmpp = new Net::XMPP::Client->new(debuglevel=>2,debugfile=>'SOME_FILE'); my $xmppsid = $xmpp->{SESSION}->{id}; $xmpp->{STREAM}->{SIDS}->{$xmppsid}->{hostname} = 'gmail.com'; my @connect_status = $xmpp->AuthSend(username=>$login password=>$password, resource=>'TALK', hostname=>'gmail.com'); exit if $connect_status[0] ne 'ok' ; $xmpp->Process();  
j'envoyer serveur smth autre? – Gizzo

0

Corrigé. J'ai juste besoin d'envoyer

$xmpp->Send("<presence to='$address' type='subscribe' /></presence>") 

C'est tout

Questions connexes