Nueva pregunta

Pregunta:

Fecha: 13-12-2018 10:26:57 (En Español)

cortar llamada de elastix (asterix) con php[No resuelta]

Como puedo cortar llamada desde php. Realizar llamada ya logre pero no puedo cortar alguien tiene alguna idea.- Etiquetas: AJAX - JSON - PHP - PHP Avanzado - PHP JSON - Pregunta Votos: 1 - Respuestas: 4 - Vistas: 8 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 19-12-2018 11:03:23 como estas haciendo la conexión agi ?   Votos: 0 - Link respuesta
     
  • Fecha: 19-12-2018 11:07:53 un ejemplo básico de como cortar una llamada podría ser este
    #!/usr/bin/php-cli -q
    <?php 
    require dirname(__FILE__) . '/../lib/phpagi/phpagi.php';
    require dirname(__FILE__) . '/../include/db_utils.inc.php';
    require dirname(__FILE__) . '/common/AGI_Logger.class.php';
    require dirname(__FILE__) . '/common/AGI_CDR.class.php';
    require dirname(__FILE__) . '/common/AGI_Utils.php';
    $agi = new AGI();
    $logger = new AGI_Logger($agi);
    $cdr = new AGI_CDR($agi);
    // Get Called Extension informations
    $called_ext = $agi->request['agi_extension'];
    $Extension_D = DB_Extension($called_ext);
    // Get 'Intercom' Parameters
    $Intercom = Database_Entry('Ext_Intercom', $Extension_D['PK_Extension']);
    // Get the extension of the caller
    $cid = $agi->parse_callerid();
    $caller_ext = $cid['username'];
    // See if the caller is allowed to use this extension
    if ($Intercom['Use_Admins_ByAccount']) {
        $query = "\n\t\tSELECT\n\t\t\tExtension\n\t\tFROM\n\t\t\tExt_Intercom_Admins\n\t\t\tINNER JOIN Extensions ON PK_Extension = FK_Ext_Admin\n\t\tWHERE\n\t\t\tFK_Extension = {$Intercom['PK_Extension']}\n\t\t\tAND\n\t\t\tExtensions.Extension = {$caller_ext}\n\t\tLIMIT 1\n\t";
    } else {
        $query = "\n\t\tSELECT\n\t\t\tExtension\n\t\tFROM\n\t\t\tExt_Intercom_Admins\n\t\t\tINNER JOIN Extension_Groups ON Extension_Groups.FK_Group = Ext_Intercom_Admins.FK_Ext_Group\n\t\t\tINNER JOIN Extensions       ON Extensions.PK_Extension   = Extension_Groups.FK_Extension\n\t\tWHERE\n\t\t\tExt_Intercom_Admins.FK_Extension = {$Intercom['PK_Extension']}\n\t\t\tAND\n\t\t\tExtensions.Extension = {$caller_ext}\n\t\tLIMIT 1\n\t";
    }
    $result = $mysqli->query($query) or $agi->verbose($mysqli->error . $query);
    if ($mysqli->numrows($result) != 1) {
        $agi->stream_file('beeperr');
        $agi->hangup();
        exit(0);
    }
    //CDR: Set called info
    $cdr->set_called("{$Intercom['PK_Extension']}", "Intercom", "Intercom", "{$Extension_D['Extension']}");
    $agi->set_variable('__SIP_URI_OPTIONS', 'intercom=true');
    $agi->set_variable('SIPURI', 'intercom=true');
    $agi->set_variable('_VXML_URL', 'intercom=true');
    $agi->exec('AbsoluteTimeout', $Intercom['Timeout']);
    $agi->exec('SipAddHeader', $Intercom['Header']);
    $agi->exec('SipAddHeader', '"Call Info: Answer-After=0"');
    $agi->exec('SipAddHeader', '"Alert-Info: Ring Answer"');
    $agi->exec('SipAddHeader', '"Call-Info: <uri>\\;answer-after=0"');
    // Get a list of phones we want to page
    if ($Intercom['Use_Members_ByAccount']) {
        $query = "\n\t\tSELECT\n\t\t\tExtension\n\t\tFROM\n\t\t\tExt_Intercom_Members\n\t\t\tINNER JOIN Extensions ON PK_Extension = FK_Ext_Member\n\t\tWHERE\n\t\t\tFK_Extension = {$Intercom['PK_Extension']}\n\t";
    } else {
        $query = "\n\t\tSELECT\n\t\t\tExtension\n\t\tFROM\n\t\t\tExt_Intercom_Members\n\t\t\tINNER JOIN Extension_Groups ON Extension_Groups.FK_Group = Ext_Intercom_Members.FK_Ext_Group\n\t\t\tINNER JOIN Extensions       ON Extensions.PK_Extension   = Extension_Groups.FK_Extension\n\t\tWHERE\n\t\t\tExt_Intercom_Members.FK_Extension = {$Intercom['PK_Extension']}\n\t";
    }
    $result = $mysqli->query($query) or $agi->verbose($mysqli->error . $query);
    while ($row = $result->fetch_assoc()) {
        if ($page_phones != "") {
            $page_phones .= '&';
        }
        $page_phones .= "SIP/{$row['Extension']}";
    }
    // Set the page options
    if ($Intercom['TwoWay']) {
        $page_options .= "d";
    }
    if (!$Intercom['PlaySound']) {
        $page_options .= "q";
    }
    // Run the page command
    $agi->exec('Page', "{$page_phones}|{$page_options}");
      Votos: 0 - Link respuesta
     
  • Fecha: 20-12-2018 02:00:26 Yo estoy haciendo usando la Asterisk Manager Interface (AMI). No uso el agi.-   Votos: 0 - Link respuesta
     
  • Fecha: 20-12-2018 02:04:09 Esto seria para la realizar llamada.-
    Este codigo es donde recibo los parametros dial.php
    <?php
    require_once '../clases/llamar.php';
    
    	$host = "localhost";
    	$puerto = "5038";
    	$usuario = "admin";
    	$contrasena = "xxxxxxxx";
    	//$canal = "SIP/505";
    	$canal = 'SIP/'.htmlentities($_GET['canal'], ENT_QUOTES);
    	$contexto = "from-internal";
    	$prioridad = "1";
    	$numero = htmlentities($_GET['numero_telefono'], ENT_QUOTES);
    	
    	$llamar = new llamar();
    	$arr = $llamar->llamarElastix($host,$puerto,$usuario,$contrasena,$canal,$contexto,$prioridad,$numero);
    
    	echo json_encode($arr);
    ?>


    llamar.ph Es la clase donde se conexta y realiza la llamada dependiendo el el parametro que le pasa lo otra
    	<?php
    	class llamar {
    		public function llamarElastix($host,$puerto,$usuario,$contrasena,$canal,$contexto,$prioridad,$numero){
    			$ok = "false";
    		 	$pos = strpos($numero, "local");
    			if ($numero == null){
    				exit() ;
    			}
    			if ($pos === false){
    				$errno = 0 ;
    				$errstr	= 0 ;
    				$caller_id = "Llamada AMI desde $canal";
    				// aperturar una conexión mediante un socket
    				$socket = fsockopen($host, $puerto, $errno, $errstr, 20);
    				//error_log("socket--> $socket");
    				// si la conexión falla se imprime el error
    				if (!$socket) {
    					echo "$errstr ($errno)";
    					//error_log("$errstr ($errno)");
    				}
    				// si la conexión es satisfactoria se establece la llamada
    				else {
    					fputs($socket, "Action: login\r\n");
    					fputs($socket, "Events: off\r\n");
    					fputs($socket, "Username: $usuario\r\n");
    					fputs($socket, "Secret: $contrasena\r\n\r\n");
    					fputs($socket, "Action: originate\r\n");
    					fputs($socket, "Channel: $canal\r\n");
    					//fputs($socket, "WaitTime: $espera\r\n");
    					//fputs($socket, "CallerId: $caller_id\r\n");
    					fputs($socket, "Exten: $numero\r\n");
    					fputs($socket, "Context: $contexto\r\n");
    					fputs($socket, "Priority: $prioridad\r\n\r\n");
    					fputs($socket, "Action: Logoff\r\n\r\n");
    					sleep(2);
    					fclose($socket);
    					$ok = "true";
    				}
    			}
    			else {
    				exit() ;
    			}
    			$arr = array('ok' => $ok);
    	     	return ($arr);
    		}
    	}	
    ?>
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com