9.5. Debugging in AGI
Debugging AGI programs , as with any other type of program, can be
frustrating. Luckily, there are two advantages to debugging AGI scripts. First, since all the
communications between Asterisk and the AGI program happen over
STDIN and STDOUT (and, of course,
STDERR), you should be able to run your AGI script
directly from the operating system. Second, Asterisk has a handy
command for showing all the communications between itself and the
AGI script: agi debug.
9.5.1. Debugging from the Operating
System
As mentioned above, you should be able to run
your program directly from the operating system to see how it
behaves. The secret here is to act just like Asterisk does,
providing your script with the following:
-
A list of variables and their values, such as
agi_test:1.
-
A blank line feed (/n) to indicate that
you're done passing variables.
-
Responses to each of the AGI commands from your
AGI script. Usually, typing 200 response=1 is
sufficient.
Trying your program directly from the operating
system may help you to more easily spot bugs in your program.
9.5.2. Using Asterisk's agi debug
Command
The Asterisk command-line interface has a very
useful command for debugging AGI scripts, which is called
(appropriately enough) agi debug. If you type agi
debug at an Asterisk console and then run an AGI, you'll
see something like the following:
-- Executing AGI("Zap/1-1", "temperature.php") in new stack
-- Launched AGI Script /var/lib/asterisk/agi-bin/temperature.php
AGI Tx >> agi_request: temperature.php
AGI Tx >> agi_channel: Zap/1-1
AGI Tx >> agi_language: en
AGI Tx >> agi_type: Zap
AGI Tx >> agi_uniqueid: 1116732890.8
AGI Tx >> agi_callerid: 101
AGI Tx >> agi_calleridname: Tom Jones
AGI Tx >> agi_callingpres: 0
AGI Tx >> agi_callingani2: 0
AGI Tx >> agi_callington: 0
AGI Tx >> agi_callingtns: 0
AGI Tx >> agi_dnid: unknown
AGI Tx >> agi_rdnis: unknown
AGI Tx >> agi_context: incoming
AGI Tx >> agi_extension: 141
AGI Tx >> agi_priority: 2
AGI Tx >> agi_enhanced: 0.0
AGI Tx >> agi_accountcode:
AGI Tx >>
AGI Rx << STREAM FILE temperature ""
AGI Tx >> 200 result=0 endpos=6400
AGI Rx << STREAM FILE is ""
AGI Tx >> 200 result=0 endpos=5440
AGI Rx << SAY NUMBER 67 ""
-- Playing 'digits/60' (language 'en')
-- Playing 'digits/7' (language 'en')
AGI Tx >> 200 result=0
AGI Rx << STREAM FILE degrees ""
AGI Tx >> 200 result=0 endpos=6720
AGI Rx << STREAM FILE fahrenheit ""
AGI Tx >> 200 result=0 endpos=8000
-- AGI Script temperature.php completed, returning 0
You'll see three types of lines while your AGI
script is running. The first type, prefaced with AGI TX
>>, are the lines that Asterisk transmits to your
program's STDIN. The second type, prefaced with AGI RX
<<, are the commands your AGI program writes back to
Asterisk over STDOUT. The third type, prefaced by , are
the standard Asterisk messages presented as it executes certain
commands.
To disable AGI debugging after it has been
started, simply type agi no debug at an Asterisk
console.
Using the agi debug command will enable
you to see the communication between Asterisk and your program,
which can be very useful when debugging. Hopefully, these two tips
will greatly improve your ability to write and debug powerful AGI
programs. |