2017-01-30 3 views
2

私は仕事中に問題があり、解決策が見つかりません。私はStackOverflowの質問がドキュメントではないことを知っていますが、明らかにnode-xmppのドキュメントはむしろ... "軽い"です。node-xmppを使用してXMPPコンソールを読む

私は、サーバーに接続されているXMPPクライアントを持っている:

私の問題は次のようです。このサーバーは、REST APIが呼び出されたときにクライアントに通知を送信するために使用されます。基本的に、HTTPリクエストは、サーバーがリクエストをOKと判断し、XMPPプロトコルを通じて完全なXML回答を返す場合は、202コードを取得します。

この特定の問題についていくつかの洞察を持っている場合は、Cisco Finesse API Notificationsシステムを使用しようとしています。

Pidginを使ってこれらの通知を表示することができましたが、表示する唯一の方法は、通常のチャットフローではなくXMPPコンソールを開くことです。

node-xmppを使用してこのXMPPサーバーにログインできましたが、通知を読み取れません。私は "データ"と "スタンザ"のイベントを聞き取ろうとしましたが、それらのイベントを引き起こすことはありません。ここで

は、コードの抜粋です:シスコのドキュメントではJavaScriptに関する詳細は何もおよびノー​​ドの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

してみてください。

関連する問題