Ваше решение не подошло.
Вот правильное решение!
В PHP файле:
$strChannel = "SIP/xxx"; // внутренний номер менеджера с которым будет происходить соединение
$strContext = "directoutbound"; //контекст исходящих звонков (у вас может быть и другой)
$strWaitTime = "30";
$strPriority = "1";
$strMaxRetry = "2";
$strExtenNonCanonical = $_POST['txtphonenumber']; //формирование номера из переменных
$trash = array("(", ")", "-", "");
$strreplace = array("", "", "", "");
$strExten = "10".str_replace($trash, $strreplace, $strExtenNonCanonical); //важный момент! Я добавил префикс 10 для корректной обработки в диалплане. Так как мой контекст обрабатывает все варианты исходящих звонков.
$length = strlen($strExten);
$strCallerId = preg_replace('/^10/', '', $strExten); //для корректного отображения callerid, я убрал префикс 10 из $strExten
if ($length >= 7 && is_numeric($strExten))
{
$oSocket = fsockopen($strHost, 12234, $errnum, $errdesc) or die("Connection to host failed");
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Events: off\r\n");
fputs($oSocket, "Username: $strUser\r\n");
fputs($oSocket, "Secret: $strSecret\r\n\r\n");
fputs($oSocket, "Action: originate\r\n");
fputs($oSocket, "Channel: $strChannel\r\n");
fputs($oSocket, "WaitTime: $strWaitTime\r\n");
fputs($oSocket, "CallerId: $strCallerId\r\n");
fputs($oSocket, "Exten: $strExten\r\n");
fputs($oSocket, "Context: $strContext\r\n");
fputs($oSocket, "Priority: $strPriority\r\n\r\n");
fputs($oSocket, "Action: Logoff\r\n\r\n");
sleep (1);
fclose($oSocket);
?>
<p>
</p>
<?
В диалплане:
;##### Обработка звонков с сайта #####
exten => _10ZXXXXXXXXXX,1,NoOp(webCalling)
same => n,Playback(webcall)
same => n,Dial(SIP/TR/${EXTEN:2},,T)
same => n,Hangup()
Данное решение позволяет использовать обратный звонок с нескольких сайтов используя разные префиксы и гибко управлять звонком в диалплане.
HTML всплывающего окна описывать не буду. Тут уже сами.