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 .
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.
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.