2017-01-30 9 views
2

직장에서 문제가 발생하며 해결책을 찾을 수 없습니다. 나는 StackOverflow 질문이 문서화가 아니라는 것을 안다. 분명히 node-xmpp에 대한 문서는 오히려 "빛"이다.node-xmpp를 사용하여 XMPP 콘솔 읽기

내가 서버에 연결된 XMPP 클라이언트가 :

내 문제는 다음과 같다. 이 서버는 REST API가 호출 될 때 내 클라이언트에 알림을 보내는 데 사용됩니다. 기본적으로 HTTP 요청은 서버가 요청을 확인한 것으로 판단하고 XMPP 프로토콜을 통해 전체 XML 응답을 반환하는 경우 202 코드를 가져옵니다.

이 특정 문제에 대한 통찰력이있는 사람들을 위해 : Cisco Finesse API Notifications 시스템을 사용하려고합니다.

나는 Pidgin을 사용하여 이러한 알림을 볼 수 있었지만 볼 수있는 유일한 방법은 일반 채팅 흐름이 아닌 XMPP 콘솔을 여는 것입니다.

이제 node-xmpp를 사용하여이 XMPP 서버에 로그인 할 수 있었지만 알림을 읽을 수 없습니다. 나는 "data"와 "stanza"이벤트를 듣고 자 노력했지만 결코 그 이벤트를 트리거하지 않습니다. 내가 지금 시스코의 설명서가 자바 스크립트에 대한되지 상세 무엇을 수행하고 노드 - 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")); 

}); 

: 여기

는 코드 발췌 한 것입니다.

어떤 도움도 환영합니다. 미리 감사드립니다.

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

추가 \ O/

답변

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

봅니다 발생하는 오류에 대한 정보를 얻을 수 있습니다.