Invia una notifica XMPP dallo script Node.js

In che modo uno script Node può inviare una notifica tramite XMPP a un utente Jabber (ad esempio tramite Google Hangouts)? Ho esaminato librerie come xmpp / client ma sembrano eccessive. C’è una soluzione più semplice?

Il modo più semplice per inviare un messaggio tramite XMPP nel nodo

Probabilmente non esiste altra libreria client XMPP più semplice per Node rispetto a node-simple-xmpp . In questo caso lo script Node.js minimo per inviare un messaggio a un altro utente Jabber è:

 var xmpp = require('simple-xmpp'); var jid = '[email protected]'; var pwd = 'xyz'; var server = 'xmpp.jp'; var port = 5222; xmpp.on('online', function(data) { console.log('Connected with JID: ' + data.jid.user); xmpp.send('[email protected]', 'hello! time is '+new Date(), false); }); xmpp.on('error', function(err) { console.error("error:", JSON.stringify(err)); }); xmpp.connect({ jid: jid, password: pwd, host: server, port: port }); 

Se i due account non hanno mai parlato insieme, è necessario anche un “abbonamento” preliminare:

 xmpp.subscribe('[email protected]'); 

Come puoi vedere in package.json node-simple-xmpp lib ha una dipendenza su [node-xmpp-client] ( https://github.com/xmppjs/xmpp.js/tree/node-xmpp/packages/node- xmpp-client ).

Utilizzo con Google Talk / Hangouts

Lo script di cui sopra funziona (testato) anche con Google Talk / Hangouts, devi solo sostituire il server talk.google.com con talk.google.com e utilizzare un account Google. Attiva https://myaccount.google.com/lesssecureapps per consentire allo script Node.js di accedere con l’account Google.

Altre librerie XMPP

A partire da https://npms.io/search?q=node-xmpp ci sono alcune altre librerie Client XMPP per Node, ma quasi tutte dipendono da node-xmpp-client o limitate alla connessione BOSH (polling su HTTP ).

Una lib interessante per quelli usati per Strophe.js sul lato client sembra nodo-strofa . È basato su Strophe.js versione 1.0.2 che è una libreria per le applicazioni eseguite su qualsiasi browser. Sfortunatamente quella versione non supportava altro che BOSH (vedi changelog di Strophe.js ), websocket è disponibile solo dalla versione 1.1.0.

Esplorazione di alternative senza specifiche librerie XMPP

Una soluzione alternativa senza librerie XMPP specifiche potrebbe utilizzare il modulo Net , ma in questo caso è necessario gestire tutte le interazioni XMPP per stabilire la connessione al server, vedere https://wiki.xmpp.org/web/Programming_XMPP_Clients .

Di seguito è riportato un esempio molto crudo di script che tenta di avviare la connessione con un server Jabber utilizzando il modulo Net :

 var net = require('net'); var jid = '[email protected]'; var pwd = 'xyz'; var server = 'xmpp.jp'; var port = 5222; var msg = ''; var client = new net.Socket(); client.connect(port, server, function() { console.log('Connected'); client.write(msg); }); client.on('data', function(data) { console.log('Received: ' + data); }); 

Puoi vedere nella console la corretta risposta del server Jabber, ma da quel momento in poi sarà un casino: dovresti iniziare a scambiare messaggi TLS (vedi https://xmpp.org/rfcs/rfc3920.html#tls )

conclusioni

Penso che l’unica alternativa praticabile sia la prima che utilizza la libreria node-simple-xmpp .