使用 node-xmpp 读取 XMPP 控制台
Reading XMPP console using node-xmpp
我在工作中遇到问题,但找不到解决方案。我知道 Whosebug 问题不是针对文档的,但显然 node-xmpp 的文档是相当... "light".
我的问题如下:
我有一个连接到服务器的 xmpp 客户端。该服务器用于在调用 REST API 时向我的客户端发送通知。基本上,如果服务器确定请求看起来正常,HTTP 请求将获得 202 代码,并将 return 通过 XMPP 协议得到完整的 XML 答案。
对于那些可能对这个具体问题有一些见解的人:我正在尝试使用 Cisco Finesse API 通知系统。
我设法使用 Pidgin 查看了这些通知,但查看它们的唯一方法是打开 XMPP 控制台(而不是常规聊天流程)。
现在我设法使用 node-xmpp 登录到此 XMPP 服务器,但我无法读取通知。我尝试监听 "data" 和 "stanza" 事件,但它从未触发这些事件。
代码摘录如下:
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/
尝试添加
xmpp_client.on('error', console.error)
获取有关发生的任何错误的信息。
您需要发送 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);
});
我在工作中遇到问题,但找不到解决方案。我知道 Whosebug 问题不是针对文档的,但显然 node-xmpp 的文档是相当... "light".
我的问题如下:
我有一个连接到服务器的 xmpp 客户端。该服务器用于在调用 REST API 时向我的客户端发送通知。基本上,如果服务器确定请求看起来正常,HTTP 请求将获得 202 代码,并将 return 通过 XMPP 协议得到完整的 XML 答案。
对于那些可能对这个具体问题有一些见解的人:我正在尝试使用 Cisco Finesse API 通知系统。
我设法使用 Pidgin 查看了这些通知,但查看它们的唯一方法是打开 XMPP 控制台(而不是常规聊天流程)。
现在我设法使用 node-xmpp 登录到此 XMPP 服务器,但我无法读取通知。我尝试监听 "data" 和 "stanza" 事件,但它从未触发这些事件。
代码摘录如下:
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/
尝试添加
xmpp_client.on('error', console.error)
获取有关发生的任何错误的信息。
您需要发送 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);
});