Nasıl bir çağrının durumunu biliyorsunuz - Asterisk ve PHP?

4 Cevap php

PHP ile bir uygulama ve Asterisk Sunucu geliştiriyorum. Uygulamanın özelliklerinden biri bir özel arayan kimliği çağrı durumu (zil, asılı, cevap ...) kontrol etmektir, bu yüzden bir soket ile çalışıyorum ve çünkü, bunu bilmek istiyorum komut durumu ama ben bunu yapmak için daha iyi bir yolu olmalı düşünüyorum.

Şimdiden teşekkürler.

4 Cevap

Ne API için bu programı yazmak için kullanıyorsunuz? AMI? AGI? FastAGI? DeadAGI? Dosyaları diyoruz? Bu bilgileri almak için pek çok yolu var.

NOTE: Eğer çağrı dosyaları ve / veya CDR erişimini kullanıyorsunuz sürece bir kanal hungup olmuştur olmadığını söyleyemem.

AMI ile, (burada belgelenen: http://www.voip-info.org/wiki/view/Asterisk+Manager+API+Action+Status) Durum komutunu kullanabilirsiniz.

Bu program tarafından belirlenir gibi AGI ile, durumu bilecek. Eğer AGI komut hala varsa, o zaman çağrı hala devam ediyor ve zaten yanıtladı.

Eğer çağrı kullanıyorsanız dosyaları ve Arşiv özniteliği ayarlanmış varsa 'evet', sonra çağrı sonra size çağrı dosyası için outoing_done dizin (genellikle / var / lib / asterisk / outgoing_done /) kontrol edebilirsiniz tamamlandıktan sonra. Eğer callfile okuduğunuzda, Asterisk size aramanın son durumunu anlatacağım çağrı dosyanın alt bir statü eklenmiş olduğunu fark edeceksiniz.

Bu bilgileri almak için BEST yolu PHP script Asterisk sunucu üzerinde CDR kayıtları okunan sahip gereğidir. Lütfen CDR kayıtları MySQL veritabanı oturum var, o veritabanından çağrı kayıtlarını çekin.

, Harph

Sen Asterisk akışı AMI olayları dinlemek için bir AMI daemon oluşturabilirsiniz. Bunu birçok kez, Asterisk GUI için varlık bunlardan birini yaptık. Eğer veritabanında durum için bir tablo oluşturmak varsa, AMI olayları dinlemek ve onlar ne gibi durumunu güncelleştirmek için bir cini oluşturabilirsiniz. Sonra web sayfası hiç Asterisk ile etkileşim olmaz, sadece veritabanından durumunu okumak gerekir.

Aşağıdaki bağlantı Asterisk GUI proje olduğunu. Bu javascript ile yazılmış, böylece php biraz farklı olurdu, ama bu size başlamak için iyi bir temel verecektir. Hattı 574 ile başlayın.

http://svn.asterisk.org/view/asterisk-gui/branches/2.0/config/js/welcome.js?view=markup

Php vs javascript önemli farklardan biri javascript Asterisk http cini yerine düz AMI bir soket bağlantısı kullanmak zorunda olmasıdır. Bu nedenle onu 'waitevent' şeyler kullanmak zorundadır. Bir TCP soket bağlantısı kullanarak olacak çünkü Ama, sadece bir okuma deyimi döngü tutmak.

Bu yardımcı olur umarım! Bu yöntem, Asterisk bilgi almak için çalışırken en güvenilir gibi görünüyor.

Ben aslında HTML5 WebSockets ve AsterClick, ben PHP yazdığım bir katman cini kullanın.

AsterClick is , as far as I know ,the only truly event driven Asterisk AMI interface for HTML5 on the planet. All the other solutions out there are still stuck polling the server.

I can watch the status of calls in real time, originate . transfer between (queues,meetme,parking,individuals) simply by drag-n-drop in my browser. I can create functioning ad hoc dialplan entries without writing to the dialplan or basically anything else Asterisk AMI can do with NO POLLING ever.

In Javascript I can use an addEventListener() function that actually takes the names of AMI events as parameters. There is NO POLLING , but rather when the Asterisk AMI emits an event it is sent to my browser over the webSocket generating an event which processes the data and emits more events within the browser.

Ben de bana, Windows ve Linux için tek masaüstü yürütülebilir durmak gibi bu aynı HTML5 AsterClick uygulamaları dağıtmak olanak WBEA denilen bir araç var.

Ben status.Here kullandığım php kodu kanalı kontrol etmek CLI komutunu kullanın

<?php 
    $socket = fsockopen("111.11.11.111",$portno, $errno, $errstr, $timeout);
    fputs($socket, "Action: Login\r\n");
    fputs($socket, "UserName: username\r\n");
    fputs($socket, "Secret: secret\r\n\r\n");


     $channel=$_GET['value']; //pass channel through GET method


    echo"<pre>";
    fwrite($socket, "Action: Status\r\n");
    fwrite($socket, "Command: Lists channel status ".$channel."\r\n\r\n");
    $wrets="";


    fputs($socket, "Action: Logoff\r\n\r\n");

    while (!feof($socket)) {
      $wrets .= fread($socket, 8192).'</br>';
    }

    echo $wrets."<br/>";

    fclose($socket);    

    ?>