Pass CallerID in From Header using JSSIP for PSTN Calls

Issue

I’m using JsSIP to connect to FreeSwitch and then to the PSTN. I’m trying to add a JsSIP.NameAddrHeader to the JsSIP.OutgoingRequest INVITE request’s ‘from’ header, but it is not being received on the server. How can I make this work?

var TheCallerIDTest = '+33...number in E164 format';
var TheSipClient = new JsSIP.UA({....}); //works fine

var TheHandlers = {

    'sending': function (e) {

        var TheSipURI = new JsSIP.URI('sip', TheCallerIDTest, 'MyFreeswitchServerUrl', 5060, null, null);
        var TheHeader = new JsSIP.NameAddrHeader(TheSipURI, '', null);

        //displays the correct From header just fine
        console.log(TheHeader);

        //here's where I want to modify the INVITE request
        e.from = TheHeader; 
    },
}

var TheCallOptions = {

    'eventHandlers': TheHandlers,
    'mediaConstraints': { 'audio': true, 'video': false }
};

function TestCall() {

    TheSipClient.start();

    TheSipClient.call("+33...E164 number", TheCallOptions);
}

Answer

Instead of modifying the e.from directly, you should modify the JsSIP.NameAddrHeader and then set it as the new from header using e.setHeader('From', TheNewHeader). Here’s how to modify the code:

var TheCallerIDTest = '+33...number in E164 format';
var TheSipClient = new JsSIP.UA({....}); //works fine

var TheHandlers = {

    'sending': function (e) {

        var TheSipURI = new JsSIP.URI('sip', TheCallerIDTest, 'MyFreeswitchServerUrl', 5060, null, null);
        var TheHeader = new JsSIP.NameAddrHeader(TheSipURI, '', null);

        //displays the correct From header just fine
        console.log(TheHeader);

        //set the new header
        var TheNewHeader = new JsSIP.NameAddrHeader(TheHeader.uri, TheHeader.displayName, TheHeader.parameters);
        e.setHeader('From', TheNewHeader);
    },
}

var TheCallOptions = {

    'eventHandlers': TheHandlers,
    'mediaConstraints': { 'audio': true, 'video': false }
};

function TestCall() {

    TheSipClient.start();

    TheSipClient.call("+33...E164 number", TheCallOptions);
}