【问题标题】:Twilio SRV lookup while forwarding to SIP URI转发到 SIP URI 时 Twilio SRV 查找
【发布时间】:2018-01-09 02:43:29
【问题描述】:

我正在尝试将呼叫从我的 twilio 号码转接到我的 sip 设备。但是,这目前无法按预期工作,因为 Twilio 不喜欢使用负载平衡 url 的 SIP 提供商。在我的例子中,sip uri 以@in.callcentric.com 结尾,然后将请求发送到三个服务器。如果我直接使用其中一台服务器,即 @alpha11.callcentric.com:5070 而不是 @in.callcentric.com 它可以工作。然而,这并不理想。

我找到了一个执行 SRV 查找的节点模块。我可以用 twilio 函数来解决这个问题吗?

有没有办法强制 twilio 查找 SRV 记录并自动使用它来转发呼叫?

Relevant link

【问题讨论】:

  • 使用 Node 模块进行查找并将真实的服务器地址返回给 Twilio,因为 TwiML 听起来是个好主意。你自己试过吗?
  • 不,我还没试过。不确定如何在 twilio 函数中加载模块。
  • 谢谢!如果我得到它的工作,我会在这里添加一个解决方案。
  • SRV 查找似乎是一个奇怪的功能,因为 twilio 实际上在其自己的 SIP 域上使用它,因此会错过出站呼叫。是否有与此相关的问题我可以跟踪?

标签: twilio twilio-functions


【解决方案1】:

使用 NPM 的内置 dns module 我能够让事情正常进行。这就是我的函数现在的样子。似乎工作正常。

const dns = require('dns');

let sipUri = '1777xxxxxxxxxx@in.callcentric.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 记录的主机名,然后使用返回的第一个结果。不考虑权重和优先级。

Gist

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2020-06-24
    相关资源
    最近更新 更多