|
|
#!/bin/bash |
|
|
|
|
|
#Funcoes |
|
|
cria_arquivo() |
|
|
{ |
|
|
ORIGEM=$1 |
|
|
CONTEXTO=$2 |
|
|
CONTEXTO_DESTINO=$3 |
|
|
DESTINO=$4 |
|
|
CAMPANHA=$5 |
|
|
ID_CLIENTE=$6 |
|
|
IDENTIFICADOR_CLI=$7 |
|
|
PRIORIDADE=1 |
|
|
|
|
|
|
|
|
CALLFILE=$(cat <<-EOF1 |
|
|
Channel: Local/$ORIGEM@$CONTEXTO |
|
|
Callerid: $ORIGEM |
|
|
MaxRetries: 0 ; Numero de Tentativas de discagem |
|
|
RetryTime: 15 ; Intervalo entre as tentativas de discagem |
|
|
WaitTime: 100 ; Tempo de Ring |
|
|
Context: $CONTEXTO_DESTINO |
|
|
Extension: $DESTINO |
|
|
Priority: $PRIORIDADE |
|
|
Set: PERMISSAO=OK |
|
|
Set: ID_CLI=$ID_CLIENTE |
|
|
Set: IDENTIFICADOR=$IDENTIFICADOR_CLI |
|
|
Set: TIPOLIGACAO=ATIVA |
|
|
Archive: Yes |
|
|
EOF1 |
|
|
) |
|
|
|
|
|
DATA=$(date +%F) |
|
|
DIR_CALL="/var/spool/asterisk/outgoing/" |
|
|
RAND=$(echo $($fortune ; w ; ps; date +%s) | cksum | cut -f 1 -d" ") |
|
|
DIR_FILE_NAME="/var/log/asterisk/" |
|
|
|
|
|
FILE_NAME=$(date +%F-%H-%M-%S)-$ORIGEM-$DESTINO-$RAND.call |
|
|
echo "$CALLFILE" >> $DIR_FILE_NAME$FILE_NAME |
|
|
chown pbx:pbx $DIR_FILE_NAME$FILE_NAME |
|
|
chmod --recursive u=rwX,g=rX,o= $DIR_FILE_NAME$FILE_NAME |
|
|
mv $DIR_FILE_NAME$FILE_NAME $DIR_CALL |
|
|
|
|
|
} |
|
|
|
|
|
#Base de dados |
|
|
HOST="127.0.0.1" |
|
|
BD="pbx" |
|
|
USUARIO="contacte" |
|
|
SENHA="ctepgSQL" |
|
|
|
|
|
#Variaveis |
|
|
CONTEXTO_DESTINO="ext-campanha" |
|
|
CAMPANHA="$1" |
|
|
ID_CAMPANHA="$2" |
|
|
CONTEXTO="$3" |
|
|
TRONCOS_PA="$4" |
|
|
|
|
|
echo "TRONCOS_PA => $TRONCOS_PA" |
|
|
|
|
|
echo "1" > /tmp/$ID_CAMPANHA.txt |
|
|
|
|
|
if [ -z "$CAMPANHA" -o -z "$ID_CAMPANHA" -o -z "$CONTEXTO" ] ; then |
|
|
echo "Faltando parametros" |
|
|
echo "parametro CAMPANHA => $CAMPANHA" |
|
|
echo "parametro ID_CAMPANHA => $ID_CAMPANHA" |
|
|
echo "parametro CONTEXTO => $CONTEXTO" |
|
|
exit |
|
|
fi |
|
|
|
|
|
# Guarda PID da campanha |
|
|
PID=$$ |
|
|
export PGPASSWORD=$SENHA |
|
|
psql -c "update pbx_campanha set cmp_pid = '$PID' where cmp_id = '$ID_CAMPANHA' " -h $HOST -d $BD -U $USUARIO |
|
|
|
|
|
while [ "TRUE" ] ; do |
|
|
|
|
|
|
|
|
while [ "TRUE" ] ; do |
|
|
#Verifica status da campanha |
|
|
export PGPASSWORD=$SENHA |
|
|
CMP_STATUS=$(psql -Atc "select count(*) from pbx_campanha where cmp_status = '1' and cmp_id = '$ID_CAMPANHA' " -h $HOST -d $BD -U $USUARIO) |
|
|
if [ "$CMP_STATUS" = "0" ]; then |
|
|
export PGPASSWORD=$SENHA |
|
|
psql -c "update pbx_campanha set cmp_pid = '0' where cmp_id = '$ID_CAMPANHA' " -h $HOST -d $BD -U $USUARIO |
|
|
exit; |
|
|
fi |
|
|
|
|
|
|
|
|
|
|
|
#Verifica se h<EFBFBD> agentes disponiveis |
|
|
export PGPASSWORD=$SENHA |
|
|
LIVRES=$(psql -Atc "select count(*) as livres from pbx_supervisor_agentes where upper(status) = upper('livre') and upper(dac) = upper('$CAMPANHA') and status_agente = '1' " -h $HOST -d $BD -U $USUARIO) |
|
|
#echo "Agentes livres === $LIVRES" |
|
|
if [ "$LIVRES" = "0" ]; then |
|
|
#sleep 2 |
|
|
echo "N<EFBFBD>o h<EFBFBD> agentes disponiveis para essa campanha!!!" |
|
|
echo "Agentes LIVRES = $LIVRES" |
|
|
break; |
|
|
fi |
|
|
|
|
|
|
|
|
export PGPASSWORD=$SENHA |
|
|
CONTATOS=$(psql -Atc "select a.cont_id,translate(a.cont_identificador,'|','-') as cont_identificador from pbx_campanha_contato a where a.cont_discado = '0' and a.cmp_id = '$ID_CAMPANHA' and a.list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') order by a.cont_peso desc , a.cont_id limit '$(($LIVRES * $TRONCOS_PA))'" -h $HOST -d $BD -U $USUARIO) |
|
|
|
|
|
#echo "$CONTATOS" |
|
|
#sleep 1 |
|
|
echo "$CONTATOS" | while read LINHA; do |
|
|
#for LINHA in $CONTATOS |
|
|
#do |
|
|
ID=$(echo "$LINHA" | cut -d "|" -f1) |
|
|
IDENTIFICADOR=$(echo "$LINHA" | cut -d "|" -f2) |
|
|
CONT=1 |
|
|
|
|
|
if [ -z "$ID" ] ; then |
|
|
echo "N<EFBFBD>o h<EFBFBD> registro para continuar com a campanha!!" |
|
|
echo "FINALIZA => $(cat /tmp/$ID_CAMPANHA.txt)" |
|
|
|
|
|
if [ "$(cat /tmp/$ID_CAMPANHA.txt)" -ge "3" ]; then |
|
|
|
|
|
AGENDADOS=$(psql -Atc "select count(*) from pbx_campanha_agendamento where cmp_id = '$ID_CAMPANHA' and agd_status = '0' " -h $HOST -d $BD -U $USUARIO) |
|
|
|
|
|
if [ "$AGENDADOS" = "0" ]; then |
|
|
export PGPASSWORD=$SENHA |
|
|
psql -Atc "update pbx_campanha set cmp_status = '5' where upper(cmp_descricao) = upper('$CAMPANHA')" -h $HOST -d $BD -U $USUARIO |
|
|
exit 1; |
|
|
else |
|
|
export PGPASSWORD=$SENHA |
|
|
psql -Atc "update pbx_campanha set cmp_status = '6' where upper(cmp_descricao) = upper('$CAMPANHA')" -h $HOST -d $BD -U $USUARIO |
|
|
exit 1; |
|
|
fi |
|
|
|
|
|
fi |
|
|
sleep 10 |
|
|
echo "Dormindo!!" |
|
|
echo "FINALIZA => $(cat /tmp/$ID_CAMPANHA.txt)" |
|
|
echo "$(($(cat /tmp/$ID_CAMPANHA.txt) + 1))" > /tmp/$ID_CAMPANHA.txt |
|
|
break; |
|
|
|
|
|
fi |
|
|
echo "1" > /tmp/$ID_CAMPANHA.txt |
|
|
export PGPASSWORD=$SENHA |
|
|
DISCANDO=$(psql -Atc "select count(*) as discando from pbx_campanha_contato_fone where cmp_id = '$ID_CAMPANHA' and conf_status_lista = 1 and upper(conf_status) in ('DISCANDO','ATENDIDA') and round(extract(epoch from age(now(),conf_data))) <= '20' and list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') " -h $HOST -d $BD -U $USUARIO) |
|
|
sleep 1 |
|
|
export PGPASSWORD=$SENHA |
|
|
#LIVRES=$(psql -Atc "select count(*) as livres from pbx_supervisor_agentes where upper(status) = upper('livre') and upper(dac) = upper('$CAMPANHA') and status_agente = '1' " -h $HOST -d $BD -U $USUARIO) |
|
|
RESULT=$(psql -Atc "select status,count(*) from pbx_supervisor_agentes where upper(status) in ('OCUPADO','PAUSA') and upper(dac) = upper('$CAMPANHA') group by status union select status,count(*) from pbx_supervisor_agentes where upper(status) in ('LIVRE') and upper(dac) = upper('$CAMPANHA') and status_agente = '1' group by status order by status" -h $HOST -d $BD -U $USUARIO) |
|
|
|
|
|
for STATUS in $RESULT |
|
|
do |
|
|
case $(echo "$STATUS" | cut -d "|" -f1) in |
|
|
LIVRES) |
|
|
LIVRES=$(echo "$STATUS" | cut -d "|" -f2) |
|
|
;; |
|
|
|
|
|
OCUPADO) |
|
|
OCUPADO=$(echo "$STATUS" | cut -d "|" -f2) |
|
|
;; |
|
|
|
|
|
PAUSA) |
|
|
PAUSA=$(echo "$STATUS" | cut -d "|" -f2) |
|
|
;; |
|
|
esac |
|
|
done |
|
|
|
|
|
echo "Chamadas Discando ==> $DISCANDO" |
|
|
echo "Agentes Livres ==> $LIVRES" |
|
|
echo "Troncos por PA ==> $TRONCOS_PA" |
|
|
|
|
|
if [ "$DISCANDO" -ge "$(($LIVRES * $TRONCOS_PA))" ]; then |
|
|
#sleep 2 |
|
|
echo "N<EFBFBD>o h<EFBFBD> agentes livres para essa campanha!!!" |
|
|
echo "Numeros Discando => $DISCANDO" |
|
|
echo "Agentes LIVRE => $LIVRES" |
|
|
echo "Agentes em PAUSA => $PAUSA" |
|
|
echo "Agentes OCUPADO => $OCUPADO" |
|
|
break; |
|
|
fi |
|
|
|
|
|
FONE=$(psql -Atc "select conf_fone from pbx_campanha_contato_fone where cont_id = '$ID' and conf_status = '0' and conf_status_lista = '1' and cmp_id = '$ID_CAMPANHA' and list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') order by conf_id limit 1" -h $HOST -d $BD -U $USUARIO) |
|
|
if [ -z "$FONE" ] ; then |
|
|
psql -c "update pbx_campanha_contato set cont_discado = '1' where cont_id = '$ID' and cmp_id = '$ID_CAMPANHA' and list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') " -h $HOST -d $BD -U $USUARIO |
|
|
|
|
|
else |
|
|
|
|
|
cria_arquivo "$FONE" "$CONTEXTO" "$CONTEXTO_DESTINO" "$ID_CAMPANHA" "$CAMPANHA" "$ID" "$IDENTIFICADOR" |
|
|
export PGPASSWORD=$SENHA |
|
|
psql -c "update pbx_campanha_contato set cont_discado = '1' where cont_id = '$ID' and cmp_id = '$ID_CAMPANHA' and list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') " -h $HOST -d $BD -U $USUARIO |
|
|
psql -c "update pbx_campanha_contato_fone set conf_callfile = '$FILE_NAME', conf_status = 'DISCANDO', conf_data = 'now()' where cont_id = '$ID' and conf_fone = '$FONE' and cmp_id = '$ID_CAMPANHA' and list_id in (select list_id from pbx_campanha_lista where cmp_id = '$ID_CAMPANHA' and list_status = '1') " -h $HOST -d $BD -U $USUARIO |
|
|
CONT=$(($CONT + 1)) |
|
|
fi |
|
|
|
|
|
done |
|
|
done |
|
|
|
|
|
done
|
|
|
|