[Asterisk-Users] AGI and fast-entered DTMF codes

Alan Murphy alan at alanmurphy.org
Wed Feb 26 15:40:38 MST 2003


Hi Stephen,

I tested the system using both a desk phone and my mobile phone. The
mobile phone had no problem, no matter the time between key presses, for
the reason you mention below (it sends the tones for a specific and
consistent period of time). The desk phone did not do this and thus
resulted in the problem. As for the actual speed between the tones, I'm
afraid I couldn't measure that, but it was quite fast with no pauses
between key presses.

When I noticed this, I knew that I could either send the tones in a
reasonable amount of time, or use a better phone. Unfortunately, we are
bound to get users who will type fast and wonder why the line has gone
dead on the other end. We are running a small competition for people
here, so have no control over their type of phone. 

I tested the desk phone with a well known phone banking service here
(which requires DTMF tones), and it had no problem with fast sending
from the phone. It could be the hardware involved, I suppose. I thought
initially it was a buffering problem in Asterisk. The X100P driver could
be sending garbage to the application if it cannot decipher the tones
quick enough, thus resulting in the problem. When I get more time, I
will delve deeper into the code and attempt to find the source of the
problem. I thought someone else might have encountered this and would
save me some time :)

As for Java as a scripting language, I do most of my development in it,
so it was a matter of convenience. I also had reusable database code to
access some internal data that is required for this project. You are
right about scalability, though. The AGI script will create a new JVM
each time it is run. A lightweight client (in a language other than
Java) that establishes a connection to a multi-threaded Java server
would allow scalability, but that sounds like a lot of work for two
incoming lines :)

Cheers for the feedback,

Alan.


Steven Critchfield wrote:

What do you consider too quickly? I think the standard is for the tone
to be atleast 80 ms, but most hardware will tolerate as low as 45 ms. 
If you drop below this amount you are not going to get decoded period. 
Also on a phone that lets you send such short DTMF codes, you may run 
into a problem of them not generating a true DTMF code. I have noticed
screechings out of cheap phones before it settles on a proper tone, and
sometimes wiggling the key made the tone variable.


On a slightly nicer phone like the one I have on my desk, it seems to
send a constant length tone no matter how short or long the keypress was
for. I even can type ahead of it and it will eventually catch up to me.
In this arrangement and with a perl based AGI script, I have never
received a bad DTMF decode. I also use 'wait for digit' as I have need
to build my own buffer that is clearable. 

Also do you feel that java will be able to scale on your current
hardware to a point that you are comfortable. I know that I start having
trouble on my current hardware at around 18-20 concurrent perl apps
running, but only when they are moving lots of data, or during initial
startup. 





More information about the asterisk-users mailing list