Mudanças entre as edições de "Usuário:Greicili.s"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
Linha 251: Linha 251:
 
<center> '''apt-get install dos2unix lame sox''' </center> <br/>
 
<center> '''apt-get install dos2unix lame sox''' </center> <br/>
 
Em seguida, vá para “/usr/sbin” e crie um arquivo chamado “sendmailmp3”. Coloque nesse arquivo o conteúdo abaixo: <br/>
 
Em seguida, vá para “/usr/sbin” e crie um arquivo chamado “sendmailmp3”. Coloque nesse arquivo o conteúdo abaixo: <br/>
 +
 +
#!/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 >. <br/>
 +
Depois de salvar, você apenas precisa reiniciar os Asterisk para que a configuração seja usada.
 +
<center> '''/etc/init.d/asterisk restart''' </center><br/>
 +
<p align="justify" >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: </p><br/>

Edição das 16h06min de 23 de março de 2016

Projeto Integrador: Asterisk

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


Este trabalho foi realizado para ajudar pessoas que queiram montar uma central Asterisk com algumas funções, são elas: transferência de chamadas, captura de chamadas, ligação entre ramais, URA (unidade de resposta audível), voicemail com a gravação sendo enviada por e-mail, e DAC (Distribuição automática de chamadas). A turma da 8a fase do curso Integrado de telecomunicações do Instituto Federal de Santa Catarina - Campus São José, teve o Projeto Integrador como finalização de curso. Este projeto tinha por finalidade criar uma solução/produto para uma determinada empresa. Optamos por criar uma central Asterisk (que é um software livre), sendo ela destinada para comunicações VoIP, com algumas funções que achamos importantes para uma empresa. Porém, tivemos dificuldades de compreender as configurações disponíveis na Internet. Então, decidimos compartilhar nosso projeto e orientar, de maneira mais explicativa, como configurar a central Asterisk. Oferecemos o conteúdo em texto e em vídeo, para que o interessado tenha opção de escolha levando em conta a sua preferência. Criamos uma empresa fictícia para o projeto Integrador, a Merkki ([1]).


INSTALAÇÃO


Primeiramente, abra um terminal como root. Optamos em utilizar a distribuição Debian 8 (Jessie) no projeto. 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”. Precisamos ainda instalar um correio eletrônico (Postfix) para que possamos enviar mensagens de áudio gravadas para 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

CONCEITOS BÁSICOS


Vamos agora olhar os arquivos de configuração do Asterisk ( vá para /etc/asterisk ). Usando o comando ls , veremos esses arquivos. Os utilizados por nós foram:


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

Mostraremos o conteúdo deste 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:

[general] → Tudo o que se encontra entre colchetes é o contexto, é por meio dele que criamos grupos. 
Neste caso, o “general” indica que todas as configurações que se encontra abaixo dele serve para todos os ramais.
allowguest=no
srvlookup=no
canreinvite =no
dtmfmode=rfc2833
[ramal-voip](!) → Grupo ramais VoIP. Todas as configurações definidas abaixo serão utilizadas por todos
os ramais desse grupo.
type=friend → Configura a classe de conexão.  Friend : pode tanto receber como efetuar ligações;
peer : só recebe chamadas;  user : só faz chamadas).
context=INTERNO → 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.
host=dynamic → atribui IP aos ramais automaticamente. Opção Dynamic é a mais usada.
allow=all → Allow: Permite que um determinado codec seja usado.
qualify=yes 
videosupport=yes → Essa configuração permite ter videoconferência. Porém, alguns softphones
não suportam videoconferência.
textsupport=yes
nat=yes
bindport=6969 → Porta que o Asterisk deve esperar por conexões de entrada SIP. O padrão é 5060.
[100](ramal-voip) → Ramal 100
secret=senha100 → Essa é a senha utilizada para se cadastrar na central pelo seu softphone.
callerid="100" <100> → 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.
videosupport=yes → Como mencionado antes, para ter videoconferência. É necessário que todos os
ramais tenham essa configuração.
Call-limit=1 → Número máximo de “canais” simultâneos para um mesmo ramal. Então, quando estiver em  ligação e alguém te ligar,
a pessoa será informada que você está ocupado.

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


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 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: Não copie os comentários que se encontram após as setas para não ocorrer erros, mas se quiser deixar nos arquivos de configurações esses comentários, lembre-se de colocar o caractere “ ; ” antes das setas e também no começo da linha (se os comentários não couberam na linha anterior).


[general]
[INTERNO] → 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.
;
; RAMAL 100
;
exten => 100,1,Dial(SIP/${EXTEN},35,tT) → Nessa linha configuramos para esse ramal ter a  função transferência de chamada.
Dial: Faz uma chamada; SIP/${EXTEN}: É a sua extensão (número do seu ramal). É vantajoso utilizar isso 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 (enumerar todos 
ramais é uma tarefa 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.
exten => 100,2,VoiceMail(100) → atribui um correio de voz a esse ramal, mas é necessário ainda configurar no arquivo voicemail.conf
para funcionar.
exten => 100,3,Hangup() → Hangup: Encerra a chamada.
;
; RAMAL 101
;
exten => 101,1,Dial(SIP/101,30) → 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.
exten => 101,2,VoiceMail(101)
exten => 101,3,Hangup()

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. Já configuramos para os ramais, falta só habilitar essa função para que os mesmos possam utilizar.



ARQUIVO: features.conf

Vamos agora configurar a função de transferência. 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 do usuário que vai receber a ligação. Se configura essa transferência no “atxfer”. Neste caso, você pode também escolher o caractere. O padrão utilizado é “ *2 ”.


No features.conf configuramos também a captura de chamadas, para isso temos que indicar o 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]
;
pickupexten = *8 → Captura de chamadas
pickupsound = beep
pickupfailsound = beeperr
;
transferdigittimeout => 3
xfersound = beep
xferfailsound = beeperr
atxfernoanswertimeout = 15
atxferloopdelay = 10
atxfercallbackretries = 2
atxferdropcall = no
;
[featuremap]
blindxfer => # → transferência à cega
disconnect => *0
automon => *1
atxfer => *2 → 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 si. 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, como mostrado no exemplo abaixo: veja que eles 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)
exten => 100,2,Pickup(${EXTEN},10,@INTERNO) → 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.
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()

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. Mas você não quer deixar o seu posto de trabalho, então você pode utilizar o recurso de captura de chamada. Basta pressiona “ *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
mailcmd=/usr/sbin/sendmailmp3 → aqui é um script que converte o formanto wav para MP3 para que se possa enviar o áudio por e-mail.
attach=yes
[default]
100 => senha,Nome,e-mail → Na senha, usar somente números!
101 => 1234, Maria, maria@gmail.com

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.
Ex: 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: