2017-01-30 3 views
2

Ich habe ein Problem bei der Arbeit und ich kann keine Lösung finden. Ich weiß, StackOverflow Fragen sind nicht für die Dokumentation, aber anscheinend ist die Dokumentation für node-xmpp eher ... "Licht".Lesen von XMPP-Konsole mit node-xmpp

Mein Problem ist folgende:

Ich habe ein XMPP-Client mit einem Server verbunden. Dieser Server wird verwendet, um Benachrichtigungen an meinen Client zu senden, wenn die REST-API aufgerufen wird. Im Grunde erhält die HTTP-Anfrage einen 202-Code, wenn der Server feststellt, dass die Anfrage OK ist und die vollständige XML-Antwort über das XMPP-Protokoll zurückgibt.

Für diejenigen, die vielleicht einen Einblick in diese spezielle Angelegenheit haben: Ich versuche, Cisco Finesse API Notifications System zu verwenden.

Ich habe es geschafft, diese Benachrichtigungen mit Pidgin anzuzeigen, aber die einzige Möglichkeit, sie zu sehen, ist das Öffnen der XMPP-Konsole (und nicht der normale Chat-Fluss).

Jetzt habe ich es geschafft, mich auf diesem XMPP-Server mit node-xmpp einzuloggen, aber ich kann nur keine Benachrichtigungen lesen. Ich habe versucht, auf "Daten" und "Strophe" -Ereignisse zu hören, aber diese Ereignisse werden nie ausgelöst. Hier

ist der Codeauszug:

const XMPP = require("node-xmpp-client"); 

let xmpp_client = new XMPP({ 
    jid: json_message.login + '@abc.inc', 
    password: json_message.pwd, 
    host: CONF.FINESSE_SERVER.replace("http://", ""), 
    port: 5222 
}); 

console.log("jid: " + json_message.login + '@abc.inc'); 
console.log("password: " + json_message.pwd); 
console.log("host: " + CONF.FINESSE_SERVER.replace("http://", "")); 
console.log("post: 5222"); 

xmpp_client.on("online", function(){ 

    console.log("online"); 

}); 

xmpp_client.on('stanza', function(stanza) { 

    console.log("xmpp::"); 
    console.log('Incoming stanza: '); 
    console.log(stanza); 

}); 

xmpp_client.connection.on("data", function(data) { 

    console.log(data.toString("utf-8")); 

}); 

Ich bin ein wenig verwirrt gerade jetzt, da die Dokumentation von Cisco nicht detailliert etwas über JavaScript und die Knoten-xmpp Dokumentation ist super kurz.

Jede Hilfe ist willkommen, danke im Voraus Leute! \ O/

Antwort

1

Sie müssen eine presence Zeilengruppe senden und auch die Ereignisse abonnieren, die Sie erhalten möchten. Beispiel:

const xmppXml  = require('@xmpp/xml') 
    , xmppClient = require('node-xmpp-client') 
    ; 

let host = YOUR_HOST; 
let fqdn = YOUR_FQDN; 
let username = YOUR_USERNAME; 
let password = YOUR_PASSWORD; 
let jid = username + '@' + fqdn; 

let xmpp_client = new xmppClient({ 
    jid: jid, 
    password: password, 
    host: host, 
    port: 5222 
}); 

xmpp_client.connection.on('data', (data) => { 
    console.log(data.toString('utf-8')); 
}); 

xmpp_client.on('online',() => { 
    xmpp_client.send(new xmppClient.Stanza('presence', { })); 

    // Subscribe to REAL-TIME events. 
    // REFERENCE: https://developer.cisco.com/media/finesseDevGuide/CFIN_RF_S7A50AC1_00_subscription-management.html 
    let subscribe = xmppXml.createStanza('subscribe', { 
     xmlns: 'http://jabber.org/protocol/pubsub', 
     node : '/finesse/api/User/' + username, 
     jid : jid, 
    }); 
    let pubsub = xmppXml.createStanza('pubsub', { 
     xmlns: 'http://jabber.org/protocol/pubsub', 
    }); 
    let iq = xmppXml.createStanza('iq', { 
     to : 'pubsub.' + fqdn, 
     from: jid, 
     type: 'set', 
    }); 
    iq.cnode(pubsub).cnode(subscribe); 

    let msg = iq.toString(); 

    xmpp_client.send(msg); 
}); 
+0

Dies ist eine sehr gute Lösung, danke, ich eine Lösung selbst fand einen anderen Knotenmodul mit (und ehrlich gesagt ich hatte total vergessen, über diese Frage, so konnte ich es nicht immer up-to-date :(). Ich benutzte simple-xmpp und änderte es (da der Code ziemlich seltsam geschrieben war), um meine Bedürfnisse zu erfüllen. Wie auch immer, ich denke, dass Ihre Lösung für die meisten Benutzer das Beste ist, nochmals vielen Dank! – SmashingQuasar

0

Try

xmpp_client.on('error', console.error) 

, um Informationen über eventuelle Fehler Hinzufügen, was geschieht.