[asterisk-users] No joy with my first AGI Python script

Steve Edwards asterisk.org at sedwards.com
Wed Jan 6 14:19:51 CST 2016


On Wed, 6 Jan 2016, D'Arcy J.M. Cain wrote:

> It's very simple but it doesn't work.  Here's the entire script.
>
> #! /usr/bin/python
>
> import sys
>
> env = {}
>
> def comm(cmd):
>    sys.stdout.write(cmd.strip() + '\n')
>    sys.stdout.flush()
>    return sys.stdin.readline().strip()
>
> while 1:
>   line = sys.stdin.readline().strip()
>
>   if line == '': break
>
>   key,data = line.split(':')
>   if key[:4] == 'agi_':
>       key = key.strip()[4:]
>       data = data.strip()
>       if key: env[key] = data
>
> #comm("Verbose(0,pyast: %s)" % sys.argv)
> comm('SAY NUMBER 123 ""')
>
> sys.stderr.write("AGI Environment Dump:\n");
> for key in env.keys():
>   sys.stderr.write(" -- %s = %s\n" % (key, env[key]))
>
> sys.stderr.flush()
>
> The extension is;
>
> exten => *22,1,Verbose(0,${CHANNEL(peername)} calling 22 TEST)
>  same => n,AGI(/home/darcy/pyast,Hello world)
>  same => n,Hangup
>
> What happens when I dial it is that the dialplan Verbose statement runs
> but nothing else is logged and the number is not said.  When I turn on
> AGI debugging I get this:
>
> ... (a bunch of agi_ variables)
> <SIP/darcy-0000000d>AGI Tx >> agi_arg_1: Hello world
> <SIP/darcy-0000000d>AGI Tx >>
> <SIP/darcy-0000000d>AGI Rx << SAY NUMBER 123 ""
> <SIP/darcy-0000000d>AGI Tx >> 200 result=0
>
> There is a delay between the last Rx and Tx suggesting that it thinks
> that the numbers are being played but I don't hear them.  Also, the
> output to stderr does not appear in the logs.
>
> Here is my environment:
> - Asterisk 11.20.0
> - NetBSD 7.0
> - Python 3.4

In no particular order (except #0):

0) Use an existing Python library. Nobody gets it right the first time. I 
wrote my C library 100 years ago, so I don't remember all the specifics of 
the AGI protocol.

1) Is the space after the 'she-bang' significant?

2) Your 'sys.stderr.write' may be violating the AGI protocol. Writing to 
stdout definitely does. I don't remember what writing to stderr does.

3) If you dump your AGI environment before 'say number' do you get a 
different outcome?

4) Any chance the 'digits' directory is missing or that your channel 
language is set weird? Does the saynumber() dialplan application work?

5) Can you play any audio to the channel? Does playback(demo-congrats) 
work?

(That was my last straw to grasp -- need another cup of tea.)

-- 
Thanks in advance,
-------------------------------------------------------------------------
Steve Edwards       sedwards at sedwards.com      Voice: +1-760-468-3867 PST



More information about the asterisk-users mailing list