Здравствуйте. Пытаюсь реализовать 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 номер клиента вместе с таким же номером назначения.
Подскажите как быть. Спасибо.