【发布时间】:2019-11-30 12:03:59
【问题描述】:
我有一个配置为将入站呼叫定向到 PHP webhook 的 Twilio 电话号码。 webhook 使用一些插件信息来尝试找到有用的调用方名称。我也在使用 Twilio 的内置 CNAM 查找,但它们在加拿大无法正常工作(我总是将呼叫者的号码作为他们的名字)。
Webhook 旨在首先将呼叫转发到 Twilio SIP 域,我希望我会在该域中接听大部分呼叫。其他电话,如果被认为是紧急的,将通过 PSTN 转接。
我已经达到了可以提取相关名称的地步,但我在尝试将该信息转发到我的 FXS (HT802) 时遇到了困难。根据设备的文档:
http://www.grandstream.com/sites/default/files/Resources/ht80x_administration_guide.pdf
Auto:当设置为“Auto”时,HT801/HT802 将在传入的 SIP INVITE 中按照 P-Asserted Identity Header、Remote-Party-ID Header 和 From Header 的顺序查找 caller ID
我无法找到通过 TwiML 中的 SIP 名词传递这些标头的方法。基于 Twilio 的文档:
https://www.twilio.com/docs/voice/twiml/sip#custom-headers
UUI (User-to-User Information) 标头可以在不附加 x- 的情况下发送
https://www.twilio.com/docs/voice/api/sending-sip#sip-x-headers
如果您发送没有 X- 前缀的标头,Twilio 将不会读取标头。结果,标题不会在输出中传递。
对于上下文,这是我目前使用的 PHP 代码的简化 sn-p。注意:我实际上还没有对 $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 翻译 :)
【问题讨论】:
标签: twilio twilio-api twilio-php twilio-twiml