#!/usr/bin/php -q 0, "uid" => 0, "nome_cliente" => "", "cpf_cliente" => 0, "saldo_cartao" => 0, "cli_id" => 0, "fones" => array("fone" => "", "fone1" => "", "fone2" => "")); $globais["callerid"] = GetVariavelAgi($agi, "CALLERID(num)"); $globais["uid"] = GetVariavelAgi($agi, "UNIQUEID"); $uid = $globais["uid"]; $removeFiles = array(); $log = sprintf("Callerid: %s Uid: %s", $globais["callerid"], $globais["uid"]); Grava_log($log); /* * Cria conexão para o banco de dados. */ $conStr = false; //$conStr = sprintf("host='%s' port='%s' dbname='%s' user='%s' password='%s'", '192.168.115.11', '5432', 'teste', 'contacte', 'ctepgSQL'); /* * Se a configuração não foi definida manualmente retorna a configuração padrão. */ if ($conStr === false) { $conStr = GetDefStrDb(); } /* * Inicia a conexão com banco de dados. */ $conn = pg_connect($conStr); //if($conn) Grava_log('Banco conectado.'); else Grava_log('Banco não conectado.'); /* * Quando o cliente entra na ura verificamos se o telefone já esta cadastrado. */ $cliCad = GetCadastroFone(); $fileSauda = "saudacao" . $uid; $agi->answer(); $saudacao = RemoveEspaco(Sauda()); if ($cliCad) { /* * O cliente foi localizado pelo número do telefone, então é apresentado uma saudação de boas vindas * personalizada. O arquivo é gerado e armazenado posteriormente será utilizado. */ $textaudio = sprintf("%s senhor \"%s\", bem vindo a Simples Ipê , escolha uma das opções apresentadas a seguir. ", Sauda(), $globais["nome_cliente"]); $audio = sprintf("%s_%s_%s_%s", "opcoes_clicad", $saudacao, $globais["cli_id"], $uid); $finish = true; Grava_log("Cliente encontrado Audio: $audio Txt: $textaudio"); } else { /* * O cliente não possui cadastro. Pede para informar o cpf caso seja cliente ou indicar uma opeção. */ $finish = false; $infinite = 0; $txt = ''; $nomeAudio = ''; $timeout = 6000; $maxDigit = 11; while (!$finish) { $infinite++; $digits = SolicitaCpf($agi, $txt, $nomeAudio, $timeout, $maxDigit); if ($digits == 9) { $audio = "redir_atendimetno_$uid"; $textoConctAudio = "Obrigado por utilizar nossa central de serviços\, em instantes você será redirecionado para um dos nossos atendentes."; $audio = GetAudioText($textoConctAudio, $audio); $agi->stream_file($audio); $agi->exec("Queue", "simples"); $finish = true; } else { if (!$digits) { $finish = false; $audio = "cpf_invalido_$uid"; $textoConctAudio = "O número informado é inválido ou não consta em nosso cadastro. Por favor após o sinal digite pausadamente seu cpf"; $audio = GetAudioText($textoConctAudio, $audio); $agi->stream_file($audio); $txt = 'beep'; $nomeAudio = "beep"; } else { if (GetCadastroCpf($digits)) { $finish = true; $audio = "cpf_encontrado_$uid"; $textoConctAudio = sprintf("%s senhor %s se você deseja associar este número de telefone ao seu cadastro digite um ou aguarde para ouvir as opções de atendimento.", Sauda(), $globais["nome_cliente"]); $audio = GetAudioText($textoConctAudio, $audio); $ret = $agi->get_data($audio, 3000, 1); $digit = $ret["result"]; if ($digit == '1') AssociaFone($agi); $textaudio = ''; $audio = sprintf("%s_%s_%s_%s", "opcoes_clicad", $saudacao, $globais["cli_id"], $uid); } else { $finish = false; $audio = "cpf_invalido_$uid"; $textoConctAudio = "O número informado é inválido ou não consta em nosso cadastro. Por favor após o sinal digite pausadamente seu cpf"; $audio = GetAudioText($textoConctAudio, $audio); $agi->stream_file($audio); $txt = 'beep'; $nomeAudio = "beep"; } } } if ($infinite >= 9) break; } } if ($finish) { MenuAtendimento($agi, $textaudio, $audio); } $agi->hangup(); $agi = null; ApagaArquivos(); Grava_log('Opeeração finalizado', 1); exit(0); /* ----------------------------------------------------Funcoes do arquivo---------------------------------------------------- */ function Grava_log($log, $force = 0) { if (!$force) return true; global $nomeApl, $tempo; $stdlog = fopen("/var/lib/asterisk/scripts/uraativa/$nomeApl.log", "a"); $log = (trim($log) . " Tempo de execução: " . (time() - $tempo) . " Data Atual: " . date('Y-m-d H:i:s-z')); $tempo = time(); //if(!$stdlog)$stdlog = fopen("/var/lib/asterisk/scripts/uraativa/$nomeApl.log", "a"); fputs($stdlog, "Log: $log\n"); fclose($stdlog); } function GetVariableCmd() { global $argv; if (!isset($argv[3])) return; $params = explode('@', $argv[3]); foreach ($params as $param) { if (trim($param) != '') { $var = explode('#', $param); $varName = trim($var[0]); if ($varName) { $varValue = trim($var[1]); $GLOBALS[$varName] = $varValue; } } } } function Sauda($caixa = 'l', $cType = "f") { $hora = (int) date('H'); if (($hora >= 6) && ($hora < 12)) $sauda = "bom dia"; else if (($hora >= 12) && ($hora < 18)) $sauda = "boa tarde"; else $sauda = "boa noite"; if ($caixa == 'U') { $sauda = strtoupper($sauda); } if ($caixa == 'C') { $sauda = $cType == "f" ? ucfirst($sauda) : ucwords($sauda); } return $sauda; } function GetAudio($txtAudio, $fileName) { global $removeFiles; $audio = DIR_BASE_AUDIO . $fileName; $removeFiles[] = $audio; $txtAudio = str_replace('"', '\"', $txtAudio); $txtAudio = str_replace("\n", "", $txtAudio); $cmd = sprintf("%s \"%s\" %s", TTS_EXE, $txtAudio, $audio); exec($cmd, $ret, $result); $audio .= AUDIO_EXTENSAO; return file_exists($audio) ? $fileName : false; } function GetCadastroFone() { global $globais; $fone = $globais["callerid"]; $query = "select cli_id, cpf, nome, saldo_cartao, fone, fone1, fone2 from clientes where '$fone' in(fone, fone1, fone2)"; $result = pg_query($query); if (!pg_num_rows($result)) { return false; } else { $dados = pg_fetch_array($result); $globais["cli_id"] = $dados["cli_id"]; $globais["cpf_cliente"] = $dados["cpf"]; $globais["nome_cliente"] = $dados["nome"]; $globais["saldo_cartao"] = $dados["saldo_cartao"]; $globais["fones"] = array("fone" => $dados["fone"], "fone1" => $dados["fone1"], "fone2" => $dados["fone2"]); return true; } } function GetCadastroCpf($cpf) { global $globais; $fone = $globais["callerid"]; $query = "select cli_id, cpf, nome, saldo_cartao, fone, fone1, fone2 from clientes where cpf = '$cpf' "; $result = pg_query($query); if (!pg_num_rows($result)) { return false; } else { $dados = pg_fetch_array($result); $globais["cli_id"] = $dados["cli_id"]; $globais["cpf_cliente"] = $dados["cpf"]; $globais["nome_cliente"] = $dados["nome"]; $globais["saldo_cartao"] = $dados["saldo_cartao"]; $globais["fones"] = array("fone" => $dados["fone"], "fone1" => $dados["fone1"], "fone2" => $dados["fone2"]); return true; } } function GetAudioText($textoConctAudio, $nomeAudio) { $audio = DIR_BASE_AUDIO . $nomeAudio . AUDIO_EXTENSAO; if (file_exists($audio)) { return $nomeAudio; } else { return GetAudio($textoConctAudio, $nomeAudio); } } function GetMenuAtendimento($textoConctAudio = '', $nomeAudio = '') { $audio = DIR_BASE_AUDIO . (!$nomeAudio ? "menu_atendimento_simples" : $nomeAudio) . AUDIO_EXTENSAO; $menu = !$textoConctAudio ? '' : trim($textoConctAudio); $menu .= "Abrir um chamado para reparo técnico digite 1.Agendar uma visita digite 2.Se você quer saber seu saldo do cartão fidelidade digite 3.Cancelar o seu contrato digite 4.Fazer um elogio sugestão ou reclamação digite 5.Conhecer nossas ofertas e promoções digite 6.Falar com um de nossos atendentes digite 9.E caso queira ouvir novamente este menu digite 0."; if (file_exists($audio)) { return $nomeAudio; } else { return GetAudio($menu, $nomeAudio); } } function GetOption($audio, $maxDigits = 1, $timeout = 2) { $numDigit = 0; while ($count < $maxDigits) { $dtmf = $agi->get_data($audio, $maxDigits, $timeout); if ($dtmf["result"] > 3) { $agi->stream_file("invalid-opt"); $count++; continue; } } } function MenuAtendimento($agi, $textaudio, $audio) { global $uid; Grava_log("Menu Atendimento Audio: $audio Txt: $textaudio"); $fim = 0; $repete = true; $invalido = 0; $valido = array('1', '2', '3', '4', '5', '6', '9', '0'); $txtInvalido = ''; while (!$fim) { if ($repete) { $repete = false; $audio = GetMenuAtendimento($textaudio, $audio); $ret = $agi->get_data($audio, 3000, 1); $digit = $ret["result"]; } if ($invalido) { $invalido = false; $nomeAudio = "opcao_menu_invalido"; $nomeAudio = GetAudioText($txtInvalido, $nomeAudio); $ret = $agi->stream_file($nomeAudio); $nomeAudio = "beep"; $ret = $agi->get_data($nomeAudio, 3000, 1); $digit = $ret["result"]; Grava_log("Menu Atendimento Invalido: " . print_r($ret, true) . " Digito: $digit"); } if (!$invalido) { if (array_search($digit, $valido) !== false) { Grava_log("Menu Atendimento Escolhe: $digit"); if ($digit == '0') { $repete = true; continue; } else if ($digit == '1') $txt = "Você selecionou abrir um chamado."; else if ($digit == '2') $txt = "Você selecionou agendar uma visita."; else if ($digit == '3') $txt = "Você selecionou Consulta de saldo."; else if ($digit == '4') $txt = "Você selecionou cancelar contrato."; else if ($digit == '5') $txt = "Você selecionou fazer um elogio reclamação ou sugestão."; else if ($digit == '6') $txt = "Você selecionou ouvir nossas ofertas."; else if ($digit == '9') $txt = "Você selecionou redirecionar para nossos atendentes."; Grava_log("Menu Atendimento Escolhe: $digit Txt: $txt"); $txt = $txt . "Esta é uma pequena demosntração das inúmeras possibilidades de integração que este aplicativo possibilita, obrigado por participar"; $nomeAudio = "agradecimento_demo_$uid"; $nomeAudio = GetAudioText($txt, $nomeAudio); Grava_log("Menu Atendimento Escolhe: $digit Txt comp: $txt"); $agi->stream_file($nomeAudio); return; } $txtInvalido = "Opção inválida após o bípe entre com outra opção ou pressione zero para ouvir o menu"; $invalido = true; } } } function SolicitaCpf($agi, $txt = '', $nomeAudio = '', $timeout = 3000, $maxDigit = 11) { global $saudacao; $textaudio = $txt ? $txt : sprintf("%s, bem vindo a Simples Ipê, não encontramos o seu telefone em nosso cadastro\, se você já é nosso cliente digite o número de seu cpf ou digite 9 para falar com um de nossos atendentes.", Sauda()); $audio = $nomeAudio ? $nomeAudio : sprintf("%s_%s", "opcoes_clicad", $saudacao); $audio = GetAudioText($textaudio, $audio); $ret = $agi->get_data($audio, $timeout, $maxDigit); return _soNumero($ret["result"]); } function AssociaFone($agi) { global $globais, $uid; $fone = $globais["callerid"]; $fones = $globais["fones"]; $query = ""; foreach ($fones as $key => $value) { $value = trim($value); if (empty($value)) { $query = sprintf("update clientes set %s = '%s' where cli_id = '%s'", $key, $fone, $globais['cli_id']); Grava_log("AssociaFone: $query"); break; } } if (empty($query)) $query = sprintf("update clientes set %s = '%s' where cli_id = '%s'", "fone2", $fone, $globais['cli_id']); pg_query($query); $audio = "fone_incluido_$uid"; $textoConctAudio = "Senhor %s este telefone foi associado ao seu cadastro este procedimento irá agilizar o seu atendimento na próxima vez em que nos ligar. A seguir você será redirecionado para o menu de atendimento."; $textoConctAudio = sprintf($textoConctAudio, $globais['nome_cliente']); $audio = GetAudioText($textoConctAudio, $audio); $agi->stream_file($audio); } function ApagaArquivos() { global $removeFiles; foreach ($removeFiles as $file) { $file = trim($file) . AUDIO_EXTENSAO; @unlink($file); } } function signal_handler($signal) { Grava_log("signal_handler", 1); ApagaArquivos(); exit(0); } ?>