[AsteriskBrasil] Gerar Numero de Protocolo

Marcelo Terres mhterres em gmail.com
Sexta Agosto 2 17:20:43 BRT 2013


Mais simples, e sem criação de novo DB:

exten => _XXX,1,Answer
same => n,Set(PROTOCOLO=${RAND(1,10000000)})
same => n,Set(CDR(userfield)=${PROTOCOLO})
same => n,agi(googletts.agi,"Bem vindo a empresa X.",pt-BR)
same => n,agi(googletts.agi,"Seu protocolo de atendimento é",pt-BR)
same => n,SayDigits(${PROTOCOLO})
same => n,agi(googletts.agi,"Aguarde que sua ligação está sendo
transferida.",pt-BR)
same => n,Dial(SIP/${EXTEN},60,twx) ; no caso ${EXTEN}=404
same => n,Hangup

Usei o googletts.agi só para facilitar e entregar um exemplo
facilmente implementável. O uso da função RAND também teve este
objetivo. No caso sugiro a criação de um agi para gerar o número do
protocolo.

Após o término da chamada, na tabela CDR temos então o seguinte registro:

 id   |        calldate        | src | dst | userfield |    uniqueid
-------+------------------------+-----+-----+-----------+----------------
 37855 | 2013-08-02 17:10:55-03 | 407 | 404 |  5970968 | 1375474255.692


Onde 5970968 foi o número do protocolo.

[]s
Marcelo H. Terres
mhterres em gmail.com
http://mundoopensource.blogspot.com
http://biertasters.blogspot.com
http://twitter.com/mhterres


2013/8/2 Wagner <wagner em sincronismotelecom.com>:
> Vou compartilhar aqui uma solução que criei para este caso.
> Vai ficar meio grande o e-mail.
>
> =================================================================
> --Funcionamento:
>
> 1. Atender.
> 2. Áudio de atendimento.
> 3. Gerar protocolo por AGI.
> 4. Áudio de protocolo.
> 5. Falar o protocolo gerado.
> 6. Opção de repetir protocolo.
> 7. Se digitar 1 ou qualquer coisa repete o Protocolo.
> 8. Colocar o valor do protocolo no userfild.
> 9. Se esperar vai para a fila.
> 10. Desliga
> =================================================================
> --Criar tabela.
>
> 1. Criar o database e a tabela:
> CREATE DATABASE registros;
> USE registros;
> CREATE TABLE protocolos (id int(10) not null auto_increment, numero_cli
> varchar(15), data VARCHAR(20), hora VARCHAR(20), protocolo int(16) not null,
> primary key (id));
> =================================================================
> --AGI em Perl
>
> 1. Instalar bibliotecas do Perl:
> apt-get install libdbd-pg-perl
> apt-get install ghostscript libnewt-dev libsox-fmt-all linux-headers-`uname
> -r` sox
> perl -MCPAN -e 'install Asterisk::AGI'
>
> 2. Código da AGI:
>
> #!/usr/bin/perl -w
>
> use DBI();
> use Asterisk::AGI;
> $AGI = new Asterisk::AGI;
>
> # ARQUIVO DE LOG
> if(! open FILE, ">>/home/suahome/logagi.txt") {  # APONTE QUAL A SUA HOME E
> NELA CRIE O ARQUIVO logagi.txt COM PERMISSOES 775
>     die "Nao abriu o arquivo" . "\n" ;
> }
>
> $NUM = $ARGV[0]; # numero do cliente
> $DATA = $ARGV[1]; # data da discagem
> $HORA = $ARGV[2]; # hora da discagem
>
> # GERAR PROTOCOLO O NUMERO RANDOM MINIMO SERA 1000 E O MAXIMO 9999
> $RANGE = 8999;
> $MINIMUM = 1000;
>
> $RANDOM = int(rand($RANGE)) + $MINIMUM;
>
> $PROTOCOLO = $DATA . $HORA . $RANDOM;
>
> # REGISTRAR NO BANCO
> $dbh = DBI->connect("DBI:mysql:registros:localhost", "root", "suasenha*") or
> die print $DBI::errstr; # INSIRA A SENHA DO ROOT DO SEU DB
> $dbh->{RaiseError} = 1;
> $cmd = "insert into protocolos values
> ('0','$NUM','$DATA','$HORA','$PROTOCOLO')";
> $sth = $dbh->prepare($cmd);
> $sth->execute();
> $result = $sth->rows;
> $sth->finish();
> $dbh->disconnect();
>
> #RETORNANDO O NUMERO DO PROTOCOLO PARA SER ESCRITO NO USERFILD
> $AGI->set_variable('protocolo',$PROTOCOLO);
>
> # ESCREVENDO NO LOG O RESULTADO DO PROCESSO
> print FILE "NUMERO: $NUM DATA: $DATA HORA: $HORA PROTOCOLO: $PROTOCOLO" .
> "\n";
>
> # RETORNAR AO ASTERISK
> exit;
>
> 3. Coloque a AGI na pasta /var/lib/asterisk/agi-bin com permissão 777.
> =================================================================
>
> --Dialplan
>
> 1. Em AEL:
>
> context from-psnt {
>   _[2]XXX => { // COLOQUE A SUA MASCARA
> //============================================================================
> // TESTE GERAR PROTOCOLO
> //============================================================================
>         Answer();
>         Playback(audioAtendimento);
>
> AGI(gera_protocolo.pl,${CDR(src)},${STRFTIME(${EPOCH},,%Y%m%d)},${STRFTIME(${EPOCH},,%H%M)});
>         Inicio:
>         Playback(audioProtocolo);
>         NoOp(------------> ${protocolo});
>         SayDigits(${protocolo});
>         BackGround(audioRepetir);
>         WaitExten(5);
>     };
>
>     1 => { // SE O CLIENTE DISCAR 1 O PROTOCOLO SERA REPETIDO
>         goto from-pstn,2000,Inicio; // ALTERA PARA A MASCARA DO INICIO E
> PARA O SEU CONTEXT DE ENTRADA
>     };
>
>     i => { // SE O CLIENTE DISCAR ALGO DIFERENTE DE 1 O PROTOCOLO TAMBEM
> SERA REPETIDO
>         goto from-pstn,2000,Inicio; // ALTERA PARA A MASCARA DO INICIO E
> PARA O SEU CONTEXT DE ENTRADA
>     };
>
>     t => {
>         Set(CDR(userfild)=${protocolo});
>         Queue(fila1,tTwW); # COLOQUE A SUA FILA
>         Hangup();
>     };
> };
>
> 2. Áudios:
> O áudio audioAtendimento deve ter algo como "Olá cliente bem vindo a XXXX".
> O áudio audioProtocolo deve ter algo como "Seu protocolo é".
> O áudio audioRepetir deve ter algo como "Se deseja que eu repita o código
> disque 1 ou aguarde para ser atendido".
>
> 3. Saída do logagi.txt:
>
> NUMERO: 1133235550 DATA: 20130802 HORA: 1509 PROTOCOLO: 2013080215095657
> NUMERO: 11995310802 DATA: 20130802 HORA: 1514 PROTOCOLO: 2013080215146297
>
> 4. Registro no banco:
>
> +----+-------------+----------+------+------------------+
> | id | numero_cli  | data     | hora | protocolo        |
> +----+-------------+----------+------+------------------+
> |  8 | 1133235550  | 20130802 | 1509 | 2013080215095657 |
> |  9 | 11995310802 | 20130802 | 1514 | 2013080215146297 |
> +----+-------------+----------+------+------------------+
> =================================================================
>
> Em 01/08/2013 19:41, Marcio - Google escreveu:
>
> Já pensou em usar um CRM?!?!?
>
>
>
>
> [...]'s
>
> Marcio
>
> ========================================
> ########### Campanha Ajude o Marcio! ###########
> http://sosmarcio.blogspot.com.br/
> http://www.vakinha.com.br/VaquinhaP.aspx?e=195793
> ========================================
>
>
> Em 1 de agosto de 2013 16:37, Eduardo Souza <edusouza.ti em gmail.com>
> escreveu:
>>
>> Boa tarde
>>
>> Consegui realizar a seguinte forma, se alguém puder melhorar isso
>> agradeço.
>>
>> Tipo quando ligo para empresa a Ura joga para uma fila no caso do
>> callcenter, ai ele vai falar o numero do protocolo usando o UNIQUEID.
>>
>> Esse protocolo só será válido caso a ligação seja atendida caso contrário
>> ele não grava no CDR
>>
>> alguém tem sugestões de melhoras?
>>
>> [from-internal]
>>
>> exten => 900,1,SayDigits(${UNIQUEID})
>> exten => 900,6,Dial(SIP/2001/${EXTEN:2}|40|tTrwW)
>>
>>
>> Abaixo é o que ele fala para o cliente, no caso o protocolo usando o
>> uniqueid
>>
>>     -- <SIP/2000-0000000a> Playing 'digits/1.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/3.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/7.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/5.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/3.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/8.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/8.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/9.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/3.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/3.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/1.gsm' (language 'en')
>>     -- <SIP/2000-0000000a> Playing 'digits/0.gsm' (language 'en')
>>
>> _______________________________________________
>> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1;
>> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7;
>> Intercomunicadores para acesso remoto via rede IP. Conheça em
>> www.Khomp.com.
>> _______________________________________________
>> ALIGERA – Fabricante nacional de Gateways SIP-E1 para R2, ISDN e SS7.
>> Placas de 1E1, 2E1, 4E1 e 8E1 para PCI ou PCI Express.
>> Channel Bank – Appliance Asterisk - Acesse www.aligera.com.br.
>> _______________________________________________
>> Para remover seu email desta lista, basta enviar um email em branco para
>> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
>
>
>
> _______________________________________________
> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1;
> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7;
> Intercomunicadores para acesso remoto via rede IP. Conheça em www.Khomp.com.
> _______________________________________________
> ALIGERA – Fabricante nacional de Gateways SIP-E1 para R2, ISDN e SS7.
> Placas de 1E1, 2E1, 4E1 e 8E1 para PCI ou PCI Express.
> Channel Bank – Appliance Asterisk - Acesse www.aligera.com.br.
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
>
>
> --
> Wagner Mazuchi de Lima Junior
> 11 3323-5550
> wagner em sincronismotelecom.com
> www.sincronismo.com.br
> Rua Tácito de Almeida, nº 196
> 01251-010 - Pacaembu - São Paulo - SP
>
>
> _______________________________________________
> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1;
> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7;
> Intercomunicadores para acesso remoto via rede IP. Conheça em www.Khomp.com.
> _______________________________________________
> ALIGERA – Fabricante nacional de Gateways SIP-E1 para R2, ISDN e SS7.
> Placas de 1E1, 2E1, 4E1 e 8E1 para PCI ou PCI Express.
> Channel Bank – Appliance Asterisk - Acesse www.aligera.com.br.
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe em listas.asteriskbrasil.org


Mais detalhes sobre a lista de discussão AsteriskBrasil