Pesquisa de site

Configurando IVR no servidor Asterisk PBX


IVR é uma resposta de voz interativa que recebe informações de um chamador, executa uma ação com base nessa entrada e retorna um resultado ao chamador. Tradicionalmente, os sistemas IVR têm sido muito complexos e caros de implementar. O objetivo deste tutorial é mostrar uma maneira simples de obter IVR no sistema Asterisk.
Esta é uma continuação dos tutoriais sobre Asterisk e PABX baseado em software. Você deve ter um sistema Asterisk funcionando antes de tentar configurar o IVR no Asterisk. Se você é novo e deseja instalar o Asterisk, pode usar nosso tutorial baseado no CentOS abaixo:

Funcionamento do IVR:
Quando uma chamada recebida chega ao contexto IVR, o primeiro prompt informa ao chamador o que o IVR espera do chamador, um método de receber entrada do chamador, lógica para verificar se o a resposta do chamador é uma entrada válida, uma lógica para determinar qual deve ser o próximo passo do IVR e, finalmente, um mecanismo de armazenamento para as respostas, se aplicável.

Configurar IVR no Asterisk

O design IVR no Asterisk mostrado aqui é para um campus pequeno com os seguintes escritórios como exemplo:

  1. Escritório de recepção
  2. Escritório financeiro
  3. Escritório DVC
  4. Escritório de Segurança
  5. Escritório de TIC
  6. Escritório escolar
  7. Escritório de Alojamento

Você pode modificar todas as configurações para se adequar ao seu caso de uso. Os usuários SIP adicionados ao arquivo sip.conf são mostrados abaixo.

[101]
username=customercare
secret=pass
host=dynamic
type=friend
disallow= all
allow=ulaw
allow=h263
allow=gsm
allow=alaw
context=moi-ivr
callerid=customercare
videosupport=yes

[102]
username=finance
secret=pass
host=dynamic
type=friend
disallow= all
allow=ulaw
allow=g722
allow=gsm
allow=alaw
context=moi-ivr
callerid=finance

[103]
username=dvc
secret=pass
host=dynamic
type=friend
disallow= all
allow=ulaw
allow=g722
allow=gsm
allow=alaw
context=moi-ivr
callerid=dvc

[104]
username=security
secret=pass
host=dynamic
type=friend
disallow= all
allow=ulaw
allow=g722
allow=gsm
allow=alaw
context=moi-ivr
callerid=security

[105]
username=ICT
secret=pass
type=friend
disallow= all
allow=ulaw
allow=g722
allow=gsm
allow=alaw
context=moi-ivr
callerid=ICT

[106]
username=schooloffice
secret=pass
type=friend
disallow= all
allow=ulaw
allow=h263
allow=gsm
allow=alaw
context=moi-ivr
callerid=schooloffice

[107]
username=accomodation
secret=pass
type=friend
disallow= all
allow=ulaw
allow=h263
allow=gsm
allow=alaw
context=moi-ivr
callerid=accomodation

O próximo passo é ter o contexto pronto para funcionar. O contexto é dado abaixo:

[moi-incoming]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered IVR menu)
same => n,Answer()
same => n,Set(TIMEOUT(digit)=2) ; this sets the inter-digit timer
same => n,Wait(2) ; wait two second to establish audio
; During job hours, jump to moi-ivr context.
; During closed hours, jumpt to offices-closed.
same => n,GotoIfTime(9:00-16:00,mon-fri,*,*?moi-ivr,s,1:offices-closed)
same => n,GotoIfTime(9:00-12:00,sat,*,*?moi-ivr,s,1:offices-closed)
[offices-closed]
exten =>s,1,Answer()
same => n,wait(2)
same => Background(basic-pbx-ivr-main)
same => n,Hangup()
[moi-ivr]
exten =>s,1,Answer()
same => n,wait(2)
same => n,Set(TIMEOUT(digit)=10) ; ; this sets the inter-digit timer
same => n,Set(TIMEOUT(response)=10)
same => n,Background(basic-pbx-ivr-main)
same => n,WaitExten()
same => n,Background(silence/5)
; 1 to talk to reception ;101
; 2 to talk to finance office ; 102
; 3 to talk to dvc office ;103
; 4 to talk to security office ; 104
; 5 to talk to ICT office ;105
; 6 to talk to schools office ; 106
; 7 to talk to accommodation office ;107
exten => 1,1,Goto(ivr-customercare,s,1)
exten => 2,1,Goto(ivr-finance,s,1)
exten => 3,1,Goto(ivr-dvc,s,1)
exten => 4,1,Goto(ivr-security,s,1)
exten => 5,1,Goto(ivr-ict,s,1)
exten => 6,1,Goto(ivr-schools,s,1)
exten => 7,1,Goto(ivr-accomodation,s,1)
;; 'i' extension that is used for invalid extensions, i e, non-existing extensions dialled by clients.
exten => i,1,Playback(option-is-invalid)
same => n,Goto(moi-ivr)
;; Timeout extension
exten => t,1,Playback(still-there)
exten => t,Goto(moi-ivr,s,5)
;; define extensions for IVR menu
[ivr-reception]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customer care support center)
same => n,Answer()
same => n,Dial(SIP/101,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-finance]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/102,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-dvc]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/103,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-security]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/104,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-ict]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/105,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-schools]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/106,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()
[ivr-accommodation]
exten =>s,1,Verbose(1, Caller ${CALLERID(all)} has entered Customercare support center)
same => n,Answer()
same => n,Dial(SIP/107,10,r)
same => n,Hangup()
same => n,Playback(unavail)
same => n,Hangup()

Para fazer com que as chamadas destinadas aos ramais 101-107 cheguem ao IVR no contexto Asterisk, precisamos incluir o contexto IVR no contexto principal para chamadas recebidas. O arquivo editado é
/etc/asterisk/extensions.conf. Em seguida, adicionando a seguinte linha de código,

include => moi-incoming

Agora sempre que uma pessoa discar 101 e fizer uma ligação, seu processamento será feito em contexto IVR. O principal ponto a ser observado é que todos os números de ramal usados no IVR devem ser registrados para que uma chamada seja roteada.
Se você tiver uma lógica de roteamento de chamadas separada em extensions.conf para chamadas recebidas PSTN, basta inclua o contexto IVR nele.

Os artigos relacionados são:

Como instalar o Asterisk PBX 13.x no CentOS 7 guia passo a passo

Como integrar o servidor de bate-papo Openfire XMPP com o servidor Asterisk PBX

Configurando o mapeamento entre usuários Openfire XMPP e usuários Asterisk SIP

Configurando o mapeamento entre usuários Openfire XMPP e usuários Asterisk SIP

Como instalar e configurar o Festival para uso do Asterisk

TRANSFERÊNCIA E ENCAMINHAMENTO DE CHAMADAS NA CONFIGURAÇÃO ASTERISK

Como configurar a conta XMPP no cliente X-Lite, Zoiper, Jitsi Sofphones e Spark XMPP

Artigos relacionados: