Toon posts:

PHP AMI VOIP - Inkomende en uitgaande oproepen registreren

Pagina: 1
Acties:

Onderwerpen


  • mrdemc
  • Registratie: Juni 2010
  • Laatst online: 12:59
Gebruik makende van de AMI (een API verbinding met Asteriskserver waardoor ik met PHP een socket verbinding kan plaatsen) probeer ik via PHP de ontvangen data zo op te vangen dat ik binnenkomende en uitgaande oproepen opvang en opsla in een database voor het CRM systeem dat ik op maat aan het aanpassen ben voor het bedrijf waar ik voor werk.
Nu kom ik er echter niet helemaal meer uit...
Ik krijg uitgaande oproepen goed opgevangen maar binnenkomende oproepen niet.


De uitgaande oproepen vang ik op deze manier op:
PHP:
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
      if($givenkey = array_search("Context: from-internal", $content)){
                $calleridKey = $givenkey + 1;
                $idSIP = $givenkey - 1;
                $dialNumber = str_replace("Extension: 0","31",$content[$calleridKey]);
                $dialNumber = str_replace("Extension: ", "", $dialNumber);
                $fromSIP = str_replace("Channel: SIP/", "", $content[$idSIP]);
                $fromSIP = substr($fromSIP, 0, 2);
                $dialTime = date('r');
 
                $uitgaand = array(
                                "Phonenumber"   => $dialNumber,
                                "Type"          => "Uitgaand",
                                "datetime"      => $dialTime,
                                "SIP"           => $fromSIP
                                );

De binnenkomende oproepen doe ik op dit moment op de onderstaande manier, maar dat werkt dus niet:
PHP:
551
552
553
554
555
556
557
558
559
560
561
562
563
564
       if($givenkey = array_search("AppData: Using CallerID ", $content)){
                if(array_search("Channel: SIP/31000000000", $content)+5 == $InCallKey = array_search("AppData: Using CallerID", $content)){
                        $calleridNum = explode('"',str_replace('AppData: Using CallerID "',"",$content[$InCallKey]));
                        $pickupSource = array_search("Source: SIP/31000000000", $content);
                        if($pickupSource+1 == $pickupKey = array_search("Destination: SIP/", $content)){
                                $pickupBy =  str_replace("Destination: SIP/","",$content[$pickupkey]);
                                $pickupBy = substr($pickupBy, 0, 2);
                                $dialTime = date('r');         
                                $inkomend = array(
                                                "Phonenumber" => $calleridNum[0],
                                                "Type"          => "Binnenkomend",
                                                "datetime"      => $dialTime,
                                                "SIP"           => $pickupBy
                                                );


De Array die ik maak van de gegevens die ik ontvang van de Asterisk server heb ik nu niet beschikbaar. Mocht die nodig zijn dan sla ik deze op en pas ik hem aan (zodat de telefoonnummers niet zichtbaar zijn...)

Verder heb ik hier een code die niet heel netjes is. Ik heb deze uit de losse pols geschreven met de bedoeling: snel resultaat.


Hierna (als het werkt zoals ik wil) ga ik de code opschonen en het op een betere en gezondere manier herschrijven met dit als referentie.
Het vervelende is dat ik nergens een dergelijk script kan vinden wat dezelfde functies heeft.
Ook kan ik weinig documentatie hierover vinden.


Maar mijn vragen zijn dus het volgende:
- Hoe kan ik binnenkomende oproepen opvangen en opslaan vanuit de respons van de Asteriskserver via AMI (Asterisk Management Interface)?
- Hoe kan ik het beste de verbinding behouden zonder dat het script zichzelf afsluit of dat de serververbinding wordt verbroken? (op dit moment stuur ik om de zoveel tijd een PING die wordt beantwoord met een PONG, maar dit werkt niet geheel optimaal.
- Hebben jullie tips over het netter en beter schrijven van deze code en eventueel ook handigere functies hiervoor?


Gr. Dempsey (de telefoonnummers en inloggevens zijn uiteraard gefingeerd en worden niet werkelijk op die manier gebruikt)


Ik krijg sinds kort ook deze foutmelding waar ik niet uitkom. Deze komt na het ongeveer een kwartier aanstaan van het script. Voorheen draaide deze wel een hele nacht door:
code:
1
2
3
4
5
6
PHP Notice:  fwrite(): send of 16 bytes failed with errno=32 Broken pipe in /var/www/html/phpami/AMILoader.php on line 147
Net_AsteriskManagerException: Authorisation failed in /var/www/html/phpami/AMILoader.php on line 173
#0 /var/www/html/phpami/AMILoader.php(173): Net_AsteriskManager->login('GEBRUIKERSNAAM', 'WACHTWOORD')
#1 /var/www/html/phpami/AMILoader.php(306): Net_AsteriskManager->_sendCommand('Action: Ping???...')
#2 /var/www/html/phpami/AMILoader.php(543): Net_AsteriskManager->ping()
#3 {main}

Kan iemand me daar ook mee helpen?

[Voor 9% gewijzigd door mrdemc op 12-05-2011 12:24]



Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee