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@hotmail.com JABBER:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org pstn:213-799-1400 ----- Original Message ---- From: Jonas Gauffin <jonas.gauffin@gmail.com> To: freeswitch-users@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: session.streamFile("you_have.wav"); session.streamFile("2.wav"); session.streamFile("new_messages.wav"); 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 this: 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); } say("you_have.wav"); say("2.wav"); say("new_messages"); 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; } else { 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): session.streamAndAbortOnDtmf("theFile.wav"); 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@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@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@lists.freeswitch.org on behalf of Jonas Gauffin Sent: Fri 8/10/2007 2:49 AM To: freeswitch-users@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@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@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org ____________________________________________________________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. http://mobile.yahoo.com/go?refer=1GNXIC
I've written a module for the input handling and for playing phrases only when dtmf digits are not pressed (which can be overridden). I got a couple of OOP javascript modules (for freeswitch) that I can contribute with. Should javascript modules be checked in too? Currently there are a lot of example code in the wiki, but it doesn't feel like the right place. Maybe there should be some example applications and modules in the repository? for instance, my module can do this: digit = input.getByMenu("123", "to_conference_1;to_queue_2;to_operator_3"); That creates a complete menu that does this: a) Only valid digits are 123 b) It plays "choice_invalid" if an invalid choice was pressed (max three times) c) plays "choice_timeout" if the user do not enter anything d) playes "choice_too_many_tries" if three attempts was made. e) It plays all of the soundfiles that was separated with semicolon f) Soundfiles that end with "_X" are handled in a special way. _X will be substituted with "pressX" soundfile. i.e the following soundfiles will be played: "to_conference", "press1", to_queue", "press2", "to_operator", "press3". That's perfect if you got a database driven menu where u want to reuse your normal sound files. I've also made the module aware of language choice. (You can switch language any time in the IVR apps). Thanks for the answer about streamFile. I guess that a standardized javascript module will do instead. On 8/11/07, Anthony Minessale <anthmct@yahoo.com> wrote:
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@hotmail.com JABBER:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org pstn:213-799-1400
----- Original Message ---- From: Jonas Gauffin <jonas.gauffin@gmail.com> To: freeswitch-users@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:
session.streamFile("you_have.wav"); session.streamFile("2.wav"); session.streamFile("new_messages.wav"); 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 this:
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); }
say("you_have.wav"); say("2.wav"); say("new_messages"); 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; } else { 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):
session.streamAndAbortOnDtmf("theFile.wav"); 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@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@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@lists.freeswitch.org on behalf of Jonas Gauffin Sent: Fri 8/10/2007 2:49 AM To: freeswitch-users@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@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
_______________________________________________ Freeswitch-users mailing list Freeswitch-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. _______________________________________________ Freeswitch-users mailing list Freeswitch-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
My I asked why you used a semicolon-separated list when JavaScript already supports arrays? For example, instead of: "to_conference_1;to_queue_2;to_operator_3" you could have simply used: ["to_conference_1", "to_queue_2", "to_operator_3"] The other nice thing is that you can check if it's an array or a string. If it's a string, then, obviously, you would treat it like a single-item array. This is self-documented and more efficient, too. Nikolay -----Original Message----- From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Jonas Gauffin Sent: Saturday, August 11, 2007 7:08 AM To: freeswitch-users@lists.freeswitch.org Subject: Re: [Freeswitch-users] Javascript input I've written a module for the input handling and for playing phrases only when dtmf digits are not pressed (which can be overridden). I got a couple of OOP javascript modules (for freeswitch) that I can contribute with. Should javascript modules be checked in too? Currently there are a lot of example code in the wiki, but it doesn't feel like the right place. Maybe there should be some example applications and modules in the repository? for instance, my module can do this: digit = input.getByMenu("123", "to_conference_1;to_queue_2;to_operator_3"); That creates a complete menu that does this: a) Only valid digits are 123 b) It plays "choice_invalid" if an invalid choice was pressed (max three times) c) plays "choice_timeout" if the user do not enter anything d) playes "choice_too_many_tries" if three attempts was made. e) It plays all of the soundfiles that was separated with semicolon f) Soundfiles that end with "_X" are handled in a special way. _X will be substituted with "pressX" soundfile. i.e the following soundfiles will be played: "to_conference", "press1", to_queue", "press2", "to_operator", "press3". That's perfect if you got a database driven menu where u want to reuse your normal sound files. I've also made the module aware of language choice. (You can switch language any time in the IVR apps). Thanks for the answer about streamFile. I guess that a standardized javascript module will do instead. On 8/11/07, Anthony Minessale <anthmct@yahoo.com> wrote:
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@hotmail.com JABBER:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org pstn:213-799-1400
----- Original Message ---- From: Jonas Gauffin <jonas.gauffin@gmail.com> To: freeswitch-users@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:
session.streamFile("you_have.wav"); session.streamFile("2.wav"); session.streamFile("new_messages.wav"); 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 this:
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); }
say("you_have.wav"); say("2.wav"); say("new_messages"); 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; } else { 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):
session.streamAndAbortOnDtmf("theFile.wav"); 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@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@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@lists.freeswitch.org on behalf of Jonas Gauffin Sent: Fri 8/10/2007 2:49 AM To: freeswitch-users@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@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
_______________________________________________ Freeswitch-users mailing list Freeswitch-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. _______________________________________________ Freeswitch-users mailing list Freeswitch-users@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@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
Yes you may ask =) And sorry for the delay. Since I only used the module internally I coded it with my own personal preference. I think that say("to_conference_1;to_queue_2;to_operator_3"); looks nicer than say(["to_conference_1", "to_queue_2", "to_operator_3"]); or say(new Array("to_conference_1", "to_queue_2", "to_operator_3")); But since I'm going to clean it up and create a module for FreeSwitch I'll switch to using an array instead. On 8/11/07, Nikolay Kolev <me@nikolay.com> wrote:
My I asked why you used a semicolon-separated list when JavaScript already supports arrays? For example, instead of:
"to_conference_1;to_queue_2;to_operator_3"
you could have simply used:
["to_conference_1", "to_queue_2", "to_operator_3"]
The other nice thing is that you can check if it's an array or a string. If it's a string, then, obviously, you would treat it like a single-item array.
This is self-documented and more efficient, too.
Nikolay -----Original Message----- From: freeswitch-users-bounces@lists.freeswitch.org [mailto:freeswitch-users-bounces@lists.freeswitch.org] On Behalf Of Jonas Gauffin Sent: Saturday, August 11, 2007 7:08 AM To: freeswitch-users@lists.freeswitch.org Subject: Re: [Freeswitch-users] Javascript input
I've written a module for the input handling and for playing phrases only when dtmf digits are not pressed (which can be overridden). I got a couple of OOP javascript modules (for freeswitch) that I can contribute with.
Should javascript modules be checked in too? Currently there are a lot of example code in the wiki, but it doesn't feel like the right place. Maybe there should be some example applications and modules in the repository?
for instance, my module can do this:
digit = input.getByMenu("123", "to_conference_1;to_queue_2;to_operator_3");
That creates a complete menu that does this: a) Only valid digits are 123 b) It plays "choice_invalid" if an invalid choice was pressed (max three times) c) plays "choice_timeout" if the user do not enter anything d) playes "choice_too_many_tries" if three attempts was made. e) It plays all of the soundfiles that was separated with semicolon f) Soundfiles that end with "_X" are handled in a special way. _X will be substituted with "pressX" soundfile. i.e the following soundfiles will be played: "to_conference", "press1", to_queue", "press2", "to_operator", "press3". That's perfect if you got a database driven menu where u want to reuse your normal sound files.
I've also made the module aware of language choice. (You can switch language any time in the IVR apps).
Thanks for the answer about streamFile. I guess that a standardized javascript module will do instead.
On 8/11/07, Anthony Minessale <anthmct@yahoo.com> wrote:
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@hotmail.com JABBER:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org iax:guest@conference.freeswitch.org/888 googletalk:conf+888@conference.freeswitch.org pstn:213-799-1400
----- Original Message ---- From: Jonas Gauffin <jonas.gauffin@gmail.com> To: freeswitch-users@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:
session.streamFile("you_have.wav"); session.streamFile("2.wav"); session.streamFile("new_messages.wav"); 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 this:
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); }
say("you_have.wav"); say("2.wav"); say("new_messages"); 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; } else { 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):
session.streamAndAbortOnDtmf("theFile.wav"); 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@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@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@lists.freeswitch.org on behalf of Jonas Gauffin Sent: Fri 8/10/2007 2:49 AM To: freeswitch-users@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@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
_______________________________________________ Freeswitch-users mailing list Freeswitch-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. _______________________________________________ Freeswitch-users mailing list Freeswitch-users@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@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@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
participants (3)
-
Anthony Minessale
-
Jonas Gauffin
-
Nikolay Kolev