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:
De binnenkomende oproepen doe ik op dit moment op de onderstaande manier, maar dat werkt dus niet:
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:
Kan iemand me daar ook mee helpen?
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 ]