javascript - 使用 node-xmpp 读取 XMPP 控制台

标签 javascript node.js xmpp cisco node-xmpp

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

我的问题如下:

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

最佳答案

您需要发送一个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);
});

关于javascript - 使用 node-xmpp 读取 XMPP 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41940133/

相关文章:

javascript - 如何等到检索到某些值然后继续计算

javascript - CSS 问题 : Chrome adds 3px extra margin-right to text field

javascript - 无法解析 : comment: 1.\'comment\' 字段必须是 BSON 类型字符串

javascript - 拆分 HTML 文件不起作用

javascript - 在 Chrome 中重新抛出错误以调试 javascript 的更好方法

javascript - Angular - 国际化 (i18n)

javascript - 当我更改前端(Angularjs) Controller 文件时,Gulp 重新启动服务器

xmpp - 与XMPP服务器断开连接时是否需要发送 "unavailable"类型存在?

xmpp - 通过 Java 程序连接到即时消息 (IM) 服务(如 Yahoo、MSN、AIM)的库

timeout - GCDAsyncSocket ReadTimeoutError 问题