[Freeswitch-users] Issue with Javascript setTimeout

Matt Broad matt at supportedbusiness.com
Wed Jan 27 11:48:58 MSK 2016


I had suggested the use of the inc.js file as the OP seemingly wanted to
run some additional code along with the play file and hangup.  Though as
Michael has explained, using this method is not advisable due to the way
the session threads work :)

On a side note,I personally use something like the following to play a file
and hangup the channel:
*maxTimeTaskID = **session.execute("sched_broadcast", "+60
playback!normal_clearing::/tmp/hangupfile.mp3 both")*;

Is there any benefit to using your sched_transfer method Anthony, or is it
just a different way to skin the proverbial cat?

thanks
Matt

On 27 January 2016 at 00:24, Anthony Minessale <anthony.minessale at gmail.com>
wrote:

> You might get a more scalable result with this in test.js and get rid of
> inc.js completely.
>
> session:execute("sched_transfer", "+5 playback:/sounds/en/us/callie/test.wav,hangup
> inline");
>
>
> On Tue, Jan 26, 2016 at 2:44 PM, Michael Jerris <mike at jerris.com> wrote:
>
>> If its in park thats one thing, if you are doing ANYTHING to the channel,
>> you have potential concurrency issues, if you are doing anything with audio
>> from different threads, nothing good will come from it.  As for another
>> possible solution to the original problem, you could sched_api and
>> uuid_transfer to a different extension that played what you needed to play
>> and then hung up too.
>>
>> On Jan 26, 2016, at 3:37 PM, Matt Broad <matt at supportedbusiness.com>
>> wrote:
>>
>> :/
>>
>> I only came across this method after trying to get the sched_broadcast to
>> not block.  An answer from Anthony on the 17th Sept 2015 (shown below) gave
>> me the idea, though I have never implemented it into anything other than
>> test code.
>>
>> *"uuid_broadcast does not block.*
>> *The problem is you are calling it from your js app which is occupying
>> the session thread.*
>>
>> *To perform async operation you need to run your script outside the
>> session thread by calling the script via the api interface via jsrun and
>> pass the uuid then put the channel into park or use an esl script to
>> control the session externally."*
>>
>> I must admit the inner workings of the session thread is not something I
>> have looked into personally (one day maybe).
>> If you could give me a quick explanation as to why this wouldn't work
>> that would be appreciated :)
>>
>>
>> Thanks
>> Matt
>>
>> On 26 January 2016 at 17:09, Michael Jerris <mike at jerris.com> wrote:
>>
>>> This isn't supposed to work.. and might cause crashes.
>>>
>>> On Jan 26, 2016, at 10:18 AM, Matt Broad <matt at supportedbusiness.com>
>>> wrote:
>>>
>>> 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
>>>>
>>>
>>> _________________________________________________________________________
>>> 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.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
>>
>
>
>
> --
> Anthony Minessale II       ♬ @anthmfs  ♬ @FreeSWITCH  ♬
>
>http://freeswitch.org/http://cluecon.com/> http://twitter.com/FreeSWITCH
> ☞ irc.freenode.net #freeswitch ☞ *http://freeswitch.org/g+
> <http://freeswitch.org/g+>*
>
> ClueCon Weekly Development Call
> ☎ sip:888 at conference.freeswitch.org  ☎ +19193869900
>
> https://www.youtube.com/watch?v=9XXgW34t40s
> https://www.youtube.com/watch?v=NLaDpGQuZDA
>
> _________________________________________________________________________
> 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/20160127/7a2a37a7/attachment-0001.html 


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