Asterisk and physically disabled people

Hi,
I am new to asterisk and need help for a rather uncommon situation.
I would like to make a physically disabled person able to call somebody by phone using only her voice.

I managed to used Google AGI, calling an extension number, in order to present her a prompt asking her to enter a phone number (09 or exemple) and to call the required phone number.
At the moment I used free numbers to call test messages or radio.
But in this situation, after the call (successful or not), I must be able to loop and return to the starting point. I mean to the extension that presents her the prompt.
At the moment I am scotched on a failing call with a message telling Auto fallthrough …(see below).

[quote]== Using SIP RTP CoS mark 5
– Executing [1236@home:1] Answer(“SIP/102-00000001”, “”) in new stack
– Executing [1236@home:2] AGI(“SIP/102-00000001”, “googletts.agi,“Indiquez le numéro à appeler, s’il vous plaît”,fr”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/googletts.agi
– Playing ‘/tmp/011c8c8144e2a11b8a7eef6e1a1c4bf6’ (escape_digits=) (sample_offset 0)
– <SIP/102-00000001>AGI Script googletts.agi completed, returning 0
– Executing [1236@home:3] AGI(“SIP/102-00000001”, “speech-recog.agi,fr-FR”) in new stack
– Launched AGI Script /var/lib/asterisk/agi-bin/speech-recog.agi
– <SIP/102-00000001> Playing ‘beep.gsm’ (language ‘en’)
– <SIP/102-00000001>AGI Script speech-recog.agi completed, returning 0
– Executing [1236@home:4] GotoIf(“SIP/102-00000001”, “1?success:retry”) in new stack
– Goto (home,1236,5)
– Executing [1236@home:5] Goto(“SIP/102-00000001”, “204”) in new stack
– Goto (home,1236,204)
Auto fallthrough, channel ‘SIP/102-00000001’ status is 'UNKNOWN
[/quote]
What does this last sentence means and how to recover after that in order to be able to loop ?

Here is my dialplan, please be indulgent as it is my first one.

[code][home]
exten => 101,1,Dial(SIP/101)
exten => 102,1,Dial(SIP/102)

exten => 201,1,Dial(SIP/qxip/pirateradio@qxip.net)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 202,1,Dial(SIP/iptel/music@iptel.org)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 203,1,Dial(SIP/sip2sip/thetestcall@sip2sip.info)

exten => 204,1,Dial(SIP/iptel/echo@iptel.org)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

,exten => 204,2,Hangup()
exten => 204,2, Dial(1236)

exten => 205,1,Dial(SIP/ucla/13108254321@ucla.edu)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 206,1,Dial(SIP/qxip/9999@qxip.net)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 207,1,Dial(SIP/qxip/9901@qxip.net)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 208,1,Dial(SIP/qxip/9902@qxip.net)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 209,1,Dial(SIP/ideasip/301@ideasip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 210,1,Dial(SIP/ideasip/12340@ideasip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2,2)

exten => 211,1,Dial(SIP/ideasip/12341@ideasip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 212,1,Dial(SIP/ideasip/12348@ideasip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 213,1,Dial(SIP/getonsip/thetestcall@getonsip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 214,1,Dial(SIP/iptel/thetestcall@iptel.org)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 215,1,Dial(SIP/sip.antisip/thetestcall@sip.antisip.com)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 216,1,Dial(SIP/opensips/thetestcall@opensips.org)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

exten => 217,1,Dial(SIP/sip.linphone/thetestcall@sip.linphone.org)
same => n,Hangup()
same => n, 1236,Goto(home,1236,2)

;//starting point using phone 102 to call this
exten => 1236,1,Answer()
exten => 1236,n(speak),agi(googletts.agi,“Indiquez le numéro à appeler, s’il vous plaît”,fr)
exten => 1236,n(record),agi(speech-recog.agi,fr-FR)
exten => 1236,n,GotoIf($[$["${status}" = “0”] & $["${confidence}" > “0.6”]]?success:retry)

exten => 1236,n(success),goto(${utterance})

exten => 1236,n(retry),agi(googletts.agi,“recommencez”,fr)
exten => 1236,n,goto(record)
[/code]

The message means that you ran off the end of the dialplan without having attempted to dial. You ran off because you jumped to a non-existent priority (you forgot the priority field in the Goto). You also have some wrong numbers of parameters in other Gotos.

To achieve your aim, you mustn’t call Hangup! (There will be no outgoing channel to hang up when Dial returns; Hangup acts on the incoming channel, and, like Answer, it is rarely needed.)

Whilst I would suggest explicitly looping, there is an old behaviour, which I think can still be enabled, which loops the dialplan if it falls off the end.

Perhaps you should try a different setup. In your place I would think about using Asterisk only as a SIP PBX (that is it’s main purpose anyways) and use a SmartPhone with a SIP client for dialing. I know that IOS and Android have some good voice recognitioning programs built in. Perhaps you can use those for controling the SIP client.

Asterisk is not primarily SIP. It was developed for analogue/ISDN, not SIP, and it does have quite good support for automated attendant operation, which is essentially what this is, and for voice recognition.

The Android voice recognition just goes online to Google’s voice recognition server, which I think is the same as the method being proposed here.

Thank you everybody for you kind answers.

I made the adjustments suggested but the problem remain the same.
In fact, I think the trouble comes from the nexus android tablet I use to initialize the process. To start I call the extension 1236 from the tablet.

[code];;Voice dialing example
exten => 1236,1,Answer()
exten => 1236,2(speak),agi(googletts.agi,“parlez, s’il vous plaît”,fr)
exten => 1236,3(record),agi(speech-recog.agi,fr-FR)
exten => 1236,4,GotoIf($[$["${status}" = “0”] & $["${confidence}" > “0.6”]]?success:retry)

exten => 1236,5(success),goto(${utterance})

exten => 1236,6(retry),agi(googletts.agi,“recommencez”,fr)
exten => 1236,7,goto(record)[/code]

I get the vocal message from google agi.

Normally the disabled person should tell which number she/he wants to call.
As long as she say nothing correct the 1236 extension loops. That’s ok. When a valid number is understood for example 204. The 204 extension is dialed.

exten => 204,1,Dial(SIP/qxip/pirateradio@qxip.net) same => n,Goto(home,1236,2)

What I expect is, whatever the communication can be (successful or not), is to return to 1236 and to allow the disabled person to call again when she wants so that I can let her alone and let the loop quietlly wait for a call. Of course, to do so, I intend to use a softphone in a pc close to the disabled person (the same that run asterisk) and launch the loop from it, but at the moment I cannot manage to change the port the softphone listen on, due to some trouble with my linux distro.

What I guess is that the extension which allowed starting the process (here 202, my tablet) is let in an unknown state (and it should probably be the same if I used a softphone )?
May be I should find an other way to start the process but I cannot make out what exactly.

You haven’t fixe this yet.

Thank you again.

Ok it works now:

I was fixed on the goto in the 204 extension [quote]same => n,Goto(home,1236,2)[/quote]
but you were speaking of 1236 extension [quote]exten => 1236,5(success),goto(${utterance})[/quote] to be replaced with [quote] exten => 1236,5(success),goto(${utterance},1)[/quote]