Projeto Integrador: convergência de telefonia com Asterisk

De MediaWiki do Campus São José
Ir para: navegação, pesquisa

Alunos: Greicili dos Santos Ferreira e João Pedro Menegali Salvan Bitencourt.
Curso: Integrado de Telecomunicações
Turma: 6080821
Professores: Ederson Torresini e Jorge Henrique B. Casagrande

INTRODUÇÃO

        O presente trabalho foi desenvolvido pelos alunos da 8ª fase do curso integrado de Telecomunicações do Instituto Federal de Santa Catarina - Campus São José, com o intuito de ajudar as pessoas que desejam aprender a criar uma central telefônica virtual por meio do Asterisk. Com esse software é possível implementar inúmeras funcionalidades. Nesse trabalho ensinaremos a configurar algumas dessas funcionalidades, são elas: transferência de chamadas, captura de chamadas, ligação entre ramais, URA (unidade de resposta audível), voicemail com gravação sendo enviada por email e DAC (distribuição automática de chamadas). Como tivemos muita dificuldade de compreender as configurações disponíveis na Internet, decidimos compartilhar nosso projeto e orientar, de maneira mais explicativa, como configurar a central Asterisk.
        Esse projeto foi concebido para desenvolver o espírito empreendedor dos alunos e estimulá-los a pensar soluções para demandas existentes no mercado. Então a ideia foi criar um produto que pudesse ser oferecido para certas empresas. Escolhemos elaborar uma central telefônica utilizando o Asterisk. As vantagens do nosso produto são: o Asterisk é um software livre, economia na conta de telefone, não precisar de uma central física ocupando espaço, não é necessário fazer cabeamento, pode criar quantos ramais forem necessário, possui muitas funcionalidades, comunicação através da Internet (VOIP), versatilidade de poder usar no celular e no computador, etc.
        Criamos uma empresa fictícia para o projeto Integrador, a Merkki (acesso restrito aos computadores do IFSC câmpus São José).

INSTALAÇÃO

Optamos em utilizar a distribuição Debian 8 (Jessie) no projeto, então os comandos a seguir são para distribuições LINUX.
Primeiramente, abra um terminal como root. Os comandos para instalar o Asterisk são:

apt-get install update → Comando que atualiza os repositórios do sistema.
apt-get install asterisk → Comando para instalar o Asterisk.

Agora temos o Asterisk! Podemos encontrar seus arquivos de configurações em /etc/asterisk.
Em seguida, precisamos instalar um correio eletrônico (Postfix) para que possamos enviar mensagens de áudio gravadas na caixa postal de um ramal para o e-mail do dono desse ramal (será falado mais sobre isso quando chegarmos no voicemail). Os comandos são:

apt-get install postfix → Instalar o correio eletrônico.

Aparecerá uma informação na tela que você precisará responder.

- opção: local only
- nome: merkki.com.br → merkki é o nome da nossa empresa fictícia criada no projeto Integrador. Você pode colocar o que quiser nesse campo.

Agora você terá que ir no arquivo main.cf que se encontra no /etc/postfix. Lá você irá adicionar o caractere “#” nas seguintes linhas:

#default_transport = error
#relay_transport = error

Salve o arquivo e, em seguida, digite os seguintes comandos:

service postfix restart → habilita suas configurações.
journalctl -l -u postfix → mostra o status do postfix (logs do sistema).

Instalaremos também um softphone para podermos nos conectar à central. Utilizamos o Jitsi para os computadores e o Zoiper para os celulares (possui versões para Iphone, Android e Windows Phone). Descobrimos, mais tarde, que existe o Jitsi para android, porém ele está na versão instável.

apt-get install jitsi → Instalação no Computador.

CONCEITOS BÁSICOS


Vamos agora olhar os arquivos de configuração do Asterisk. Vá para /etc/asterisk. Usando o comando ls , veremos todos os arquivos presentes no Asterisk. Os utilizados por nós foram:

  • sip.conf
  • extensions.conf
  • features.conf
  • queues.conf
  • agents.conf
  • voicemail.conf
  • confbridge.conf

Mostraremos o conteúdo destes arquivos e o auxiliaremos na configuração deles. Veremos cada um deles a seguir.

ARQUIVO: sip.conf

Neste arquivo criaremos os ramais, definiremos os codecs, as senhas dos usuários, os grupos, etc.
Exemplo:

1-  [general]
    allowguest=no
    srvlookup=no
    canreinvite =no
    dtmfmode=rfc2833
    ;
2-  [ramal-voip](!)
3-  type=friend 
4-  context=INTERNO 
5-  host=dynamic 
6-  allow=all
    qualify=yes 
7-  videosupport=yes
    textsupport=yes
    nat=yes
8-  bindport=6969
    ;
9-  [100](ramal-voip) 
10- secret=senha100
11- callerid="100" <100>
12- videosupport=yes 
13- Call-limit=1 
    ;
    [101](ramal-voip)
    secret=senha101
    callerid="101" <101>
    videosupport=yes
    call-limit=1

Legenda:
1- Tudo o que se encontra entre colchetes é o contexto, é por meio dele que criamos e configuramos os grupos. Neste caso, o “general” indica que todas as configurações que se encontra abaixo dele serve para todos os ramais.
2- Grupo de ramais VoIP: Colocamos o nome do grupo dentro do colchetes e definimos configurações específicas que serão aplicadas apenas nos ramais desse grupo.
3- Configura a classe de conexão:

friend: pode tanto receber como efetuar ligações;
peer: só recebe chamadas;
user: só faz chamadas.

4- Esse contexto será utilizado em outros arquivos do Asterisk. Então é necessário especificá-lo para que os outros recursos do Asterisk encaminhe os ramais desse grupo para as funções desejadas. Mais adiante, retomarei este conceito para que fique mais claro.
5- Atribui IP aos ramais automaticamente. Opção Dynamic é a mais usada.
6- Allow: Permite que um determinado codec seja usado. Neste caso, estamos permitindo todos os tipos.
7- Essa configuração permite ter videoconferência. Porém, alguns softphones não suportam videoconferência.
8- Porta que o Asterisk deve esperar por conexões de entrada SIP. O padrão é 5060.
9- Ramal 100 do grupo ramal-voip.
10- Essa é a senha utilizada para se cadastrar na central pelo seu softphone.
11- Aqui você coloca o nome do usuário do ramal para que a pessoa chamada saiba quem está ligando. Ex: callerid="Maria" <100> → Aparecerá o nome Maria no ramal de destino.
12- Como mencionado antes, para ter videoconferência, é necessário que todos os ramais tenham essa configuração.
13- Número máximo de “canais” simultâneos para um mesmo ramal. Nesse caso, quando uma pessoa estiver em ligação e alguém ligar para ela, será informado que a pessoa está ocupada.


Acesse o console do Asterisk digitando o seguinte comando no terminal: rasterisk. Agora que você está no console, digite: reload. Isso fará com que as configurações que você fez nos arquivos sejam habilitadas no Asterisk. Sempre que você alterar algo nos arquivos do Asterisk, repita esse processo. Para sair do console, é só digitar: exit.


ARQUIVO: extensions.conf

Neste arquivo será atribuído aos ramais o plano de discagem, ou seja, o que cada ramal poderá ter e fazer.
Algumas observações: você verá com frequência no arquivo o uso do caractere “;” (ponto e vírgula), tudo o que vier depois deste, na mesma linha, não será utilizado, ou seja, será apenas um comentário.
As extensões são responsáveis por disparar um evento no Asterisk, determinando o fluxo das chamadas. No arquivo de configuração, possuem basicamente o seguinte formato:


exten=> número (nome), prioridade, aplicação


Cuidado com as prioridades! Tem que ser sequencial. Para evitar erros, o bom é utilizar a letra “n” (next).
Ex:

exten => 100, 1, Dial (SIP/100,30)
exten => 100, n,VoiceMail(100)
exten => 100, n, Hangup()

A letra “n” segue a ordem imposta por você no arquivo, mas é preciso começar com a prioridade “1”. Se você fizer como o modo abaixo, não funcionará.
Ex:

exten => 100, n,Dial (SIP/100,30)
exten => 100, n,VoiceMail(100)
exten => 100, n, Hangup()

A seguir mostraremos um exemplo de arquivo de configuração "extensions.conf".

   [general]
   ;
1- [INTERNO] 
   ;
   ; RAMAL 100
   ;
2- exten => 100,1,Dial(SIP/${EXTEN},35,tT) 
3- exten => 100,2,VoiceMail(100) 
4- exten => 100,3,Hangup()
   ;
   ; RAMAL 101
   ;
5- exten => 101,1,Dial(SIP/101,30)
   exten => 101,2,VoiceMail(101)
   exten => 101,3,Hangup()

Legenda:
1- Lembra do contexto que falei? Cuidado com isso! O que você colocar lá no arquivo sip.conf tem que aparecer aqui da mesma forma! Lá estava em maiúsculo e aqui também.
2- Nessa linha configuramos para que esse ramal tenha a função transferência de chamada.

Dial: Faz uma chamada;
SIP/${EXTEN}: É a sua extensão (número do seu ramal). É vantajoso utilizar o ${EXTEN} para não ter que, em cada ramal, digitar o número da sua extensão. Como podemos ver no plano de discagem do ramal 101, se tivéssemos que numerar todos os ramais dessa forma, seria uma tarefa bem cansativa;
35: é o tempo para transferir a ligação, em segundos;
t: habilita a transferência para o lado destino da chamada;
T: habilita a transferência para o lado originador da chamada.

3- Atribui um correio de voz a esse ramal, mas é necessário ainda configurar o arquivo voicemail.conf para funcionar.
4- Hangup: Encerra a chamada.
5- Neste caso, o ramal só faz chamada (Dial), mas não tem a possibilidade de transferir chamadas, pois não tem “ tT ”.

30: É o tempo máximo que o telefone pode chamar/tocar.

Até aqui, você tem apenas os ramais configurados que serão utilizados pelos usuários. Agora vamos para as funções. No próximo arquivo faremos a configuração da transferência de chamadas. Já configuramos para os ramais, falta só habilitar essa função para que eles possam utilizá-la.


ARQUIVO: features.conf

Vamos agora configurar a função de transferência de chamadas. Temos dois tipos de transferência: Transferência cega e Assistida.

  • Transferência cega: É quando o usuário só transfere a ligação e não há interação. Para configurar, basta localizar no arquivo a seguinte informação “blindxfer”. Neste local, você colocará o dígito de sua preferência para que seja indicado que você quer transferir a chamada. O padrão é o caractere “#”. Então, quando você estiver ao telefone com alguém e deseja transferir a ligação, basta pressionar # e digitar o ramal para onde você quer encaminhar a ligação.
  • Transferência Assistida: Quando há interação com o usuário que vai receber a ligação. Se configura essa transferência no “atxfer”. Neste caso, você pode também escolhe o caractere. O padrão utilizado é “ *2 ”.

No features.conf configuramos também a captura de chamadas. Para isso, temos que indicar um caractere no pickupexten. O padrão utilizado é “ *8 ”. Esse recurso é utilizado quando se quer atender o telefone de um ramal que está tocando sem que haja alguém para atender. Para a função de captura funcionar temos que configurar o extension.conf e o sip.conf.
Exemplo de arquivo features.conf:

   [general]
   ;
1- pickupexten = *8
   pickupsound = beep
   pickupfailsound = beeperr
   ;
   transferdigittimeout => 3
   xfersound = beep
   xferfailsound = beeperr
   atxfernoanswertimeout = 15
   atxferloopdelay = 10
   atxfercallbackretries = 2
   atxferdropcall = no
   ;
   [featuremap]
2- blindxfer => # 
   disconnect => *0
   automon => *1
3- atxfer => *2 

Legenda:
1- Captura de chamadas.
2- Transferência cega.
3- Transferência assistida.


Agora voltaremos para o sip.conf para configurar a captura de chamadas. Nesse arquivo vamos estabelecer quais ramais farão parte do mesmo grupo de captura de chamadas. Com isso, só ramais do mesmo grupo podem capturar chamadas entre eles. Precisaremos colocar as seguintes informações:

callgroup = xx → aqui você coloca um número para indicar o grupo.
pickupgroup = xx → aqui utilize o mesmo número.

No arquivo sip.conf, colocar nos ramais desejados as informações acima. Perceba, no exemplo abaixo, que os ramais pertencem a um mesmo grupo.

[100](ramal-voip)
secret=senha100
callerid="100" <100>
videosupport=yes
callgroup=1
pickupgroup=1
;
[101](ramal-voip)
secret=senha101
callerid="101" <101>
videosupport=yes
callgroup=1
pickupgroup=1

Após isso, iremos para o arquivo extensions.conf e colocaremos a seguinte aplicação: PickUp.

   ; RAMAL 100
   ;
   exten => 100,1,Dial(SIP/${EXTEN},35,tT)
1- exten => 100,2,Pickup(${EXTEN},10,@INTERNO)
   exten => 100,n,VoiceMail(100)
   exten => 100,n,Hangup()
   ;
   ; RAMAL 101
   ;
   exten => 101,1,Dial(SIP/${EXTEN},35,tT)
   exten => 101,2,Pickup(${EXTEN},10,@INTERNO)
   exten => 101,n,VoiceMail(101)
   exten => 101,n,Hangup()

Legenda:
1- Configuração para captura de chamadas.

10: tem 10 segundos para ocupar o canal na tentativa de capturar a ligação.
@INTERNO: o contexto em que seus ramais estão, conforme o definido no sip.conf e no próprio extensions.conf.

Como usar a captura de chamadas:
O ramal ao seu lado está tocando e seu colega não está. O combinado entre vocês é que, nessa situação, você tem a permissão de atender a ligação dele. Como você não quer deixar o seu posto de trabalho, você pode utilizar o recurso de captura de chamada. Basta clicar “ *8 ” e efetuar a ligação. Automaticamente a ligação é repassada para você.


ARQUIVO: voicemail.conf

Nesse arquivo criaremos o correio de voz dos usuários, ou seja, quando um ramal não atender, você tem a opção de deixar uma mensagem em forma de áudio para ele.

Exemplo:

   [general]
   format=wav
   maxmsg=100
   maxsecs=60
   minsecs=3
   skipms=3000
   maxsilence=1
   silencethreshold=128
   maxlogins=3
   ; You override the default program to send e-mail to use the script
1- mailcmd=/usr/sbin/sendmailmp3
   attach=yes
   [default]
2- 100 => senha, Nome, e-mail
   101 => 1234, Maria, maria@gmail.com

Legenda:
1- Aqui é um script que converte o formanto wav para MP3 para que se possa enviar o áudio por e-mail.
2- Cadastrando os ramais. Obs: Na senha, usar somente números!


Obs: se você optar por apagar os arquivos de áudio do correio de voz e ter os áudios apenas no e-mail, basta acrescentar “delete=yes”. Faça exatamente como o exemplo abaixo.

101=> 1234, Maria, maria@gmail.com, , delete=yes 

Criando o script para o envio dos áudios do correio de voz para o e-mail do usuário:

Primeiro, você precisará instalar os pacotes necessário para o script. Execute o seguinte comando:

apt-get install dos2unix lame sox

Em seguida, vá para “/usr/sbin” e crie um arquivo chamado “sendmailmp3”. Coloque nesse arquivo o conteúdo abaixo:

#!/bin/sh
# Asterisk voicemail attachment conversion script
# Revision history :
# 22/11/2010 - V1.0 - Creation by N. Bernaerts
# 07/02/2012 - V1.1 - Add handling of mails without attachment (thanks to Paul Thompson)
# 01/05/2012 - V1.2 - Use mktemp, pushd & popd
# 08/05/2012 - V1.3 - Change mp3 compression to CBR to solve some smartphone compatibility (thanks to Luca Mancino)
# 01/08/2012 - V1.4 - Add PATH definition to avoid any problem (thanks to Christopher Wolff)
# 16/07/2015 - V1.5 - Handle natively GSM WAV (thanks to Michael Munger)

# set PATH
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# save the current directory
pushd .
 
# create a temporary directory and cd to it
TMPDIR=$(mktemp -d)
cd $TMPDIR

# dump the stream to a temporary file
cat >> stream.org
 
# get the boundary
BOUNDARY=$(grep "boundary=" stream.org | cut -d'"' -f 2)
 
# cut the file into parts
# stream.part - header before the boundary
# stream.part1 - header after the bounday
# stream.part2 - body of the message
# stream.part3 - attachment in base64 (WAV file)
# stream.part4 - footer of the message
awk '/'$BOUNDARY'/{i++}{print > "stream.part"i}' stream.org
 
# if mail is having no audio attachment (plain text)
PLAINTEXT=$(cat stream.part1 | grep 'plain')
if [ "$PLAINTEXT" != "" ]
then
 
# prepare to send the original stream
cat stream.org > stream.new
 
# else, if mail is having audio attachment
else
 
 # cut the attachment into parts
 # stream.part3.head - header of attachment
 # stream.part3.wav.base64 - wav file of attachment (encoded base64)
 sed '7,$d' stream.part3 > stream.part3.wav.head
 sed '1,6d' stream.part3 > stream.part3.wav.base64

 # convert the base64 file to a wav file
 dos2unix -o stream.part3.wav.base64
 base64 -di stream.part3.wav.base64 > stream.part3.wav
 
 # convert wave file (GSM encoded or not) to PCM wav file
 sox stream.part3.wav -s stream.part3-pcm.wav
  
 # convert PCM wav file to mp3 file
 # -b 24 is using CBR, giving better compatibility on smartphones (you can use -b 32 to increase quality)
 # -V 2 is using VBR, a good compromise between quality and size for voice audio files
 lame -m m -b 24 stream.part3-pcm.wav stream.part3.mp3
 
 # convert back mp3 to base64 file
 base64 stream.part3.mp3 > stream.part3.mp3.base64

 # generate the new mp3 attachment header
 # change Type: audio/x-wav or audio/x-WAV to Type: audio/mpeg
 # change name="msg----.wav" or name="msg----.WAV" to name="msg----.mp3"
 sed 's/x-[wW][aA][vV]/mpeg/g' stream.part3.wav.head | sed 's/.[wW][aA][vV]/.mp3/g' > stream.part3.mp3.head

 # generate first part of mail body, converting it to LF only
 mv stream.part stream.new
 cat stream.part1 >> stream.new
 cat stream.part2 >> stream.new
 cat stream.part3.mp3.head >> stream.new
 dos2unix -o stream.new

 # append base64 mp3 to mail body, keeping CRLF
 unix2dos -o stream.part3.mp3.base64
 cat stream.part3.mp3.base64 >> stream.new

 # append end of mail body, converting it to LF only
 echo "" >> stream.tmp
 echo "" >> stream.tmp
 cat stream.part4 >> stream.tmp
 dos2unix -o stream.tmp
 cat stream.tmp >> stream.new

fi

# send the mail thru sendmail
cat stream.new | sendmail -t

# go back to original directory
popd

# remove all temporary files and temporary directory
rm -Rf $TMPDIR

Disponível em: < http://bernaerts.dyndns.org/linux/179-asterisk-voicemail-mp3 >.

Depois de salvar, você apenas precisa reiniciar os Asterisk para que a configuração seja usada.

/etc/init.d/asterisk restart

Precisamos atribuir um ramal ao voicemail para que o usuário possa acessar seu correio de voz. Para isso, é necessário ir no extensions.conf e acrescentar as informações abaixo:

; RAMAL 803 - VoiceMail Menu
;
exten => 803,1,VoiceMailMain()
exten => 803,2,HangUp()
exten => 803,3,PlayBack(vm-goodbye)
exten => 803,4,HangUp()
;

Exemplo: o ramal 100 quer ver se há alguma mensagem para ele no seu correio de voz. Então, ele ligará para 803, digitará seu ramal e sua senha (a senha colocada no voicemail.conf). Será apresentado a ele instruções de como ouvir suas mensagens.
As mensagens gravadas estão localizadas no /var/spool/asterisk/voicemail/default/. Ao entrar na pasta default, execute o comando “ ls ” para ver o conteúdo dessa pasta. Você encontrará uma pasta para cada ramal, ou seja, se o ramal 100 tiver uma mensagem, terá uma pasta com o nome “100”. Entre nessa pasta e depois entre em “INBOX”, que é o local onde estão as mensagens do ramal 100.


ARQUIVO: queues.conf

Neste arquivo é configurado a fila de espera do DAC (distribuição automática de chamadas). Caso você não saiba o que o DAC faz, darei um exemplo para que você entenda. O DAC é usado em callcenter. Então, você tem um grupo de ramais (que no arquivo é chamado de membros) que atenderão as chamadas.
No arquivo abaixo, dado como exemplo, vemos uma fila de atendentes que vai do ramal 181 até o 187.

   [general]
   ;
   persistentmembers=yes
   keepstats=no
   autofill=yes
   monitor-type=MixMonitor
   shared_lastcall=yes
   ;
1- [atendentes]
   ;
   musicclass=default
   announce=queue-atendentes
   strategy=rrmemory
   timeout=30
   retry=5
   weight=0
   autopause=no
   maxlen=0
   ringinuse=no
   member => SIP/181
   member => SIP/182
   member => SIP/183
   member => SIP/184
   member => SIP/185
   member => SIP/186
   member => SIP/187

Legenda:
1- Esse contexto será utilizado em outros arquivos!


Obs: Esses ramais têm que estar no sip.conf e no extensions.conf para funcionar.
Depois de configurar a fila, temos que indicar os ramais acima no arquivo agents.conf, onde é colocado senha para o ramal poder se “logar” na fila.


ARQUIVO: agents.conf

Como mencionado antes, neste arquivo definiremos as senhas para os membros se autenticarem na fila de chamadas.
Exemplo do arquivo agents.conf:

1-  [general] 
2-  persistentagents=yes 
3-  multiplelogin=no
    ;
4-  [agents] 
5-  Maxlogintries=3
6-  Autologoff=15 
7-  autologoffunavail=yes 
8-  endcall=yes
9-  musiconhold => default 
    ;Definindo um grupo para os agentes que vamos configurar:
    group=1
    ;Agentes da Fila de atendimento dos atendentes
    ;
    agent => 181,senha, nome
10- agent => 182,,Maria
    agent => 183,1234,João
    agent => 184,,
    agent => 185,,
    agent => 186,,
    agent => 187,,

Legenda:
1- Configurações gerais.
2- Define se o callbacklogin terá que ser armazenado em uma base de dados interna do Asterisk. Assim toda vez que reiniciarmos o Asterisk esses dados serão recarregados automaticamente.
3- Define se é permitido que uma mesma extensão consiga se conectar com múltiplos agentes.
4- Aqui se inicia as configurações dos agentes.
5- Número máximo de tentativas para um agente se conectar.
6- Se um agente não atende uma chamada dentro de 15 segundos ele será desconectado automaticamente.
7- Se a extensão que o agente se conecta estiver indisponível, automaticamente, o agente é “deslogado”.
8- Um agente pode terminar uma chamada pressionando a tecla " * ".
9- É a classe da música de espera que o agente escutará quando estiver logado.
10- Se deixar assim, não será pedido senha para se “logar” na fila.


Agora vamos indicar no extensions.conf, como o usuário poderá se encaminhar na fila de espera para ser atendido por um atendente. No extensions.conf, crie um ramal que, quando discado, encaminhará aos atendentes. Nesse ramal usaremos a aplicação “queues”.
Exemplo: o ramal que usarei é o 180. Quando alguém discar para esse número, será enviado para um atendente disponível configurado na fila de espera.
Configuração no extensions.conf:

   ; RAMAL 180 -FILA DE ESPERA ATENDENTES
   ;
1- exten => 180,1,Goto(atendentes,s,1) 
   ;
   [atendentes]
   ;
   exten => s,1,Answer()
2- exten => s,n,Queue(atendentes)
   exten => s,n,Hangup()
   ;
3- [INTERNO] 
   ;
   ; RAMAL 181 - AGENTE FILA DE ESPERA
   ;
   exten => 181,1,Dial(SIP/${EXTEN},35,tT)
   exten => 181,2,Hangup()
   ;
   ; RAMAL 182 - AGENTE FILA DE ESPERA
   ;
   exten => 182,1,Dial(SIP/${EXTEN},35,tT)
   exten => 182,2,Hangup()

Legenda:
1- Quando você liga para o ramal 180, a aplicação Goto (vá para) te encaminha para o contexto atendentes apresentado entre colchetes logo abaixo.

s (start): Usado quando o Asterisk não recebe o número da telefone que originou a chamada.
1: indica para ser encaminhado a prioridade 1 desse contexto, que neste caso é atender (Answer).

2- Te encaminha para fila de espera “atendentes”. Lembre-se que o contexto entre parêntese tem que ser igual ao que está no queues.conf!
3- O contexto atendentes, acima e entre colchetes, “desabilita” os ramais seguintes do seu contexto do arquivo sip.conf. Por isso, toda vez que você utilizar um contexto e você tem ramais posteriores que serão utilizados por usuários, recoloque o contexto destes ramais. Nesse exemplo, colocamos novamente o contexto INTERNO, que representa os ramais de 181 em diante.


Existe outra forma de se habilitar um atendente na fila de espera, só que o número do seu ramal não será utilizado e, sim, o de um agente. Darei um exemplo para ficar mais claro.
Vamos novamente para o queues.conf. Abaixo do membro 187, colocaremos o seguinte:

member => agent/2000
member => agent/2001

Agora iremos para o agents.conf. Faremos a mesma coisa, porém com as seguintes informações:

agent => 2000,1234,João
agent => 2001,4321,Greici

Em seguida iremos no extensions.conf e adicionaremos o seguinte conteúdo:

1- exten => _200[0-1],1,Agentlogin(${EXTEN})
   exten => _200[0-1],n,Hangup

Legenda:
1- Para que o ramal possa se logar na fila de espera.


Neste caso, os ramais para os agentes vão do 2000 ao 2001. Para aumentar esse número, você pode fazer de várias maneiras:

exten => _200[0-9] → vai do 2000 ao 2009
exten => _20xx → vai do 2000 ao 2099

Conceitos:
x → vai de 0 a 9
n → vai de 2 a 9
z → vai de 1 a 9

Como fazer para o agente se logar: o ramal 100, quer ser o agente 2000 para poder atender na fila de espera. Então, ele discará 2000 e ligará. Ao fazer isso, ele será encaminhado para o agentlogin, onde será pedido a senha (a senha que está no agents.conf), neste caso 1234, em seguida pressione “#” para finalizar, tornando-se o agente 2000 e, agora, está disponível para atender. Para “deslogar”, pressione “ * ”.


ARQUIVO: confbridge.conf

Nesse arquivo é configurado a conferência. Temos dois tipos de conferência: conferência aberta e conferência fechada.

  • Conferência Aberta: Este tipo de conferência não precisa de uma senha para entrar na sala de conferência. Só discar o ramal que equivale à conferência aberta e esperar as outras pessoas entrarem. Para isso, deixamos o espaço “PIN” em branco, como você verá no exemplo abaixo.

  • Conferência Fechada: Neste caso, para participar da conferência é necessário informar uma senha. O código para entrar na conferência fechada é “5555”, conforme o exemplo abaixo.

Exemplo de arquivo confbridge.conf:

   [general]
   ;
1- [admin_user]
   type=user
2- pin=5555
   marked=yes
   admin=yes
   music_on_hold_when_empty=yes
   announce_user_count=yes
   ;
3- [admin_user2]
   type=user
4- pin=
   marked=yes
   admin=yes
   music_on_hold_when_empty=yes
   announce_user_count=yes
   ;
   [default_bridge]
   type=bridge
5- max_members=10 

Legenda:
1- Contexto para conferência fechada.
2- Senha para entrar na conferência fechada.
3- Contexto para conferência aberta.
4- Campo para senha em branco, sendo assim, não é necessário informar a senha para participar dessa conferência.
5- Definimos o número máximo de integrantes por sala de conferência. Nesse caso, podemos ter dez até integrantes.


Com o arquivo confbridge.conf configurado, iremos para o extensions.conf para atribuir um ramal para as salas de conferência.
Exemplo: Usei o ramal 800 para conferência aberta e 801 para conferência fechada.

   ; RAMAL 800 - Conferência Aberta
   ;
   exten => 800,1,Progress()
   exten => 800,2,Wait(1)
1- exten => 800,3,ConfBridge(1,default_bridge,admin_user2) 
   ;
   ; RAMAL 801- Conferência Fechada
   ;
   exten => 801,1,Progress()
   exten => s,2,Wait(1)
2- exten => s,3,ConfBridge(1,default_bridge,admin_user)

Legenda:
1- Lembre-se do contexto! O que está no arquivo confbridge.conf deve aparecer exatamente aqui. Nesse caso, o contexto é “admin_user2”.
2- Contexto da conferência fechada é "admin_user".


Quando testamos a configuração acima, esperávamos que tivesse duas salas distintas, ou seja, se eu ligasse para o ramal 800 e outra pessoa ligasse para o ramal 801, não ocorreria interação entre a gente. Porém, houve a junção das salas de conferência. Descobrimos que teríamos que especificar o “número de conferência”. Para entender, mostrarei abaixo a sintaxe do confbridge no plano de discagem:

ConfBridge(confno,bridge_profile,user_profile,menu)


O que equivale ao “número de conferência” é o “confno” da sintaxe. Então, para ter duas salas de conferência, realmente distintas, é necessário ter um número de conferência específico para cada sala, como podemos ver no exemplo abaixo:

RAMAL 800 - Conferência Aberta
;
exten => 800,1,Progress()
exten => 800,2,Wait(1)
exten => 800,3,ConfBridge(1,default_bridge,admin_user2)
;
; RAMAL 801- Conferência Fechada
;
exten => 801,1,Progress()
exten => s,2,Wait(1)
exten => s,3,ConfBridge(2,default_bridge,admin_user)

Para mais informações sobre a aplicação Confbridge acesse o site: < https://wiki.asterisk.org/wiki/display/AST/ConfBridge>.

CONFIGURAR URA: Unidade de resposta audível

A URA é usada para recepcionar clientes, ou seja, são gravações que indicam como o cliente deve proceder. Quando se entra na URA, será apresentado uma série de informações, onde se pode escolher, por meio de dígitos, a opção referente ao que se deseja. A configuração da URA é feita, somente, no arquivo extensions.conf.
Exemplo1: O ramal para entrar na URA é 666.

     [INTERNO]
1-   exten => 666,1,Goto(ura,s,1) 
     ;
     [ura]
     exten => s,1,Answer
2-   exten => s,2,NoOp(Ligação entrou na URA)
3-   exten => s,n,Background(/var/lib/asterisk/sounds/welcome)
4-   exten => s,n,NoOp(Digite a opção/1-suporte/2-comercial/3-financeiro) 
5-   exten => s,n,WaitExten(6)
     ;
6-   exten => 1,1,NoOp(Chamada foi para Suporte) 
7-   same => n,Dial(SIP/2402,60)
     same => n, Hangup
     ;
8-   exten => 2,1,NoOp(Chamada foi para Comercial) 
     same => n,Dial(SIP/2801,60)
     same => n, Hangup
     ;
     exten => 3,1,NoOp(Chamada foi para Financeiro)
     same => n,Dial(SIP/2000,60)
     same => n, Hangup
     ;
     exten => i,1,NoOp(Extensão inválida)
     same => n,Play(beep)
9-   same => n,GoTo(s,3) 
     ;
10-  exten => t,1,NoOp(Tempo esgotado) 
     same => n,Dial(SIP/3401,60)
     same => n,Hangup

Legenda:
1- Encaminha para o contexto ura, que está entre colchetes abaixo.
2- NoOp: mostra no console o que está acontecendo no Asterisk. Você coloca um texto para te orientar qual parte do processo está sendo efetuada.
3- Background: tocar uma música. Entre parênteses você coloca o local onde o arquivo de áudio se encontra.
4- Mostra o que está entre parênteses no console do Asterisk. Nesse caso, está esperando o usuário digitar um número para ser encaminhado para algum setor.
5- Caso nada tenha sido digitado durante o áudio "welcome", o Asterisk espera mais 6 segundos, no máximo, pelos dígitos do usuário.
6- Ao digitar 1, o usuário foi enviado para o setor de suporte.
7- Nessa parte a chamada é encaminhada para o ramal 2402.

60: O ramal tem 60 segundos para atender.

8- Ao digitar 2, foi para o setor comercial.
9- Volta para o menu e toca o arquivo "welcome".
10- Quando excede o tempo de 6 segundos estipulados no “WaitExten”, a chamada será encaminhada para esta extensão, ramal 3401.


Exemplo2: É para quem quer adicionar funções à URA, como por exemplo, encaminhar para uma fila de atendentes, ir para conferência, etc. No exemplo abaixo, para acessar a URA tem que discar para o ramal 900. Essa URA está totalmente pronta no final deste trabalho, na parte “arquivos originais do projeto integrador”.
Peço que apenas observe a extensão dos atendentes, pois já foi mostrado como efetuar a sua configuração. No exemplo abaixo, quando você digitar 3 na URA ou estourar o tempo de discagem, você será encaminhado para a fila de espera que está configurado no extensions.conf e no queues.conf.

[INTERNO]
   ;
   ; RAMAL 900 - URA
   ;
1- exten => 900,1,Goto(ura,s,1) 
   ;
   [ura]
   exten => s,1,Answer
2- exten => s,2,NoOp(Ligação entrou na URA) 
   exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenuprincipal)
   exten => s,n,NoOp(Aguardando os dígitos do usuário)
3- exten => s,n,WaitExten(10) 
   ;
   exten => 1,1,NoOp(Chamada foi para Setores)
   same => n, Goto(ura2,s,1)
   same => n, Hangup()
   ;
   exten => 2,1,NoOp(Chamada foi para Serviços)
   same => n, Goto(ura3,s,1)
   same => n, Hangup()
   ;
4- exten => 3,1,NoOp(Chamada foi para Atendentes) 
5- same => n, Goto(atendentes,s,1) 
   same => n, Hangup()
   ;
6- exten => 4,1,NoOp(Repetir)
   same => n, Goto(ura,s,1)
   same => n, Hangup()
   ;
7- exten => i,1,NoOp(Extensão inválida) → i (invalid)
   same => n,Play(beep)
   same => n,GoTo(s,3)
   ;
   exten => t,1,NoOp(Tempo esgotado)
   same => n,Goto(atendentes,s,1)
   same => n,Hangup()

Legenda:
1- Encaminha para o contexto ura, que está entre colchetes abaixo.
2- Mostra no console o que está acontecendo no Asterisk.
3- Definimos 10 segundos para o usuário discar uma das opções apresentadas.
4- Ao digitar 3, o usuário é encaminhado para atendentes. Na URA do exemplo 1, somente um ramal era chamado. Agora temos um fila de atendentes, que pode ter vários ramais.
5- Lembre-se do contexto!!! Tem que ser o mesmo que está entre colchetes no arquivo extensions.conf do ramal da fila que você deseja. Como configuramos anteriormente, em “ARQUIVOS: queues.conf”, o ramal da fila de atendentes é o 180.
Obs: Não funciona colocar “same => n, Dial (SIP/180,60)” nessa parte. O Asterisk não encaminha! É necessário criar um contexto e usar “Goto”.
6- Nessa opção, ao digitar 4, as informações do menu são repetidas para o usuário. 7- Quando um cliente pressiona uma tecla inválida dentro do comando background() ou waitExten(), ele é direcionado para esta extensão. Ou seja, você é direcionado para cá quando digita uma opção que não existe, segundo o que foi configurado.


Como ficou a URA do projeto:
Será disponibilizado, em seguida, os arquivos de configuração do Projeto Integrador.

  1. Menu Principal- opções:
    1. Setores;
    2. Serviços;
    3. Atendentes;
    4. Informações sobre a empresa;
    5. Repetir;
  2. Menu Setores – opções:
    1. Financeiro;
    2. Desenvolvimento;
    3. Relacionamento com o cliente;
    4. Marketing;
    5. Suporte;
    6. Repetir;
    7. Voltar ao menu anterior;
  3. Menu Serviços – opções:
    1. Conferência;
    2. Teste de áudio;
    3. Repetir;
    4. Voltar ao menu anterior;
  4. Menu Conferência – opções:
    1. Conferência fechada;
    2. Conferência aberta;
    3. Repetir;
    4. Voltar ao menu anterior;
  5. Menu Teste – opções:
    1. Músicas de jogos;
    2. Rock;
    3. Sertanejo;
    4. Pop;
    5. Pagode;
    6. Voltar ao menu anterior;

DETECTANDO ERROS:

Pode acontecer de você digitar algo errado nos arquivos de configuração e, consequentemente, o Asterisk não saber interpretar a informação, causando algum problema. Dessa maneira, algumas funções podem não funcionar. Se tiver algo incorreto, na hora de executar a função, o Asterisk derruba a ligação. Isso também pode ocorrer se estiver faltando algum arquivo de áudio que o Asterisk solicita quando está operando uma função.
Um modo de acompanhar os processos da central é utilizar o seguinte comando no console do Asterisk: core set verbose 99
Esse comando possibilita o monitoramento da central, mostrando os arquivos que ela executa, podendo também averiguar o que cada ramal está fazendo, etc. Abaixo há uma imagem de um erro que pode ocorrer e, por meio do comando acima, você pode fazer o diagnóstico e, também, solucionar o problema.


IMAGEM 1- Detecção de erros no Asterisk
Error1.png


A parte demarcada por um retângulo, mostra a detecção de um erro no Asterisk. As duas linhas finais, onde aparece “warning”, indicam que o Asterisk não encontrou um arquivo que era necessário para a aplicação executada. Neste caso, o arquivo é o “pbx-transfer”, que é utilizado na transferência de chamadas. Esse erro pode ter duas causas:

1º) O arquivo não existe: para averiguar se, realmente, não existe esse arquivo, basta ir ao /usr/share/asterisk/sounds/en_US_f_Allison e procurar pelo arquivo. Caso não tenha, você terá que fazer esse áudio, mas lembre-se de executar o comando abaixo para garantir que não ocorrerá a segunda opção também. No final deste trabalho, há uma lista dos arquivos de áudio do Asterisk, informando o que cada áudio reproduz.
2º) Permissão da pasta: Se você encontrou o arquivo no local mostrado acima, então pode ser que o Asterisk não tenha permissão para executar o áudio. Para resolver isso, vamos voltar para /usr/share/asterisk/sounds/ e digitaremos o seguinte comando: chmod -R 755 en_US_f_Allison


GRAVAÇÃO DE CHAMADAS:

Para quem quiser gravar as ligações dos ramais, será apresentado duas configurações: gravar todas as chamadas e gravar quando quiser. No exemplo abaixo, estamos configurando para o ramal 101.

  • Gravar todas as chamadas: Para isso, basta ir para o arquivo extensions.conf e colocar a seguinte configuração nos ramais que você quer que as chamadas sejam gravadas.

1- exten => 101,1,Set(DIRNAME=${STRFTIME(${EPOCH},,%Y-%m-%d)})
2- exten => 101,n,Set(FILENAME=${DIRNAME}/${CDR(uniqueid)}-101_${CALLERID(num)}_${STRFTIME(${EPOCH},,%Y-%m-%d)}_${STRFTIME(${EPOCH},,%H:%M:%S)})
   exten => 101,n,Set(OUTPUT=/var/www/html/gravacoes/${FILENAME})
3- exten => 101,n,System(/bin/mkdir -p /var/www/html/gravacoes/${DIRNAME})
4- exten => 101,n,MixMonitor(/var/www/html/gravacoes/${FILENAME}.wav,ba) 
   exten => 101,n,Dial(SIP/101,30,tT)
   exten => 101,n,VoiceMail(101)
   exten => 101,n,Hangup()

Legenda:
1- Pasta que terá como nome o ano-mês-dia da gravação do áudio.
2- Aqui teremos o nome do arquivo:

${CDR(uniqueid)} estabelece um número de identificação que será único para cada gravação.
101: ramal de destino.
${CALLERID(num)}: identifica o número do ramal de origem.
${STRFTIME(${EPOCH},,%Y-%m-%d)}: insere a data no nome do arquivo.
${STRFTIME(${EPOCH},,%H:%M:%S)}: insere a hora no nome do arquivo.

3- cria um diretório com o nome do que foi estipulado em DIRNAME, que neste caso é a data em que o áudio foi criado.
4- MixMonitor: Grava áudios. Entre parênteses colocamos o local onde queremos que o arquivo seja salvo e em qual formato que será gravado.

b: adiciona no final do arquivo a gravação, ao invés de sobrescrever os áudios.
a: grava o áudio depois da chamada ser atendida.

Como vemos acima, as gravações ficarão no /var/www/html/gravacoes/ em uma pasta que tem como nome a data de criação do áudio. Ex: 2016-03-05, dentro dessa pasta há os áudios do dia 3 de março de 2016.

  • Gravação quando quiser: Nesse tipo de gravação usaremos dois arquivos de configuração do Asterisk: extensions.conf e features.conf. No features.conf estabeleceremos os dígitos que indicarão à central que você quer gravar a sua ligação.

Features.conf:

1- [applicationmap]
   ;
2- grava => *1,callee,Macro,grava-ini

Legenda:
1- É nesse contexto que se define a variável do canal DYNAMIC_FEATURES que aparecerá no extensions.conf.
2- Explicando:

grava => É o nome da sua configuração, ou seja, no extensions.conf você verá especificado no ramal essa opção: “DYNAMIC_FEATURES=grava”. Dessa forma, você é encaminhado para a opção “grava” que está no contexto “applicationmap”.
*1: Dígitos que indicam que você quer gravar a chamada.
Callee: Canal chamado pelo Dial, então somente o destino pode fazer gravações. Outras opções seriam: Both: Tanto o chamador quanto o chamado podem gravar as chamadas. Caller: Apenas o originador da chamada pode gravar.
Macro: Quando você digitar “ *1 ” será enviado para uma Macro do extensions.conf.
Grava-ini: Nome da Macro.

Agora vamos para extensions.conf:

1- exten => 101,1,Set(DYNAMIC_FEATURES=grava) 
2- exten => 101,n,Dial(SIP/101,30,tTwW) 
   exten => 101,n,VoiceMail(101)
   exten => 101,n,Hangup()
   ;
3- [macro-grava-ini] 
   exten => s,1,GotoIf($[ "${ARQGRAVA}" != "" ]?stoprec)
   exten => s,n,Set(GRAVANDO=1)
   exten => s,n,Playback(startmonitor)
4- exten => s,n,Set(ARQGRAVA=${CDR(uniqueid)})
   exten => s,n,MixMonitor(${ARQGRAVA}.wav,ba)
   exten => s,n,MacroExit()
5- exten => s,n(stoprec),StopMonitor() 
   exten => s,n,Set(ARQGRAVA=)
   exten => s,n,Playback(stopmonitor)
   exten => s,n,MacroExit()

Legenda:
1- Set: aplicação que te encaminha para uma configuração presente em outro arquivo.
2- w: habilita a gravação de chamada para o lado de destino. W: habilita a gravação de chamada para o lado originador.
3- Contexto Macro. Na configuração do features.conf é estipulado que quando o ramal de destino discar “ *1 ” durante a ligação, a central inicie a gravação da chamada. A configuração de como será gravado essa chamada está presente nesse contexto.
4- O nome do áudio gravado terá um número de identificação único.
5- Essa parte mostra que você pode parar a gravação, basta digitar “*1” novamente.


Lembra da configuração do features.conf? Certifique-se de que o nome esteja igual nos dois arquivos.
Essa configuração te permite parar e voltar a gravar quantas vezes você quiser, porém grava em áudios diferentes. Você disca “*1” durante uma ligação e ativa a gravação de chamadas. Quando digitar novamente “*1” a gravação será interrompida, mas se você digitar “*1” de novo, volta a gravar.
Neste caso, as gravações estarão em /var/spool/asterisk/monitor/. Colocamos essas gravações em nosso site, em um local que precisa de autenticação para poder acessar o conteúdo. Então se eu digitar no navegador “ http://200.135.37.107/gravacoes ” (funciona apenas no IFSC), aparecerá uma janela pedindo usuário e senha. Mostrarei, passo a passo, como fizemos isso:
Primeiro temos que ter um servidor web (apache2) e um servidor DNS (bind9) configurados. Não mostrarei como fazer isso, pois não é o foco deste trabalho. Com eles instalados, vamos para o arquivo “000-default.conf” que se encontra em /etc/apache2/sites-enable/ e colocaremos, no final, o conteúdo abaixo:

Alias /gravacoes /var/spool/asterisk/monitor/
<Directory /var/spool/asterisk/monitor/>
          Options Indexes
          AllowOverride None
          AuthType Basic
          AuthName "Documentos secretos"
          AuthUserFile /etc/apache2/.htpasswd
          Require valid-user
</Directory>

Agora vamos para /var/www/html/. Neste local você cria pastas que farão parte do seu domínio (site). No nosso caso, criei uma pasta chamada “gravacoes” onde ficará as chamadas gravadas e que, para acessá-la, terá que ter um usuário e senha liberados. Isso se chama autenticação no apache. Então, dentro de “gravacoes” criarei um arquivo chamado “.htaccess” com a seguinte informação:

AuthType Basic
AuthName "Documentos secretos"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
Satisfy Any

Feito isso, criaremos usuário e senha autorizado para acessar essa pasta pelo navegador:

Adicionar o primeiro usuário: htpasswd -c /etc/apache2/.htpasswd usuário1
Adicionar mais usuário: htpasswd /etc/apache2/.htpasswd usuário1
remover usuário: htpasswd -D /etc/apache2/.htpasswd usuário1

