从Node.js脚本发送XMPP通知

时间:2017-12-11 21:50:19

标签: javascript node.js xmpp

Node脚本如何通过XMPP向Jabber用户发送通知(例如通过Google Hangouts)?我看过像xmpp/client这样的图书馆,但它们看起来有些过分。有更简单的解决方案吗?

1 个答案:

答案 0 :(得分:6)

通过节点

中的XMPP发送消息的最简单方法

节点可能没有比node-simple-xmpp更简单的XMPP客户端库。 在这种情况下,用于向另一个Jabber用户发送消息的最小Node.js脚本是:

var xmpp = require('simple-xmpp');

var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;

xmpp.on('online', function(data) {
    console.log('Connected with JID: ' + data.jid.user);
    xmpp.send('testjs@007jabber.com', 'hello! time is '+new Date(), false);
});

xmpp.on('error', function(err) {
    console.error("error:", JSON.stringify(err));
});

xmpp.connect({
    jid: jid,
    password: pwd,
    host: server,
    port: port
});

如果这两个帐户从未一起发言,则还需要初步“订阅”:

xmpp.subscribe('testjs@007jabber.com');

正如您在package.json 中看到的那样,node-simple-xmpp lib依赖于[node-xmpp-client](https://github.com/xmppjs/xmpp.js/tree/node-xmpp/packages/node-xmpp-client)。

使用Google Talk /环聊

上述脚本也在使用Google Talk / Hangouts工作(测试),您只需将xmpp.jp服务器替换为talk.google.com并使用Google帐户即可。启用https://myaccount.google.com/lesssecureapps以启用Node.js脚本以使用Google帐户登录。

其他XMPP库

https://npms.io/search?q=node-xmpp开始,还有一些其他用于Node的XMPP客户端库,但是几乎所有这些库都依赖于 node-xmpp-client 或仅限于BOSH连接(通过HTTP轮询) )。

在客户端使用 Strophe.js 的人有一个有趣的lib似乎是node-strophe。它基于Strophe.js 1.0.2版,它是在任何浏览器中运行的应用程序库。不幸的是,除了BOSH之外,该版本不支持(参见Strophe.js changelog),websocket仅在1.1.0版本之后可用。

探索没有特定XMPP库的替代方案

没有特定XMPP库的替代解决方案可能正在使用Net module,但在这种情况下,您需要管理所有XMPP交互以建立与服务器的连接,请参阅https://wiki.xmpp.org/web/Programming_XMPP_Clients

下面是一个非常原始的脚本示例,尝试使用 Net module 启动与Jabber服务器的连接:

var net = require('net');

var jid = 'testjs@xmpp.jp';
var pwd = 'xyz';
var server = 'xmpp.jp';
var port = 5222;

var msg = '<stream:stream xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0" to="'+server+'">';

var client = new net.Socket();
client.connect(port, server, function() {
    console.log('Connected');
    client.write(msg);
});

client.on('data', function(data) {
    console.log('Received: ' + data);
});

您可以在控制台日志中看到Jabber服务器的正确答案,但从那时起它就是一团糟:您应该开始交换TLS消息(参见https://xmpp.org/rfcs/rfc3920.html#tls

结论

我认为唯一可行的选择是第一个使用 node-simple-xmpp 库。