FreePBX - Transferencia de ligação customizada


Olá , sejam bem-vindos a mais uma documentação voltada para o ambiente asterisk e FreePBX, esta trata a transferência cega (Blind transfer) ou seja, você transfere a chamada para o ramal destino sem saber se ele quer ou não atender, essa demanda especifica surgiu e achei interessante compartilhar com a comunidade. Este processo será necessário algumas customizações nos arquivos conf do asterisk, nada de outro mundo, fiquem tranquilos. A inicio será alterado o contexto padrão da variável “${TRANSFER_CONTEXT}” esta que é acionada todas vezes que é executado uma transferência e logo a seguir dentro do contexto customizado será tratado a variável de canal “${BLINDTRANSFER}” usada na transferência cega, desta forma quando transferir a chamada ele aguardará o time especificado e logo a seguir devolve a chamada para a extensão que originou a transferência.

No terminal do linux vamos as alterações nos arquivos do asterisk, sempre sugiro que faça esse processo no seu ambiente de testes para não ter problemas com o sistema em produção.

A descrição do laboratório são de dois ambientes que um usando Debian 8(Raspberry Pi) e o outro CentOS6.

Laboratório 01:

  • Raspberry Pi;
  • Asterisk 11.21;
  • Debian 8.

Laboratório 02:

  • Servidor IBM;
  • Asterisk 11.21;
  • CentOS 6.
[root@asteriskhelp ~]# vim /etc/asterisk/globals_custom.conf

TRANSFER_CONTEXT = custom-test_transfer

Logo em seguida pressione a tecla [ESC], depois ":x!" para sair do arquivo salvando as alterações.
Obs. Sem as ASPAS!

A seguir será adicionado o contexto que vai tratar a transferência e devolve-la para o ramal que originou.

[root@asteriskhelp ~]# vim /etc/asterisk/extensions_custom.conf

[custom-test_transfer]
exten => _X.,1,NoOp(Entering custom-test_transfer)
exten => _X.,n,Set(timeoutd=25) ; Aqui adicione o tempo que deseja como timeout
exten => _X.,n,Set(extLeng=${LEN(${EXTEN})})
exten => _X.,n,NoOp(The extenlength is ${extLeng})
exten => _X.,n,Dial(Local/${EXTEN}@from-internal,${timeoutd})
exten => _X.,n,Set(CALLERID(name)=RB:${CALLERID(name)})
exten => _X.,n,Dial(Local/${BLINDTRANSFER:4:${extLeng}}@from-internal)
exten => _X.,n,Hangup()

Logo em seguida pressione a tecla [ESC], depois ":x!" para sair do arquivo salvando as alterações.

Agora será necessário executar um reload no asterisk para que ele reconheça o novo contexto criado, observe a seguir que serão rodados três comando, um para entrar no console do asterisk, outro para dar o reload nos contextos o ultimo para checar se o já existe e foi reconhecido pelo asterisk.

[root@asteriskhelp ~]# rasterisk -vvvvvvvcgi

asteriskhelp*CLI> dialplan reload
asteriskhelp*CLI> dialplan show custom-test_transfer

[ Context 'custom-test_transfer' created by 'pbx_config' ]
  '_X.' =>          1. NoOp(Entering custom-test_transfer)        [pbx_config]
                    2. Set(timeoutd=25)                           [pbx_config]
                    3. Set(extLeng=${LEN(${EXTEN})})              [pbx_config]
                    4. NoOp(The extenlength is ${extLeng})        [pbx_config]
                    5. Dial(Local/${EXTEN}@from-internal,${timeoutd}) [pbx_config]
                    6. Set(CALLERID(name)=RB:${CALLERID(name)})   [pbx_config]
                    7. Dial(Local/${BLINDTRANSFER:4:${extLeng}}@from-internal) [pbx_config]
                    8. Hangup()                                   [pbx_config]

-= 1 extension (8 priorities) in 1 context. =-

Agora que já alimentou os arquivos e o asterisk reconheceu o contexto, como mostra o resultado acima, já pode iniciar os testes. Lembrando que essa documentação foi homologada em ramais SIP que utilizam o modulo "chan_sip".

Espero que tenha auxiliado e até a próxima, abraços.


     

0 Comments:

Enviar um comentário