Twilio到OnSip应用程序错误:拨号 - > Sip:SIP URI DNS无法解析或解析为非公共IP地址

时间:2017-08-15 21:09:21

标签: javascript xml dns twilio sip

我正在使用Twilio为我的公司构建SIP拨号解决方案,并且我收到错误“Dial-> Sip:SIP URI DNS无法解析或解析为非公共IP地址”。我在onsip上有一个试用帐户来测试功能,当我拨打这个帐号时,它失败了。相关的TwiML是:

 <?xml version="1.0" encoding="UTF-8"?>
 <Response>
 <Dial callerId="+15555555555">
     <Sip>sip:example@example.onsip.com</Sip>
 </Dial>
 </Response>


就谷歌搜索已经让我,我相信我可能需要将我的申请列入白名单。我也想知道,因为我在localhost上使用我的应用程序是问题,但我使用了ngrok,但仍然收到错误。

2 个答案:

答案 0 :(得分:2)

由于此问题中列出的已知问题,Twilio无法与OnSip进行互动:https://support.onsip.com/hc/en-us/articles/204599674-Twillio-and-SRV
希望这会让别人头疼。

答案 1 :(得分:0)

使用Twilio新实现的functions可以解决这个问题。

这样的事情应该有效 -

const dns = require('dns');

let sipUri = 'xxxxx@onsip.com';
let protocol = 'udp';
let region = 'us2' ;

exports.handler = function(context, event, callback) {    
  var user =   sipUri.split('@')[0];  
  var host =   sipUri.split('@')[1];  

  // generate the TwiML to tell Twilio how to forward this call
  let twiml = new Twilio.twiml.VoiceResponse();

  const dial = twiml.dial();

  dns.resolveSrv('_sip._'+protocol+'.'+host, (err, addresses) => {
    var resolvedhost = addresses[0].name+':'+addresses[0].port;
    dial.sip('sip:'+user+'@'+resolvedhost+';region='+region);
    console.log(twiml.toString());
    // return the TwiML
    callback(null, twiml);
  });
};

这会手动查询SRV记录的主机名,然后使用返回的第一个结果。不考虑重量和优先级。

Nodejs docs