function AsteriskManagerAPI($action, $parameters, $return_data = false)
 {
     global $arrLang;
     $astman_host = "127.0.0.1";
     $astman_user = '******';
     $astman_pwrd = obtenerClaveAMIAdmin();
     $astman = new AGI_AsteriskManager();
     $astman->pagi = new dummy_pagi();
     if (!$astman->connect("{$astman_host}", "{$astman_user}", "{$astman_pwrd}")) {
         $this->errMsg = _tr("Error when connecting to Asterisk Manager");
     } else {
         $salida = $astman->send_request($action, $parameters);
         $astman->disconnect();
         if (strtoupper($salida["Response"]) != "ERROR") {
             if ($return_data) {
                 return $salida;
             } else {
                 return explode("\n", $salida["Response"]);
             }
         } else {
             return false;
         }
     }
     return false;
 }
示例#2
0
function get_agent_status($queue, $agent)
{
    global $queue_members;
    # Connect to AGI
    $asm = new AGI_AsteriskManager();
    $asm->connect();
    # Add event handlers to retrieve the answer
    $asm->add_event_handler('queuestatuscomplete', 'Aastra_asm_event_queues_Asterisk');
    $asm->add_event_handler('queuemember', 'Aastra_asm_event_agents_Asterisk');
    # Retrieve info
    while (!$queue_members) {
        $asm->QueueStatus();
        $count++;
        if ($count == 10) {
            break;
        }
    }
    # Get info for the given queue
    $status['Logged'] = False;
    $status['Paused'] = False;
    foreach ($queue_members as $agent_a) {
        if ($agent_a['Queue'] == $queue && $agent_a['Location'] == 'Local/' . $agent . '@from-queue/n' or $agent_a['Queue'] == $queue && $agent_a['Location'] == 'Local/' . $agent . '@from-internal/n') {
            $status['Logged'] = True;
            if ($agent_a['Paused'] == '1') {
                $status['Paused'] = True;
            }
            $status['Type'] = $agent_a['Membership'];
            $status['CallsTaken'] = $agent_a['CallsTaken'];
            $status['LastCall'] = $agent_a['LastCall'];
            break;
        }
        # Get Penalty
        $penalty = $asm->database_get('QPENALTY', $queue . '/agents/' . $agent);
        if ($penalty == '') {
            $penalty = '0';
        }
        $status['Penalty'] = $penalty;
    }
    # Disconnect properly
    $asm->disconnect();
    # Return Status
    return $status;
}
示例#3
0
    function Reload_Asterisk_SIP_IAX($security_key)
    {
        if (!$this->Check_SecurityKey ($security_key)) {
		    return array("ERROR", "INVALID KEY");
		}
		
		include (dirname(__FILE__)."/phpagi/phpagi-asmanager.php");
		
		$as = new AGI_AsteriskManager();
	    
	    $res = $as->connect(MANAGER_HOST, MANAGER_USERNAME, MANAGER_SECRET);
	
	    if ($res) {
	        
		    $res_sip = $as->Command('sip reload');
			$res_iax = $as->Command('iax2 reload');
		    
		    $as->disconnect();
		    
	    } else {
	    
		    return array(false, "Cannot connect to the Asterisk Manager !");
		    
	    }
        
        return array (true, 'Asterisk SIP / IAX config reloaded SUCCESS'); 
    }
示例#4
0
	/**
     * Function create_sipiax_friends_reload
     * @public
     */
	static public function create_sipiax_friends_reload()
	{
		$FormHandler = FormHandler::GetInstance();
		self :: create_sipiax_friends();
		
		// RELOAD SIP & IAX CONF
		require_once (dirname(__FILE__)."/../phpagi/phpagi-asmanager.php");
		
		$as = new AGI_AsteriskManager();
		// && CONNECTING  connect($server=NULL, $username=NULL, $secret=NULL)
		$res =@  $as->connect(MANAGER_HOST,MANAGER_USERNAME,MANAGER_SECRET);				
		if	($res) {
			$res = $as->Command('sip reload');		
			$res = $as->Command('iax2 reload');		
			// && DISCONNECTING	
			$as->disconnect();
		} else {
			echo "Error : Manager Connection";
		}
	}
