[Freeswitch-users] Adding SIP Headers in Javascript

Preston Hagar prestonh at gmail.com
Wed May 23 17:46:09 UTC 2018


I figured out my issue.  I had left out part of my code in previous emails
to try to make it simpler, and left out the part that was messing things up.

So after I set the sip Diversion header:

var diversionHeader = 'sip_h_Diversion=<sip:' + $destination_number + '@
pbx.example.org>;privacy=off;reason=unconditional;counter=1;screen=no';

session.execute('set',diversionHeader);


I would set a timeout:

session.execute('set', 'call_timeout=45');


Then I would ring all three receptionist stations at once with a bridge
command:


 var logic = '{ignore_early_media=true}user/1000@' + $pbx_domain +
':_:user/1001@'
                + $pbx_domain + ':_:user/1002@' + $pbx_domain;
    session.execute('bridge', logic);


The problem ended up stemming from me ringing all three at once using the
:_:  to join the extensions.  I switched it over to commas:

 var logic = '{ignore_early_media=true}user/1000@' + $pbx_domain +
',user/1001@'
                + $pbx_domain + ',user/1002@' + $pbx_domain;
    session.execute('bridge', logic);

and now the Diversion header shows up as  expected.  We shouldn't have
multiple registrations for any of those numbers, so it shouldn't be an
issue.

Thanks everyone for taking a look.


Out of curiosity, what is the "direct method" for setting the SIP header
(instead of using session.execute)?   I can't seem to find anything in the
documentation.


Thanks again,








On Wed, May 23, 2018 at 10:26 AM, Michael Jerris <mike at jerris.com> wrote:

> I’d avoid using the bridge function like this, but worthwhile to set the
> variable using the direct method instead of session execute for set
> application.
>
>
> On May 22, 2018, at 5:01 PM, Branden Jordan <BJordan at E-Teleco.com> wrote:
>
> I don’t see any reason why that wouldn’t work but maybe there is something
> weird going on with the javascript session object where it isn’t
> getting/setting the exported variables from the session when you are doing
> the bridge? Have you tried making a new session object and setting your
> variables for that session object instead of doing a session.execute? I
> found something like this on the Wiki that you might be able to do, small
> example below.
>
> var anotherSession = new Session(session, '{ignore_
> early_media=true}user/1003@' + $pbx_domain);
> anotherSession.execute(‘set’,diversionHeader);
> bridge(session, anotherSession);
> anotherSession.hangup();
>
> Like I said earlier I am a bit rusty on the Javascript side, (no idea if
> bridge blocks or if you have to do a loop) but I know that would work on
> the LUA side which is where I am more familiar. I know Javascript examples
> are a little light on the wiki but you might be able to get the gist of
> what is going on in the LUA side and then mimic that in Javascript.
> https://freeswitch.org/confluence/display/FREESWITCH/Lua+
> example+Bridging+two+calls+with+retry
>
> Thanks,
>
> Branden Jordan
>
> *From:* FreeSWITCH-users <freeswitch-users-bounces at lists.freeswitch.org> *On
> Behalf Of *Preston Hagar
> *Sent:* Monday, May 21, 2018 6:53 PM
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* Re: [Freeswitch-users] Adding SIP Headers in Javascript
>
> Thanks for responding!
>
> Below is a bit more code to fill in the gaps.  I'm passing the
> destination_number from the XML as a third argument.  When I test out the
> code below, the console_log does in fact print out a "correct" Diversion
> header line.   If I use the exact same Diversion header, set in my XML
> dialplan, it shows up in the SIP packet and the VOP software reads it.
> When I set it using session.execute in javascript, then no Diversion
> header, even an incorrect one, gets added to the SIP packet.
>
> I don't think it is in the variable substitution or anything like that.
> I've also tried not passing a variable to session.execute and just putting
> the string in the command, as well as just hard coding a test number.  In
> all cases, no Diversion header ever shows up.  Either I'm not setting it
> right for javascript or there is something different about setting it in
> Javascript vs XML that I haven't figured out.
>
> Here is more expanded code:
>
>
> var $extension  = argv[0];
> var $pbx_domain = argv[1];
> var $destination_number = argv[2];
>
> var diversionHeader = 'sip_h_Diversion=<sip:' + $destination_number + '@
> pbx.example.org>;privacy=off;reason=unconditional;counter=1;screen=no';
>
> session.execute('set',diversionHeader);
> session.execute('export','sip_h_Diversion');
>
> onsole_log("notice","Trying receptionist");
> console_log("notice",session.state);
> console_log("notice",diversionHeader);
> session.execute('set', 'call_timeout=15');
>
> var logic = '{ignore_early_media=true}user/1003@' + $pbx_domain;
> session.execute('bridge', logic);
>
> console_log("notice","Trying Kim");
> console_log("notice",session.state);
> session.execute('set', 'call_timeout=10');
> session.execute('bridge', 'user/2741@' + $pbx_domain);
>
> // No one answered, send to IVR
>
>  console_log("notice","No one is answering");
>  console_log("notice",session.state);
> if (session.state == "CS_EXECUTE")
>  {
>       console_log("notice","Trying IVR");
>       session.execute('transfer', 'ivr');
>  }
>
>
>
> On Mon, May 21, 2018 at 6:57 PM, Branden Jordan <BJordan at e-teleco.com>
> wrote:
>
> Not sure if you still need help with this but could you post some more of
> your javascript code? Something about this line is off to me but maybe it
> makes sense in the grander scheme of things.
>     var diversionHeader = 'sip_h_Diversion=<sip:' + $destination_number +
> '@pbx.example.org>;privacy=off;reason=unconditional;counter=1;screen=no';
>
> I have not used javascript with freeswitch in a little while, so I might
> be totally wrong but did you declare $destination_number? Because its
> possible its undefined if you didn’t declare that specifically equal to the
> value you passed in via args and thus javascript does you a solid and makes
> the whole string undefined which sets the sip_h_Diversion to null which is
> why it isn’t exporting. Maybe try argv[3] or argv[2] (console them out I am
> not sure which one it’ll be) instead of $destination_number in your
> concatenation?
>
> If that isn’t it and you are still having an issue we can try some other
> stuff.
>
> Thanks,
> Branden Jordan
>
>
> *From:* FreeSWITCH-users <freeswitch-users-bounces at lists.freeswitch.org> *On
> Behalf Of *Preston Hagar
> *Sent:* Friday, May 18, 2018 8:55 AM
> *To:* FreeSWITCH Users Help <freeswitch-users at lists.freeswitch.org>
> *Subject:* [Freeswitch-users] Adding SIP Headers in Javascript
>
> Quick Version:  Is there some special way to set custom SIP headers when
> you are bridging a call from Javascript instead of XML?
>
> Full Details:
> We am using Voice Operator Panel (VOP) as a receptionist console.  We have
> multiple external numbers that all funnel into a few receptionist desks.
> If I add a SIP Diversion header, then VOP will use that to show the
> receptionist which number the caller dialed to reach them, which would help
> things out a lot.
>
> If I add it in an XML dialplan and then do a direct bridge to one of the
> receptionist numbers, it works great (snip of working direct dialplan):
>
> <action application="set" data="sip_h_Diversion=<sip:${d
> estination_number}@pbx.example.org>;privacy=off;
> reason=unconditional;counter=1;screen=no"/>
> <action application="bridge" data="user/1000 at pbx.example.org"/>
>
> The problem is I need a bit of advanced logic to figure out which
> receptionist are online and then ring those, then fail over to other
> numbers and ultimately IVR if no one answers, so I instead pass calls to
> them off to javascript, so the bridge line above becomes something link:
>
> <action application="javascript" data="${jslib}/frontdesk.js
> ${dialed_extension} ${domain_name} ${destination_number}" />
>
> I've tried setting the SIP header in the XML above the javascript line and
> then exporting it
>     <action application="set" data="sip_h_Diversion=<sip:${d
> estination_number}@pbx.example.org>;privacy=off;
> reason=unconditional;counter=1;screen=no"/>
>
>         <action application="export" data="sip_h_Diversion" />
>
> and setting it in the Javascript:
>
>     var diversionHeader = 'sip_h_Diversion=<sip:' + $destination_number +
> '@pbx.example.org>;privacy=off;reason=unconditional;counter=1;screen=no';
>
>     session.execute('set',diversionHeader);
>     session.execute('export','sip_h_Diversion');
>
> but in both cases (or with both in place), the SIP header is never written.
>
> Is there some magic to setting SIP headers in Javascript?  I can't seem to
> find any examples or documentation about it.
>
> Thanks!
>
>
>
>
>
>
>
> _________________________________________________________________________
> Professional FreeSWITCH Consulting Services:
> consulting at freeswitch.org
> http://www.freeswitchsolutions.com
>
> Official FreeSWITCH Sites
> http://www.freeswitch.org
> http://confluence.freeswitch.org
> http://www.cluecon.com
>
> FreeSWITCH-users mailing list
> FreeSWITCH-users at lists.freeswitch.org
> http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
> http://www.freeswitch.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20180523/9414a793/attachment-0001.html>


More information about the FreeSWITCH-users mailing list