@trianid
pozvoni mne

Как заставить originate звонить правильно?

Здравствуйте. Пытаюсь реализовать Web-callback по общедоступной в инете инструкции через скрипт и AMI:

<?php
	$strhost = "192.168.0.100"; # укажите IP – адрес вашего Asterisk. Либо localhost/127.0.0.1, если скрипт загружен на сервер Asterisk;
	$strport = "5038"; # AMI  - порт, как настроено в секции [general] файла manager.conf;
	$timeout = "10";
	$num = $_POST['phone']; # получаем номер абонента, который хочет получить callback; 
	$name = 'Callback - '.$_POST['name'].""; # формируем строку, которую будем выводить на дисплей оператору, который будет осуществлять коллбэк. Она будет состоять из двух параметров: 1 – callback, чтобы оператор понял, что это не входящая, а потенциально исходящая активность и 2 – имя абонента;
	$cid = "333"; # экстеншен оператора;
	$c="from-internal";
	$p="1";
	$errno=0 ;
	$errstr=0 ;
	$sconn = fsockopen($strhost, $strport, $errno, $errstr, $timeout) or die("Connection to $strhost:$strport failed");
	if (!$sconn) { 
		echo "$errstr ($errno)\n"; 
	} 
	else {
		echo 'OK';
		fputs($sconn, "Action: login\r\n");
		fputs($sconn, "Username: USER\r\n"); # укажите имя созданного пользователя в файле manager.conf вместо callback;
		fputs($sconn, "Secret: SECRET\r\n"); # укажите пароль созданного пользователя в файле manager.conf вместо P@ssw0rd;
		fputs($sconn, "Events: off\r\n\r\n");
		usleep(500);
		fputs($sconn, "Action: Originate\r\n");
		fputs($sconn, "Channel: SIP/$cid\r\n");
		fputs($sconn, "Callerid: $name\r\n");
		fputs($sconn, "Timeout: 15000\r\n");
		fputs($sconn, "Context: $c\r\n");
		fputs($sconn, "Exten: $num\r\n");
		fputs($sconn, "Priority: $p\r\n");
		fputs($sconn, "Async: yes\r\n\r\n" );
		fputs($sconn, "Action: Logoff\r\n\r\n");
		usleep (500);
		$wrets=fgets($sconn,128);
		fclose($sconn);
		exit; 
	}
?>


При таком раскладе все работает. НО на телефоне оператора отображается Unknown в качестве номера клиента веб морды, и Callback - Петя - инфо о звонке и имени клиента. Я же захотел (точнее оператор захочет) придя с перекура перезвонить клиенту, по этому я немного поменял код:

<?php
	$strhost = "192.168.0.100"; # укажите IP – адрес вашего Asterisk. Либо localhost/127.0.0.1, если скрипт загружен на сервер Asterisk;
	$strport = "5038"; # AMI  - порт, как настроено в секции [general] файла manager.conf;
	$timeout = "10";
	$num = $_POST['phone']; # получаем номер абонента, который хочет получить callback; 
	$name = 'Звонок с сайта - '.$_POST['name'].""; # формируем строку, которую будем выводить на дисплей оператору, который будет осуществлять коллбэк. Она будет состоять из двух параметров: 1 – callback, чтобы оператор понял, что это не входящая, а потенциально исходящая активность и 2 – имя абонента;
	$cid = "333"; # экстеншен оператора;
	$c="from-internal";
	$p="1";
	$namenum = "С САЙТА: {$_POST['name']}<{$_POST['phone']}>";
	$errno=0 ;
	$errstr=0 ;
	$sconn = fsockopen($strhost, $strport, $errno, $errstr, $timeout) or die("Connection to $strhost:$strport failed");
	if (!$sconn) { 
		echo "$errstr ($errno)\n"; 
	} 
	else {
		echo 'OK';
		fputs($sconn, "Action: login\r\n");
		fputs($sconn, "Username: USER\r\n"); # укажите имя созданного пользователя в файле manager.conf вместо callback;
		fputs($sconn, "Secret: SECRET\r\n"); # укажите пароль созданного пользователя в файле manager.conf вместо P@ssw0rd;
		fputs($sconn, "Events: off\r\n\r\n");
		usleep(500);
		fputs($sconn, "Action: Originate\r\n");
		fputs($sconn, "Channel: SIP/$cid\r\n");
		fputs($sconn, "Callerid: $namenum\r\n");
		fputs($sconn, "Timeout: 15000\r\n");
		fputs($sconn, "Context: $c\r\n");
		fputs($sconn, "Exten: $num\r\n");
		fputs($sconn, "Priority: $p\r\n");
		fputs($sconn, "Async: no\r\n\r\n" );
		fputs($sconn, "Action: Logoff\r\n\r\n");
		usleep (500);
		$wrets=fgets($sconn,128);
		fclose($sconn);
		exit; 
	}
?>


На аппарате при этом инфо как надо: 093939399 - С САЙТА - ВАСЯ, номер в историю звонка пишется правильно на аппарате, но при поднятии трубки freepbx говорит о невозможности совершить звонок. В первом случае прозванивает и соединяет идеально, с нужного транка согласно нумерации и т д.

Я вписал в форму коллбэка номер экстеншена 334, зазвонил 333й, я поднял трубку и на экране 334го появляется вызов с 334!!!
То есть в случае с межгородом в транк пытается уйти callerid номер клиента вместе с таким же номером назначения.
Подскажите как быть. Спасибо.
  • Вопрос задан
  • 51 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы