Пример #1
0
 /**
  * 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}");
     }
 }
Пример #3
0
 /**
  * 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();
     }
 }
Пример #4
0
 /**
  * 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);
     }
 }
Пример #5
0
 /**
  * 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);
 }
Пример #6
0
 public function __construct()
 {
     parent::__construct(null, array("debug" => false, "error_handler" => false));
 }
Пример #7
0
 /**
  * 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']);
 }
Пример #8
0
 /**
  * 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();
     }
 }
Пример #9
0
 /**
  * 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();
     }
 }
Пример #10
0
 /**
  * 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']}");
     }
 }
Пример #11
0
 /**
  * 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}");
     }
 }