У меня это реализовано через Asterisk ami.
Код вызова через asterisk ami на php:
$ami_param = array(
'hostname' => '<IP_адрес_asterisk>',
'port' => '5038',
'username' => '<ami_username>',
'password' => '<ami_password>',
'wait_time' => '60000',
'priority' => '1',
);
// Выполняем звонок
$oSocket = fsockopen($ami_param['hostname'], $ami_param['port'], $errnum, $errdesc) or die("Connection to host failed");
sleep(1);
fputs($oSocket, "Action: login\r\n");
fputs($oSocket, "Events: off\r\n");
fputs($oSocket, "Username: ".$ami_param['username']."\r\n");
fputs($oSocket, "Secret: ".$ami_param['password']."\r\n\r\n");
fputs($oSocket, "Action: originate\r\n");
fputs($oSocket, "Channel: SIP/".$command['number_src']."\r\n");
fputs($oSocket, "Timeout: ".$ami_param['wait_time']."\r\n");
fputs($oSocket, "Context: ".$ami_param['context']."\r\n");
fputs($oSocket, "CallerId: ".$command['number_src']."\r\n");
fputs($oSocket, "Exten: ".$command['number_dst']."\r\n");
fputs($oSocket, "Priority: ".$ami_param['priority']."\r\n");
fputs($oSocket, "Async: yes\r\n\r\n");
fputs($oSocket, "Action: Logoff\r\n\r\n");
sleep(1);
fclose($oSocket);
По итогу получаю: пользователь жмет кнопку, ему алертом выкидывается предупреждение о том, что сейчас будет, далее идет звонок на телефон юзера (берется из базы корп. сайта), а далее на необходимый номер.
Внимание! Сделайте куеву тучу проверок на исходящий номер, чтобы не попасть на бабло.