Para mais informações acesse:< https://www.vivaolinux.com.br/artigo/Usando-HTTP-autenticado-no-Apache?pagina=4 >.

Esse arquivo “.htpasswd”, terá o usuário e senha para autenticação e estará em /etc/apache2/.
Execute os comandos abaixo, na mesma ordem:

mv gravacoes/ /tmp/
cd /var/spool/asterisk/
chgrp www-data monitor/
chmod 755 . → “mudando a permissão da pasta asterisk”
chgrp www-data .
service apache2 restart → habilitar as alterações no site.

Optamos em criar um script que converta os áudios em formato WAV para formato MP3. Para isso, criamos em /usr/local/bin/ o arquivo “converte_audio” com o conteúdo abaixo:

#!/bin/bash

# Variáveis do script
DIR="/var/spool/asterisk/monitor"
CONVERTIDOS=/tmp/converte-audio-convertidos-$$
NAO_CONVERTIDOS=/tmp/converte-audio-nao_convertidos-$$

# Zera os arquivos(corpo de mensagem de email)
cat /dev/null > ${CONVERTIDOS}
cat /dev/null > ${NAO_CONVERTIDOS}

# Vai para o diretório de trabalho
cd ${DIR}

# Apaga os arquivos muito pequenos
find ${DIR} -type f -size -10k -delete

# Procura por arquivos WAV e converte em MP3.
for audio in $(find . -type f -name \*wav)
do
        ffmpeg -y -loglevel quiet -i ${audio} ${audio}.mp3
        if [ -s ${audio}.mp3 ]
        then
                rm -f ${audio}
                echo ${audio} >> ${CONVERTIDOS}
        else
                echo ${AUDIO} >> ${NAO_CONVERTIDOS}
        fi
done

# Conserta as permissões
find ${DIR} -type d -exec chmod 0750 {} \;
find ${DIR} -type f -exec chmod 640 {} \;
chown -R asterisk:www-data ${DIR}

# Envia email com os áudios convertidos para MP3
if [ -s ${CONVERTIDOS} ]
then
        cat ${CONVERTIDOS} | mail -s  "Arquivos convertidos de WAV para MP3" greicili.sf@gmail.com
fi

# Envia email com os áudios que não foram convertidos para MP3
if [ -s ${NAO_CONVERTIDOS} ]
then
        cat ${NAO_CONVERTIDOS} | mail -s  "Arquivos NÃO convertidos de WAV para MP3" greicili.sf@gmail.com
fi

# Apaga os arquivos temporários
rm -f ${CONVERTIDOS}
rm -f ${NAO_CONVERTIDOS}

exit 0

Esse script também envia para o e-mail os áudios convertidos e os não convertidos. Execute os comandos abaixo:

chmod 0750 converte_audio → permissão do script
converte_audio → executar o script

Correção do horário das chamadas no Asterisk:
Acesse /var/log/asterisk/cdr-cs , onde fica o arquivo “Master.csv” que é o registro das chamadas. Faça uma chamada de um ramal para outro e observe a hora. Se estiver 3 horas adiantado, vá para /etc/asterisk e acesse o arquivo “cdr.conf”. Neste arquivo há a opção “usegmtime”. Coloque da seguinte maneira: usegmtime=no



CRIPTOGRAFIA ASTERISK:

Para a criptografia do Asterisk iremos configurar no arquivo sip.conf. Colocamos as seguintes informações:

; Suporte a criptografia
; SIP sobre UDP
udpbindaddr=0.0.0.0
;
; SIP sobre TCP
tcpenable=yes
tcpbindaddr=0.0.0.0
;
; SIP sobre TCP com TLS
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/ssl/certs/asterisk.pem
tlsprivatekey=/etc/ssl/certs/asterisk.pem
tlsdontverifyserver=yes
;
; Ativa todas as portas
transport=udp,tcp,tls

ARQUIVOS ORIGINAIS DO PROJETO INTEGRADOR:

SIP.CONF:

[general]
allowguest=no
srvlookup=no
canreinvite = no
dtmfmode=rfc2833
; Suporte a criptografia
; SIP sobre UDP
udpbindaddr=0.0.0.0
;
; SIP sobre TCP
tcpenable=yes
tcpbindaddr=0.0.0.0
;
; SIP sobre TCP com TLS
tlsenable=yes
tlsbindaddr=0.0.0.0
tlscertfile=/etc/ssl/certs/asterisk.pem
tlsprivatekey=/etc/ssl/certs/asterisk.pem
tlsdontverifyserver=yes
;
; Ativa todas as portas
transport=udp,tcp,tls
; Suporte a vídeo
videosupport=yes

[ramal-voip](!)
type=friend
context=INTERNO
host=dynamic
allow=all
qualify=yes
videosupport=yes
textsupport=yes
nat=yes
bindport=5060

[100](ramal-voip)
secret=senha100
callerid="JPMSB" <100>
videosupport=yes
callgroup=1
pickupgroup=1
call-limit=1

[101](ramal-voip)
secret=senha101
callerid="101" <101>
videosupport=yes
call-limit=1

[102](ramal-voip)
secret=senha102
callerid="102" <102>
videosupport=yes
call-limit=1

[103](ramal-voip)
secret=senha103
callerid="103" <103>
videosupport=yes
call-limit=1

[104](ramal-voip)
secret=senha104
callerid="104" <104>
videosupport=yes
call-limit=1

[105](ramal-voip)
secret=senha105
callerid="105" <105>
videosupport=yes
call-limit=1

[106](ramal-voip)
secret=senha106
callerid="Greici-teste" <106>
videosupport=yes
callgroup=1
pickupgroup=1
call-limit=1

[107](ramal-voip)
secret=senha107
callerid="107" <107>
videosupport=yes
callgroup=1
pickupgroup=1
call-limit=1

[108](ramal-voip)
secret=senha108
callerid="108" <108>
videosupport=yes
call-limit=1

[109](ramal-voip)
secret=senha109
callerid="109" <109>
videosupport=yes
call-limit=1

[110](ramal-voip)
secret=senha110
callerid="110" <110>
videosupport=yes
call-limit=1

[111](ramal-voip)
secret=senha111
callerid="111" <111>
videosupport=yes
call-limit=1

[112](ramal-voip)
secret=senha112
callerid="112" <112>
videosupport=yes
call-limit=1

[113](ramal-voip)
secret=senha113
callerid="113" <113>
videosupport=yes
call-limit=1

[114](ramal-voip)
secret=senha114
callerid="114" <114>
videosupport=yes
call-limit=1

[115](ramal-voip)
secret=senha115
callerid="115" <115>
videosupport=yes
call-limit=1

[116](ramal-voip)
secret=senha116
callerid="116" <116>
videosupport=yes
call-limit=1

[117](ramal-voip)
secret=senha117
callerid="117" <117>
videosupport=yes
call-limit=1

[118](ramal-voip)
secret=senha118
callerid="118" <118>
call-limit=1
videosupport=yes

[119](ramal-voip)
secret=senha119
callerid="119" <119>
videosupport=yes
call-limit=1

[120](ramal-voip)
secret=senha120
callerid="120" <120>

[121](ramal-voip)
secret=senha121
callerid="121" <121>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[122](ramal-voip)
secret=senha122
callerid="122" <122>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[123](ramal-voip)
secret=senha123
callerid="123" <123>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[124](ramal-voip)
secret=senha124
callerid="124" <124>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[125](ramal-voip)
secret=senha125
callerid="125" <125>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[126](ramal-voip)
secret=senha126
callerid="126" <126>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[127](ramal-voip)
secret=senha127
callerid="127" <127>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[128](ramal-voip)
secret=senha128
callerid="128" <128>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[129](ramal-voip)
secret=senha129
callerid="129" <129>
videosupport=yes
callgroup=2
pickupgroup=2
call-limit=1

[130](ramal-voip)
secret=senha130
callerid="130" <130>

[131](ramal-voip)
secret=senha131
callerid="131" <131>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[132](ramal-voip)
secret=senha132
callerid="132" <132>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[133](ramal-voip)
secret=senha133
callerid="133" <133>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[134](ramal-voip)
secret=senha134
callerid="134" <134>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1
[135](ramal-voip)
secret=senha135
callerid="135" <135>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[136](ramal-voip)
secret=senha136
callerid="136" <136>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[137](ramal-voip)
secret=senha137
callerid="137" <137>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[138](ramal-voip)
secret=senha138
callerid="138" <138>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[139](ramal-voip)
secret=senha139
callerid="139" <139>
videosupport=yes
callgroup=3
pickupgroup=3
call-limit=1

[140](ramal-voip)
secret=senha140
callerid="140" <140>

[141](ramal-voip)
secret=senha141
callerid="141" <141>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[142](ramal-voip)
secret=senha142
callerid="142" <142>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[143](ramal-voip)
secret=senha143
callerid="143" <143>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[144](ramal-voip)
secret=senha144
callerid="144" <144>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[145](ramal-voip)
secret=senha145
callerid="145" <145>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[146](ramal-voip)
secret=senha146
callerid="146" <146>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[147](ramal-voip)
secret=senha147
callerid="147" <147>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[148](ramal-voip)
secret=senha148
callerid="148" <148>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[149](ramal-voip)
secret=senha149
callerid="149" <149>
videosupport=yes
callgroup=4
pickupgroup=4
call-limit=1

[150](ramal-voip)
secret=senha150
callerid="150" <150>

[151](ramal-voip)
secret=senha151
callerid="151" <151>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[152](ramal-voip)
secret=senha152
callerid="152" <152>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[153](ramal-voip)
secret=senha153
callerid="153" <153>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[154](ramal-voip)
secret=senha154
callerid="154" <154>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[155](ramal-voip)
secret=senha155
callerid="155" <155>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[156](ramal-voip)
secret=senha156
callerid="156" <156>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[157](ramal-voip)
secret=senha157
callerid="157" <157>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[158](ramal-voip)
secret=senha158
callerid="158" <158>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[159](ramal-voip)
secret=senha159
callerid="159" <159>
videosupport=yes
callgroup=5
pickupgroup=5
call-limit=1

[160](ramal-voip)
secret=senha160
callerid="160" <160>

[161](ramal-voip)
secret=senha161
callerid="161" <161>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[162](ramal-voip)
secret=senha162
callerid="BB8daAdiddas" <162>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[163](ramal-voip)
secret=senha163
callerid="163" <163>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[164](ramal-voip)
secret=senha164
callerid="Greici" <164>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[165](ramal-voip)
secret=senha165
callerid="165" <165>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[166](ramal-voip)
secret=senha166
callerid="166" <166>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[167](ramal-voip)
secret=senha167
callerid="167" <167>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[168](ramal-voip)
secret=lz1401
callerid="168" <168>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[169](ramal-voip)
secret=senha169
callerid="169" <169>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[170](ramal-voip)
secret=senha170
callerid="170" <170>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[171](ramal-voip)
secret=senha171
callerid="Schlosser" <171>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[172](ramal-voip)
secret=senha172
callerid="172" <172>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[173](ramal-voip)
secret=senha173
callerid="173" <173>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[174](ramal-voip)
secret=senha174
callerid="174" <174>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[175](ramal-voip)
secret=senha175
callerid="175" <175>
videosupport=yes
callgroup=6
pickupgroup=6
call-limit=1

[176](ramal-voip)
secret=senha176
callerid="176" <176>
videosupport=yes
call-limit=1

[177](ramal-voip)
secret=senha177
callerid="177" <177>

[178](ramal-voip)
secret=senha178
callerid="178" <178>

[179](ramal-voip)
secret=senha179
callerid="179" <179>

[180](ramal-voip)
secret=senha180
callerid="180" <180>

[181](ramal-voip)
secret=senha181
callerid="181" <181>

[182](ramal-voip)
secret=senha182
callerid="182" <182>

[183](ramal-voip)
secret=senha183
callerid="183" <183>

[184](ramal-voip)
secret=senha184
callerid="184" <184>

[185](ramal-voip)
secret=senha185
callerid="185" <185>

[186](ramal-voip)
secret=senha186
callerid="186" <186>

[187](ramal-voip)
secret=senha187
callerid="187" <187>

[188](ramal-voip)
secret=senha188
callerid="188" <188>

[189](ramal-voip)
secret=senha189
callerid="189" <189>

[190](ramal-voip)
secret=senha190
callerid="190" <190>

EXTENSIONS.CONF

[general]

