#!/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á 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ão há 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ão há 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ão há 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