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 ramaisexten => _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 pstnexten => _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.