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