In questo articolo vediamo come limitare il numero delle chiamate simultanee in Asterisk / FreePBX, una necessità che spesso si presenta sui trunk VoIP, soprattutto quando si può avere un elevato numero di chiamate contemporanee. In particolare, questo problema emerge quando il numero degli operatori addetti alla risposta è molto inferiore rispetto al numero di chiamate in arrivo. Di conseguenza, queste situazioni generano disservizi per l’utenza, pertanto è necessario intervenire per adattare il massimo numero di chiamate in ingresso al contesto operativo. Tuttavia, il problema si pone specificamente quando vogliamo limitare il numero delle chiamate contemporanee in ingresso, lasciando invece libero il numero di chiamate contemporanee in uscita.
Limitare il numero delle chiamate simultanee in Asterisk / Freepbx in uscita, si può facilmente realizzare, inserendo il valore desiderato nel campo “Maximum Channles” nella scheda Trunk dell’interfaccia grafica. Diverso è l’approccio per limitare il numero di chiamate contemporanee in ingresso. In questo caso, infatti, per limitare il numero di chiamate in Asterisk, sarà necessario scrivere un contesto specifico che conta il numero di chiamate attive ed attiva il blocco quando questo numero diventa maggiore del numero massimo di chiamate impostato.
Come Fare
Vediamo, di seguito, la parte di Dialplan che ci consente di gestire e limitare il numero di chiamate contemporanee in ingresso in ambiente Asterisk / Freepbx. Nell’esempio che segue ho impostato a 3 il numero massimo di chiamate contemporanee in ingresso:
;Contesto per limitare a max 3 le chiamate in ingresso
;Nessun limite sulle chiamate in uscita
[from-incoming-custom]
exten => _.,1,Set(GROUP()=LABEL)
exten => _.,n,Set(COUNT=${GROUP_COUNT(LABEL)})
exten => _.,n,NoOp(CI SONO ${COUNT} CHIAMATE IN INGRESSO.)
exten => _.,n,GotoIf($[${COUNT} > 3]?chiudi:continua)
exten => _.,n(chiudi),NoOp(Ci sono troppe chiamate in ingresso. CHIUDI)
exten => _.,n,answer()
exten => _.,n,busy(5)
exten => _.,n,HangUp()
exten => _.,n(continua),Goto(from-pstn,${EXTEN},1)
exten => h,1,hangup()
La porzione di Dialplan in questione, è molto chiara, conta tutte le chiamate in ingresso attraverso la funzione GROUP_COUNT() e se il valore è maggior del numero massimo consentito, i questo caso 3, risponde alla chiamata e fa sentire al chiamante il tono di occupato. Diversamente la chiamata prosegue andando nel contesto from-pstn.