通过Twilio SIP域传递自定义CNAM

时间:2019-11-30 12:03:59

标签: twilio twilio-api twilio-php twilio-twiml

我有一个配置为将入站呼叫定向到PHP Webhook的Twilio电话号码。 Webhook使用一些附加信息来尝试查找有用的呼叫者名称。我也在使用Twilio的内置CNAM查找,但是它们在加拿大不起作用(我总是以呼叫者的电话号码作为其名字)。

该Webhook旨在将呼叫首先转发到Twilio SIP域,我希望在那里可以应答大多数呼叫。如果认为紧急,其他呼叫将通过PSTN转发。

我已经可以提取相关名称了,但是我很难将这些信息转发给我的FXS(HT802)。根据设备的文档:

cppreference

  

自动:设置为“自动”时,HT801 / HT802将按传入SIP邀请中的P声明身份标头,远程方ID标头和发件人头的顺序查找呼叫者ID。

我找不到在TwiML中通过SIP名词传递这些标头的方法。根据Twilio的文档:

http://www.grandstream.com/sites/default/files/Resources/ht80x_administration_guide.pdf

  

无需发送x-

即可发送UUI(用户对用户信息)标头

https://www.twilio.com/docs/voice/twiml/sip#custom-headers

  

如果发送不带X-前缀的标头,则Twilio将不会读取标头。结果,标题将不会在输出中传递。

对于上下文,这是到目前为止我正在使用的PHP代码的简化片段。注意:我实际上还没有使用$ callerName值做任何事情。

<?php
// Simple "starting value", in case we can't resolve the name.
// (will also resolve the numbers used for unknown/blocked IDs)
$callerName = FriendlyFormatPhoneNumber($_POST['From']);

use Twilio\Twiml;
$addOns = null;

if (array_key_exists('CallerName', $_POST)) {
    $callerName = $_POST['CallerName'];
} elseif (array_key_exists('AddOns', $_POST)) {
    $addOns = json_decode($_POST['AddOns']);
    $teloName = $addOns->results->telo_opencnam->result->name;

    // If we pulled a telo name, and it doesn't seem to be a phone number
    // (in case that could happen), use the telo name.
    if (isset($teloName) && preg_match('/.*[0-9]{4,}, $teloName') == 0) {
        $callerName = $teloName;
    }
}

$response = new TwiML;
$dialParams = array(,
    'timeout' => 20,
    'hangupOnStar' => false,
    'answerOnBridge' => true,
    'action' => API_BASE_URL . '/dial-callback.php'
);
$dialer = $response->dial($dialParams);
$dialer->sip('sip:101@mytwiliodomain.sip.us1.twilio.com;transport=tls');
echo $response;

长话短说:如何使用TwiML和Twilio SIP域将自定义的呼叫者姓名传递给SIP设备?我不想覆盖数字,只是名字。而且仅在对注册到我的Twilio SIP域的设备的入站呼叫上。

以防万一:如果您不是您的专业,请不要担心转换为PHP;我可以从TwiML翻译:)

1 个答案:

答案 0 :(得分:0)

不幸的是,这对于Twilio SIP域是不可能的。当前,无法通过TwiML设置呼叫者姓名。