[INTERNO]
exten => 1234,1,Dial(Khomp/b0c60,tT,X)
exten => 1234,n,Hangup()
exten => _[8-9]XXXXXXX,1,Dial(Khomp/b0c68/${EXTEN})
exten => _[8-9]XXXXXXX,n,Hangup()
;
; RAMAL 100
;
exten => 100,1,Dial(SIP/${EXTEN},35,tT)
exten => 100,2,Pickup(${EXTEN},10,@INTERNO)
exten => 100,n,VoiceMail(100)
exten => 100,n,Hangup()
;
; RAMAL 101
;
exten => 101,1,Dial(SIP/101,30)
exten => 101,2,VoiceMail(101)
exten => 101,3,Hangup()
;
; RAMAL 102
;
exten => 102,1,Dial(SIP/102,30)
exten => 102,2,VoiceMail(102)
exten => 102,3,Hangup()
;
; RAMAL 103
;
exten => 103,1,Dial(SIP/103,30)
exten => 103,2,VoiceMail(103)
exten => 103,3,Hangup()
;
; RAMAL 104
;
exten => 104,1,Dial(SIP/104,30)
exten => 104,2,VoiceMail(104)
exten => 104,3,Hangup()
;
; RAMAL 105
;
exten => 105,1,Dial(SIP/105,30)
exten => 105,2,VoiceMail(105)
exten => 105,3,Hangup()
;
; RAMAL 106
;
exten => 106,1,Set(DIRNAME=${STRFTIME(${EPOCH},,%Y-%m-%d)})
exten => 106,n,Set(FILENAME=${DIRNAME}/${CDR(uniqueid)}-101_${CALLERID(num)}_${STRFTIME(${EPOCH},,%Y-%m-%d)}_${STRFTIME(${EPOCH},,%H:%M:
%S)})
exten => 106,n,Set(OUTPUT=/var/spool/asterisk/monitor/${FILENAME})
exten => 106,n,System(/bin/mkdir -p /var/spool/asterisk/monitor/${DIRNAME})
exten => 106,n,MixMonitor(${FILENAME}.wav,ba)
exten => 106,n,Dial(SIP/${EXTEN},35,tT)
exten => 106,n,Pickup(${EXTEN},10,@INTERNO)
exten => 106,n,VoiceMail(106)
exten => 106,n,Hangup()
;
; RAMAL 107
;
exten => 107,1,Dial(SIP/${EXTEN},35,tT)
exten => 107,2,Pickup(${EXTEN},10,@INTERNO)
exten => 107,n,VoiceMail(107)
exten => 107,n,Hangup()
;
; RAMAL 108
;
exten => 108,1,Dial(SIP/108,30)
exten => 108,2,VoiceMail(108)
exten => 108,3,Hangup()
;
; RAMAL 109
;
exten => 109,1,Dial(SIP/109,30)
exten => 109,2,VoiceMail(109)
exten => 109,3,Hangup()
;
; RAMAL 110
;
exten => 110,1,Dial(SIP/110,30)
exten => 110,2,VoiceMail(110)
exten => 110,3,Hangup()
;
; RAMAL 111
;
exten => 111,1,Dial(SIP/111,30)
exten => 111,2,VoiceMail(111)
exten => 111,3,Hangup()
;
; RAMAL 112
;
exten => 112,1,Dial(SIP/${EXTEN},35,tT)
exten => 112,2,VoiceMail(112)
exten => 112,3,Hangup()
;
; RAMAL 113
;
exten => 113,1,Dial(SIP/113,30)
exten => 113,2,VoiceMail(113)
exten => 113,3,Hangup()
;
; RAMAL 114
;
exten => 114,1,Dial(SIP/114,30)
exten => 114,2,VoiceMail(114)
exten => 114,3,Hangup()
;
; RAMAL 115
;
exten => 115,1,Dial(SIP/115,30)
exten => 115,2,VoiceMail(115)
exten => 115,3,Hangup()
;
; RAMAL 116
;
exten => 116,1,Dial(SIP/116,30)
exten => 116,2,VoiceMail(116)
exten => 116,3,Hangup()
;
; RAMAL 117
;
exten => 117,1,Dial(SIP/117,30)
exten => 117,2,VoiceMail(117)
exten => 117,3,Hangup()
;
; RAMAL 118
;
exten => 118,1,Dial(SIP/118,30)
exten => 118,2,VoiceMail(118)
exten => 118,3,Hangup()
;
; RAMAL 119
;
exten => 119,1,Dial(SIP/119,30)
exten => 119,2,VoiceMail(119)
exten => 119,3,Hangup()
;
; RAMAL 120 - FILA DE ESPERA FINANCEIRO
;
exten => 120,1,Goto(financeiro,s,1)
;
[financeiro]
;
exten => s,1,Answer()
exten => s,n,Queue(financeiro)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 121 - AGENTE FILA DE ESPERA
;
exten => 121,1,Set(DYNAMIC_FEATURES=grava)
exten => 121,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 121,n,VoiceMail(121)
exten => 121,n,Hangup()
;
; RAMAL 122 - AGENTE FILA DE ESPERA
;
exten => 122,1,Set(DYNAMIC_FEATURES=grava)
exten => 122,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 122,n,Pickup(${EXTEN},10,@INTERNO)
exten => 122,n,VoiceMail(122)
exten => 122,n,Hangup()
;
; RAMAL 123 - AGENTE FILA DE ESPERA
;
exten => 123,1,Set(DYNAMIC_FEATURES=grava)
exten => 123,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 123,n,Pickup(${EXTEN},10,@INTERNO)
exten => 123,n,VoiceMail(123)
exten => 123,n,Hangup()
;
; RAMAL 124 - AGENTE FILA DE ESPERA
;
exten => 124,1,Set(DYNAMIC_FEATURES=grava)
exten => 124,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 124,n,Pickup(${EXTEN},10,@INTERNO)
exten => 124,n,VoiceMail(124)
exten => 124,n,Hangup()
;
; RAMAL 125 - AGENTE FILA DE ESPERA
;
exten => 125,1,Set(DYNAMIC_FEATURES=grava)
exten => 125,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 125,n,Pickup(${EXTEN},10,@INTERNO)
exten => 125,n,VoiceMail(125)
exten => 125,n,Hangup()
;
; RAMAL 126 - AGENTE FILA DE ESPERA
;
exten => 126,1,Set(DYNAMIC_FEATURES=grava)
exten => 126,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 126,n,Pickup(${EXTEN},10,@INTERNO)
exten => 126,n,VoiceMail(126)
exten => 126,n,Hangup()
;
; RAMAL 127 - AGENTE FILA DE ESPERA
;
exten => 127,1,Dial(SIP/${EXTEN},35,tT)
exten => 127,n,Pickup(${EXTEN},10,@INTERNO)
exten => 127,n,VoiceMail(127)
exten => 127,n,Hangup()
;
; RAMAL 128 - AGENTE FILA DE ESPERA
;
exten => 128,1,Dial(SIP/${EXTEN},35,tT)
exten => 128,n,Pickup(${EXTEN},10,@INTERNO)
exten => 128,n,VoiceMail(128)
exten => 128,n,Hangup()
;
; RAMAL 129 - AGENTE FILA DE ESPERA
;
exten => 129,1,Set(DYNAMIC_FEATURES=grava)
exten => 129,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 129,n,Pickup(${EXTEN},10,@INTERNO)
exten => 129,n,VoiceMail(129)
exten => 129,n,Hangup()
;
; RAMAL 130 - FILA DE ATENDIMENTO DO SUPORTE
;
exten => 130,1,Goto(suporte,s,1)
;
[suporte]
;
exten => s,1,Answer()
exten => s,n,Queue(suporte)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 131 - AGENTE FILA DE ESPERA
;
exten => 131,1,Set(DYNAMIC_FEATURES=grava)
exten => 131,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 131,n,Pickup(${EXTEN},10,@INTERNO)
exten => 131,n,VoiceMail(131)
exten => 131,n,Hangup()
;
; RAMAL 132 - AGENTE FILA DE ESPERA
;
exten => 132,1,Dial(SIP/${EXTEN},35,tT)
exten => 132,n,Pickup(${EXTEN},10,@INTERNO)
exten => 132,n,VoiceMail(132)
exten => 132,n,Hangup()
;
; RAMAL 133 - AGENTE FILA DE ESPERA
;
exten => 133,1,Dial(SIP/${EXTEN},35,tT)
exten => 133,n,Pickup(${EXTEN},10,@INTERNO)
exten => 133,n,VoiceMail(133)
exten => 133,n,Hangup()
;
; RAMAL 134 - AGENTE FILA DE ESPERA
;
exten => 134,1,Dial(SIP/${EXTEN},35,tT)
exten => 134,n,Pickup(${EXTEN},10,@INTERNO)
exten => 134,n,VoiceMail(134)
exten => 134,n,Hangup()
;
; RAMAL 135 - AGENTE FILA DE ESPERA
;
exten => 135,1,Dial(SIP/${EXTEN},35,tT)
exten => 135,n,Pickup(${EXTEN},10,@INTERNO)
exten => 135,n,VoiceMail(135)
exten => 135,n,Hangup()
;
; RAMAL 136 - AGENTE FILA DE ESPERA
;
exten => 136,1,Dial(SIP/${EXTEN},35,tT)
exten => 136,n,Pickup(${EXTEN},10,@INTERNO)
exten => 136,n,VoiceMail(136)
exten => 136,n,Hangup()
;
; RAMAL 137 - AGENTE FILA DE ESPERA
;
exten => 137,1,Dial(SIP/${EXTEN},35,tT)
exten => 137,n,Pickup(${EXTEN},10,@INTERNO)
exten => 137,n,VoiceMail(137)
exten => 137,n,Hangup()
;
; RAMAL 138 - AGENTE FILA DE ESPERA
;
exten => 138,1,Dial(SIP/${EXTEN},35,tT)
exten => 138,n,Pickup(${EXTEN},10,@INTERNO)
exten => 138,n,VoiceMail(138)
exten => 138,n,Hangup()
;
; RAMAL 139 - AGENTE FILA DE ESPERA
;
exten => 139,1,Dial(SIP/${EXTEN},35,tT)
exten => 139,n,Pickup(${EXTEN},10,@INTERNO)
exten => 139,n,VoiceMail(139)
exten => 139,n,Hangup()
;
; RAMAL 140 - FILA DE ATENDIMENTO DO MARKETING
;
exten => 140,1,Goto(marketing,s,1)
;
[marketing]
;
exten => s,1,Answer()
exten => s,n,Queue(marketing)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 141 - AGENTE FILA DE ESPERA
;
exten => 141,1,Set(DYNAMIC_FEATURES=grava)
exten => 141,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 141,n,Pickup(${EXTEN},10,@INTERNO)
exten => 141,n,VoiceMail(141)
exten => 141,n,Hangup()
;
; RAMAL 142 - AGENTE FILA DE ESPERA
;
exten => 142,1,Set(DYNAMIC_FEATURES=grava)
exten => 142,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 142,n,Pickup(${EXTEN},10,@INTERNO)
exten => 142,n,VoiceMail(142)
exten => 142,n,Hangup()
;
; RAMAL 143 - AGENTE FILA DE ESPERA
;
exten => 143,1,Set(DYNAMIC_FEATURES=grava)
exten => 143,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 143,n,Pickup(${EXTEN},10,@INTERNO)
exten => 143,n,VoiceMail(143)
exten => 143,n,Hangup()
;
; RAMAL 144 - AGENTE FILA DE ESPERA
;
exten => 144,1,Set(DYNAMIC_FEATURES=grava)
exten => 144,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 144,n,Pickup(${EXTEN},10,@INTERNO)
exten => 144,n,VoiceMail(144)
exten => 144,n,Hangup()
;
; RAMAL 145 - AGENTE FILA DE ESPERA
;
exten => 145,1,Set(DYNAMIC_FEATURES=grava)
exten => 145,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 145,n,Pickup(${EXTEN},10,@INTERNO)
exten => 145,n,VoiceMail(145)
exten => 145,n,Hangup()
;
; RAMAL 146 - AGENTE FILA DE ESPERA
;
exten => 146,1,Dial(SIP/${EXTEN},35,tT)
exten => 146,n,Pickup(${EXTEN},10,@INTERNO)
exten => 146,n,VoiceMail(146)
exten => 146,n,Hangup()
;
; RAMAL 147 - AGENTE FILA DE ESPERA
;
exten => 147,1,Set(DYNAMIC_FEATURES=grava)
exten => 147,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 147,n,Pickup(${EXTEN},10,@INTERNO)
exten => 147,n,VoiceMail(147)
exten => 147,n,Hangup()
;
; RAMAL 148 - AGENTE FILA DE ESPERA
;
exten => 148,1,Dial(SIP/${EXTEN},35,tT)
exten => 148,n,Pickup(${EXTEN},10,@INTERNO)
exten => 148,n,VoiceMail(148)
exten => 148,n,Hangup()
;
; RAMAL 149 - AGENTE FILA DE ESPERA
;
exten => 149,1,Set(DYNAMIC_FEATURES=grava)
exten => 149,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 149,n,Pickup(${EXTEN},10,@INTERNO)
exten => 149,n,VoiceMail(149)
exten => 149,n,Hangup()
;
; RAMAL 150 -FILA DE ATENDIMENTO DO RELACIONAMENTO COM O CLIENTE
;
exten => 150,1,Goto(relacionamento,s,1)
;
[relacionamento]
;
exten => s,1,Answer()
exten => s,n,Queue(relacionamento)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 151 - AGENTE FILA DE ESPERA
;
exten => 151,1,Set(DYNAMIC_FEATURES=grava)
exten => 151,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 151,n,Pickup(${EXTEN},10,@INTERNO)
exten => 151,n,VoiceMail(151)
exten => 151,n,Hangup()
;
; RAMAL 152 - AGENTE FILA DE ESPERA
;
exten => 152,1,Set(DYNAMIC_FEATURES=grava)
exten => 152,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 152,n,Pickup(${EXTEN},10,@INTERNO)
exten => 152,n,VoiceMail(152)
exten => 152,n,Hangup()
;
; RAMAL 153 - AGENTE FILA DE ESPERA
;
exten => 153,1,Set(DYNAMIC_FEATURES=grava)
exten => 153,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 153,n,Pickup(${EXTEN},10,@INTERNO)
exten => 153,n,VoiceMail(153)
exten => 153,n,Hangup()
;
; RAMAL 154 - AGENTE FILA DE ESPERA
;
exten => 154,1,Set(DYNAMIC_FEATURES=grava)
exten => 154,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 154,n,Pickup(${EXTEN},10,@INTERNO)
exten => 154,n,VoiceMail(154)
exten => 154,n,Hangup()
;
; RAMAL 155 - AGENTE FILA DE ESPERA
;
exten => 155,1,Set(DYNAMIC_FEATURES=grava)
exten => 155,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 155,n,Pickup(${EXTEN},10,@INTERNO)
exten => 155,n,VoiceMail(155)
exten => 155,n,Hangup()
;
; RAMAL 156 - AGENTE FILA DE ESPERA
;
exten => 156,1,Set(DYNAMIC_FEATURES=grava)
exten => 156,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 156,n,Pickup(${EXTEN},10,@INTERNO)
exten => 156,n,VoiceMail(156)
exten => 156,n,Hangup()
;
; RAMAL 157 - AGENTE FILA DE ESPERA
;
exten => 157,1,Set(DYNAMIC_FEATURES=grava)
exten => 157,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 157,n,Pickup(${EXTEN},10,@INTERNO)
exten => 157,n,VoiceMail(157)
exten => 157,n,Hangup()
;
; RAMAL 158 - AGENTE FILA DE ESPERA
;
exten => 158,1,Set(DYNAMIC_FEATURES=grava)
exten => 158,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 158,n,Pickup(${EXTEN},10,@INTERNO)
exten => 158,n,VoiceMail(158)
exten => 158,n,Hangup()
;
; RAMAL 159 - AGENTE FILA DE ESPERA
;
exten => 159,1,Set(DYNAMIC_FEATURES=grava)
exten => 159,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 159,n,Pickup(${EXTEN},10,@INTERNO)
exten => 159,n,VoiceMail(159)
exten => 159,n,Hangup()
;
; RAMAL 160 - FILA DE ATENDIMENTO DO DESENVOLVIMENTO
;
exten => 160,1,Goto(desenvolvimento,s,1)
;
[desenvolvimento]
;
exten => s,1,Answer()
exten => s,n,Queue(desenvolvimento)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 161 - AGENTE FILA DE ESPERA
;
exten => 161,1,Set(DYNAMIC_FEATURES=grava)
exten => 161,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 161,n,Pickup(${EXTEN},10,@INTERNO)
exten => 161,n,VoiceMail(161)
exten => 161,n,Hangup()
;
; RAMAL 162 - AGENTE FILA DE ESPERA
;
exten => 162,1,Set(DYNAMIC_FEATURES=grava)
exten => 162,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 162,n,Pickup(${EXTEN},10,@INTERNO)
exten => 162,n,VoiceMail(162)
exten => 162,n,Hangup()
;
; RAMAL 163 - AGENTE FILA DE ESPERA
;
exten => 163,1,Set(DYNAMIC_FEATURES=grava)
exten => 163,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 163,n,Pickup(${EXTEN},10,@INTERNO)
exten => 163,n,VoiceMail(163)
exten => 163,n,Hangup()
;
; RAMAL 164 - AGENTE FILA DE ESPERA
;
exten => 164,1,Set(DYNAMIC_FEATURES=grava)
exten => 164,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 164,n,Pickup(${EXTEN},10,@INTERNO)
exten => 164,n,VoiceMail(164)
exten => 164,n,Hangup()
;
; RAMAL 165 - AGENTE FILA DE ESPERA
;
exten => 165,1,Set(DYNAMIC_FEATURES=grava)
exten => 165,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 165,n,Pickup(${EXTEN},10,@INTERNO)
exten => 165,n,VoiceMail(165)
exten => 165,n,Hangup()
;
; RAMAL 166 - AGENTE FILA DE ESPERA
;
exten => 166,1,Set(DYNAMIC_FEATURES=grava)
exten => 166,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 166,n,Pickup(${EXTEN},10,@INTERNO)
exten => 166,n,VoiceMail(166)
exten => 166,n,Hangup()
;
; RAMAL 167 - AGENTE FILA DE ESPERA
;
exten => 167,1,Set(DYNAMIC_FEATURES=grava)
exten => 167,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 167,n,Pickup(${EXTEN},10,@INTERNO)
exten => 167,n,VoiceMail(167)
exten => 167,n,Hangup()
;
; RAMAL 168 - AGENTE FILA DE ESPERA
;
exten => 168,1,Set(DYNAMIC_FEATURES=grava)
exten => 168,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 168,n,Pickup(${EXTEN},10,@INTERNO)
exten => 168,n,VoiceMail(168)
exten => 168,n,Hangup()
;
; RAMAL 169 - AGENTE FILA DE ESPERA
;
exten => 169,1,Set(DYNAMIC_FEATURES=grava)
exten => 169,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 169,n,Pickup(${EXTEN},10,@INTERNO)
exten => 169,n,VoiceMail(169)
exten => 169,n,Hangup()
;
; RAMAL 170 - AGENTE FILA DE ESPERA
;
exten => 170,1,Set(DYNAMIC_FEATURES=grava)
exten => 170,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 170,n,Pickup(${EXTEN},10,@INTERNO)
exten => 170,n,VoiceMail(170)
exten => 170,n,Hangup()
;
; RAMAL 171 - AGENTE FILA DE ESPERA
;
exten => 171,1,Set(DYNAMIC_FEATURES=grava)
exten => 171,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 171,n,Pickup(${EXTEN},10,@INTERNO)
exten => 171,n,VoiceMail(171)
exten => 171,n,Hangup()
;
; RAMAL 172 - AGENTE FILA DE ESPERA
;
exten => 172,1,Set(DYNAMIC_FEATURES=grava)
exten => 172,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 172,n,Pickup(${EXTEN},10,@INTERNO)
exten => 172,n,VoiceMail(172)
exten => 172,n,Hangup()
;
; RAMAL 173 - AGENTE FILA DE ESPERA
;
exten => 173,1,Set(DYNAMIC_FEATURES=grava)
exten => 173,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 173,n,Pickup(${EXTEN},10,@INTERNO)
exten => 173,n,VoiceMail(173)
exten => 173,n,Hangup()
;
; RAMAL 174 - AGENTE FILA DE ESPERA
;
exten => 174,1,Set(DYNAMIC_FEATURES=grava)
exten => 174,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 174,n,Pickup(${EXTEN},10,@INTERNO)
exten => 174,n,VoiceMail(174)
exten => 174,n,Hangup()
;
; RAMAL 175 - AGENTE FILA DE ESPERA
;
exten => 175,1,Set(DYNAMIC_FEATURES=grava)
exten => 175,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 175,n,Pickup(${EXTEN},10,@INTERNO)
exten => 175,n,VoiceMail(175)
exten => 175,n,Hangup()
;
; RAMAL 176 - PRESIDENTE
;
exten => 176,1,Set(DYNAMIC_FEATURES=grava)
exten => 176,n,Dial(SIP/${EXTEN},35,tTwW)
exten => 176,n,VoiceMail(176)
exten => 176,n,Hangup()
;
; RAMAL 177
;
exten => 177,1,Dial(SIP/177,30)
exten => 177,2,Hangup()
;
; RAMAL 178
;
exten => 178,1,Dial(SIP/178,30)
exten => 178,2,Hangup()
;
; RAMAL 179
;
exten => 179,1,Dial(SIP/179,30)
exten => 179,2,Hangup()
;
; RAMAL 180 -FILA DE ESPERA ATENDENTES
;
exten => 180,1,Goto(atendentes,s,1)
;
[atendentes]
;
exten => s,1,Answer()
exten => s,n,Queue(atendentes)
exten => s,n,Hangup()
;
[INTERNO]
;
; RAMAL 181 - AGENTE FILA DE ESPERA
;
exten => 181,1,Dial(SIP/${EXTEN},35,tT)
exten => 181,2,Hangup()
;
; RAMAL 182 - AGENTE FILA DE ESPERA
;
exten => 182,1,Dial(SIP/${EXTEN},35,tT)
exten => 182,2,Hangup()
;
; RAMAL 183 - AGENTE FILA DE ESPERA
;
exten => 183,1,Dial(SIP/${EXTEN},35,tT)
exten => 183,2,Hangup()
;
; RAMAL 184 - AGENTE FILA DE ESPERA
;
exten => 184,1,Dial(SIP/${EXTEN},35,tT)
exten => 184,2,Hangup()
;
; RAMAL 185 - AGENTE FILA DE ESPERA
;
exten => 185,1,Dial(SIP/${EXTEN},35,tT)
exten => 185,2,Hangup()
;
; RAMAL 186 - AGENTE FILA DE ESPERA
;
exten => 186,1,Dial(SIP/${EXTEN},35,tT)
exten => 186,2,Hangup()
;
; RAMAL 187 - AGENTE FILA DE ESPERA
;
exten => 187,1,Dial(SIP/${EXTEN},35,tT)
exten => 187,2,Hangup()
;
; RAMAL 188 - AGENTE FILA DE ESPERA
;
exten => 188,1,Dial(SIP/${EXTEN},35,tT)
exten => 188,2,Hangup()
;
; RAMAL 189 - AGENTE FILA DE ESPERA
;
exten => 189,1,Dial(SIP/${EXTEN},35,tT)
exten => 189,2,Hangup()
;
; RAMAL 190
;
exten => 190,1,Dial(SIP/190,30)
exten => 190,2,VoiceMail(190)
exten => 190,3,Hangup()
;
; RAMAL 600 - Conferência Aberta
;
exten => 600,1,Goto(aberta,s,1)
;
[aberta]
;
exten => s,1,Progress()
exten => s,2,Wait(1)
exten => s,3,ConfBridge(1,default_bridge,admin_user2)
;
[INTERNO]
; RAMAL 601- Conference admin
;
exten => 601,1,Goto(fechada,s,1)
;
[fechada]
;
exten => s,1,Progress()
exten => s,2,Wait(1)
exten => s,3,ConfBridge(2,default_bridge,admin_user)
;
[INTERNO]
;
; RAMAL 603 - VoiceMail Menu
;
exten => 603,1,VoiceMailMain()
exten => 603,2,HangUp()
exten => 603,3,PlayBack(vm-goodbye)
exten => 603,4,HangUp()
;
;
; RAMAL 700 - URA
;
exten => 700,1,Goto(ura,s,1)
;
;URA PRIMEIRO MENU

