Apesar de não existir limite de número de chamadas simultâneas num ramal SIP (o que é eventualmente controlado pelo cliente em uso), se você precisa desse tipo de restrição é possível implementá-la diretamente no Asterisk.
Para isso podemos fazer uso de duas funções disponíveis no plano de discagem (que substituem o antigo parâmetro call-limit da configuração sip): GROUP e GROUP_COUNT. A função GROUP adiciona um canal em um grupo, enquanto a função GROUP_COUNT conta o número de canais de um grupo.
Abaixo um pequeno exemplo de como fazer com que os ramais SIP recebam somente uma chamada por vez (sem limites de chamadas originadas).
/etc/asterisk/extensions.conf
[ramais]
; contexto de recebimento de chamadas no ramais
exten => _XXXX,1,NoOp
; adiciona o ramal no grupo ramalXXXX
exten => _XXXX,n,Set(GROUP()=ramal${EXTEN})
; verifica o número de chamadas simultâneas no grupo ramalXXXX
exten => _XXXX,n,Set(SIMULTCALL=${GROUP_COUNT(ramal${EXTEN})})
exten => _XXXX,n,NoOp(Ligacoes em curso ramal ${EXTEN}: ${SIMULTCALL})
; verifica se o número de chamadas é 1 (a própria chamada)
; se for igual a 1 efetua a discagem, caso contrário nega o recebimento
exten => _XXXX,n,GotoIf($["${SIMULTCALL}" = "1"]?call:nocall)
; seção usada quando a chamada não pode ser realizada (ramal em uso)
exten => _XXXX,n(nocall),NoOp(Limite Excedido - ramal ${EXTEN})
exten => _XXXX,n(nocall),HungUp
; seção usada para realização da chamada
exten => _XXXX,n(call),NoOp(Ligacao OK - ramal ${EXTEN})
exten => _XXXX,n(call),Dial(SIP/${EXTEN},30,twxr)
[outgoing]
; contexto das ligações para a pstn
exten => _X.,1,NoOp
exten => _X.,n,Noop(CALLERID: ${CALLERID(all)})
; adiciona o ramal no grupo ramalXXXX
; apesar de não haver limite de chamadas originadas é preciso computar
; essa ligação, pois caso o ramal esteja em uso por ter originado uma ligação
; é preciso bloquear o recebimento de uma nova chamada neste
exten => _X.,n,Set(GROUP()=ramal${CALLERID(number)})
exten => _X.,n,Set(SIMULTCALL=${GROUP_COUNT(ramal${CALLERID(number)})})
exten => _X.,n,NoOp(Ligacoes em curso ramal: ${SIMULTCALL})
; Disca para a pstn
exten => _X.,n,Dial(DAHDI/g1/${EXTEN},60,TWXr)
exten => _X.,n,HungUp
Como pode-se perceber, o recurso pode ser facilmente implementado. O código acima é um modelo que pode ser facilmente aprimorado com o uso de voicemail ou de uma mensagem previamente gravada em caso de rejeição da chamada. Tudo de acordo com a necessidade específica de seu ambiente.
ATENÇÃO (17/02/2011): o recurso acima apresenta um problema: chamadas transferidas continuam sendo consideradas chamadas em andamento e só são removidas do grupo após a ligação original (já transferida) ser finalizada. Estou estudando como contornar a situação.
Pergunta basica, porque voce não informa o call-limit do peer ?
ResponderExcluirUm dos problemas do call-limit é que se eu setar ele para 1 (uma chamada somente), por exemplo, não consigo realizar mais a transferência atendida, pois está seria uma segunda chamada.
ResponderExcluir[]s
Ola amigos gotaria de saber como faço para adicionar o numero do ramal nas ligaçoes recebidas.
ResponderExcluirComo assim?
ExcluirExplique melhor a situação, por favor.
[]s