Подключение к Google Talk через XMPP на Node.js

Я пробовал использовать различные библиотеки XMPP для Node.js, и у меня возникли проблемы с подключением к серверам XMPP Google Talk. Я хочу подключиться и прочитать статус друзей, но я даже не могу выйти!

  • У меня есть персональный домен, размещенный через Google Apps для доменов, например mydomain.com.
  • У меня есть следующий код: он использует библиотеку node -xmpp (https://github.com/astro/node-xmpp):

    jid = '[removed_email]';
    password = 'my_google_password';
    // Establish a connection
    var conn = new xmpp.Component({
     jid : jid,
     password : password,
     host : 'talk.google.com',
     port : 5222
    });
    conn.on('online', function(){
     sys.put("ONLINE"); 
    });
    conn.on('error', function(e) {
     sys.puts(e);
    });

Установлено соединение, но аутентификация завершается с ошибкой, и я получаю это сообщение из Google Talk:

<stream:error xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client">
 </stream:error>

... Я что-то упустил? Я пробовал другие библиотеки (https://github.com/mwild1/xmppjs) и даже библиотеку Python и до сих пор не смог выполнить аутентификацию. Я на 100% уверен, что мое имя пользователя и пароль Google верны - любые советы/идеи?

2 ответа

Выяснил это.

Я работал с некоторыми неточными примерами.

В моем примере выше вы хотите изменить:

var conn = new xmpp.Component({...})

... до...

var conn = new xmpp.Client({...})


Я нахожусь на ubuntu linux, поэтому, чтобы установить его, мне сначала пришлось это сделать (сначала установите node/npm после получения от веб-сайта npm).

sudo apt-get install libexpat1 libexpat1-dev 
npm install node-xmpp
sudo apt-get install libicu-dev 
npm install node-stringprep

С этим фрагментом я успешно выполнил вход и отправил сообщение из своей учетной записи gmail в мою учетную запись jabber.org:

var argv = process.argv;
const xmpp = require('node-xmpp');
const sys = require('sys');
if (argv.length != 5) {
 sys.puts('Usage: node xmpp.js <my-jid> <my-password> <to>');
 process.exit(1);
}
const jid = argv[2];
const password = argv[3];
const to = argv[4];
// Establish a connection
const conn = new xmpp.Client({
 jid : jid,
 password : password,
 host : 'talk.google.com',
 port : 5222
});
conn.on('online', function(){
 console.log('online');
 conn.send(new xmpp.Element('presence'));
 conn.send(new xmpp.Element('message',
 { to: to, // to
 type: 'chat'}).
 c('body').
 t('testje'));
});
conn.on('error', function(e) {
 sys.puts(e);
});
</to></my-password></my-jid>

licensed under cc by-sa 3.0 with attribution.