#!/usr/bin/php -q * * * * Mar. 2008 * ******************************************************************/ /** * nao deixar esse script rodar por mais do que 60 segundos */ set_time_limit(60); /** * desabilita a saida do buffer */ ob_implicit_flush(false); /** * desabilita as mensagens de erro */ error_reporting(0); /** * definicao das variaveis de controle (stdin,stout,stderr) */ if (!defined('STDIN')) { define('STDIN', fopen('php://stdin', 'r')); } if (!defined('STDOUT')) { define('STDOUT', fopen('php://stdout', 'w')); } if (!defined('STDERR')) { define('STDERR', fopen('php://stderr', 'w')); } /** * definacao do arquivo de log */ if (!defined('STDLOG')) { define('STDLOG', fopen("/var/log/asterisk/my_agi.log", "a")); } /** * habilita ou nao o debug */ if (!defined('DEBUG')) { define ('DEBUG', true); } /** * habilita ou nao a gravacao no arquivo de log */ if (!defined('SAVELOG')) { define ('SAVELOG', false); } /** * write_console() * funcao para escrever mensagens na cli * usado para debug * * exemplo write_console("Discando para SIP/1234"); * @param string $STR_MESSAGE String a ser impressa na tela * @param integer $VBL Valor para o verbose * @return void */ function write_console($STR_MESSAGE, $VBL = 1) { $STR_MESSAGE = str_replace("\\", "\\\\", $STR_MESSAGE); $STR_MESSAGE = str_replace("\"", "\\\"", $STR_MESSAGE); $STR_MESSAGE = str_replace("\n", "\\n", $STR_MESSAGE); fwrite(STDOUT, "VERBOSE \"$STR_MESSAGE\" $VBL\n"); fflush(STDOUT); fgets(STDIN, 1024); } /** * exec_command() * funcao para executar comandos * * exemplo exec_command("EXEC DIAL","SIP/12345"); * @param string $STR_CMD Comando a ser executado * @param string $STR_PARAM Parametros do comando * @return void */ function exec_command($STR_CMD, $STR_PARAM) { if (DEBUG) { write_console("--> cmd $STR_CMD $STR_PARAM"); } //LOG fwrite(STDLOG, date("M d")." ".date("h:i:s")." -- agi.php -- COMANDO --> $STR_CMD $STR_PARAM \n"); $COMMAND = "$STR_CMD \"$STR_PARAM\" \n"; fwrite(STDOUT, "$COMMAND"); fflush(STDOUT); } /** * get_result() * funcao para tratar o resultado da * funcao exec_command() * * exemplo exec_command("GET VARIABLE", "UNIQUEID"); * $UNIQUEID = get_result(); * $UNIQUEID['code'] - $UNIQUEID['result'] - $UNIQUEID['data'] * @return mixed array 'code' 'result' 'data' or int 0 -1 */ function get_result() { $DATA = fgets(STDIN, 4096); fwrite(STDLOG, $DATA. "\n"); fwrite(STDLOG, "-------------------------\n"); if (preg_match("/^([0-9]{1,3}) (.*)/", $DATA, $MATCHES)) { if (preg_match('/^result=([0-9a-zA-Z]*)( ?\((.*)\))?$/', $MATCHES[2], $MATCH)) { $ARR['code'] = $MATCHES[1]; $ARR['result'] = $MATCH[1]; if (isset($MATCH[3]) && $MATCH[3]) { $ARR['data'] = $MATCH[3]; } if (DEBUG) { write_console("=================================================="); write_console("RET CODE: " . $ARR['code']); write_console("RET Value: " . $ARR['result']); if ($ARR['data']) { write_console("RET DATA: " . $ARR['data']); } write_console("=================================================="); } return $ARR; } else return 0; } else return -1; } /** * captura todas as variaveis AGI vindas do asterisk * e salva na variavel $AGI do tipo arrays */ while (!feof(STDIN)) { $TEMP = trim(fgets(STDIN, 4096)); if (($TEMP == "") || ($TEMP == "\n")) { break; } $SPLIT = split(":", $TEMP); $NAME = str_replace("agi_", "", $SPLIT[0]); $AGI[$NAME] = trim($SPLIT[1]); } /** * escreve na tela todas as variaveis do AGI * para proposito de DEBUG */ if (DEBUG) { write_console(" Asterisk A G I Variables "); write_console("=================================================="); foreach($AGI as $KEY => $VALUE) { write_console("-- agi_$KEY = $VALUE"); } write_console("=================================================="); } // Origem e Desitno $EXTEN = $AGI['extension']; $CALLERID = $AGI['callerid']; // ######################## $SALDO = 10.00; $TRUNK = "SIP"; $BILHETAGEM = 15; //a cada XX segundos $CARD_1 = 0.12; $CARD_2 = 0.23; // ######################## if ($EXTEN == "8212") { $USE_TRUNK = "$TRUNK"; $CARD = min($CARD_1, $CARD_2); $TIME = ((($BILHETAGEM * $SALDO) / $CARD) * 1000); write_console("=============SEU SALDO E DE R$ $SALDO=============="); write_console("=============A COBRACA SERA A CADA $BILHETAGEM seg=========="); write_console("=============A TAXA DE COBRANCA SERA DE R$ $CARD==="); write_console("=============TEMPO TOTAL DA LIGACAO $TIME ms======="); } // Executa a funcao exec_command exec_command("GET VARIABLE", "UNIQUEID"); $UNIQUEID = get_result(); $UNIQUEID = "code - " . $UNIQUEID['code'] . " :: result - " . $UNIQUEID['result'] . " :: data - " . $UNIQUEID['data']; exec_command("EXEC DIAL", "$TRUNK/$EXTEN|60|HRrL($TIME:61000:30000)|Ss"); get_result(); exec_command("GET VARIABLE", "ANSWEREDTIME"); $ANSWEREDTIME = get_result(); $TEMPO_FALADO = $ANSWEREDTIME['data']; $ANSWEREDTIME = "code - " . $ANSWEREDTIME['code'] . " :: result - " . $ANSWEREDTIME['result'] . " :: data - " . $ANSWEREDTIME['data']; write_console("=======Variavel UNIQUEID vale: $UNIQUEID==========="); write_console("=======Variavel ANSWEREDTIME vale: $ANSWEREDTIME==========="); // NAO SEI SE ESTA CERTO.... // / Verificacao do saldo restante // Verifica se o tempo falado eh maior do que o tempo da bilhetagem $RES_TEMPO_FALADO = ceil(($TEMPO_FALADO / $BILHETAGEM)); if (($RES_TEMPO_FALADO == 1)) { $SALDO_RES = ($SALDO - $CARD); write_console("==$TEMPO_FALADO===MENOR====$SALDO_RES=============="); } else { $SALDO_RES = ($SALDO - ($RES_TEMPO_FALADO * $CARD)); write_console("==$TEMPO_FALADO===MAIOR====$SALDO_RES=============="); } write_console("=============SEU SALDO AGORA E DE R$ $SALDO_RES===="); exec_command("GET VARIABLE", "DIALSTATUS"); $DIALSTATUS = get_result(); $DIALSTATUS = "code - " . $DIALSTATUS['code'] . " :: result - " . $DIALSTATUS['result'] . " :: data - " . $DIALSTATUS['data']; exec_command("SET VARIABLE TESTE", "JUA"); get_result(); exec_command("GET VARIABLE", "TESTE"); $VARTESTE = get_result(); $VARTESTE = "code - " . $VARTESTE['code'] . " :: result - " . $VARTESTE['result'] . " :: data - " . $VARTESTE['data']; ?>