2017-01-30 29 views
2

У меня проблема на работе, и я не могу найти решение. Я знаю, что вопросы StackOverflow не для документации, но, видимо, документация для node-xmpp скорее ... «свет».Чтение консоли XMPP с помощью node-xmpp

Моя проблема заключается в следующем:

У меня есть клиент XMPP, подключенный к серверу. Этот сервер используется для отправки уведомлений моему клиенту при вызове REST API. В основном HTTP-запрос получит код 202, если сервер определяет, что запрос выглядит ОК и вернет полный XML-ответ через протокол XMPP.

Для тех, кто может иметь некоторое представление по этому конкретному вопросу: я пытаюсь использовать систему уведомлений Cisco Finesse API.

Мне удалось просмотреть эти уведомления с помощью Pidgin, но единственный способ увидеть их - открыть консоль XMPP (а не обычный поток чата).

Теперь мне удалось войти на этот сервер XMPP, используя node-xmpp, но я просто не могу читать уведомления. Я пытался слушать события «данные» и «строфа», но никогда не запускал эти события.

Вот фрагмент кода:

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")); 

}); 

прямо сейчас, потому что документация от Cisco не подробно ничего о JavaScript и документации узла XMPP супер короткий Я немного запутался.

Любая помощь приветствуется, заранее заблагорассудится! \ О/

ответ

1

Необходимо отправить строфу presence, а также подписаться на мероприятия, которые вы хотите получить. Пример:

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

Это очень хорошее решение, я нашел решение самостоятельно, используя другой модуль узла (и, честно говоря, я полностью забыл об этом вопросе, поэтому я не мог поддерживать его в актуальном состоянии :(). Я использовал simple-xmpp и модифицировал его (поскольку код был довольно странно написан), чтобы удовлетворить мои потребности. В любом случае, я думаю, что ваше решение является лучшим для большинства пользователей, еще раз спасибо! – SmashingQuasar

0

Попробуйте добавить

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

, чтобы получить информацию о любой ошибке, что происходит.