[Freeswitch-users] Issue with Javascript setTimeout

Michael Jerris mike at jerris.com
Tue Jan 26 17:43:41 MSK 2016


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
> <javascript:_e(%7B%7D,'cvml','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
>> <javascript:_e(%7B%7D,'cvml','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 <
>> <javascript:_e(%7B%7D,'cvml','nhall at unixlan.com.ar');>
>> nhall at unixlan.com.ar
>> <javascript:_e(%7B%7D,'cvml','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
>>>> <javascript:_e(%7B%7D,'cvml','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.org <javascript:_e(%7B%7D,'cvml','consulting at freeswitch.org');>http://www.freeswitchsolutions.com
>>
>> Official FreeSWITCH Siteshttp://www.freeswitch.orghttp://confluence.freeswitch.orghttp://www.cluecon.com
>>
>> FreeSWITCH-users mailing listFreeSWITCH-users at lists.freeswitch.org <javascript:_e(%7B%7D,'cvml','FreeSWITCH-users at lists.freeswitch.org');>http://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
>> <javascript:_e(%7B%7D,'cvml','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
>> <javascript:_e(%7B%7D,'cvml','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
>> <javascript:_e(%7B%7D,'cvml','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
>> <javascript:_e(%7B%7D,'cvml','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/614c6ab3/attachment-0001.html 


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