示例#5
0
        }
        echo "Executing post apply script <b>" . $amp_conf["POST_RELOAD"] . "</b><pre>";
        system($amp_conf["POST_RELOAD"]);
        echo "</pre>";
        if (!isset($amp_conf["POST_RELOAD_DEBUG"]) || $amp_conf["POST_RELOAD_DEBUG"] != "1" && $amp_conf["POST_RELOAD_DEBUG"] != "true") {
            echo "</div><br>";
        }
        echo "\n\t\t\t<script>\n\t\t\t\tfunction hideWaitBanner()\n\t\t\t\t{\n\t\t\t\t\tdocument.getElementById('idWaitBanner').className = 'clsHidden';\n\t\t\t\t}\n\n\t\t\t\tdocument.getElementById('idWaitBanner').innerHTML = 'Configuration applied';\n\t\t\t\tdocument.getElementById('idWaitBanner').className = 'clsWaitFinishOK';\n\t\t\t\tsetTimeout('hideWaitBanner()',3000);\n\t\t\t</script>\n\t\t";
    }
    $amp_conf = parse_amportal_conf("/etc/amportal.conf");
    $hosts = split(',', $amp_conf['MANAGERHOSTS']);
    foreach ($hosts as $host) {
        $astman = new AGI_AsteriskManager();
        if ($res = $astman->connect($host, $amp_conf["AMPMGRUSER"], $amp_conf["AMPMGRPASS"])) {
            $astman->command("reload");
            $astman->disconnect();
        } else {
            echo "<h3>Cannot connect to Asterisk Manager {$host} with " . $amp_conf["AMPMGRUSER"] . "/" . $amp_conf["AMPMGRPASS"] . "</h3>This module requires access to the Asterisk Manager.  Please ensure Asterisk is running and access to the manager is available.</div>";
            exit;
        }
    }
    $wOpBounce = rtrim($_SERVER['SCRIPT_FILENAME'], $currentFile) . 'bounce_op.sh';
    exec($wOpBounce . '>/dev/null');
    $sql = "UPDATE admin SET value = 'false' WHERE variable = 'need_reload'";
    $result = $db->query($sql);
    if (DB::IsError($result)) {
        die($result->getMessage());
    }
    $need_reload[0] = 'false';
}
if ($need_reload[0] == 'true') {
function Aastra_get_number_mapping_Asterisk()
{
    # Connect to AGI
    $as = new AGI_AsteriskManager();
    $res = $as->connect();
    # Get the list of users
    $raw = $as->database_show('AMPUSER');
    # Purge the answers
    foreach ($raw as $key => $value) {
        if (strstr($key, 'info/cell')) {
            $array_out[$value] = preg_replace(array('/\\/AMPUSER\\//', '/\\/info\\/cell/'), array('', ''), $key);
        }
        if (strstr($key, 'info/home')) {
            $array_out[$value] = preg_replace(array('/\\/AMPUSER\\//', '/\\/info\\/home/'), array('', ''), $key);
        }
        if (strstr($key, 'info/other')) {
            $array_out[$value] = preg_replace(array('/\\/AMPUSER\\//', '/\\/info\\/other/'), array('', ''), $key);
        }
    }
    # Disconnect properly
    $as->disconnect();
    # Return directory array
    return $array_out;
}
示例#7
0
 '',
 '',
 '1',
 'ChanSpy',
 $b.',qx',
 '',
 '',
 '',
 '',
 'Async',
 ''
 );
 */
 $r = $manager->Originate('SIP/' . $a, $a, 'from-internal', '1', 'ChanSpy', $b . ',' . $type, '', $b, '', '', 'Async', '');
 echo $r['Response'] . ' mode=' . $type;
 $manager->disconnect();
 //echo 'ok';
 /*
 	'Канал для вызова, например SIP/1001',
 'Экстеншн для диалплана',
 'Контекст диалплана',
 'Приоритет контекста диалплана',
 'Или приложение астериска для запуска, например playback',
 'параметры приложения, например путь к аудиофайлу',
 'таймаут',
 'Номер абонента от которого идет вызов или имя',
 'переменные для диалплана',
 'account - незнаю зачем, не использовал еще',
 'Синхронный или асинхронный запрос (ждет или не ждет ответа о состоянии запроса)',
 'actionid - тоже пока не использовал'
 */
示例#8
0
function is_agent_logged($agent)
{
    global $queue_members;
    $queue_members = '';
    # Transcode for device and user mode
    $agent = Aastra_get_userdevice_Asterisk($agent);
    # Not logged by default
    $return = False;
    # Connect to AGI
    $asm = new AGI_AsteriskManager();
    $asm->connect();
    # Add event handlers to retrieve the answer
    $asm->add_event_handler('queuestatuscomplete', 'asm_event_queues');
    $asm->add_event_handler('queuemember', 'asm_event_agents');
    # Retrieve info
    while (!$queue_members) {
        $asm->QueueStatus();
        $count++;
        if ($count == 10) {
            break;
        }
    }
    # Get info for all the queues
    foreach ($queue_members as $agent_a) {
        if ($agent_a['Location'] == 'Local/' . $agent . '@from-queue/n' or $agent_a['Location'] == 'Local/' . $agent . '@from-internal/n') {
            $return = True;
            break;
        }
    }
    # Disconnect properly
    $asm->disconnect();
    # Return Status
    return $return;
}
示例#9
0
            header("location:dialplan.php");
            break;
        case 'sip':
            $asm = new AGI_AsteriskManager();
            if ($asm->connect('localhost', 'admin', 'managerpwd')) {
                $dp = $asm->command("sip reload");
                sleep(1);
            }
            $asm->disconnect();
            header("location:sipf.php");
            break;
        case 'iax':
            $asm = new AGI_AsteriskManager();
            if ($asm->connect('localhost', 'admin', 'managerpwd')) {
                $dp = $asm->command("iax2 reload");
                sleep(1);
            }
            $asm->disconnect();
            header("location:iaxf.php");
            break;
        case 'dahdi':
            $asm = new AGI_AsteriskManager();
            if ($asm->connect('localhost', 'admin', 'managerpwd')) {
                $dp = $asm->command("dahdi restart");
                sleep(1);
            }
            $asm->disconnect();
            header("location:dahdif.php");
            break;
    }
}
示例#10
0
 function AMI_Command($command)
 {
     $astman = new AGI_AsteriskManager();
     $return = false;
     if (!$astman->connect("127.0.0.1", 'admin', obtenerClaveAMIAdmin())) {
         $this->errMsg = "Error connect AGI_AsteriskManager";
         $return = false;
     } else {
         $r = $astman->command($command);
         $return = $r["data"];
         $astman->disconnect();
     }
     return $return;
 }
示例#11
0
 function AsteriskManager_Originate($host, $user, $password, $command_data)
 {
     global $arrLang;
     $astman = new AGI_AsteriskManager();
     if (!$astman->connect("{$host}", "{$user}", "{$password}")) {
         $this->errMsg = $arrLang["Error when connecting to Asterisk Manager"];
     } else {
         /* Para poder pasar el parámetro Data correctamente, se debe usar 
          * un valor separado por barra vertical (|) en Asterisk 1.4.x y una 
          * coma en Asterisk 1.6.x. Para es se requiere detectar la versión
          * de Asterisk. 
          */
         // CoreSettings sólo está disponible en asterisk 1.6.x
         $r = $astman->send_request('CoreSettings');
         $asteriskVersion = array(1, 4, 0, 0);
         if ($r['Response'] == 'Success' && isset($r['AsteriskVersion'])) {
             $asteriskVersion = explode('.', $r['AsteriskVersion']);
             // CoreSettings reporta la versión de Asterisk
         } else {
             // no hay soporte CoreSettings en Asterisk Manager, se asume Asterisk 1.4.x.
         }
         $versionMinima = array(1, 6, 0);
         while (count($versionMinima) < count($asteriskVersion)) {
             array_push($versionMinima, 0);
         }
         while (count($versionMinima) > count($asteriskVersion)) {
             array_push($asteriskVersion, 0);
         }
         $sSeparador = $asteriskVersion >= $versionMinima ? ',' : '|';
         $parameters = $this->Originate($command_data['device'], $command_data['callerid'], $command_data['room'], $sSeparador);
         $salida = $astman->send_request('Originate', $parameters);
         $astman->disconnect();
         if (strtoupper($salida["Response"]) != "ERROR") {
             return explode("\n", $salida["Response"]);
         } else {
             return false;
         }
     }
     return false;
 }
 function AsteriskManager_Command($host, $user, $password, $command_data)
 {
     global $arrLang;
     $salida = array();
     $astman = new AGI_AsteriskManager();
     //$salida = array();
     if (!$astman->connect("{$host}", "{$user}", "{$password}")) {
         $this->errMsg = $arrLang["Error when connecting to Asterisk Manager"];
     } else {
         foreach ($command_data as $key => $valor) {
             $salida = $astman->send_request('Command', array('Command' => "{$valor}"));
         }
         $astman->disconnect();
         $salida["Response"] = isset($salida["Response"]) ? $salida["Response"] : "";
         if (strtoupper($salida["Response"]) != "ERROR") {
             return explode("\n", $salida["Response"]);
         } else {
             return false;
         }
     }
     return false;
 }
示例#13
0
/**
 * Procedimiento para listar todos los grupos de troncales DAHDI que han sido
 * definidos. Este procedimiento requiere que Asterisk esté en ejecución en el
 * sistema y que soporte el comando "dahdi show channels group N".
 *
 * @return  mixed   Arreglo de la siguiente forma:
 *  array(0 => array("DAHDI/1", "DAHDI/2", "DAHDI/3"), 1 => array("DAHDI/4", "DAHDI/5", "DAHDI/6"))
 */
function getTrunkGroupsDAHDI()
{
    require_once '/var/lib/asterisk/agi-bin/phpagi-asmanager.php';
    require_once 'libs/paloSantoConfig.class.php';
    // Obtener las credenciales y abrir la conexión Asterisk
    $pConfig = new paloConfig("/etc", "amportal.conf", "=", "[[:space:]]*=[[:space:]]*");
    $arrConfig = $pConfig->leer_configuracion(false);
    $astman = new AGI_AsteriskManager();
    if (!$astman->connect('localhost', $arrConfig['AMPMGRUSER']['valor'], $arrConfig['AMPMGRPASS']['valor'])) {
        // No se puede conectar a AMI, se intenta parsear configuración
        return $grupos = getTrunkGroupsDAHDI_config();
    } else {
        /*
           Chan Extension  Context         Language   MOH Interpret        Blocked    State     
              1            from-pstn                  default                         In Service
              2            from-pstn                  default                         In Service
              3            from-pstn                  default                         In Service
              4            from-pstn                  default                         In Service
        */
        // Se conoce que los números de grupo van de 0 a 63
        $grupos = array();
        $bSoportado = TRUE;
        // Se asume que el comando soporta listar por grupos
        for ($iGrupo = 0; $iGrupo < 64 && $bSoportado; $iGrupo++) {
            $r = $astman->Command("dahdi show channels group {$iGrupo}");
            if (isset($r['data'])) {
                $lineas = explode("\n", $r['data']);
                foreach ($lineas as $sLinea) {
                    /* Si una línea empieza con Usage, entonces la versión de 
                       Asterisk no soporta la extensión "group N" del comando
                       "dahdi show channels" */
                    if (strpos($sLinea, 'Usage') === 0) {
                        $bSoportado = FALSE;
                        break;
                    }
                    if (preg_match('/^\\s+(\\d+)/', $sLinea, $regs)) {
                        $grupos[$iGrupo][] = 'DAHDI/' . $regs[1];
                    }
                }
            }
        }
        $astman->disconnect();
        if (!$bSoportado) {
            // Comando AMI no soportado, se intenta parsear configuración
            $grupos = getTrunkGroupsDAHDI_config();
        }
        return $grupos;
    }
}
示例#14
0
function setrobstatus($account, $incomingvalue, $mode)
{
    require_once 'common/php-asmanager.php';
    $amp_conf = parse_amportal_conf("/etc/amportal.conf");
    $hosts = split(',', $amp_conf['MANAGERHOSTS']);
    foreach ($hosts as $host) {
        $astman = new AGI_AsteriskManager();
        if ($res = $astman->connect($host, $amp_conf["AMPMGRUSER"], $amp_conf["AMPMGRPASS"])) {
            if ($mode == "write") {
                if ($incomingvalue == "Never") {
                    $astman->database_del("ROBCHECK", $account);
                }
                if ($incomingvalue == "Always") {
                    $astman->database_put("ROBCHECK", $account, "ENABLED");
                }
                $robstatus = null;
            }
            if ($mode == "read") {
                $existrobstatus = $astman->database_get("ROBCHECK", $account);
                if ($existrobstatus) {
                    $robstatus = "Always";
                } else {
                    $robstatus = "Never";
                }
            }
            $astman->disconnect();
        } else {
            echo "<h3>Cannot connect to Asterisk Manager {$host} with " . $amp_conf["AMPMGRUSER"] . "/" . $amp_conf["AMPMGRPASS"] . "</h3>This module requires access to the Asterisk Manager.  Please ensure Asterisk is running and access to the manager is available.</div>";
            exit;
        }
    }
    return $robstatus;
}
    die;
}
$DBHandle = DbConnect();
if ($action == "reload") {
    $as = new AGI_AsteriskManager();
    // && CONNECTING  connect($server=NULL, $username=NULL, $secret=NULL)
    $res = $as->connect(MANAGER_HOST, MANAGER_USERNAME, MANAGER_SECRET);
    if ($res) {
        if ($atmenu == "sipfriend") {
            $res = $as->Command('sip reload');
        } else {
            $res = $as->Command('iax2 reload');
        }
        $actiondone = 1;
        // && DISCONNECTING
        $as->disconnect();
    } else {
        $error_msg = "</br><center><b><font color=red>" . gettext("Cannot connect to the asterisk manager!<br>Please check your manager configuration.") . "</font></b></center>";
    }
} else {
    if ($atmenu == "sipfriend") {
        $TABLE_BUDDY = 'cc_sip_buddies';
        $buddyfile = BUDDY_SIP_FILE;
        $_SESSION["is_sip_changed"] = 0;
        if ($_SESSION["is_iax_changed"] == 0) {
            $_SESSION["is_sip_iax_change"] = 0;
        }
    } else {
        $TABLE_BUDDY = 'cc_iax_buddies';
        $buddyfile = BUDDY_IAX_FILE;
        $_SESSION["is_iax_changed"] = 0;
 private function _databaseCallWaiting()
 {
     $astman = new AGI_AsteriskManager();
     if (!$astman->connect("127.0.0.1", 'admin', obtenerClaveAMIAdmin())) {
         $this->errMsg = "Error connect AGI_AsteriskManager";
     } else {
         $salida = $astman->command("database show CW");
         $astman->disconnect();
         if (strtoupper($salida["Response"]) != "ERROR") {
             return explode("\n", $salida["data"]);
         } else {
             return false;
         }
     }
 }
 function AsteriskManager_Hangup($host, $user, $password, $command_data)
 {
     $astman = new AGI_AsteriskManager();
     $channel = "";
     if (!$astman->connect("{$host}", "{$user}", "{$password}")) {
         $this->errMsg = _tr("Error when connecting to Asterisk Manager");
     } else {
         //
         $channelName = $command_data['channel'];
         $arrChannel = explode("/", $channelName);
         $pattern = "/^" . $arrChannel[0] . "\\/" . $arrChannel[1] . "/";
         exec("/usr/sbin/asterisk -rx 'core show channels concise'", $output, $retval);
         foreach ($output as $linea) {
             if (preg_match($pattern, $linea, $arrReg)) {
                 $arr = explode("!", $linea);
                 $channel = $arr[0];
             } else {
                 $channel = $channelName;
             }
         }
         $parameters = array('Channel' => $channel);
         $salida = $astman->send_request('Hangup', $parameters);
         $astman->disconnect();
         if (strtoupper($salida["Response"]) != "ERROR") {
             return explode("\n", $salida["Response"]);
         } else {
             return false;
         }
     }
     return false;
 }
示例#18
0
 function AsteriskManager_Originate($host, $user, $password, $command_data)
 {
     global $arrLang;
     $astman = new AGI_AsteriskManager();
     if (!$astman->connect("{$host}", "{$user}", "{$password}")) {
         $this->errMsg = $arrLang["Error when connecting to Asterisk Manager"];
     } else {
         $parameters = $this->Originate($command_data['origen'], $command_data['destino'], $command_data['channel'], $command_data['description']);
         $salida = $astman->send_request('Originate', $parameters);
         $astman->disconnect();
         if (strtoupper($salida["Response"]) != "ERROR") {
             return explode("\n", $salida["Response"]);
         } else {
             return false;
         }
     }
     return false;
 }
示例#19
0
 function AsteriskManager_Command($command_data, $return_data = true)
 {
     global $arrLang;
     $salida = array();
     $astman = new AGI_AsteriskManager();
     if (!$astman->connect("127.0.0.1", "admin", obtenerClaveAMIAdmin())) {
         $this->errMsg = $arrLang["Error when connecting to Asterisk Manager"];
     } else {
         $salida = $astman->send_request('Command', array('Command' => "{$command_data}"));
         $astman->disconnect();
         $salida["Response"] = isset($salida["Response"]) ? $salida["Response"] : "";
         if (strtoupper($salida["Response"]) != "ERROR") {
             if ($return_data) {
                 return explode("\n", $salida["data"]);
             } else {
                 return explode("\n", $salida["Response"]);
             }
         } else {
             return false;
         }
     }
     return false;
 }