php asterisk ami получить статус звонка

183
17 июня 2018, 01:30

я новичок в этом деле, поэтому не сочтите за глупость такой вопрос, как получить статус звонка. Суть в следующем, по нажатию на кнопке я совершаю вызов абоненту. В результате я должен получить статус этого вызова: к примеру вернуть: 1 если абонент не взял трубку 2 если абонент занят 3 если абонент недоступен 4 если абонент взял трубку 5 если звонок завершен

звонок у меня получается, делаю я это следующим образом:

$strhost = "111.111.111.111"; //ip адрес астериска 
$strport = "111"; // порт 
$errno = 0; 
$errstr = 0; 
$actionID = time(); 
		 
$sconn = @fsockopen($strhost, $strport, $errno, $errstr) or die('0'); 
if (!$sconn) { 
	echo '0'; // нужен для того чтобы вывести сообщение на js что звонок не состоялся 
	exit;  
} else { 
	$username = 'username'; // имя пользователя 
	$secret = 'secret'; // пароль 
	$timeout = 60000; // ожидание установки соединения 
	$channel = 'SIP/111'; // канал который будет принимать звонки 
	$callerid = '8911*******'; // уникальное имя звонка, то что будет видно на телефоне 
	$exten = '89111111111'; // номер клиента на который будем звонить 
	$context = 'from-internal'; // используемый контекст вызова 
	$priority = 1; 
 
	fputs($sconn, "Action: login\r\n"); 
	fputs($sconn, "Username: $username\r\n"); 
	fputs($sconn, "Secret: $secret\r\n"); 
	fputs($sconn, "Events: off\r\n\r\n");		 
	fputs($sconn, "Action: Originate\r\n"); 
	fputs($sconn, "Channel: $channel\r\n"); 
	fputs($sconn, "Timeout: $timeout\r\n"); 
	fputs($sconn, "Callerid: $callerid\r\n"); 
	fputs($sconn, "Exten: $exten\r\n"); 
	fputs($sconn, "Context: $context\r\n"); 
	fputs($sconn, "Priority: $priority\r\n"); 
	fputs($sconn, "ActionID: $actionID\r\n"); 
	fputs($sconn, "Async: yes\r\n\r\n" ); 
	fputs($sconn, "Action: Logoff\r\n\r\n"); 
	fclose($sconn); 
	 
	echo '1'; // нужен для того чтобы вывести сообщение на js что звонок состоялся 
	exit;  
}

Каким образом, мне получить статус звонка с этим $actionID и в какой момент это надо делать. У меня логика такая, что после того как я нажал на кнопку вызов, и мне вернуло echo '1'; я должен запускать каждые скажем 10 секунд функцию, которая будет проверять статус этого звонка, до тех пор пока мне не вернется что вызов завершен. Но как получить этот статус?

я думал что это можно сделать следующим образом, код который будет запускаться для получения статуса (часть кода):

fputs($sconn, "Action: Login\r\n"); 
fputs($sconn, "Username: $username\r\n"); 
fputs($sconn, "Secret: $secret\r\n"); 
fwrite($sconn, "Action: Status\r\n"); 
fputs($sconn, "Action: Logoff\r\n\r\n"); 
 
$wrets = ''; 
while (!feof($sconn)) { 
	$wrets .= fread($sconn, 8192).'\r\n'; 
}

и в переменной $wrets я уже выдерну статус и верну его, но к сожалению у меня ничего не выходит, либо я делаю обсалютно неправильно.

READ ALSO
Вызывает ли ::class подгрузку класса?

Вызывает ли ::class подгрузку класса?

Часто бывает необходимо в разных конфигах писать название класса (с пространствами имен)Видел по разному пишут: например просто строкой...

178
RedBeanPhp как рассчитать процент?

RedBeanPhp как рассчитать процент?

Суть проблемы: как оформить запрос к БД для RedBean ! Две таблицы:

210
Плагин Woocommerce checkout manager проблема

Плагин Woocommerce checkout manager проблема

У меня возникла проблема, поставил я плагин данный, а он не отображает значение в письме, когда оформил заказ, как можно исправить?

170
Как получить значения одной ячейки

Как получить значения одной ячейки

ситуация следующая, есть запрос в БД который возвращает одну ячейкуВ самой БД он работает отлично, но вот в PHP ни как не могу его принять

167