我已经建立了一个SIP域名,所以我可以将我用Twilio购买的号码转接到我的软电话。
但我也希望通过软电话拨打PSTN号码。我怎样才能做到这一点?我怀疑它涉及Elastic SIP Trunk,但我无法弄清楚如何配置它。
答案 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”