Jonathan H
2016-Oct-10 21:47 UTC
[asterisk-users] AGI: How to break out of AGI when stream_file escape_digits are detected in middle of long sequence of files?
For reasons best known to myself, I call a python agi (PYST2 - love it!) which streams a series of very short files in quick succession. Like this: escape_digits = str("0") agi.stream_file(promptFile,escape_digits) and this is what I see on the AGI debug: <Local/s at root-00000061;2>AGI Tx >> 200 result=0 endpos=6784 <Local/s at root-00000061;2>AGI Rx << STREAM FILE /home/DefaultPrompts/en_GB/female/wx/low "0" 0 -- <Local/s at root-00000061;2> Playing '/home/DefaultPrompts/en_GB/female/wx/low.alaw' (escape_digits=0) (sample_offset 0) (language 'en_GB') <Local/s at root-00000061;2>AGI Tx >> 200 result=48 endpos=1440 The FIRST line is a file that finished normally, with result=0, the LAST line is a file that was interrupted, and receives result=48 from asterisk. Yes, zero stops the file playing, but it just goes onto the next file. So, how do I get that variable? It doesn't become available in python, and trying to get it via either agi.env[result'] agi.get_variable('result') just makes python choke and the AGI quits. That would be fine if it was a result of result being 48! I feel like I'm going slightly bonkers here because it's something so obvious, and yet I've googled so hard over this! Thanks.
Lefteris Zafiris
2016-Oct-11 08:31 UTC
[asterisk-users] AGI: How to break out of AGI when stream_file escape_digits are detected in middle of long sequence of files?
On Mon, 10 Oct 2016, at 22:47, Jonathan H wrote:> For reasons best known to myself, I call a python agi (PYST2 - love > it!) which streams a series of very short files in quick succession. > > Like this: > > escape_digits = str("0") > agi.stream_file(promptFile,escape_digits) > > and this is what I see on the AGI debug: > > <Local/s at root-00000061;2>AGI Tx >> 200 result=0 endpos=6784 > <Local/s at root-00000061;2>AGI Rx << STREAM FILE > /home/DefaultPrompts/en_GB/female/wx/low "0" 0 > -- <Local/s at root-00000061;2> Playing > '/home/DefaultPrompts/en_GB/female/wx/low.alaw' (escape_digits=0) > (sample_offset 0) (language 'en_GB') > <Local/s at root-00000061;2>AGI Tx >> 200 result=48 endpos=1440 > > The FIRST line is a file that finished normally, with result=0, the > LAST line is a file that was interrupted, and receives result=48 from > asterisk. > > Yes, zero stops the file playing, but it just goes onto the next file. > > So, how do I get that variable? It doesn't become available in python, > and trying to get it via either > > agi.env[result'] > agi.get_variable('result') > > just makes python choke and the AGI quits. That would be fine if it > was a result of result being 48! > > I feel like I'm going slightly bonkers here because it's something so > obvious, and yet I've googled so hard over this! > > Thanks.Hello, as the docs on stream_file() mention it returns the digit if one was pressed. So you might want to try something like: pressed_digit = agi.stream_file(promptFile,escape_digits) in you case the raw value 48 is converted to its ascii equivalent so pressed_digit will have the value 0 -- Lefteris Zafiris
Jonathan H
2016-Oct-11 10:31 UTC
[asterisk-users] AGI: How to break out of AGI when stream_file escape_digits are detected in middle of long sequence of files?
Arrrgh! You are correct, of course. I hadn't realised you could do it that way - I was assuming it was a variable that was returned to the dialplan/channel. Some of the finer points of AGI are still a slight mystery to me! Thank you very much - working perfectly now, with your help and the following code. Thank you again. escape_digits = str("*") pressed_digit=agi.stream_file(promptFile,escape_digits) if pressed_digit == "*": sys.exit(0) On 11 October 2016 at 09:31, Lefteris Zafiris <zaf at fastmail.com> wrote:> On Mon, 10 Oct 2016, at 22:47, Jonathan H wrote: >> For reasons best known to myself, I call a python agi (PYST2 - love >> it!) which streams a series of very short files in quick succession. >> >> Like this: >> >> escape_digits = str("0") >> agi.stream_file(promptFile,escape_digits) >> >> and this is what I see on the AGI debug: >> >> <Local/s at root-00000061;2>AGI Tx >> 200 result=0 endpos=6784 >> <Local/s at root-00000061;2>AGI Rx << STREAM FILE >> /home/DefaultPrompts/en_GB/female/wx/low "0" 0 >> -- <Local/s at root-00000061;2> Playing >> '/home/DefaultPrompts/en_GB/female/wx/low.alaw' (escape_digits=0) >> (sample_offset 0) (language 'en_GB') >> <Local/s at root-00000061;2>AGI Tx >> 200 result=48 endpos=1440 >> >> The FIRST line is a file that finished normally, with result=0, the >> LAST line is a file that was interrupted, and receives result=48 from >> asterisk. >> >> Yes, zero stops the file playing, but it just goes onto the next file. >> >> So, how do I get that variable? It doesn't become available in python, >> and trying to get it via either >> >> agi.env[result'] >> agi.get_variable('result') >> >> just makes python choke and the AGI quits. That would be fine if it >> was a result of result being 48! >> >> I feel like I'm going slightly bonkers here because it's something so >> obvious, and yet I've googled so hard over this! >> >> Thanks. > > Hello, > > as the docs on stream_file() mention it returns the digit if one was > pressed. > So you might want to try something like: > > pressed_digit = agi.stream_file(promptFile,escape_digits) > > in you case the raw value 48 is converted to its ascii equivalent so > pressed_digit will have the value 0 > > -- > Lefteris Zafiris > > -- > _____________________________________________________________________ > -- Bandwidth and Colocation Provided by http://www.api-digital.com -- > > Join the Asterisk Community at the 13th AstriCon, September 27-29, 2016 > http://www.asterisk.org/community/astricon-user-conference > > New to Asterisk? Start here: > https://wiki.asterisk.org/wiki/display/AST/Getting+Started > > asterisk-users mailing list > To UNSUBSCRIBE or update options visit: > http://lists.digium.com/mailman/listinfo/asterisk-users