Asterisk AGI php

Hogyan telepítsük a PHP dolgozni Asterisk Gateway Interface (AGI)

Az első szabály az üzleti -, hogy tisztában legyenek a PHP környezet. Nem azt mondom, hogy meg kell változtatni valamit, de tudnia kell róla, lehet némi frusztráció, főleg ha a dolgok sűrűjébe. A Debian kell azonnal lehetséges, hogy „PHP4-cli”, hiszen a tipikus usianovka PHP4 célja kizárólag a hálózat számára.


Végül sikerült megtalálni a probléma a PHP script AGI! Valószínűleg volt 2 változat a PHP telepítve a gépre. Egy CGI és egy CLI. Nem tudta, hogyan kell tesztelni én forgatókönyvet, azt vyzsval változata CLI (/ usr / local / bin / php), annak ellenére, hogy a PHP változata az úgynevezett CLI (/ usr / local / bin / php). Kiderült, hogy az én script nem fog futni a CLI verziója PHP ... Érdekes, nem?

Nézd meg a php konfigurációs fájlban (vagy /etc/php.ini /usr/local/etc/php.ini) az alábbi:

ob_implicit_flush (false);
set_time_limit (5);
; error_log = fájlnév
error_reporting (0); // A felhasználó által: Démokritosz

Az első sor, ob_implicit_flush -, azt jelzi, hogy a php kimeneti puffer; abban az esetben, Asterisk AGI, ha bufferizuete kimenet, Asterisk PBX nem fog a csapat hosszú ideig, amíg tiszta a puffer kézzel (lásd alább)

A második elem, set_time_limit. ez a lehetséges leghosszabb teljesíteni a php script. A legtöbb Asterisk AGI szkriptek nélkül ésszerű időn belül, de ha van egy nagyon hosszú script, ami szokatlanul nagy hibát, akkor lehetséges, hogy a szkript befejeződött korai.

A harmadik elem - error_log; fontos a hibakeresés, de a gyilkos ipari berendezésekhez. Meg lehet alapból ki van kapcsolva, vagy pedig szándékosan kapcsolja ki, és ne felejtsük el.

A negyedik elem error_reporting (0). Azt mondja a PHP nem jelentik a hibákat során az átfutási idő a forgatókönyvet. Ez azért fontos, mert az esetleges hibákat (és néhány figyelmeztetések), amely létrehozta a forgatókönyvet, meg kell küldeni a stdout ugyanazon puffer amelyek küldött valamennyi AGI csapat. Ezért minden hibát a szkript fog küldeni AGI és astreisk megpróbálja olvasni őket, mint az AGI csapat. Az a kísérlet, ez a viselkedés végez minden későbbi parancsok után szkripthibával (ismeretlen az Ön számára) értéke „510 érvénytelen parancs” ...
miután egy script hiba (ismeretlen neked), visszatérés „510 érvénytelen parancs”, jóllehet parancsok, mint a „EXEC lejátszás” ténylegesen is lejátszani egy hangfájlt. A fontos AGI parancsokat, mint a „GET DATA my_file” és a „GET DIGIT my_file”, az Asterisk CLI jelentést „Játék Fájl my_file”, de a hang fájl nem lesz hallható a csatorna, és nem DTMF bemenet kapott ki a hívó. Szintén nincs mód a forgatókönyvet, hogy mondják el, mit DTMF gombok voltak nyomva, mert a parancs visszaadja a „510 érvénytelen„karaktersorozat. Alternatívájaként használható error_reporting (0) elején a script, hogy segítsen hibakeresés lenne hozzáfűzése a feltételezett error-generáló parancsokat a szkriptet @, mint például a

$ Rst = @mysql_query ($ strSQL);
VAGY
$ Fp = @fopen ( "néhány nem kizárt fájl", "R");

A @ elnyomja a hibákat vagy figyelmeztetést generál az állítást.
szerkesztése

Tedd a scripteket diretoriyu / var / lib / asterisk / AGI-bin / és kap a munkájukat, mielőtt bármit elképzelhető.

3. Fut engedélyt szkriptfájlokat

Ne feledje, hogy chmod minden szkripteket 733 alábbiakban mutatjuk be:

4. Interface shell parancsok

2, az első sorban a script a következő legyen (feltételezve, hogy a php kötészeti található a / usr / bin, dupla ellenőrizze):

Ezután meg kell használni fopen (), hogy megteremtse a szükséges címkéket. Tudom, hogy sok változata php megváltozott jelek kezelése érdekében a stdio patakok, de az fopen () fog működni a legtöbb új és a régi változat, hogy a szkriptek hordozható, és a php.ini fájl nem kapsz baj. Ezen túlmenően, a fopen () nem jelent kellemetlen használni * AGI, ezért használja azt.

Megjegyzés. STDOUT már meg van nyitva php 4.3.0 és újabb, így nem fwrite (stdout, „bla”);

6. Fogantyú bemeneti közegben Asterisk

Asterisk mindig küld egy fénysugár bármikor Áginak, az úgynevezett az alábbiak szerint:

agi_request: test.php
agi_channel: Zap / 1-1
agi_language: en
agi_type: Zap
agi_callerid:
agi_dnid:
agi_context: default
agi_extension: 1000
agi_priority: 1

Save the Old ezt a funkciót (vagy az alábbi példát):


míg $ temp = fgets ($ stdin) (feof ($ stdin)!);
$ Temp = str_replace ( "\ n", "", $ temp);
$ S = felrobban ( ":", $ temp);
$ Agivar [$ s [0]] = trim ($ s [1]);
if (($ temp == "") || ($ temp == "\ n")) break;
>
>

Ahhoz, hogy egy egyszerű hívást, és változó kulcs ... például. Ha szeretné, hogy a hívó számát csak használja a változó $ agivar [agi_extension] a PHP kódot ...

Egyéb AGI fejlécek prermeschennye Asterisk (környezeti bemenetek)

• agi_calleridname - hívó nevét, például Joe Szappan
• agi_callingpres - Képviseletének callerid ZAP csatorna
• agi_callingani2 - ismeretlen
• agi_callington - ismeretlen
• agi_callingtns - ismeretlen
• agi_dnid - id hívott szám
• agi_rdnis - az elküldött DNIS száma
• agi_enhanced - Az érték a zászló - 1,0, ha a script kezdődik, mint a Eagi

Megjegyzés. ha a hívó fél azonosító szám nincs beállítva a sip.conf, agi_callerid lesz ugyanazt jelenti, mint agi_calleridname.

7. Indítsuk el a AGI csatorna

Ez az a pont, ahol meg lehet kezdeni a beszélgetést egy csillag. Használja fputs küldeni * AGI parancsot. Ön is használja a visszhang parancsot.

fputs ($ stdout "mondják SZÁMA 1234567 '79 #„\ n");
fflush ($ stdout);

• Megjegyzés: A fflush (is), függetlenül php.ini beállítás csak a biztonság kedvéért. Ha nem fflush () (automatikus vagy manuális), Asterisk nem fog a csapat, és a program kell ragasztani, amíg timeout.

Kapcsolódó cikkek