1
votes

I have a Twilio phone number configured to direct inbound calls to a PHP webhook. The webhook uses some of the addon information to try and find a useful caller name. I'm also using Twilio's built-in CNAM lookups, but they don't work right in Canada (I always get the caller's number as their name).

The webhook is designed to forward calls to a Twilio SIP Domain first, where I expect I'll be answering most of the calls. Other calls, if deemed urgent, will be forwarded via PSTN.

I've reached the point where I can pull out a relevant name, but I'm having difficulty trying to forward that information to my FXS (HT802). As per the device's documentation:

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

Auto: When set to “Auto”, the HT801/HT802 will look for the caller ID in the order of P-Asserted Identity Header, Remote-Party-ID Header and From Header in the incoming SIP INVITE

I'm not able to find a means to pass these headers via a SIP noun in TwiML. Based on Twilio's documentation:

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

UUI (User-to-User Information) header can be sent without prepending x-

https://www.twilio.com/docs/voice/api/sending-sip#sip-x-headers

If you send headers without X- prefix, Twilio will not read the header. As a result, the header will not be passed in the output.

For context, here's a reduced snippet of the PHP code I'm using so far. Note: I'm not actually doing anything with the $callerName value yet.

<?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:[email protected];transport=tls');
echo $response;

Long story short: How do I pass a custom caller name to my SIP devices using TwiML and the Twilio SIP Domains? I don't want to overwrite the number, just the name. And only on the inbound calls to the devices registered to my Twilio SIP domain.

In case it helps: Don't worry about translating to PHP if that's not your field; I can translate from TwiML :)

1

1 Answers

0
votes

Unfortunately, this is not possible with Twilio SIP Domains. Currently, there is no way to set the Caller Name via TwiML.