podes conectarte al socket del manager del asterisk y hacer un ORIGINATE
el codigo lo tengo en php pero por la similitud no te costara traducirlo, si es que algo difiere:
abrir el socket
-------------
$errno=0 ;
$errstr=0 ;
if(!($fp = @fsockopen ("localhost", 5038, &$errno, &$errstr, 20))){
print('Error al abrir el socket<br>'.$errstr.' ('.$errno.')<br>');
exit();
}else{
print('El socket esta abierto<br>');
}
loguearte
---------
$comando = "";
$comando .= "Action: login\r\n";
$comando .= "Username: phpagi\r\n";
$comando .= "Secret: phpagi\r\n";
$comando .= "Events: off\r\n\r\n";
// el user phpagi viene por default en el trixbox y esta definido para conecciones locales, sino podes definirte un user en MANAGER.CONF, en la carpeta etc/asterisk
fputs($fp,$comando);
busco el estado de la extension donde quiero meter mi llamada
-----------------------------------------------------------
$comando = "";
$comando .= "Action: ExtensionState\r\n";
$comando .= "Context: default\r\n";
$comando .= "Exten: ".$extension."\r\n";
$comando .= "ActionID: 1\r\n";
$comando .= "Events: off\r\n\r\n";
//$comando .= "";
fputs($fp,$comando);
for($i=0;$i<7;$i++){
$res = fgets($fp);
//print($res.'<br>');
if($i==6){
$status_canal = $res;
}
}// esta ultima parte esta medio rudimentaria porque el php me tira unos errores usando feof
y finalmente si el canal esta libre
-------------------------------
if(strpos($status_canal,'0')){
fputs ($fp, "Action: Originate\r\n");
fputs ($fp, "Channel: SIP/".$extension."\r\n"); //primero que llamo
fputs ($fp, "Context: from-internal\r\n");
fputs ($fp, "Exten: ".$destino."\r\n");
fputs ($fp, "Priority: 1\r\n");
fputs ($fp, "CallerID: ".$destino."\r\n\r\n");
//fputs ($fp, "Timeout: 5000\r\n\r\n");
}
// donde $extension es la cuenta SIP que tendrias al lado del ordenador, y destino es el numero donde te queres contactar
espero que te sirva!!
PD: todo esto lo saque ya hace un tiempo de
www.voip-info.org