/** * Escreve uma mensagem no CLI do asterisk * * @param array $event log data event * @return void */ protected function _write($event) { $line = $this->_formatter->format($event); $line = trim($line, "\n"); // Removendo quebras de linha a mais $line = str_replace('"', '\\"', $line); // Escaping " $this->asterisk->verbose($line); }
/** * Executa a ação. É chamado dentro de uma instancia usando AGI. * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $tronco = PBX_Trunks::get($this->config['tronco']); // Montando as Flags para limite na ligação $flags = $this->config['dial_flags']; if (isset($this->config['dial_limit']) && $this->config['dial_limit'] > 0) { $flags .= "L(" . $this->config['dial_limit']; // play_warning_value if (isset($this->defaultConfig['play_warning']) && $this->defaultConfig['play_warning'] > 0) { $flags .= ":" . $this->defaultConfig['play_warning']; // warning_freq if (isset($this->defaultConfig['warning_freq']) && $this->defaultConfig['warning_freq'] > 0) { $flags .= ":" . $this->defaultConfig['warning_freq']; } } $flags .= ")"; if (isset($this->defaultConfig['warning_sound'])) { $warning_sound = $this->defaultConfig['warning_sound'] != "" ? $this->defaultConfig['warning_sound'] : "beep"; $asterisk->set_variable("LIMIT_WARNING_FILE", $warning_sound); } } if ($tronco->getDtmfDialMode()) { $dst_number = $tronco->getDtmfDialNumber(); $flags .= "D({$request->destino})"; } else { $dst_number = $request->destino; } if ($tronco->getInterface() instanceof PBX_Asterisk_Interface_SIP_NoAuth || $tronco->getInterface() instanceof PBX_Asterisk_Interface_IAX2_NoAuth) { $destiny = $tronco->getInterface()->getTech() . "/" . $dst_number . "@" . $tronco->getInterface()->getHost(); } else { $postfix = isset($this->config['omit_kgsm']) && $this->config['omit_kgsm'] == "true" ? "/orig=restricted" : ""; $destiny = $tronco->getInterface()->getCanal() . "/" . $dst_number . $postfix; } $flags .= "A({$this->config['announce']})"; $log->info("Discando para {$request->destino} atraves do tronco {$tronco->getName()}({$destiny})"); $dialstatus = $asterisk->get_variable("DIALSTATUS"); $lastdialstatus = $dialstatus['data']; if (Zend_Registry::get('outgoingNumber') !== "") { $asterisk->set_variable("CALLERID(num)", Zend_Registry::get('outgoingNumber')); } $log->debug("Dial({$destiny}, {$this->config['dial_timeout']}, {$flags}"); // ==== DIAL ==== $asterisk->exec_dial($destiny, $this->config['dial_timeout'], $flags); $dialstatus = $asterisk->get_variable("DIALSTATUS"); $log->debug("DIALSTATUS: " . $dialstatus['data']); // Enviar email de alerta. if (isset($this->config['alertEmail']) && $this->config['alertEmail'] != "") { $informations = array('Regra' => $this->getRule(), 'Hora da chamada' => date('H:i'), 'Data da chamada' => date('d/m/Y'), 'Origem Original' => $request->getOriginalCallerid(), 'Destino original' => $request->getOriginalExtension(), 'Origem' => $request->origem, 'Destino' => $request->destino, 'Status da Ligação' => $dialstatus['data']); if ($lastdialstatus != "") { $lastdialaction = null; foreach ($this->getRule()->getAcoes() as $action) { if ($action == $this) { break; } $cfg = $action->getConfigArray(); if ($action instanceof FaxOutAction) { $lastdialaction = PBX_Trunks::get($cfg['tronco']); } else { if ($action instanceof PBX_Rule_Action_DiscarRamal) { $lastdialaction = $cfg['ramal']; } } } $informations["\nHouve uma tentativa de ligação anterior"] = ""; $informations["Ultima ligação para"] = $lastdialaction; $informations["Estado da ultima ligação"] = $lastdialstatus; } $this->sendMailAlert(explode(",", $this->config['alertEmail']), $informations); } switch ($dialstatus['data']) { case 'ANSWER': case 'CANCEL': case 'NOANSWER': case 'BUSY': throw new PBX_Rule_Action_Exception_StopExecution("Fim da ligacao"); break; default: $log->err($dialstatus['data'] . " ao discar para {$request->destino} pelo tronco {$tronco}"); } }
/** * Executa a ação. É chamado dentro de uma instancia usando AGI. * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $asterisk->answer(); $result = $asterisk->exec('Queue', array($this->config['queue'], 't', '', '', $this->config['timeout'])); if ($result['result'] == -1) { throw new PBX_Rule_Action_Exception_StopExecution(); } }
/** * Executa a ação * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $i18n = $this->i18n; $num = isset($this->config['type']) && $this->config['type'] == 'src' ? $request->origem : $request->destino; // Cortando numero if (isset($this->config['cut']) && $this->config['cut'] == 'pipecut') { if (!is_null($this->getRule())) { $expr = $this->config['type'] == 'src' ? $this->getRule()->getValidSrcExpr($num) : $this->getRule()->getValidDstExpr($num); if ($expr['type'] == 'RX') { // Removendo da contagem caracteres de controle e instrução $normalized_string = str_replace("_", "", $expr['value']); // Normalizando [123-8] e similares para um unico caractere $normalized_string = preg_replace("/\\[[0-9\\-]*\\]/", "#", $normalized_string); /* Nesse ponto uma expressão: * _0XX|[2-9]XX[23]. * Deve ser: * 0XX|#XX#. */ $cut_point = strpos($normalized_string, "|"); if ($cut_point > 0) { // caso haja algo para cortar // Cortando $num = substr($num, $cut_point); } } else { if ($expr['type'] == "AL") { $aliases = PBX_ExpressionAliases::getInstance(); $expression = $aliases->get((int) $expr['value']); $regular_expression = new PBX_Asterisk_Expression(); $found = null; foreach ($expression["expressions"] as $expr_value) { $regular_expression->setExpression($expr_value); if ($regular_expression->match($num)) { $found = $expr_value; break; } } // Removendo da contagem caracteres de controle e instrução $normalized_string = str_replace("_", "", $found); // Normalizando [123-8] e similares para um unico caractere $normalized_string = preg_replace("/\\[[0-9\\-]*\\]/", "#", $normalized_string); /* Nesse ponto uma expressão: * _0XX|[2-9]XX[23]. * Deve ser: * 0XX|#XX#. */ $cut_point = strpos($normalized_string, "|"); if ($cut_point > 0) { // caso haja algo para cortar // Cortando $num = substr($num, $cut_point); } } } } } // Adicionando prefixo if (isset($this->config['prefix'])) { $num = $this->config['prefix'] . $num; } // Adicionando suffixo if (isset($this->config['suffix'])) { $num .= $this->config['suffix']; } // Reescrevendo numero if (isset($this->config['replace']) && $this->config['replace'] != '') { $num = $this->config['replace']; } // Aplicando modificações no callerid/extension do asterisk if (isset($this->config['type']) && $this->config['type'] == 'src') { $log->info(sprintf($i18n->translate("Rewriting source to %s"), $num)); $request->origem = $num; $asterisk->set_callerid($num); } else { $log->info(sprintf($i18n->translate("Rewriting destination to %s"), $num)); $request->destino = $num; $asterisk->set_extension($request->destino); } }
/** * Executa a ação. É chamado dentro de uma instancia usando AGI. * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $asterisk->exec_goto($this->config['context'], $request->destino, 1); }
public function __construct() { parent::__construct(null, array("debug" => false, "error_handler" => false)); }
/** * Executa a ação. É chamado dentro de uma instancia usando AGI. * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $log->info("Answering and playing audio file: " . $this->config['file']); $asterisk->answer(); $asterisk->stream_file($this->config['file']); }
/** * Executa a ação. * @param Asterisk_AGI $asterisk * @param PBX_Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); if (isset($this->ask_peer) && $this->ask_peer === true) { $asterisk->answer(); $asterisk->exec("READ", "RAMAL|agent-user|10|||4"); $ramal = $asterisk->get_variable("RAMAL"); try { $ramal = PBX_Usuarios::get($ramal['data']); } catch (PBX_Exception_NotFound $ex) { throw new PBX_Exception_AuthFail("Ivalid Extension"); } $request->setSrcObj($ramal); $request->origem = $ramal->getNumero(); $asterisk->set_variable("CALLERID(all)", $ramal->getNumero()); } $senha = ""; if ((!isset($this->config['senha']) || isset($this->config['senha']) && $this->config['senha'] == "") && $request->getSrcObj() instanceof Snep_Usuario) { $senha = $request->getSrcObj()->getPassword(); } else { if (isset($this->config['senha']) && $this->config['senha'] != "") { $senha = $this->config['senha']; } else { return; } } $auth = $asterisk->exec('AUTHENTICATE', array($senha, '', strlen((string) $senha))); if ($auth['result'] == -1) { throw new PBX_Exception_AuthFail(); } }
/** * Executa a ação. * @param Asterisk_AGI $asterisk */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $i18n = $this->i18n; if (isset($this->config['origem']) && $this->config['origem']) { $log->info(sprintf($i18n->translate("Restoring source to %s"), $request->getOriginalCallerid())); $request->origem = $request->getOriginalCallerid(); $asterisk->set_callerid($request->origem); } if (isset($this->config['destino']) && $this->config['destino']) { $log->info(sprintf($i18n->translate("Restoring destination to %s"), $request->getOriginalExtension())); $request->destino = $request->getOriginalExtension(); } }
/** * Executa a ação. * @param Asterisk_AGI $asterisk * @param PBX_Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $application = $this->config['application']; $parameters = $this->config['parameters']; $log->info("Executing application: {$application}({$parameters})"); $return = $asterisk->exec($application, $parameters); if ($return['result'] == "-2") { $log->err("Failure to execute application {$application}. Returned: {$return['data']}"); } }
/** * Executa a ação. É chamado dentro de uma instancia usando AGI. * * @param Asterisk_AGI $asterisk * @param Asterisk_AGI_Request $request */ public function execute($asterisk, $request) { $log = Zend_Registry::get('log'); $trs = $this->i18n; $tronco = PBX_Trunks::get($this->config['tronco']); // Montando as Flags para limite na ligação $flags = $this->config['dial_flags']; if (isset($this->config['dial_limit']) && $this->config['dial_limit'] > 0) { $flags .= "L(" . $this->config['dial_limit']; // play_warning_value if (isset($this->defaultConfig['play_warning']) && $this->defaultConfig['play_warning'] > 0) { $flags .= ":" . $this->defaultConfig['play_warning']; // warning_freq if (isset($this->defaultConfig['warning_freq']) && $this->defaultConfig['warning_freq'] > 0) { $flags .= ":" . $this->defaultConfig['warning_freq']; } } $flags .= ")"; if (isset($this->defaultConfig['warning_sound'])) { $warning_sound = $this->defaultConfig['warning_sound'] != "" ? $this->defaultConfig['warning_sound'] : "beep"; $asterisk->set_variable("LIMIT_WARNING_FILE", $warning_sound); } } if ($tronco->getDtmfDialMode()) { $dst_number = $tronco->getDtmfDialNumber(); $flags .= "D({$request->destino})"; } else { $dst_number = $request->destino; } if ($tronco->getInterface() instanceof PBX_Asterisk_Interface_SIP_NoAuth || $tronco->getInterface() instanceof PBX_Asterisk_Interface_IAX2_NoAuth) { $destiny = $tronco->getInterface()->getTech() . "/" . $dst_number . "@" . $tronco->getInterface()->getHost(); } else { $postfix = isset($this->config['omit_kgsm']) && $this->config['omit_kgsm'] == "true" ? "/orig=restricted" : ""; $destiny = $tronco->getInterface()->getCanal() . "/" . $dst_number . $postfix; } $log->info("Dialing to {$request->destino} through trunk {$tronco->getName()}({$destiny})"); $dialstatus = $asterisk->get_variable("DIALSTATUS"); $lastdialstatus = $dialstatus['data']; if (Zend_Registry::get('outgoingNumber') !== "") { $asterisk->set_variable("CALLERID(num)", Zend_Registry::get('outgoingNumber')); } $log->debug("Dial({$destiny}, {$this->config['dial_timeout']}, {$flags})"); // ==== DIAL ==== $asterisk->exec_dial($destiny, $this->config['dial_timeout'], $flags); $dialstatus = $asterisk->get_variable("DIALSTATUS"); $log->debug("DIALSTATUS: " . $dialstatus['data']); // Enviar email de alerta. if (isset($this->config['alertEmail']) && $this->config['alertEmail'] != "") { $informations = array($trs->translate('Rule') => $this->getRule(), $trs->translate('Call Time') => date('H:i'), $trs->translate('Call Date') => date('d/m/Y'), $trs->translate('Original Source') => $request->getOriginalCallerid(), $trs->translate('Original Destination') => $request->getOriginalExtension(), $trs->translate('Source') => $request->origem, $trs->translate('Destination') => $request->destino, $trs->translate('Call status') => $dialstatus['data']); if ($lastdialstatus != "") { $lastdialaction = null; foreach ($this->getRule()->getAcoes() as $action) { if ($action == $this) { break; } $cfg = $action->getConfigArray(); if ($action instanceof DiscarTronco) { $lastdialaction = PBX_Trunks::get($cfg['tronco']); } else { if ($action instanceof DiscarRamal) { $lastdialaction = $cfg['ramal']; } } } $informations[$trs->translate("\nThere were a previous call attempt")] = ""; $informations[$trs->translate("Last call to")] = $lastdialaction; $informations[$trs->translate("Status of last call")] = $lastdialstatus; } $this->sendMailAlert(explode(",", $this->config['alertEmail']), $informations); } switch ($dialstatus['data']) { case 'ANSWER': case 'CANCEL': case 'NOANSWER': case 'BUSY': throw new PBX_Rule_Action_Exception_StopExecution("Call end"); break; default: $log->err($dialstatus['data'] . " dialing to {$request->destino} through trunk {$tronco}"); } }