[Freeswitch-users] Javascript input

Anthony Minessale anthmct at yahoo.com
Sat Aug 11 06:43:02 PDT 2007

The notion of the callback goes all the way down to the core.  The C portion of the code is where the digit is dequeued so there is no way to avoid it.

So, When you call streamFile you can not only pass a function to callback, you can also pass an arbitrary object.  That way you can get that object as "arg" in your example callback and push the digits onto a shared string there.

The intention is to make a pure js class for this kind of thing that we can put in tree and people can use it to make their scripts.

function mycb (type, data, arg) {

	if (type == "dtmf") {
		arg.digits += data;
		return false;
var dtmf = new Object();
dtmf.digits = "";
session.streamFile("blah.wav", mycb, dtmf);
//say you need 3 digits so subtract how many you have so far.
dtmf.digits += getDigits(3 - dtmf.digits.length, "#", 5000);

This is a crude example but you can see how you could write this into a permanently  used module everyone could use.  The idea is to make the js the place where you can continue to code functionality without touching the core.  That is the reason the default api is the lowest level possible without going too far.

This pure js module has yet to be written but we probably should get started on it soon before we make everyone duplicate this kind of thing....

Anthony Minessale II

FreeSWITCH http://www.freeswitch.org/
ClueCon http://www.cluecon.com/

AIM: anthm
MSN:anthony_minessale at hotmail.com
JABBER:anthony.minessale at gmail.com
IRC: irc.freenode.net #freeswitch

FreeSWITCH Developer Conference
sip:888 at conference.freeswitch.org
iax:guest at conference.freeswitch.org/888
googletalk:conf+888 at conference.freeswitch.org

----- Original Message ----
From: Jonas Gauffin <jonas.gauffin at gmail.com>
To: freeswitch-users at lists.freeswitch.org
Sent: Saturday, August 11, 2007 3:37:26 AM
Subject: Re: [Freeswitch-users] Javascript input

Ok. Let's take an example:

I got a voicemail application that plays a lot of phrases. Let's check
a simple example:

choice = session.getDigit(1, "", 5000);

Ok. I want to skip to the second voicemail by pressing 2. That's not
possible with the code above. Instead you have to do something like

var _digits = "";
function on_dtmf(type, digits, arg)
  _digits += digits;
  return false;

function say(phrase)
  if (_digits != "")
    return false;
  session.streamFile(phrase, on_dtmf);

function getDigits(length, terminators, timeout)
  if (_digits != '')
    var tempVar = _digits;
    _digits = "";
    return tempVar;
  return session.getDigits(length, terminators, timeout);

choice = getDigits(1, "", 5000);

Right? That will abort speach on input and return the pressed digit.
But what if we want to enter a pincode or something like that? Then we
need to handle both _digits AND use session.getDigits:

function getDigits(length, terminators, timeout)
  if (_digits.length < length)
    tempVar = _digits;
    _digits = "";
    tempVar += session.getDigits(length - _digits.length, terminators, timeout);
    return tempVar;
    tempVar = _digits;
    _digits = "";
    return tempVar;

Get my point? All of that could have been two lines of code if there
was an alternative to streamFile which do not remove the DTMF from the
input queue (or whatever it's called):

var digit = session.getDigits(1, "", 3000);

All I wanted was an alternative that is simple. Again: I'm not looking
for a replacement of streamFile but an complement for those who just
want to do the above.

I apologize if my examples are incorrect in some way, I've written
them directly in this email with my mind as a reference. I might have
done some syntax errors or something like that. Afterall, it's
saturday =)

But anyway. I can create an alternative to streamFile which does
On 8/10/07, Chris Danielson <chris at maxpowersoft.com> wrote:
> Jonas,
> To what purpose would having a streamFile abort without DTMF input?  If
> the streamFile operation is going to require aborting then DTMF input or
> voice recognition will be the means.  Jonas, your heart is in the right
> place, but everything you have asked for is already implemented in a very
> flexible manner within the JavaScript engine.
> Regards,
> Chris Danielson
> > Yes. The current architecture works just fine.
> >
> > I'm not saying that the current method should be removed. It's
> > excellent in those cases when you want to filter input during
> > streamFile and recordFile. But I still think that those cases are more
> > rare than wanting to abort the speech.
> >
> > Consider this a feature request then: A new streamFile that do not eat
> > DTMF but aborts the speech instead. Or simply a new argument that
> > specifies that the method should abort instead of eating the DTMF.
> >
> > On 8/10/07, Mike Murdock <mmurdock at coppercom.com> wrote:
> >> You do currently have the option to either continue playing the prompt
> >> or abort the prompt. In order to collect the digits during the playing
> >> of a prompt you must code a dtmf_callback handler. When a user presses a
> >> digit your call back handler gets called. You can decide it the digit is
> >> a valid one and if it is valid return "false" (or the digit) causing the
> >> prompt to stop. If the digit is not valid you can ignore it by returning
> >> "true" and the prompting will continue. While this does require the
> >> application developer to code a digit handler it gives you a much richer
> >> option for the handling of the results.
> >>
> >> You are free to develop your own wrapper function to force the
> >> particular behaviour you want. I have written a getdigits function in
> >> javascript that you are welcome to use to get the behaviour you are
> >> looking for.
> >>
> >>
> >> Michael B. Murdock
> >>
> >>
> >>
> >> ________________________________
> >>
> >> From: freeswitch-users-bounces at lists.freeswitch.org on behalf of Jonas
> >> Gauffin
> >> Sent: Fri 8/10/2007 2:49 AM
> >> To: freeswitch-users at lists.freeswitch.org
> >> Subject: Re: [Freeswitch-users] Javascript input
> >>
> >>
> >>
> >> Why not simply make another streamFile method that aborts on input.
> >> Then the user can choose which one he wants.
> >>
> >> I can elaborate my wish too. I guess that you have used a lot of IVR
> >> applications, right?
> >> For instance, you call your phone provider and they have a IVR m
> _______________________________________________
> 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

Freeswitch-users mailing list
Freeswitch-users at lists.freeswitch.org

Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.freeswitch.org/pipermail/freeswitch-users/attachments/20070811/fd7faa92/attachment-0002.html 

More information about the FreeSWITCH-users mailing list