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.- Votos: 1 - Respuestas: 4 - Vistas: 8 Compartir en: Google Facebook Twitter LinkedIn LinkRespuestas:
-
-
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