2

我在工作中遇到问题,我找不到解决方案。我知道 StackOverflow 问题不适用于文档,但显然 node-xmpp 的文档是相当...“轻量级”。

我的问题如下:

我有一个连接到服务器的 xmpp 客户端。该服务器用于在调用 REST API 时向我的客户端发送通知。基本上,如果服务器确定请求看起来正常,HTTP 请求将获得 202 代码,并将通过 XMPP 协议返回完整的 XML 答案。

对于那些可能对这个特定问题有一些见解的人:我正在尝试使用 Cisco Finesse API 通知系统。

我设法使用 Pidgin 查看了这些通知,但查看它们的唯一方法是打开 XMPP 控制台(而不是常规聊天流程)。

现在我设法使用 node-xmpp 登录到这个 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,而且 node-xmpp 文档非常短。

欢迎任何帮助,在此先感谢人们!\o/

4

2 回答 2

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);
});
于 2017-03-14T17:07:06.953 回答
0

尝试添加

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

获取有关发生的任何错误的信息。

于 2017-02-16T23:29:32.187 回答