[Asterisk-Users] AGI and PHP
hkirrc.patrick
hkirrc.patrick at ptl.net
Tue Nov 11 07:07:22 MST 2003
thank you very much for taking the time to polishing up my codes and the
various useful tips.
i would be most grateful if you could share your AGI function lib in PHP.
thanks again,
patrick
Florian Overkamp wrote:
> Hi,
>
> At 13:48 11-11-2003 +0800, you wrote:
>
>> i made a lot of silly mistakes along the way which could have been
>> avoided if only there were some kinda howto or samples. at the risk
>> of looking stupid, i decided to shared my experience in hopes that
>> it might help some newbie get going with PHP.
>
>
> I've done this a long time ago, and by sheer accidence someone posed a
> question about it yesterday. Below are some of the comments I sent him.
>
> By the way, I also have a reusable AGI function library in PHP. I
> think I posted an older version to the list a long long time ago, but
> if there is interest I can clean it up once more and put it out
> there... Using normal function calls instead of the handywork saves
> the programmer from nasty little bugs :-))
>
>
> ---*SNIP*---
> First of all, never sleep() in AGI, if you need timeouts, do a WAIT
> FOR DIGIT or something, otherwise you might end up deadlocking your
> asterisk server.
>
> Secondly, after issueing a command, read back the results, that way
> you can be sure your command finished and you can even get some input
> about what happened. Asterisk posts back result codes too...
>
> Thirdly, don't forget newlines where they are needed.
>
> I've adjusted your script accordingly and added some functions to
> ensure some of these things:
>
> #!/usr/bin/php4 -q
> <?php
> ob_implicit_flush(true);
> set_time_limit(0);
> $in = fopen("php://stdin","r");
>
> // toggle debugging output (more verbose)
> $debug = false;
>
>
> // Do function definitions before we start the main loop
> function read() {
> global $in, $debug;
> $input = str_replace("\n", "", fgets($in, 4096));
> if ($debug) echo "VERBOSE \"read: $input\"\n";
> return $input;
> }
>
> function errlog($line) {
> global $err;
> echo "VERBOSE \"$line\"\n";
> }
>
> function write($line) {
> global $debug;
> if ($debug) echo "VERBOSE \"write: $input\"\n";
> echo $line."\n";
> }
>
> // parse agi headers into array
> while ($env=read()) {
> $s = split(": ",$env);
> $agi[str_replace("agi_","",$s[0])] = trim($s[1]);
> if (($env == "") || ($env == "\n")) {
> break;
> }
> }
>
> // main program
> errlog("Call from ".$argv[1]." - Calling phone");
> read();
> write("SAY DIGITS 22 X"); // X is the escape digit. since X is not
> DTMF, no exit is possible :-)
> read();
> write("SAY NUMBER 2233 X"); // X is the escape digit. since X is not
> DTMF, no exit is possible :-)
> read();
>
> // clean up file handlers etc.
> fclose($in);
>
> exit;
> ?>
> ---*SNIP*---
>
> best regards,
> Florian
>
>
> _______________________________________________
> Asterisk-Users mailing list
> Asterisk-Users at lists.digium.com
> http://lists.digium.com/mailman/listinfo/asterisk-users
>
>
More information about the asterisk-users
mailing list