[Freeswitch-users] Issue with Javascript setTimeout

Matt Broad matt at supportedbusiness.com
Tue Jan 26 18:18:46 MSK 2016


works fine for me :)

*DialPlan*
 <condition field="destination_number" expression="^1234$">
        <action application="answer" />
        <action application="javascript" data="test.js" />
</condition>


*test.js*
result = apiExecute("sched_api","+5 "+session.uuid+" jsrun /scripts/inc.js
"+session.uuid);
console_log("notice", "entering loop\n");
while (session.ready())
{
    //sit here whilst the call is still connected
}
console_log("notice", "call ended\n");


*inc.js*
include("includes/General.js"); //this includes a function "Output" to log
to screen

var session = new Session(argv[0]);

if (session.ready()) {
    Output("TIMEOUT");
    session.execute("playback", "/sounds/en/us/callie/test.wav");
    session.execute("sleep","500");
    session.hangup();
}
exit("TIMEOUT");


Thanks
Matt

On 26 January 2016 at 14:43, Michael Jerris <mike at jerris.com> wrote:

> this won't actually work.  You can't session execute from outside the
> session thread like this.
>
>
> On Tuesday, January 26, 2016, Matt Broad <matt at supportedbusiness.com>
> wrote:
>
>> Hi Normando,
>>
>> from your description I assumed you were just trying to schedule a file
>> to play and hang up.
>>
>> If you are trying to run a block of code at a certain time in the future
>> then you could use sched_api.
>> https://freeswitch.org/confluence/display/FREESWITCH/mod_commands#mod_commands-sched_api
>> This will execute an API command after a given time.  In your case you
>> could use the API command *jsrun* to run a script containing your
>> function.
>>
>> An example would be:
>>
>> *result = apiExecute("sched_api","120 "+session.uuid+" jsrun
>> /scripts/function.js "+session.uuid+" "+despedida);*
>>
>>
>> The above will execute jsrun after 120 seconds (this is linked to the
>> session.uuid so if the channel is destroyed the task will be removed
>> automatically).  This will run the function.js file and pass it the current
>> session uuid along with the despedida variable.
>> Within the function.js file, you can create a session object using the
>> uuid passed through and then use this to play the file etc
>>
>> e.g of function.js
>>
>> var session = new Session(argv[0]);
>> var despedida = argv[1];
>>
>> if (session.ready()) {
>>     logger("TIMEOUT");
>>     session.execute("playback", sonidos + "/TIMEOUT.wav");
>>     session.execute("sleep","500");
>>     logger(despedida);
>>     session.execute("playback", sonidos + "/" + despedida + ".wav");
>>     session.hangup();
>> }
>> exit("TIMEOUT");
>>
>>
>>
>> thanks
>> Matt
>>
>> On 25 January 2016 at 22:11, Michael Jerris <mike at jerris.com> wrote:
>>
>>>  If you are trying to trigger that code to run at a specific time,
>>> regardless of what else it is doing, that will be very difficult to do with
>>> embedded js, and running with something async is probably required.  A
>>> note, you might want to look at phrase macros as they will greatly simplify
>>> some of that code as well.\
>>> Mike
>>>
>>> On Jan 25, 2016, at 4:24 PM, Normando Hall <nhall at unixlan.com.ar> wrote:
>>>
>>> Hi Michael.
>>>
>>> Yes, you are right, maybe the better is to use ESL.
>>> My script is basically an IVR. When all the audio files are played, then
>>> wait until the user press a dtmf key or timeout occur. Because there are a
>>> lot of files to play based on caller ID, I wait for the user input at the
>>> end of the script, but prior to finish the script, because hangsup.
>>>
>>> I workaround this with:
>>>
>>> session.collectInput(onPlay, services, afterMenuTimeOut, totalTimeOut);
>>> playTimeout(despedida)
>>>
>>> and return always "true" from "onPlay" callback.
>>>
>>> Respond to your question, this is the function I want to run in
>>> setTimeout:
>>>
>>> function playTimeout(despedida){
>>>     if (session.ready()) {
>>>         logger("TIMEOUT");
>>>         session.execute("sleep","400");
>>>         session.execute("playback", sonidos + "/TIMEOUT.wav");
>>>         session.execute("sleep","400");
>>>         logger(despedida);
>>>         session.execute("playback", sonidos + "/" + despedida + ".wav");
>>>         session.hangup();
>>>     }
>>>     exit("TIMEOUT");
>>> }
>>>
>>> Thanks
>>> Normando
>>>
>>> El 25/01/2016 a las 05:20 p.m., Michael Jerris escribió:
>>>
>>> What exactly is the javascript doing when you want to call that
>>> callback?  this is probably not possible due to how the JavaScript is
>>> blocked by native functions when doing actions such as handling audio due
>>> to the threading model of the embedded languages.  They run in the session
>>> thread so they are not as async as people tend to be used to with js.
>>> This sort of approach might be more appropriate when using js in a remote
>>> control type structure such as when controlling a session over esl, but not
>>> in the embedded mod_v8.  we have discussed doing a truly async type control
>>> for embedded languages but have never implemented it.
>>>
>>> On Monday, January 25, 2016, Normando Hall <nhall at unixlan.com.ar> wrote:
>>>
>>>> Thanks Matt, I can play a file, but still can't run the function. Are
>>>> there any application can run a function instead a file?
>>>>
>>>> Thanks!
>>>> Normando
>>>>
>>>>
>>>> El 25/01/2016 a las 05:59 a.m., Matt Broad escribió:
>>>>
>>>> try using the 1 liner sched_broadcast
>>>> <https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+sched+broadcast>
>>>> https://freeswitch.org/confluence/display/FREESWITCH/mod_dptools%3A+sched+broadcast
>>>>
>>>> The below will schedule a broadcast to play /tmp/hangupfile.mp3 to both
>>>> legs after 60 seconds.
>>>>
>>>> *maxTimeTaskID = **session.execute("sched_broadcast", "+60
>>>> playback!normal_clearing::/tmp/hangupfile.mp3 both")*;
>>>>
>>>> If you find you need to cancel the broadcast use:
>>>>
>>>> *session.execute("sched_cancel",maxTimeTaskID);*
>>>>
>>>> hope this helps.
>>>>
>>>> thanks
>>>> Matt
>>>>
>>>> On 25 January 2016 at 06:58, <royj at yandex.ru> wrote:
>>>>
>>>>> have no relationship to the resource, but first link to request
>>>>> 'asynchronous code javascript'
>>>>>
>>>>>
>>>>> http://www.hiddenwebgenius.com/blog/guides/understanding-javascripts-asynchronous-code/
>>>>>
>>>>> 25.01.2016, 09:16, "Normando Hall" <nhall at unixlan.com.ar>:
>>>>> > Sorry, I missed to say it is Freeswitch 1.4
>>>>> >
>>>>> > El 25/01/2016 a las 02:53 a.m., Normando Hall escribió:
>>>>> >>  Hello everybody.
>>>>> >>
>>>>> >>  I am coding a js script to do somethings, and I want to add a
>>>>> global
>>>>> >>  timeout, to call a function to play a file and hangup. But the
>>>>> function
>>>>> >>  called inmediatelly.
>>>>> >>  Also tested with setInterval, the same behaviour.
>>>>> >>
>>>>> >>  function playTimeout(despedida){
>>>>> >>      if (session.ready()) {
>>>>> >>          logger("TIMEOUT");
>>>>> >>          session.execute("playback", sonidos + "/TIMEOUT.wav");
>>>>> >>          session.execute("sleep","500");
>>>>> >>          logger(despedida);
>>>>> >>          session.execute("playback", sonidos + "/" + despedida +
>>>>> ".wav");
>>>>> >>          session.hangup();
>>>>> >>      }
>>>>> >>      exit("TIMEOUT");
>>>>> >>  }
>>>>> >>
>>>>> >>  setTimeout(playTimeout(despedida),120000);
>>>>> >>  .
>>>>> >>  .
>>>>> >>  .
>>>>> >>  my script continue
>>>>> >>
>>>>> >>  Any help is welcome!
>>>>> >>
>>>>> >>  Thank you
>>>>> >>  Normando
>>>>> >>
>>>>> >>
>>>>>  _________________________________________________________________________
>>>>> >>  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
>>>>> >
>>>>> >
>>>>> _________________________________________________________________________
>>>>> > 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
>>>>>
>>>>>
>>>>> _________________________________________________________________________
>>>>> 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
>>>>>
>>>>
>>>>
>>>>
>>>> _________________________________________________________________________
>>>> Professional FreeSWITCH Consulting Services: consulting at freeswitch.orghttp://www.freeswitchsolutions.com
>>>>
>>>> Official FreeSWITCH Siteshttp://www.freeswitch.orghttp://confluence.freeswitch.orghttp://www.cluecon.com
>>>>
>>>> FreeSWITCH-users mailing listFreeSWITCH-users at lists.freeswitch.orghttp://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-usershttp://www.freeswitch.org
>>>>
>>>>
>>>>
>>>
>>> _________________________________________________________________________
>>> Professional FreeSWITCH Consulting Services: consulting at freeswitch.orghttp://www.freeswitchsolutions.com
>>>
>>> Official FreeSWITCH Siteshttp://www.freeswitch.orghttp://confluence.freeswitch.orghttp://www.cluecon.com
>>>
>>> FreeSWITCH-users mailing listFreeSWITCH-users at lists.freeswitch.orghttp://lists.freeswitch.org/mailman/listinfo/freeswitch-users
>>> UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-usershttp://www.freeswitch.org
>>>
>>>
>>> _________________________________________________________________________
>>> 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
>>>
>>>
>>>
>>> _________________________________________________________________________
>>> 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
>>>
>>
>>
> _________________________________________________________________________
> 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/20160126/387eba6c/attachment-0001.html 


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