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.