PHP AMI Connection – сохранение входящих и исходящих вызовов в базу данных не работаетPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 PHP AMI Connection – сохранение входящих и исходящих вызовов в базу данных не работает

Сообщение Anonymous »

Используя AMI (соединение API с сервером Asterisk, поэтому я могу использовать соединение через сокет PHP). Я пытаюсь перехватить полученные данные с помощью 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???...», который, как говорится, отправляется сценарием как команда, но откуда берутся три вопросительных знака и точки?

Подробнее здесь: https://stackoverflow.com/questions/596 ... is-not-wor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»