[Freeswitch-users] Mod perl using $session->setVariable inline

Michael Jerris mike at jerris.com
Thu Dec 11 04:27:57 MSK 2014


The issue here is he is expecting the value to be set later in the dialplan. That won't work as he's doing.  Another option for both of you is to handle the logic in perl, then set vars from perl for what to bridge to, then have a bridge line in the dp fter perl that uses those vars (not a condition).

> On Dec 10, 2014, at 7:47 PM, Stanislav Sinyagin <ssinyagin at gmail.com> wrote:
> 
> I'm using mod_perl quite intensively, and I do all the logic and
> bridging from within the Perl script. It works fine, and you don't
> really need to return the control back to the dialplan.
> 
> The only concern is, that if you do "bridge" from the script, your
> perl script stays in memory and finishes only when the call ends. It
> should be harmless for a modestly loaded server, and for a massive
> service you would anyway do much better with an external script
> talking via ESL.
> 
> 
> 
> 
> 
> On Wed, Dec 10, 2014 at 6:56 PM, Liam Farr <liam at maxumdata.com> wrote:
>> Heres an expanded example;
>> 
>> 
>> 
>> Extension runs the perl script as part of the public dialplan first;
>> 
>> 
>> <extension name="run-script" continue="true">
>> 
>>   <condition>
>> 
>> <action application="perl" data="/etc/freeswitch/scripts/my-script.pl"/>
>> 
>>   </condition>
>> 
>> </extension>
>> 
>> 
>> 
>> Script sets some variables;
>> 
>> 
>> $my_value = "123";
>> 
>> $session->setVariable('some_var',$my_value);
>> 
>> 
>> 
>> Use that variable later in another extension in the public dialplan as a
>> condition selector;
>> 
>> 
>> 
>> <extension name="bridge-call" >
>> 
>>   <condition field="context" expression="public" />
>> 
>>   <condition field="${some_var}" expression="123" >
>> 
>>  <action application="set" data="call_direction=inbound"/>
>> 
>>  <action application="bridge"
>> data="sofia/internal/${destination_number}@1.2.3.4:5060" />
>> 
>>   </condition>
>> 
>> </extension>
>> 
>> 
>> 
>> However this will fail, because the perl script "$session->setVariable" run
>> earlier is not inline, so you cant make use of it in the condition
>> (<condition field="${some_var}" expression="123" >) in the second extension
>> that exists in a later part of the public dialplan. Hence I need a way to
>> set inline variables from my perl script.
>> 
>> 
>> 
>> Cheers
>> 
>> 
>> Liam Farr
>> 
>> 
>> 
>> On 11 December 2014 at 06:28, Michael Jerris <mike at jerris.com> wrote:
>>> 
>>> If you are in a perl script using session->setVariable, how are you still
>>> in the dialplan?  This doesn't make sense to me.  There should be no need
>>> for an inline if you are already in the script.
>>> 
>>>> On Dec 10, 2014, at 4:20 AM, Liam Farr <liam at maxumdata.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I need to set a variable using a perl script inline.
>>>> 
>>>> Normally I would use $session->setVariable('some_var',$my_value);
>>>> 
>>>> However I cant find any options to execute this inline / as an inline
>>>> action. (I need to evaluate the variable later in the hunting phase of the
>>>> dialplan hence need it to be an inline action).
>>>> 
>>>> Is there a way to do this?
>>>> 
>>>> Or is there another way to achieve the same result, e.g. hacking
>>>> $session->execute("set","some_var=$my_value") to run as an inline action?
>>>> 
>>>> Any help would be much appreciated, I've scoured the wiki, confluence
>>>> and git repo and come up empty.
>>>> 
>>>> --
>>>> Kind Regards
>>>> 
>>>> 
>>>> Liam Farr
>>> 




Join us at ClueCon 2016 Aug 8-12, 2016
More information about the FreeSWITCH-users mailing list