Browse Source

Implementação do callback multiempresas e correções no sql

1.9
Matheo Bonucia 2 months ago
parent
commit
a9df1c8e08
  1. 89
      admin/cadCallBack.php
  2. 6
      admin/callback.php
  3. 22
      admin/funcoes.php
  4. 10
      admin/opcoes.php
  5. 5
      asterisk/var_lib_asterisk/agi-bin/callback_agi.php
  6. 5
      asterisk/var_lib_asterisk/scripts/callback-externo.php
  7. 2
      asterisk/var_lib_asterisk/scripts/callback-externo.sh
  8. 10
      projeto/base/sql/versao-1.9.0.sql

89
admin/cadCallBack.php

@ -99,59 +99,71 @@
$acao = $_GET["acao"];
$acao2 = isset($_POST["acao2"]) ? "salva" : "";
$org_id = GetOrganizacao();
require_once("opcoes.php");
/*
* Parametros necessarios para manter a pagina<EFBFBD><EFBFBD>o.
*/
$param = sprintf('&numRamal=%s&pgn=%s&bloco=%s&pg=%s', $_REQUEST['numRamal'], $_REQUEST['pgn'], $_REQUEST['bloco'], $_REQUEST['pg']);
if ($acao2 == "salva") {
try {
$id = $_POST["id"];
$tempoDesligamento = $_POST["tempo_desligamento"];
$descricao = RemoveAcentos($_POST["descricao"], true);
//$opcaoDest = trim($_POST["opcaoDest"]);
//$acaoDest = trim($_POST["acaoDest"]);
//$opcao1 = trim($_POST["opcao1"]);
//$acao1 = trim($_POST["acao1"]);
$numeros = $_POST["numeros"];
$ramalSaida = $org_id . $_POST["ramal_saida"];
function salvarAsterisk($descricao, $opcaoDest, $acaoDest, $opcao1, $acao1, $ramalSaida, $tempoDesligamento, $org_id) {
global $dbcon;
$opcaoDest = trim($_POST["opcaoDest"]);
if($opcaoDest == "ramal"){
$acaoDest = $org_id . trim($_POST["acaoDest"]);
}else {
$acaoDest = trim($_POST["acaoDest"]);
}
$to_asterisk = Acoes_asterisk($dbcon, $opcaoDest, $acaoDest);
$to_asterisk_1 = Acoes_asterisk($dbcon, $opcao1, $acao1);
$opcao1 = trim($_POST["opcao1"]);
if($opcao1 == "ramal"){
$acao1 = $org_id . trim($_POST["acao1"]);
}else {
$acao1 = trim($_POST["acao1"]);
}
pg_query($dbcon, "begin");
$try_query = "INSERT INTO pbx_callback( descricao, opcao, acao, opcao1, acao1,ramal_saida, tempo_desligamento, org_id, acao_asterisk, acao1_asterisk, ramal_saida_asterisk)
VALUES ('$descricao', '$opcaoDest', '$acaoDest', '$opcao1', '$acao1', '$ramalSaida', $tempoDesligamento, $org_id, $to_asterisk, $to_asterisk_1, $org_id$ramalSaida) RETURNING id";
$result_query = pg_query($dbcon, $try_query);
if(!$result_query){
pg_query($dbcon,"rollback");
return false;
}
$dados = pg_fetch_assoc($result_query);
$last_id = $dados["id"];
if ($acao == "inseri") {
$update_query = "UPDATE pbx_callback set id_asterisk = $org_id$last_id WHERE id = $last_id AND org_id = $org_id";
$result_query = pg_query($dbcon, $update_query);
if (ExisteRegistro($dbcon, 'pbx_callback', 'descricao', $descricao)) {
RaiseExcept('Esta descrição já esta inserida na base de dados!');
if(!$result_query){
pg_query($dbcon,"rollback");
return false;
}
$query = "INSERT INTO pbx_callback( descricao, opcao, acao, opcao1, acao1, ramal_saida, tempo_desligamento, org_id)
VALUES ('$descricao', '$opcaoDest', '$acaoDest', '$opcao1', '$acao1', '$ramalSaida', $tempoDesligamento, $org_id)";
CommandAsterisk2($dbcon, 'ORG_ID', "$org_id$last_id", $org_id);
CommandAsterisk2($dbcon, 'ORG_CALLBACK', "$org_id$last_id", "$last_id");
CommandAsterisk2($dbcon, 'TIPO', "$org_id$last_id", "CALLBACK");
CommandAsterisk2($dbcon, 'NOME_APP', "$org_id$last_id", "$descricao");
CommandAsterisk2($dbcon, 'NUMERO', "$org_id$last_id", "$org_id$last_id");
CommandAsterisk2($dbcon, 'ID_APP', "$org_id$last_id", "$last_id");
pg_query($dbcon, $query);
pg_query($dbcon,'commit');
}
$query = "select max(id) as id from pbx_callback";
$result = pg_query($dbcon, $query);
$dados = pg_fetch_array($result);
$id_ult = $dados['id'];
if ($acao2 == "salva") {
try {
$id = $_POST["id"];
$tempoDesligamento = $_POST["tempo_desligamento"];
$descricao = RemoveAcentos($_POST["descricao"], true);
$opcaoDest = trim($_POST["opcaoDest"]);
$acaoDest = trim($_POST["acaoDest"]);
$opcao1 = trim($_POST["opcao1"]);
$acao1 = trim($_POST["acao1"]);
$numeros = $_POST["numeros"];
$ramalSaida = $_POST["ramal_saida"];
if ($acao == "inseri") {
salvarAsterisk($descricao, $opcaoDest, $acaoDest, $opcao1, $acao1, $ramalSaida, $tempoDesligamento, $org_id);
} else if ($acao == "edita") {
//REALIZA BACKUP BO BANCO
//@backup($dbcon,'pbx_callback','U',$id,'update','CALLBACK');
$to_asterisk = Acoes_asterisk($dbcon, $opcaoDest, $acaoDest);
$to_asterisk_1 = Acoes_asterisk($dbcon, $opcao1, $acao1);
$query = "UPDATE pbx_callback
SET descricao = '$descricao',
opcao = '$opcaoDest',
@ -159,12 +171,17 @@
opcao1 = '$opcao1',
acao1 = '$acao1',
ramal_saida = '$ramalSaida',
tempo_desligamento = $tempoDesligamento
WHERE id = '$id' ";
tempo_desligamento = $tempoDesligamento,
id_asterisk = $org_id$id,
acao_asterisk = $to_asterisk,
acao1_asterisk = $to_asterisk_1,
ramal_saida_asterisk = $org_id$ramalSaida
WHERE id = '$id'
AND org_id = $org_id";
pg_query($dbcon, $query);
$query = "delete from pbx_callback_numeros where id_callback = '$id'";
$query = "delete from pbx_callback_numeros where id_callback = '$id' and org_id = $org_id";
pg_query($dbcon, $query);
}

6
admin/callback.php

@ -18,6 +18,10 @@ if ($acao == "deleta") {
//limpa relacionamentos do registro com outras tabelas
Ajusta_tabelas('callback', $id, $dbcon);
//Apaga o registro do sqlite3
$apagar = ['NOME_APP', 'ORG_ID', 'ORG_CALLBACK', 'TIPO', 'NUMERO','ID_APP'];
removeItemSqlite($dbcon, $apagar, $id, $org_id);
?>
<?php } ?>
@ -53,7 +57,7 @@ if ($acao == "deleta") {
$compl = sprintf("and a.descricao ilike %s ", $compl);
}
$query = "SELECT id, descricao, ramal_saida FROM pbx_callback a where 1=1 $compl order by id asc";
$query = "SELECT id, descricao, ramal_saida FROM pbx_callback a WHERE 1=1 $compl AND org_id = $org_id ORDER BY id ASC";
$params = "&pbxRequest=1&numRamal=$filtro" . (isset($_GET['pesquisa']) ? '&pesquisa=1' : '');
$links = PaginaDados($idProg, $query, $params, $regPagina, $offSet, $pagMostra, true);
$query .= " limit $regPagina offset $offSet";

22
admin/funcoes.php

@ -189,7 +189,7 @@ function GetParamAmi($tipo, $paramAdic) {
$acao["DEL_ORG_ID"] = array("action" => "command", "command" => "database del ORG_ID");
$acao["ORG_RAMAL"] = array("action" => "DBput", "Family" => "ORG_RAMAL");
$acao["DEL_ORG_RAMAL"] = array("action" => "command", "command" => "database del ORG_RAMAL");
$acao["ID"] = array("action" => "DBput", "Family" => "ID");
$acao["ID_APP"] = array("action" => "DBput", "Family" => "ID");
$acao["DEL_ID"] = array("action" => "command", "command" => "database del ID");
$acao["ORG_FILA"] = array("action" => "DBput", "Family" => "ORG_FILA");
$acao["DEL_ORG_FILA"] = array("action" => "command", "command" => "database del ORG_FILA");
@ -2407,18 +2407,18 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
$arq = $caminho_producao . "extensions_callback.conf";
$escreve = fopen($arq, 'w');
$query = "select id, descricao, opcao, acao, opcao1, acao1, ramal_saida, tempo_desligamento from pbx_callback";
$query = "select * from pbx_callback";
$result = pg_query($dbcon, $query);
fwrite($escreve, '[ext-callback-externo]' . "\n");
fwrite($escreve, 'include => ext-callback-externo-custom' . "\n");
while ($dados = pg_fetch_array($result)) {
$opcao = $dados["opcao"];
$acao = $dados["acao"];
$acao = $dados["acao_asterisk"];
$opcao1 = trim($dados["opcao1"]);
$acao1 = $dados["acao1"];
$ramalSaida = $dados["ramal_saida"];
$id = $dados["id"];
$acao1 = $dados["acao1_asterisk"];
$ramalSaida = $dados["ramal_saida_asterisk"];
$id = $dados["id_asterisk"];
$tempoDesligamento = $dados['tempo_desligamento'];
if (trim($opcao) == 'ura') {
@ -2444,7 +2444,7 @@ function gera_arquivos($dbcon, $tipo, $reload = 1, $reloadUra = 1) {
fwrite($escreve, "exten => _$id,n,Set(CONTEXTO-DESTINO=$dest)" . "\n");
fwrite($escreve, "exten => _$id,n,Set(EXTEN-DESTINO=$acao)" . "\n");
fwrite($escreve, "exten => _$id,n,Set(RAMAL-DISCAGEM=$ramalSaida)" . "\n"); // Ramal destino
fwrite($escreve, "exten => _$id,n,System(/var/lib/asterisk/scripts/callback-externo.sh \${ORIGEM} \${CONTEXTO-DESTINO} \${EXTEN-DESTINO} \${RAMAL-DISCAGEM} \${CALLERID(name)}&)" . "\n");
fwrite($escreve, "exten => _$id,n,System(/var/lib/asterisk/scripts/callback-externo.sh \${ORIGEM} \${CONTEXTO-DESTINO} \${EXTEN-DESTINO} \${RAMAL-DISCAGEM} \${CALLERID(name)}& \${ORG_ID})" . "\n");
fwrite($escreve, "exten => _$id,n,Busy($tempoDesligamento)" . "\n");
fwrite($escreve, "exten => _$id,n,Hangup()" . "\n");
@ -2993,6 +2993,12 @@ function ApagaUrl($dbcon, $ramal, $org_id) {
CommandAsterisk2($dbcon, 'DEL TEMPO-RING-RAMAL', "$org_id$ramal", '');
}
function removeItemSqlite($dbcon, $familys, $key, $org_id) {
foreach($familys as $family) {
CommandAsterisk2($dbcon, 'DEL '.$family, "$key$org_id", '');
}
}
function GetIdGrupoUser($dbcon, $idUser) {
$query = "select gp_id from pbx_grupo_usuario where user_id = '$idUser' limit 1";
$result = pg_query($dbcon, $query);
@ -3101,7 +3107,7 @@ function GeraCallback($dbcon, $reloadUra = true, $silent = 0) {
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${ISNULL(\${CDR(direcao)})}\" = \"1\"]?Set(CDR(direcao)=I))" . "\n");
fwrite($escreve, "exten => _$id,n,ExecIf($[\"\${CDR(direcao)}\" != \"E\" && \"\${ISNULL(\${CDR(ramal_origem)})}\" = \"1\"]?Set(CDR(ramal_origem)=\${CALLERID(num)}))" . "\n");
WriteFile($escreve, "exten => _$id,n,AGI(pbx_complemento.php,ext-callback-externo)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Agi(callback.php,\${CALLERID(NUM):-10})\n", $silent);
WriteFile($escreve, "exten => _$id,n,Agi(callback-agi.php,\${CALLERID(NUM):-10})\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(ORIGEM=\${CALLERID(NUM):-10})\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(CONTEXTO-DESTINO=$dest)\n", $silent);
WriteFile($escreve, "exten => _$id,n,Set(EXTEN-DESTINO=$acao)\n", $silent);

10
admin/opcoes.php

@ -66,7 +66,7 @@ function Acaogrupo_Asterisk($dbcon, $acaoDest, $org_id){
function AcaoFilas_Asterisk($dbcon, $acaoDest, $org_id){
$query = "SELECT numero FROM pbx_queues_grupos where status='A' and org_id = $1 and numero = $2";
$query = "SELECT numero_asterisk FROM pbx_queues_grupos where status='A' and org_id = $1 and numero = $2";
pg_prepare($dbcon, "filas_asterisk", $query);
$result = pg_execute( $dbcon, "filas_asterisk", array($org_id, $acaoDest));
@ -82,7 +82,7 @@ function AcaoFilas_Asterisk($dbcon, $acaoDest, $org_id){
function AcaoHorarios_Asterisk($dbcon, $acaoDest, $org_id){
$query = "SELECT distinct a.id from pbx_horarios a, pbx_horarios_itens b where a.org_id = $1 and a.org_id = b.org_id and b.id_horario = a.id and a.id = $2 order by nome asc";
$query = "SELECT distinct a.id_asterisk from pbx_horarios a, pbx_horarios_itens b where a.org_id = $1 and a.org_id = b.org_id and b.id_horario = a.id and a.id = $2 order by nome asc";
pg_prepare($dbcon, "horario_asterisk", $query);
$result = pg_execute($dbcon, "horario_asterisk", array( $org_id, $acaoDest ));
@ -97,7 +97,7 @@ function AcaoHorarios_Asterisk($dbcon, $acaoDest, $org_id){
function AcaoDisa_Asterisk($dbcon, $acaoDest, $org_id){
$query = "SELECT numero FROM pbx_disa where org_id = $1 and numero = $2";
$query = "SELECT * FROM pbx_disa where org_id = $1 and numero = $2";
pg_prepare($dbcon, "disa_asterisk", $query);
$result = pg_execute($dbcon, "disa_asterisk", array( $org_id, $acaoDest ));
@ -140,7 +140,7 @@ function AcaoConferencia_Asterisk($dbcon, $acaoDest, $org_id){
function AcaoCallback_Asterisk($dbcon, $acaoDest, $org_id){
$query = "SELECT distinct id, descricao FROM pbx_callback where org_id = $1 and id = $2 order by descricao";
$query = "SELECT distinct id_asterisk, descricao FROM pbx_callback where org_id = $1 and id = $2 order by descricao";
pg_prepare($dbcon, "callback_asterisk", $query);
$result = pg_execute($dbcon, "callback_asterisk", array( $org_id, $acaoDest ));
@ -154,7 +154,7 @@ function AcaoCallback_Asterisk($dbcon, $acaoDest, $org_id){
function Acaointegativa_Asterisk($dbcon, $acaoDest, $org_id){
$query = "select b.itgm_id as itgm_id, a.itgc_nome || '-' || b.itgm_nome as itgc_nome
$query = "select b.itgm_id_asterisk as itgm_id_asterisk, a.itgc_nome || '-' || b.itgm_nome as itgc_nome
from pbx_integracao_configuracao a, pbx_integracao_metodo b
where org_id = $1 and b.itgm_id = $2 and b.itgc_id = a.itgc_id and b.itgm_retorno = 1 order by a.itgc_nome, b.itgm_nome";
pg_prepare($dbcon, "integrativa_asterisk", $query);

5
asterisk/var_lib_asterisk/agi-bin/callback.php → asterisk/var_lib_asterisk/agi-bin/callback_agi.php

@ -39,11 +39,12 @@ while ($env = read()) {
write("GET VARIABLE ORG_ID");
$org_id = substr(strrchr(read(), "("), 1, -1);
write('DATABASE GET ORG_CALLBACK ' . $agi['extension']);
$callBackNumber = substr(strrchr(read(), "("), 1, -1);
$callback = $agi['extension'];
$numero = $argv[1];
$numeroConsulta = IncluiDDD($numero);
$query = "select count(*) as resultado from pbx_callback a inner join pbx_callback_numeros b on a.id = b.id_callback and a.org_id = b.org_id where a.id = '$callback' and '$numeroConsulta' similar to b.numero and a.org_id = $org_id";
$query = "select count(*) as resultado from pbx_callback a inner join pbx_callback_numeros b on a.id = b.id_callback and a.org_id = b.org_id where a.id = '$callBackNumber' and '$numeroConsulta' similar to b.numero and a.org_id = $org_id";
$result = pg_query($conexao, $query);
$row = @pg_fetch_row($result);

5
asterisk/var_lib_asterisk/scripts/callback-externo.php

@ -2,7 +2,7 @@
//#!/bin/bash
function cria_callback($ORIGEM, $CONTEXTO, $DESTINO, $RAMALDESTINO, $PRIORIDADE) {
function cria_callback($ORIGEM, $CONTEXTO, $DESTINO, $RAMALDESTINO, $PRIORIDADE, $ORG_ID) {
if ($CONTEXTO == "ext-voicemail") {
$PRIORIDADE = explode('|', $DESTINO)[1];
@ -36,6 +36,7 @@ function cria_callback($ORIGEM, $CONTEXTO, $DESTINO, $RAMALDESTINO, $PRIORIDADE)
. "Priority: $PRIORIDADE\n"
. "Callerid: $ORIGEM\n"
. "Set: RAMAL = $RAMALDESTINO\n"
. "Set: ORG_ID=$ORG_ID\n"
. "Set: CALLBACK = SIM\n"
. "\n";
@ -49,7 +50,7 @@ function cria_callback($ORIGEM, $CONTEXTO, $DESTINO, $RAMALDESTINO, $PRIORIDADE)
}
//sleep(10);
cria_callback($argv[1], $argv[2], $argv[3], $argv[4], 1);
cria_callback($argv[1], $argv[2], $argv[3], $argv[4], 1, $argv[6]);
exit;
/*

2
asterisk/var_lib_asterisk/scripts/callback-externo.sh

@ -7,6 +7,7 @@ CONTEXTO=$2
DESTINO=$3
RAMALDESTINO=$4
CALLERIDNAME=$5
ORG_ID=$6
PRIORIDADE=1
@ -43,6 +44,7 @@ Extension: $DESTINO
Priority: $PRIORIDADE
Callerid: "$CALLERIDNAME" <$ORIGEM>
Set: RAMAL=$RAMALDESTINO
Set: ORG_ID=$ORG_ID
Set: CALLBACK=SIM
EOF1
)

10
projeto/base/sql/versao-1.9.0.sql

@ -238,7 +238,7 @@ ALTER TABLE pbx_queues_grupos
-- Colunas para o asterisk do pbx_anuncios
ALTER TABLE pbx_anuncios
ADD COLUMN id_asterisk varchar(35) default NULL;;
ADD COLUMN id_asterisk varchar(35) default NULL;
ALTER TABLE pbx_anuncios
ADD COLUMN acao_asterisk varchar(110);
@ -250,6 +250,9 @@ ALTER table pbx_anuncios
Alter table pbx_callback
ADD COLUMN id_asterisk varchar(35) default NULL;
ALTER TABLE pbx_callback
ADD COLUMN ramal_saida_asterisk varchar(40);
Alter table pbx_callback
ADD COLUMN acao_asterisk varchar(110);
@ -264,7 +267,7 @@ Alter table pbx_disa
ADD COLUMN acao_asterisk varchar(110);
Alter table pbx_disa
ADD COLUMN ramal_saida varchar(40);
ADD COLUMN ramal_saida_asterisk varchar(40);
-- Coluna para o asterisk do pbx_rotas_entrada
Alter table pbx_rotas_entrada
@ -323,3 +326,6 @@ Alter table pbx_voicemail_usuarios
Alter table pbx_voicemail_usuarios
ADD COLUMN numero_ramal_asterisk varchar(110);
Alter table pbx_rotas_saida
ADD COLUMN id_asterisk varchar(30);
Loading…
Cancel
Save