如何使用Twilio从软电话(Sipdroid)拨打电话?

时间:2017-06-26 19:17:57

标签: twilio

我已经建立了一个SIP域名,所以我可以将我用Twilio购买的号码转接到我的软电话。

但我也希望通过软电话拨打PSTN号码。我怎样才能做到这一点?我怀疑它涉及Elastic SIP Trunk,但我无法弄清楚如何配置它。

2 个答案:

答案 0 :(得分:4)

我使用没有弹性中继的PHP帮助程序库来完成它。

在Twilio控制台的SIP域设置中,您可以设置语音配置的请求URL。似乎当您尝试通过SIP拨打任何号码时,Twilio会请求此URL并使用请求POST所有呼叫信息变量。其中一个变量是“Called”,格式为sip:0123456789@yourdomain.sip.us1.twilio.com:5060其中0123456789是您拨打的号码

所以我们需要做的就是从字符串中删除数字,然后让Twilio拨打它。很容易。

我创建了这个php文件,我在英国,因此它使用英国国家代码格式化号码。你将不得不为其他国家改变它。

<?php
require_once './vendor/autoload.php';
use Twilio\Twiml;
$calledNo = explode("@", $_POST['Called']); // Splits sip:0123456789@yourdomain.sip.us1.twilio.com:5060 into an array at the @ character
$callthis = '+44'.substr($calledNo[0], 5); // $calledNo[0] is set to sip:0123456789, this line strips the first 5 characters leaving 123456789 and adds +44 to the start (UK country code)
$response = new Twiml();
$dial = $response->dial(['callerId' => '{Your caller id}']); // Your caller ID must be validated or the outgoing call will fail
$dial->number($callthis); // Calls +44123456789

echo $response;

将您的语音网址指向此文件即可完成设置。

答案 1 :(得分:0)

这是一个AWS Lambda,与miknik的PHP相同:

var aws = require('aws-sdk');
var ses = new aws.SES({
   region: 'us-east-1'
});

exports.handler = function(event, context, callback) {

    console.log("Event: ", event);

    var called = event.queryStringParameters.Called;

    var number = called.match(/:(.*)@/)[1];

    console.log("Number is [" + number + "]");

    var dialCommand = '<Dial callerId="...">'
        + number
        + '</Dial>';

    callback(null, { 

        statusCode: 200, 
        body: '<?xml version="1.0" encoding="UTF-8"?><Response>' + dialCommand + '</Response>',

        headers: {
            'Content-Type': 'text/xml'
        }

    });

};

将SIP域的“语音配置”下的“请求URL”设置为Twilio中的“HTTP GET”