Всем привет, задача следующего характера: Есть приложение на node.js, есть учетка у SIP-провайдера myvoiptraffic.com. Нужно из приложения совершить дозвон абоненту через этого провайдера. Достаточно просто дозвониться (или получить в ответ "занято"), после этого прекратить звонок (делается для того, чтоб быть уверенным в том, что клиент взял в руку телефон). Нашел на просторах npm модуль sip-client. Делаю все по инструкции:
var SIPClient = require('sip-client');
var util = require('util');
// I suppose these are pretty self explanatory
var opts = {
user: 'YYYYYYYYYY', // логин пользователя на myvoiptraffic.com
password: 'QWERTYQWERTY', // пароль пользователя
host: 'sip.myvoiptraffic.com',
debug: true //unless you want to see HARDCORE SIP ACTION!
};
var client = new SIPClient(opts);
var uri = {
schema: 'sip',
host: opts.host,
user: opts.user
};
var headers = {
contact: "<sip:"+opts.host+":5060>",
from: {
name: '<sip:YYYYYYYYYY@sip.myvoiptraffic.com>',
uri: uri
},
to: {
name: '<sip:XXXXXXXXXXX@sip.myvoiptraffic.com>',
uri: uri
}
};
var message = client.message('register', {host: opts.host}, headers);
message.send();
message.on('success', function(msg) {
client.on('invite', function(msg){
var from = client.sip.parseUri(msg.headers.from.uri);
util.log("The most handsome dude(ette), "+from.name+" at "+from.user);
});
});
вываливается на таймауте подключения:
bash-3.2$ node .
> REGISTER sip:sip.myvoiptraffic.com SIP/2.0
> contact: <sip:sip.myvoiptraffic.com:5060>
> From: <sip:YYYYYYYYYY@sip.myvoiptraffic.com> <sip:YYYYYYYYYY@sip.myvoiptraffic.com>
> To: <sip:XXXXXXXXXXX@sip.myvoiptraffic.com> <sip:YYYYYYYYYY@sip.myvoiptraffic.com>
> call-id: 11b677-1e00e7-1eb415-18569c
> Via: SIP/2.0/TCP sip.myvoiptraffic.com
> CSeq: 1 REGISTER
> content-length: 0
>
>
events.js:72
throw er; // Unhandled 'error' event
^
Error: connect ETIMEDOUT
at errnoException (net.js:904:11)
at Object.afterConnect [as oncomplete] (net.js:895:19)
Очень сомнительного качества модуль, неизвестно, работал ли он когда-нибудь. Кто-нибудь случайно не сталкивался с похожей задачей? Может есть идеи какие-нибудь?
П.С. В коде и в логе логин пользователя везде заменен на YYYYYYYYYY, номер абонента на ХХХХХХХХХХХ и пароль пользователя на QWERTYQWERTY. Естественно в коде используются реальные значения, используя которые удалось удачно созвониться через сотфон Linphone