I’m trying to do some dynamic TTS via an AGI, which involves calling tts.php included with the freePBX distro from within another AGI.
The following dial plan works exactly as expected: (The voice is ugly, but it works.)
exten => 5577001,1,Answer()
exten => 5577001,n,Set(TTSText=‘THIS IS A TEST OF TEXT TO SPEECH’)
exten => 5577001,n,AGI(tts.php,${TTSText})
exten => 5577001,n,Hangup()
However this code within an AGI does not pass the argument:
$text="'I AM SORRY. I GOT RESPONSE CODE 331 AND TOTAL CUSTOMERS.'"; $myagi->exec_agi("tts.php",$text); fflush(STDOUT);
I modified tts.php slightly to hard code the engine and for more diagnostic output:
$text = $argv[1]; $hash = md5($text); $engine = "flite"; $enginebin = "/usr/bin/flite"; if (!isset($text)) { debug("TTS GOT NO TEXT", 1); return 0; }
And this is what I get in cli debug:
<SIP/xxx>AGI Tx >> agi_request: lime-get-ord.php == other channels stuff === <SIP/xxx>AGI Tx >> <SIP/xxx>AGI Rx << #!/usr/bin/php <SIP/xxx>AGI Tx >> 510 Invalid or unknown command <SIP/xxx>AGI Rx << VERBOSE "Starting lime-get-ord: 8596352415" 1 lime-get-ord.php,8596352415: Starting lime-get-ord: 8596352415 <SIP/xxx>AGI Tx >> 200 result=1 <SIP/xxx>AGI Rx << EXEC AGI tts.php 'I AM SORRY. I GOT RESPONSE CODE 331 AND TOTAL CUSTOMERS.' -- AGI Script Executing Application: (AGI) Options: (tts.php) -- Launched AGI Script /var/lib/asterisk/agi-bin/tts.php <SIP/xxx>AGI Tx >> agi_request: tts.php <SIP/xxx>AGI Tx >> agi_channel: SIP/xxx == other channels stuff === <SIP/xxx>AGI Tx >> <SIP/xxx>AGI Rx << VERBOSE "TTS AGI Started" 1 tts.php: TTS AGI Started <SIP/xxx>AGI Tx >> 200 result=1 <SIP/xxx>AGI Rx << VERBOSE "TTS GOT NO TEXT" 1 tts.php: TTS GOT NO TEXT <SIP/xxx>AGI Tx >> 200 result=1 -- <SIP/xxx>AGI Script tts.php completed, returning 0
So I don’t understand why my $text argument is not being passed. What am I doing wrong?
Also, Why would I be getting a “510 Invalid or unknown command” on my shebang?
Thanks for helping!