Pesquisar neste blog

terça-feira, 30 de março de 2010

Criando um siga-me no asterisk 1.6.2 usando a função SayDigits

O primeiro passo é a criação dos contextos ativa e desativa o siga-me. O incremento do recurso siga-me com a função SayDigits pode ser importante, no caso de termos certeza do ramal para o qual estamos ativando o redirecionamento da chamada.


; Ativa Siga-me incondicional

[sigame-on]
exten => _*71*.,1,NoCDR()
exten => _*71*.,2,Set(DB(CF/${CALLERID(num)})=${EXTEN:4})
exten => _*71*.,3,Playback(call-fwd-unconditional&for&extension)
exten => _*71*.,4,SayDigits(${CALLERID(num)})
exten => _*71*.,5,Playback(is-set-to)
exten => _*71*.,6,SayDigits(${EXTEN:4})
exten => _*71*.,7,Playback(vm-saved)
exten => _*71*.,8,Playback(beep)
exten => _*71*.,9,Hangup

; Desativa o siga-me incondicional

[sigame-off]
exten => _*72*,1,NoCDR()
exten => _*72*,2,DBdel(CF/${CALLERID(num)})
exten => _*72*,3,Playback(cancelled)
exten => _*72*,4,Playback(beep)
exten => _*72*,5,Hangup




Bom, agora vamos ao pulo do gato, esse passo é muito importante pois é ele quem verifica se existe ou não o siga-me para o ramal.

Vamos ao contexto:

[disca]
exten => _3XXX,1,Noop(CF/${EXTEN})
exten => _3XXX,2,Set(siga=${DB(CF/${EXTEN})})
exten => _3XXX,3,Dial(SIP/${siga},30,Ttw)
exten => _3XXX,4,Dial(SIP/${EXTEN}) ; Unconditional forward
exten => _3XXX,5,Hangup

Neste caso, todas as ligações que forem feitas para qualquer o número 3XXX, ele vai verificar na base de dados do asterisk se existe algum registro CF referente ao ramal de destino e se existe um valor para esse registro, caso haja, ele efetua o siga-me, caso não faz a ligação normal.


Para resumir, se você tem um arquivo de configuração extensions.conf zerado, apenas com o contexto default criado, faça as seguintes alterações conforme abaixo:


[default]
include = > sigame-on
include = > sigame-off
include = > disca

Criando um siga-me incondicional no asterisk 1.6.2

O primeiro passo é a criação dos contextos ativa e desativa o siga-me


; Ativa Siga-me incondicional
[sigame-on]
exten => _*71*.,1,NoCDR()
exten => _*71*.,2,Set(DB(CF/${CALLERID(num)})=${EXTEN:4})
exten => _*71*.,3,Playback(beep)
exten => _*71*.,4,Playback(vm-saved)
exten => _*71*.,5,Hangup

; Desativa o siga-me incondicional
[sigame-off]
exten => _*72*,1,NoCDR()
exten => _*72*,2,DBdel(CF/${CALLERID(num)})
exten => _*72*,3,Playback(beep)
exten => _*72*,4,Playback(vm-saved)
exten => _*72*,5,Hangup




Bom, agora vamos ao pulo do gato, esse passo é muito importante pois é ele quem verifica se existe ou não o siga-me para o ramal.

Vamos ao contexto:

[disca]
exten => _3XXX,1,Noop(CF/${EXTEN})
exten => _3XXX,2,Set(siga=${DB(CF/${EXTEN})})
exten => _3XXX,3,Dial(SIP/${siga},30,Ttw)
exten => _3XXX,4,Dial(SIP/${EXTEN}) ; Unconditional forward
exten => _3XXX,5,Hangup

Neste caso, todas as ligações que forem feitas para qualquer o número 3XXX, ele vai verificar na base de dados do asterisk se existe algum registro CF referente ao ramal de destino e se existe um valor para esse registro, caso haja, ele efetua o siga-me, caso não faz a ligação normal.


Para resumir, se você tem um arquivo de configuração extensions.conf zerado, apenas com o contexto default criado, faça as seguintes alterações conforme abaixo:


[default]
include = > sigame-on
include = > sigame-off
include = > disca



============================================
; LOG DO ASTERISK ATIVANDO O SIGA-ME NO RAMAL
  == Using SIP RTP CoS mark 5
  == Using SIP VRTP CoS mark 6
  == Using UDPTL CoS mark 5
    -- Executing [*71*3003@internas:1] NoCDR("SIP/3001-0000000e", "") in new stack
    -- Executing [*71*3003@internas:2] Set("SIP/3001-0000000e", "DB(CF/3001)=3003") in new stack
    -- Executing [*71*3003@internas:3] Playback("SIP/3001-0000000e", "beep") in new stack
    -- Playing 'beep.alaw' (language 'pt_BR')
    -- Executing [*71*3003@internas:4] Playback("SIP/3001-0000000e", "vm-saved") in new stack
    -- Playing 'vm-saved.slin' (language 'pt_BR')
    -- Executing [*71*3003@internas:5] Hangup("SIP/3001-0000000e", "") in new stack
  == Spawn extension (internas, *71*3003, 5) exited non-zero on 'SIP/3001-0000000e'



; LOG ASTERISK RETIRANDO O SIGAME DO RAMAL
  == Using SIP RTP CoS mark 5
  == Using SIP VRTP CoS mark 6
  == Using UDPTL CoS mark 5
    -- Executing [*72*@internas:1] NoCDR("SIP/3001-00000016", "") in new stack
    -- Executing [*72*@internas:2] DBdel("SIP/3001-00000016", "CF/3001") in new stack
    -- DBdel: family=CF, key=3001
    -- Executing [*72*@internas:3] Playback("SIP/3001-00000016", "beep") in new stack
    -- Playing 'beep.alaw' (language 'pt_BR')
    -- Executing [*72*@internas:4] Playback("SIP/3001-00000016", "vm-saved") in new stack
    -- Playing 'vm-saved.slin' (language 'pt_BR')
    -- Executing [*72*@internas:5] Hangup("SIP/3001-00000016", "") in new stack
  == Spawn extension (internas, *72*, 5) exited non-zero on 'SIP/3001-00000016'



Façam bom proveito, eu testei usando S.O. CentOS 5.4 com asterisk 1.6.2 e funcionou perfeitamente.


Quaisquer dicas dúvidas e sugestões favor postarem pra mim que responderei o mais rápido possível.

quinta-feira, 25 de março de 2010

Counterpath X-Lite, opções avançadas e logs do asterisk.

Instalações asterisk utilizando softphones Counterpath normalmente apresentam a seguinte mensagem no log do asterisk:

ast_rtp_read: Unknown RTP codec 126 received from '0.0.0.0'


O eyeBeam possui um timer de inatividade baseado em RTCP que verifica se a chamada está ativa. O asterisk envia estes pacotes, mas para o envio quando está em “music on hold”.

Para desabilitar esta funcionalidade acesse o menu avancado do eyeBeam digitando “***7469” e mude a opção “must_have_rtcp” para “0″.

Aproveitando este post, o menu de opções avancadas oferece uma quantidade absurda de parâmetros configuráveis que vão desde interface binding até opções específicas de codecs e proxies.

Para aqueles que tem problemas em utilizar o eyebeam com uma vpn, as seguintes opções valem ouro:

system:network:auto_detect_ip="0"
system:network:local_ip="172.20.123.202"