[ura]
 exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenuprincipal)
exten => s,n,NoOp(Aguardando os dígitos do usuário)
exten => s,n,WaitExten(10)

exten => 1,1,NoOp(Chamada foi para Setores)
same => n, Goto(ura2,s,1)
same => n, Hangup()

exten => 2,1,NoOp(Chamada foi para Serviços)
same => n, Goto(ura3,s,1)
same => n, Hangup()

exten => 3,1,NoOp(Chamada foi para Atendentes)
same => n, Goto(atendentes,s,1)
same => n, Hangup()

exten => 4,1,NoOp(Informações sobre a Empresa)
same => n, Background()
same => n, Goto(ura,s,1)
same => n, Hangup()

exten => 5,1,NoOp(Repetir)
same => n, Goto(ura,s,1)
same => n, Hangup()

exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3)

exten => t,1,NoOp(Tempo esgotado)
same => n,Goto(atendentes,s,1)
same => n,Hangup()
;
;URA DOS SETORES
; RAMAL 701 - URA
;
exten => 701,1,Goto(ura2,s,1)
;
[ura2]
exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenusetores)
exten => s,n,NoOp(Aguardando os dígitos do usuário)
exten => s,n,WaitExten(10)


exten => 1,1,NoOp(Chamada foi para Financeiro)
same => n,Goto(financeiro,s,1)
same => n, Hangup()

exten => 2,1,NoOp(Chamada foi para Desenvolvimeto)
same => n,Goto(desenvolvimento,s,1)
same => n, Hangup()

exten => 3,1,NoOp(Chamada foi para Relacionamento com o cliente)
same => n,Goto(relacionamento,s,1)
same => n, Hangup()

exten => 4,1,NoOp(Chamada foi para Marketing)
same => n,Goto(marketing,s,1)
same => n, Hangup()

exten => 5,1,NoOp(Chamada foi para Suporte)
same => n,Goto(suporte,s,1)
same => n, Hangup()

exten => 6,1,NoOp(Repetir)
same => n, Goto(ura2,s,1)
same => n, Hangup()

exten => 7,1,NoOp(Voltar ao menu anterior)
same => n, Goto(ura,s,1)
same => n, Hangup()

exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3)

exten => t,1,NoOp(Tempo esgotado)
same => n,Goto(atendentes,s,1)
same => n,Hangup
;
;
;URA DOS SERVIÇOS
; RAMAL 702 - URA
;
exten => 702,1,Goto(ura3,s,1)
;
[ura3]
exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenuserviços)
exten => s,n,NoOp(Aguardando os dígitos do usuário)
exten => s,n,WaitExten(10)

exten => 1,1,NoOp(Conferência)
same => n, Goto(ura4,s,1)
same => n, Hangup()

exten => 2,1,NoOp(Teste)
same => n, Goto(ura6,s,1)
same => n, Hangup()

exten => 3,1,NoOp(Repetir)
same => n, Goto(ura3,s,1)
same => n, Hangup()

exten => 4,1,NoOp(Voltar ao menu anterior)
same => n, Goto(ura,s,1)
same => n, Hangup()

exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3)

exten => t,1,NoOp(Tempo esgotado)
same => n,Goto(atendentes,s,1)
same => n,Hangup()
;
;
;URA DA CONFERÊNCIA
; RAMAL 703 - URA
;
exten => 703,1,Goto(ura4,s,1)
;
[ura4]
exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenuconferencia)
exten => s,n,NoOp(Aguardando os dígitos do usuário)
exten => s,n,WaitExten(10)

exten => 1,1,NoOp(Conferência Fechada)
same => n, Goto(fechada,s,1)
same => n, Hangup()

exten => 2,1,NoOp(Conferência Aberta)
same => n, Goto(aberta,s,1)
same => n, Hangup()

exten => 3,1,NoOp(Repetir)
same => n, Goto(ura4,s,1)
same => n, Hangup()

exten => 4,1,NoOp(Voltar ao menu anterior)
same => n, Goto(ura3,s,1)
same => n, Hangup()

exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3)

exten => t,1,NoOp(Tempo esgotado)
same => n,Goto(atendentes,s,1)
same => n,Hangup()
;
;URA TESTE
; RAMAL 704
;
exten => 704,1,Goto(ura6,s,1)
;
[ura6]
exten => s,1,Answer
exten => s,2,NoOp(Ligação entrou na URA)
exten => s,n,Background(/usr/share/asterisk/sounds/custom/uramenuteste)
exten => s,n,NoOp(Aguardando os dígitos do usuário)
exten => s,n,WaitExten(10)

exten => 1,1,NoOp(Músicas de jogos)
same => n, ControlPlayback(/usr/share/asterisk/sounds/custom/músicas-teste/jogos,5000,*,#,1,0)
same => n, Hangup()

exten => 2,1,NoOp(Rock)
same => n, Playback(/usr/share/asterisk/sounds/custom/músicas-teste/Eye-Of-The-Tiger)
same => n, Hangup()

exten => 3,1,NoOp(Sertanejo)
same => n, Playback(/usr/share/asterisk/sounds/custom/músicas-teste/meu-coração)
same => n, Hangup()

exten => 4,1,NoOp(Pop)
same => n, Playback(/usr/share/asterisk/sounds/custom/músicas-teste/everything)
same => n, Hangup()

exten => 5,1,NoOp(Pagode)
same => n, Playback(/usr/share/asterisk/sounds/custom/músicas-teste/sorriso-maroto)
same => n, Hangup()

exten => 6,1,NoOp(Voltar ao menu anterior)
same => n, Goto(ura3,s,1)
same => n, Hangup ()

exten => i,1,NoOp(Extensão inválida)
same => n,Play(beep)
same => n,GoTo(s,3)
;
;
[INTERNO]
;
exten => _200[0-1],1,Agentlogin(${EXTEN})
exten => _200[0-1],n,Hangup
;
[macro-grava-ini]
exten => s,1,GotoIf($[ "${ARQGRAVA}" != "" ]?stoprec)
exten => s,n,Set(GRAVANDO=1)
exten => s,n,Playback(pbx-transfer)
exten => s,n,Set(ARQGRAVA=${CDR(uniqueid)})
exten => s,n,MixMonitor(${ARQGRAVA}.wav,ba)
exten => s,n,MacroExit()
exten => s,n(stoprec),StopMonitor()
exten => s,n,Set(ARQGRAVA=)
exten => s,n,Playback(stopmonitor)
exten => s,n,MacroExit()

QUEUES.CONF

[general]
;
persistentmembers=yes
keepstats=no
autofill=yes
monitor-type=MixMonitor
shared_lastcall=yes
;
[atendentes]
;
musicclass=default
announce=queue-atendentes
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/181
member => SIP/182
member => SIP/183
member => SIP/184
member => SIP/185
member => SIP/186
member => SIP/187
member => SIP/188
member => SIP/189
;
[financeiro]
;
musicclass=default
announce=queue-financeiro
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/121
member => SIP/122
member => SIP/123
member => SIP/124
member => SIP/125
member => SIP/126
member => SIP/127
member => SIP/128
member => SIP/129
;
[suporte]
;
musicclass=default
announce=queue-suporte
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/131
member => SIP/132
member => SIP/133
member => SIP/134
member => SIP/135
member => SIP/136
member => SIP/137
member => SIP/138
member => SIP/139
member => agent/2000
member => agent/2001
;
[marketing]
;
musicclass=default
announce=queue-marketing
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/141
member => SIP/142
member => SIP/143
member => SIP/144
member => SIP/145
member => SIP/146
member => SIP/147
member => SIP/148
member => SIP/149
;
[relacionamento]
;
musicclass=default
announce=queue-relacionamento
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/151
member => SIP/152
member => SIP/153
member => SIP/154
member => SIP/155
member => SIP/156
member => SIP/157
member => SIP/158
member => SIP/159
;
[desenvolvimento]
;
musicclass=default
announce=queue-desenvolvimento
strategy=rrmemory
timeout=30
retry=5
weight=0
autopause=no
maxlen=0
ringinuse=no
member => SIP/161
member => SIP/162
member => SIP/163
member => SIP/164
member => SIP/165
member => SIP/166
member => SIP/167
member => SIP/168
member => SIP/169
member => SIP/170
member => SIP/171
member => SIP/172
member => SIP/173
member => SIP/174
member => SIP/175

AGENTS.CONF

[general]
persistentagents=yes
multiplelogin=no
;
[agents]
;
maxlogintries=3
autologoff=15
autologoffunavail=yes
endcall=yes
musiconhold => default
;
group=1
;
;Agentes da Fila de atendimento do Financeiro
;
agent => 121,,EDUARDO VIDAL
agent => 122,,NETO
agent => 123,,LUIZ ARGEMIRO
agent => 124,,VINICIOS
agent => 125,,LUIZ HENRIQUE
agent => 126,,
agent => 127,,
agent => 128,,
agent => 129,,
;
;Agentes da Fila de atendimento do Suporte
;
agent => 131,,LUCAS
agent => 132,,
agent => 133,,
agent => 134,,
agent => 135,,
agent => 136,,
agent => 137,,
agent => 138,,
agent => 139,,
agent => 2000,1234,João
agent => 2001,4321,Greici
;
;Agentes da Fila de atendimento do Marketing
;
agent => 141,,ANA
agent => 142,,BIANCA
agent => 143,,FERNANDA
agent => 144,,LETICIA
agent => 145,,STEFANI
agent => 146,,
agent => 147,,
agent => 148,,
agent => 149,,
;Agentes da Fila de atendimento do Relacionamento com o Cliente
;
agent => 151,,FELIPE
agent => 152,,LEONARDO
agent => 153,,MAIARA
agent => 154,,MATHEUS CRISTOPHER
agent => 155,,
agent => 156,,
agent => 157,,
agent => 158,,
agent => 159,,
;
;Agentes da Fila de atendimento do Desenvolvimento
;
agent => 161,,CRISTIANO
agent => 162,,EDUARDO REHBEIN
agent => 163,,GABRIEL
agent => 164,,GREICI
agent => 165,,GUILHERME
agent => 166,,JOÃO
agent => 167,,LEANDRO
agent => 168,,LUIZ FERNANDO
;agent => 169,,
agent => 170,,MARCO
agent => 171,,MATHEUS SCHLOSSER
agent => 172,,MILENA
agent => 173,,PEDRO
agent => 174,,RURIK
agent => 175,,
;Agentes da Fila de atendimento dos atendentes
;
agent => 181,,
agent => 182,,
agent => 183,,
agent => 184,,
agent => 185,,
agent => 186,,
agent => 187,,
agent => 188,,
agent => 189,,

FEATURES.CONF

[general]
;
; Pickup Options
pickupexten = *8
pickupsound = beep
pickupfailsound = beeperr
;
; Transfer Options
;
transferdigittimeout => 3
xfersound = beep
xferfailsound = beeperr
;
atxfernoanswertimeout = 15
atxferloopdelay = 10
atxfercallbackretries = 2
atxferdropcall = no
;
[featuremap]
blindxfer => #
disconnect => *0
automon => *1
atxfer => *2
[applicationmap]
grava => *1,callee,Macro,grava-ini

VOICEMAIL.CONF

[general]

format=wav
maxmsg=100
maxsecs=60
minsecs=3
skipms=3000
maxsilence=1
silencethreshold=128
maxlogins=3
; the email should contain the voicemail as an attachment
attach=yes
; You override the default program to send e-mail to use the script
mailcmd=/usr/sbin/sendmailmp3

[default]
100 => 5678,João Pedro,jpcatarinense@gmail.com
106 => 1234,Greicili,greicili.sf@gmail.com
107 => 1234,Greicili,greicili.sf@gmail.com
121 => ,EDUARDO VIDAL,
122 => ,NETO,
123 => ,LUIZ ARGEMIRO,
124 => ,VINICIOS,
125 => ,LUIZ HENRIQUE,
131 => ,LUCAS,
141 => ,ANA,
142 => ,BIANCA,
143 => ,FERNANDA,
144 => ,LETICIA,
145 => ,STEFANI,
151 => ,FELIPE,
152 => ,LEONARDO,
153 => ,MAIARA,
161 => ,CRISTIANO,
162 => ,EDUARDO REHBEIN,
163 => ,GABRIEL,
164 => ,GREICI,
165 => ,GUILHERME,
166 => 5678,JOÃO,jpcatarinense@gmail.com
167 => ,LEANDRO,
168 => ,LUIZ FERNANDO,
170 => ,MARCO,
171 => 373884,MATHEUS SCHLOSSER,matheuschlosser@gmail.com
172 => ,MILENA,
173 => ,PEDRO,p.grando@hotmail.com
174 => ,RURIK,
176 => ,RONALTHY,

CONFBRIDGE.CONF

[general]

[admin_user]
type=user
pin=5555
marked=yes
admin=yes
music_on_hold_when_empty=yes
announce_user_count=yes
 
[admin_user2]
type=user
pin=
marked=yes
admin=yes
music_on_hold_when_empty=yes
announce_user_count=yes
 
[default_bridge]
type=bridge
max_members=10

ARQUIVOS DE ÁUDIO

Assim que você testar se sua central está funcionando perfeitamente, notará que os áudios são todos em inglês. Dessa maneira, dificulta bastante para compreender o que está sendo pedido quando você utiliza alguma função que configuramos no Asterisk. Se você quiser recriar os áudios em português, basta apagar o conteúdo da pasta “en_US_f_Allison” que se encontra no /usr/share/asterisk/sounds e copiar os novos áudios para essa pasta.
Para fazer os áudios, nós utilizamos o programa Audacity. Você pode criar os áudios com a voz de algum colega ou usar o recurso “text-to-speech” que é encontrado nos seguintes sites:
IVONA: https://www.ivona.com/
ODDCAST: http://www.oddcast.com/home/demos/tts/tts_example.php
A CAPELA GROUP: http://www.acapela-group.com/

Abaixo terá os comandos para converter os áudios para o formato necessário. O formato do próprio Asterisk é o sln16. Recomendamos que você converta os arquivos em três formatos (gsm, wav e sln16) para evitar que o Asterisk tenha que converter sempre que precisar, assim evita processamento desnecessário. Se você usar um hardware que não aguente muitos processamentos, como o Raspberry, é essencial que você converta para os três formatos.

Comandos para converter pelo terminal:

sox arquivoparaconverter.wav -r 8000 -c 1 -s arquivoconvertido.wav -q
sox arquivoparaconverter.wav -t raw -r 16000 -c 1 arquivoconvertido.sln16
sox arquivoparaconverter.wav -r 8000 -c 1 -s arquivoconvertido.gsm -q

O nome dos seus novos áudios tem que ser o mesmo dos respectivos áudios que você está recriando do Asterisk, caso contrário, o software não conseguirá reconhecer os áudios e usá-los nas suas funções.

Arquivos de áudio do Asterisk: estão localizados no diretório /usr/share/asterisk/sounds en_US_f_Allison.
Abaixo está a descrição de todos os áudios presentes no Asterisk para que você possa refazê-los em português, se assim desejar.

access-password.gsm = digite a senha de acesso e, em seguida, digite quadrado (#).
activated.gsm = ativado
agent-alreadyon.gsm = atendente presente. Por favor, digite o seu número de atendente e em seguida, digite quadrado.
agent-incorrect.gsm = login incorreto. Por favor, digite o seu número de atendente e, em seguida, digite quadrado.
agent-loggedoff.gsm = atendente ausente.
agent-loginok.gsm = atendente presente.
agent-newlocation.gsm = Por favor, digite seu novo ramal e, em seguida, digite quadrado.
agent-pass.gsm = Por favor, digite sua senha e, em seguida, digite quadrado.
agent-user.gsm = acesso do atendente. Por favor, digite seu número de atendente e, em seguida, digite quadrado.
all-circuits-busy-now.gsm = Por favor, aguarde. Todas as linhas estão ocupadas no momento.
a-m.gsm = da manhã.
and.gsm = e.
an-error-has-occured.gsm = ocorreu um problema.
at-tone-time-exactly.gsm = quando ouvir o tom, a hora exata será.
auth-incorrect.gsm = Senha incorreta. Por favor, digite sua senha e, em seguida, digite quadrado.
auth-thankyou.gsm = obrigado
beep.gsm
conf-adminmenu.gsm = Por favor, digite 1 para ativar ou desativar seu microfone, 2 para bloquear ou desbloquear a conferência, 3 para remover o último usuário, 4 ou 6 para aumentar ou diminuir o volume, 7 ou 9 para aumentar ou diminuir o volume do seu áudio, e 8 para sair.
confbridge.gsm
confbridge-join.gsm
conf-enteringno.gsm = você está digitando o número de conferência.
conference-pin-number.gsm = por favor, digite o código numérico.
conf-errormenu.gsm = opção inválida.
conf-getchannel.gsm = por favor, digite o número do ramal e, em seguida, digite quadrado.
conf-getconfno.gsm = por favor, digite seu código de conferência e, em seguida, digite quadrado.
conf-getpin.gsm = por favor, digite o código PIN de conferência.
conf-hasjoin.gsm = agora está na conferência.
conf-hasleft.gsm = saiu da conferência.
conf-invalid.gsm = este não é um número de conferência válido. Por favor, tente novamente.
conf-invalidpin.gsm = este código é inválido para essa conferência.
conf-kicked.gsm = você foi removido desta conferência.
conf-leaderhasleft.gsm = o líder saiu da conferência.
conf-locked.gsm = essa conferência está bloqueada.
conf-lockednow.gsm = agora a conferência está bloqueada.
conf-muted.gsm = microfone desativado.
conf-noempty.gsm = todos os canais da sala de conferência estão ocupados.
conf-onlyone.gsm = existe apenas um participante na sala de conferência.
conf-onlyperson.gsm = você é a única pessoa na sala de conferência.
conf-otherinparty.gsm = outros participantes na sala de conferência.
conf-placeintoconf.gsm = você entrará agora na sala de conferência.
conf-thereare.gsm = existem atualmente.
conf-unlockednow.gsm = agora a conferência está desbloqueada.
conf-unmuted.gsm = microfone ativado.
conf-usermenu.gsm = Digite 1 para ativar ou desativar o seu microfone, 4 ou 6 para aumentar ou diminuir o volume da sala de conferência, 7 ou 9 para aumentar ou diminuir o volume do seu microfone ou 8 para sair.
conf-userswilljoin.gsm = algumas pessoas entrarão na sala de conferência.
conf-userwilljoin.gsm = uma pessoa entrará na sala de conferência.
conf-waitforleader.gsm = a conferência começará quando o líder chegar.
demo-echodone.gsm = o teste de áudio foi completado.
demo-echotest.gsm = você entrará no teste de echo. Neste teste, tudo o que você disser será repetido no momento em que for recebido. O propósito de realizar esse teste é dar a você uma percepção do atraso de áudio entre você e a máquina em que está rodando este teste. Para sair, você pode simplesmente desligar a chamada ou digitar quadrado.
dictateforhelp.gsm = pressione 0 para ajuda.
dir-instr.gsm = se esta é a pessoa que você está procurando, pressione 1, caso contrário, pressione asterisco.
dir-intro-fn.gsm = bem-vindo ao diretório. Por favor, digite os três primeiros dígitos do primeiro nome do seu parceiro usando o teclado numérico. Use a tecla 7 para a letra D e 9 para a letra Z.
dir-last.gsm = letras do sobrenome do seu parceiro.
dir-multi1.gsm = pressione.
dir-multi2.gsm = para.
dir-multi3.gsm = ramal
dir-multi9.gsm = digite 9 para mais opções.
dir-nomatch.gsm = nenhum diretório com os termos pesquisados foi encontrado.
dir-nomore.gsm = não há mais termos compatíveis no diretório.
dir-pls-enter.gsm = por favor, digite primeiro.
dir-usingkeypad.gsm = usando o teclado numérico. Digite 7 para a letra D e 9 para a letra Z.
dir-welcome.gsm = bem-vindo ao diretório.
hours.gsm = horas.
invalid.gsm = inválido.
minutes.gsm = minutos.
pbx-invalid.gsm = desculpe, esse não é um ramal válido.
pbx-transfer.gsm = transferindo
privacy-incorrect.gsm = desculpe, esse não é um número válido.
privacy-prompt.gsm = por favor, digite seu número começando pelo código de área.
privacy-thankyou.gsm = obrigada.
queue-callswaiting.gsm = por favor, aguarde para falar com um de nossos representantes.
queue-holdtime.gsm = o tempo estimado de espera é de.
queue-less-than.gsm = menos que.
queue-minute.gsm = minuto.
queue-minutes.gsm = minutos.
queue-periodic-announce.gsm = atendentes ocupados. Por favor, aguarde. Sua chamada será atendida pelo próximo atendente disponível.
queue-reporthold.gsm = tempo de espera.
queue-seconds.gsm = segundos.
queue-thankyou.gsm = Por favor, aguarde ser atendido.
queue-thereare.gsm = sua chamada é a.
queue-youarenext.gsm = sua chamada é a primeira da fila e será atendida pelo próximo atendente disponível.
screen-callee-options.gsm = escolha uma das opções. Pressione 1 para atender a ligação, 2 para encaminhar a ligação ao correio de voz, 3 para enviar ao menu principal ou 4 para enviar a mensagem previamente selecionada.
seconds.gsm = segundos.
ss-noservice.gsm = o número discado não está em serviço. Por favor, verifique o número e tente novamente.
transfer.gsm = por favor, aguarde um instante.
tt-allbusy.gsm = todos os atendentes estão ocupados. Por favor, aguarde e sua chamada será atendida conforme a posição na fila de espera.
tt-somethingwrong.gsm = algo está muito errado.
vm-advopts.gsm = pressione 3 para opções avançadas.
vm-and.gsm = e.
vm-calldiffnum.gsm = pressione 2 para usar um número diferente.
vm-changeto.gsm = mudar para qual pasta.
vm-Cust1.gsm = pasta 5
vm-Cust2.gsm = pasta 6
vm-Cust3.gsm = pasta 7
vm-Cust4.gsm = pasta 8
vm-Cust5.gsm = pasta 9
vm-deleted.gsm = mensagem removida.
vm-delete.gsm = pressione 7 para apagar essa mensagem.
vm-dialout.gsm = por favor, aguarde enquanto realizamos a conexão da chamada.
vm-duration.gsm = essa mensagem durou.
vm-enter-num-to-call.gsm = por favor, digite o número desejado.
vm-extension.gsm = ramal.
vm-Family.gsm = família.
vm-first.gsm = primeira.
vm-for.gsm = para.
vm-forward.gsm = pressione 1, para escolher uma caixa postal ou 2 para acessar a agenda.
vm-forward-multiple.gsm = pressione 1 para enviar essa mensagem ou 2 para adicionar outro destinatário.
vm-forwardoptions.gsm = pressione 1 para adicionar um comentário na mensagem ou 2 para encaminhar a mensagem sem comentário.
vm-Friends.gsm = amigos.
vm-from-extension.gsm = mensagem do ramal.
vm-from.gsm = de.
vm-from-phonenumber.gsm = mensagem do número telefônico.
vm-goodbye.gsm = até logo.
vm-helpexit.gsm = pressione asterisco para ajuda ou quadrado para sair.
vm-INBOX.gsm = novas.
vm-incorrect.gsm = senha incorreta.
vm-incorrect-mailbox.gsm = senha incorreta. Caixa postal.
vm-instructions.gsm = para ouvir suas mensagens, pressione 1. Para sair do correio de voz a qualquer instante, pressione quadrado.
vm-intro.gsm = por favor, após o sinal deixe sua mensagem. Ao terminar desligue ou pressione quadrado.
vm-invalid-password.gsm = essa senha não atende aos requerimentos mínimos para essa caixa de correio.
vm-invalidpassword.gsm = essa não é uma senha válida. Por favor, tente novamente.
vm-isonphone.gsm = está ao telefone.
vm-isunavail.gsm = está indisponível.
vm-last.gsm = último.
vm-leavemsg.gsm = pressione 5 para deixar uma mensagem.
vm-login.gsm = bem-vindo ao correio de voz.
vm-mailboxfull.gsm = desculpe, o correio de voz dessa pessoa não aceita mais mensagens.
vm-marked-nonurgent.gsm = status urgente removido.
vm-message.gsm = mensagem.
vm-messages.gsm = mensagens.
vm-minutes.gsm = minutos.
vm-mismatch.gsm = as senhas digitadas não conferem. Por favor, tente novamente.
vm-msginstruct.gsm = para ouvir a próxima mensagem, pressione 6. Para repetir a mensagem atual, pressione 5. Para ouvir a mensagem anterior, pressione 4. Para apagar ou recuperar essa mensagem, pressione 0. Para sair do correio de voz, pressione quadrado.
vm-msgsaved.gsm = sua mensagem foi salva.
vm-newpassword.gsm = por favor, digite sua nova senha. Ao final, pressione quadrado.
vm-newuser.gsm = bem-vindo ao correio de voz. Vamos guiá-lo durante a configuração inicial.
vm-next.gsm = pressione 6 para ouvir a próxima mensagem.
vm-nobodyavail.gsm = não há disponibilidade de atendê-lo no momento.
vm-nobox.gsm = a mensagem não pode ser respondida, porque quem a enviou não possui correio de voz.
vm-no.gsm = nenhuma.
vm-nomore.gsm = não há mais mensagens.
vm-nonumber.gsm = desculpe, não sabemos quem enviou essa mensagem.
vm-num-i-have.gsm = o número que tenho é.
vm-onefor-full.gsm = pressione 1 para ouvir.
vm-onefor.gsm = pressione 1 para.
vm-options.gsm = pressione 1, para gravar sua mensagem de indisponível. Pressione 2, para gravar sua mensagem de ocupado. Pressione 3, para gravar o seu nome. Pressione 4, para alterar sua senha. Pressione asterisco, para voltar ao menu principal.
vm-opts-full.gsm = pressione 1 para ouvir a.
vm-opts.gsm = pressione 2, para mudar de pasta. Pressione 3 , para opções avançadas ou 0 para opções do correio de voz.
vm-passchanged.gsm = suas senhas foram alteradas.
vm-password.gsm = senha.
vm-pls-try-again.gsm = por favor, tente novamente.
vm-press.gsm = pressione.
vm-prev.gsm = pressione 4 para ouvir a mensagem anterior.
vm-reachoper.gsm = pressione 0 para falar com um atendente.
vm-rec-busy.gsm = após o sinal, fale sua mensagem de ocupado e pressione quadrado.
vm-received.gsm = recebido.
vm-rec-name.gsm = após o sinal, fale seu nome e pressione quadrado.
vm-record-prepend.gsm = após o sinal, por favor, gravar uma introdução à mensagem encaminhada. Quando terminar, pressione quadrado.
vm-rec-temp.gsm = após o sinal, deixe sua mensagem. Quando terminar, pressione quadrado.
vm-rec-unv.gsm = após o sinal, fale sua mensagem de ocupado. Quando terminar, pressione quadrado.
vm-reenterpassword.gsm = por favor, digite novamente sua senha e pressione quadrado.
vm-repeat.gsm = pressione 5 para repetir a mensagem atual.
vm-review.gsm = pressione 1, para aceitar essa gravação. Pressione 2 para ouvir a mensagem ou pressione 3 para regravar a mensagem.
vm-review-nonurgent.gsm = pressione 4 para remover o status de urgente dessa mensagem.
vm-review-urgent.gsm = pressione 4 para marcar essa mensagem como urgente.
vm-savedto.gsm = salvo para.
vm-saved.gsm = salvo.
vm-savefolder.gsm = em qual pasta devo salvar a mensagem.
vm-savemessage.gsm = ou 9 para salvar essa mensagem.
vm-saveoper.gsm = pressione 1 para aceitar essa gravação ou aguarde.
vm-sorry.gsm = desculpe, não entendi a sua resposta.
vm-star-cancel.gsm = pressione asterisco para cancelar.
vm-starmain.gsm = pressione asterisco para voltar ao menu principal.
vm-tempgreetactive.gsm = sua saudação temporária está ativa no momento.
vm-tempgreeting2.gsm = Pressione 1 para gravar ou pressione 2 para apagar sua mensagem pessoal temporária.
vm-tempgreeting.gsm = Pressione 1 para gravar sua mensagem pessoal temporária.
vm-tempremoved.gsm = mensagem pessoal temporária removida.
vm-then-pound.gsm = a seguir, pressione quadrado.
vm-theperson.gsm = a pessoal no ramal.
vm-tmpexists.gsm = há uma saudação temporária que substitui as saudações padrão.
vm-tocallback.gsm = pressione 2 para chamar quem enviou a mensagem.
vm-tocallnum.gsm = pressione 1 para chamar esse número.
vm-tocancel.gsm = ou quadrado para cancelar.
vm-tocancelmsg.gsm = pressione asterisco para cancelar essa mensagem.
vm-toenternumber.gsm = pressione 1 para entrar com um número.
vm-toforward.gsm = pressione 8 para encaminhar mensagem a outra pessoa.
vm-tohearenv.gsm = pressione 3 para ouvir a mensagem gravada.
vm-tomakecall.gsm = pressione 4 para realizar uma chamada.
vm-tooshort.gsm = sua mensagem é muito curta.
vm-toreply.gsm = pressione 1 para enviar uma resposta.
vm-torerecord.gsm = pressione 3 para regravar a mensagem.
vm-undeleted.gsm = mensagem recuperada.
vm-undelete.gsm = pressione 7 para recuperar essa mensagem.
vm-unknown-caller.gsm = de um originador desconhecido.
vm-Urgent.gsm = urgente.
vm-whichbox.gsm = para deixar uma mensagem. Por favor, digite o número do correio de voz.
vm-Work.gsm = trabalho.
vm-youhave.gsm = você tem.

Agora vamos para uma pasta contida no en_US_f_Allison: digits. Nessa pasta há mais arquivos de áudio.
1.gsm = 1
2.gsm = 2
3.gsm = 3
4.gsm = 4
5.gsm = 5
6.gsm = 6
7.gsm = 7
8.gsm = 8
9.gsm = 9
10.gsm =10
11.gsm =11
12.gsm =12
13.gsm =13
14.gsm =14
15.gsm =15
16.gsm =16
17.gsm =17
18.gsm =18
19.gsm =19
20.gsm =20
30.gsm =30
40.gsm =40
50.gsm =50
60.gsm =60
70.gsm =70
80.gsm =80
90.gsm =90
100.gsm = 100
a-m.gsm = da manhã.
at.gsm = em
day-0.gsm = domingo
day-1.gsm = segunda-feira
day-2.gsm = terça-feira
day-3.gsm = quarta-feira
day-4.gsm = quinta-feira
day-5.gsm = sexta-feira
day-6.gsm = sábado
dollars.gsm = reais
h-1.gsm = 1º
h-2.gsm = 2º
h-3.gsm = 3º
h-4.gsm = 4º
h-5.gsm = 5º
h-6.gsm = 6º
h-7.gsm = 7º
h-8.gsm = 8º
h-9.gsm = 9º
h-10.gsm = 10º
h-11.gsm = 11º
h-12.gsm = 12º
h-13.gsm = 13º
h-14.gsm = 14º
h-15.gsm = 15º
h-16.gsm = 16º
h-17.gsm = 17º
h-18.gsm = 18º
h-19.gsm = 19º
h-20.gsm = 20º
h-30.gsm = 30º
h-40.gsm = 40º
h-50.gsm = 50º
h-60.gsm = 60º
h-70.gsm = 70º
h-80.gsm = 80º
h-90.gsm = 90º
h-billion.gsm = bilionésimo
h-hundred.gsm = centésimo
h-million.gsm = milionésimo
h-thousand.gsm = milésimo
minus.gsm = menos
mon-0.gsm = janeiro
mon-1.gsm = fevereiro
mon-2.gsm = março
mon-3.gsm = abril
mon-4.gsm = maio
mon-5.gsm = junho
mon-6.gsm = julho
mon-7.gsm = agosto
mon-8.gsm = setembro
mon-9.gsm = outubro
mon-10.gsm = novembro
mon-11.gsm = dezembro
oclock.gsm = em ponto
p-m.gsm = da tarde
pound.gsm = quadrado
star.gsm = asterisco
today.gsm = hoje
thousand.gsm = mil
tomorrow.gsm = amanhã
transfer.gsm = transferir
yesterday.gsm = ontem
oh.gsm = oh.

CONFIGURAÇÃO EBS KHOMP:

Usamos uma EBS modular da khomp que possui as seguintes características:

  • Módulos com 2 links E1
  • Módulos com 1 canal GSM
  • FXS: Módulos com 8 interfaces de FXS
  • Porta ethernet.

Primeiramente precisamos instalar o drive da Khomp. Vá para o site http://www.khomp.com.br para obter o drive. Após a instalação do drive, acesse as configurações da EBS pelo navegador digitando “ http://localhost:14100 ”. Lembre-se de estar na mesma rede que a EBS! Aparecerá a seguinte página:

Imagem 2: Página inicial - Khomp
Página-khomp.png
Usuário: admin
Senha: khomp

Iremos adicionar um IP no servidor para que a Khomp e o Asterisk possam “conversar” entre si. No terminal digitaremos:

ifconfig eth0:0 10.0.0.5

O próximo passo é “apontar” a Khomp para o Asterisk. Iremos em “configurações” e depois em “adicionar manualmente”. Nessa parte, indicaremos as interfaces e mostraremos “onde está o Asterisk”.
Mudaremos o IP da Khomp também, colocando a informação abaixo:

10.0.0.7

Esse IP é válido e ao mesmo tempo falso.

Vá para /etc/network/ e acesse o arquivo “interfaces”, colocando a informação abaixo:

auto eth0:0
iface eth0:0 inet static
     address 10.0.0.5
     netmask 255.255.255.0

Agora vamos para o arquivo “khomp.conf” que se encontra em /etc/asterisk. Configuramos da seguinte maneira:

   ;; Defines the incoming context for calls on E1 channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD-LL)
1- context-digital = INTERNO 
   ;;
   ;; Defines the incoming context for calls on FXS channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD-CC)
1- context-fxs = INTERNO
   ;;
   ;; Defines the "alternative" context for calls on FXS channels, which will be
   ;; checked if the main context does not match for a call. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD)
1- context-fxs-alt = INTERNO
   ;;
   ;; Defines the incoming context for calls on FXO channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD-CC)
1- context-fxo = INTERNO
   ;;
   ;; Defines the "alternative" context for calls on FXO channels, which will be
   ;; checked if the main context does not match for a call. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD)
1- context-fxo-alt = INTERNO
   ;;
   ;; Defines the incoming context for calls on GSM channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD-CC)
2- context-gsm-call = entrante-gsm 
   ;;
   ;; Defines the "alternative" context for calls on GSM channels, which will be
   ;; checked if the main context does not match for a call. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD)
1- context-gsm-call-alt = INTERNO
   ;;
   ;; Defines the incoming context for SMS messages on GSM channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-sms-DD-CC)
1- context-gsm-sms = INTERNO
   ;;
   ;; Defines the incoming context for USSD messages on GSM channels. Some wildcards are
   ;; accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-ussd-DD-CC)
1- context-gsm-ussd = INTERNO
   ;;
   ;; Defines the incoming context for execution of a waiting call on GSM channels,
   ;; used when some KGSM channel is already handling calls and another incoming
   ;; call arrives in the same channel.
   ;;
   ;; The channel type used for execution is a special Khomp_Wait channel, which
   ;; does not have any audio nor can be answered/dialed. Some wildcards are
   ;; accepted on the context name, and described in the bottom of this section.
   ;;
   ;; Use "none" for disabling this feature.
   ;;
   ;; (default = khomp-wait-DD-CC)
1- context-gsm-wait = INTERNO
   ;;
   ;; Defines the incoming context for calls on Passive Record boards (KPR). Some
   ;; wildcards are accepted, and described in the bottom of this section.
   ;;
   ;; (default = khomp-DD-CC)
1- context-pr = INTERNO

Legenda:
1- Colocamos o contexto “INTERNO” ( que veio do sip.conf e extensions.conf) em cada contexto deste arquivo. Então os ramais do contexto “INTERNO” poderão receber chamadas do E1 e gsm.
2- Para chamadas entrantes do gsm. Lembre-se desse contexto! Pois será utilizado no extensions.conf.


No extensions.conf colocaremos a seguinte configuração:

   [INTERNO]
1- exten => 1234,1,Dial(Khomp/b0c60,tT,X)
   exten => 1234,n,Hangup()
   ;
2- exten => _[8-9]XXXXXXX,1,Dial(Khomp/b0c68/${EXTEN}) 
   exten => _[8-9]XXXXXXX,n,Hangup()
   ;
3- [entrante-gsm] 
   ;
4- exten => s,1,Goto(entradagsm,s,1) 
5- exten => _.,1,Goto(entradagsm,s,1)
   ;
   [entradagsm]
6- exten => s,1, Goto(ura,s,1) 
   exten => s,n, Hangup()

Legenda:
1- Quando digitamos 1234, seremos encaminhados para Khomp para uma saída FXS onde terá um telefone analógico.
2- Quando digitamos um número de celular seremos encaminhados para a Khomp. b0c68: é uma das saídas gsm da EBS Khomp.
3- Aqui está o contexto que utilizamos no arquivo khomp.conf. Essa configuração é para recepcionar chamadas vindas do gsm (chip colocado na EBS).
4- Encaminha para o contexto “entradagsm”, localizado abaixo. O “s” aceita qualquer número que venha do chip gsm.
5- A mesma coisa ocorre aqui. É uma outra maneira de especificar que qualquer chamada vinda do gsm seja atendida e encaminhada para o contexto abaixo.
6- As chamadas vindas do gsm serão enviadas para a nossa URA.


BIBLIOGRAFIA

Disponível em: <http://mestreasterisk.com.br/configuracao/configuracao-asterisk-1-6-x-agents-conf/ >. Acesso: 15 de fevereiro de 2016.
Disponível em: <http://mestreasterisk.com.br/configuracao/configuracao-asterisk-1-6-x-queues-conf/ >. Acesso: 15 de fevereiro de 2016.
Disponível em: <https://www.vivaolinux.com.br/artigo/Asterisk-Configuracao-de-conferencia-com-PIN>. Acesso: 15 de fevereiro de 2016.
Disponível em: <http://wiki.sj.ifsc.edu.br/index.php/RMU-2013-2>. Acesso: 15 de fevereiro de 2016.
Disponível em: < http://www.voip-info.org/wiki/view/Asterisk+Voicemail+as+email+using+sendmail>. Acesso: 15 de fevereiro de 2016.
Disponível em: <http://bernaerts.dyndns.org/linux/179-asterisk-voicemail-mp3>. Acesso: 15 de fevereiro de 2016.
Disponível em: < https://golasterisk.wordpress.com/2009/03/10/gravacao-sob-demanda-enviada-por-email/ >. Acesso: 3 de março de 2016.
NOBRE, Vicente de Paula. Asterisk. Disponível em: <http://pt.slideshare.net/vicentenobre1/apresentao-asterisk >. Acesso: 3 de março de 2016.
PASA, Felipe; SOMENSI, Flavio H. 4LINUX: free software solutions. Disponível em: <http://www.junqueiropolis.sp.gov.br/arquivo/canuais/slidescurso4424linuxpdf144251423555fb053b1ad9f.pdf>. Acesso: 24 de fevereiro de 2016.