Pesquisar neste blog

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

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.

Um comentário:

Unknown disse...

Poderia me ajudar por favor está dando esse erro:

== Using SIP RTP CoS mark 5
[Nov 19 16:37:39] NOTICE[3764]: chan_sip.c:22753 handle_request_invite: Call from '6020' (10.71.0.181:5060) to extension '*71*6020' rejected because extension not found in context 'interno'.