Использование AMI (соединение API с Asteriskserver, чтобы я мог использовать соединение PHP Socket) Я пытаюсь перехватить получение данных с помощью PHP таким образом, чтобы я мог записывать исходящие и входящие вызовы для системы CRM (через Интернет)используется в компании, на которую я работаю.Но я не получаю результат, на который надеюсь ... Полный код можно найти в PasteBin http://pastebin.com/AwRNBW2G
Я перехватываю исходящие вызовы таким образом, и это работает:
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
);
Входящие вызовы перехватываются таким образом, но это не работает должным образом:
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
);
У меня есть массив, который я делаю недоступным прямо сейчас, но, при необходимости, я могу сохранить массив и отправитьздесь с отфильтрованными личными данными.
Я знаю, что код, который я использую сейчас, не аккуратен, но я написал его с целью: быстрый результат.Если у меня есть рабочий код, я его оптимизирую и уберу.Советы по этому поводу также очень приветствуются.Жаль, что я не могу найти хорошую документацию по этому поводу, поэтому мне нужно начать с самого начала и найти только рабочий класс, который я использую сейчас, однако он не очень завершен.Я должен был написать эту часть без каких-либо знаний о VOIP или AMI или Asterisk.
Чтобы быть кратким, вот мои вопросы: - Как я могу записывать входящие и исходящие вызовы, чтобы в конечном итоге сохранить их в базе данных с помощьюAMI?- Как я могу сохранить связь с сервером наилучшим образом?Метод, который я использую сейчас, не является оптимальным, так как соединение обрывается как минимум один раз в течение 48 часов.- У вас есть советы или предложения по оптимизации кода и аккуратному написанию кода?А знаете ли вы какие-либо функции, которые я мог бы использовать вместо функции, которую я использую?
С уважением, Демпси
С недавних пор я получаю эту ошибку, которую не могу исправить должным образом,Эта ошибка возникает примерно через 15 минут работы.Это будет работать по крайней мере за 24 часа:
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}
Может ли кто-нибудь помочь мне с этим тоже?Данные авторизации верны (они используют одни и те же данные во всем скрипте и получают соединение).Кроме того, я не получаю ответ «Действие: Ping ??? ...», в котором говорится, что сценарий отправляется как команда, но откуда берутся три вопросительных знака и точки?