Limitare numero di chiamate in Asterisk
In questo articolo vediamo come limitare il numero delle chiamate in Asterisk / Freepbx, necessità spesso richiesta sui trunk voip dove è possibile avere un elevato numero di contemporaneità o quando il numero degli operatori addetti alla risposta è di gran lunga inferiore al numero di chiamate in arrivo. In queste situazioni, che generano del disservizio all’utenza, è necessario intervenire per adattare il massimo numero di chiamate in ingresso al contesto operativo. Il problema si pone qunado vogliamo limitare il numero delle chiamate contemporanee in ingresso lasciando libero il numero di chiamate contemporanee in uscita.
In Freepbx infatti, questo limite si può facilmente impostare 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.
Annuncio Agente di una coda
31/01/2022 by admin • Voip • Tags: coda queues asterisk freepbx annuncio coda numero agente • 0 Comments
L’Annuncio agente di una coda necessita di qualche passaggio più avanzato. Per prima cosa andiamo a valorizzare due variabili che vengono utilizzate nelle code di Freepbx per definire los cript AGI ed il contesto da eseguire quando viene risposta una chiamata dall’agente della coda:
Primo Passo
andiamo ad Inserire in /etc/asterisk/globals_custom.conf i seguenti valori:
QAGI=/var/www/html/sound.php
QGOSUB=Crea-Ticket,s,1
Secondo Passo
a questo punto andiamo a scrivere lo script sound.php:
#!/usr/bin/php -q
<?php
include (“/var/www/html/phpagi-2.20/phpagi.php”);
$agi = new AGI();
$agi->answer();
$dstatus=$agi->get_variable(“EXTEN”);
$agent=$agi->get_variable(“MEMBERINTERFACE”);
$agent= str_replace(‘/’,”,stristr(stristr($agent[‘data’], ‘@’, true),’/’));
$agi->exec(“Playback”,”Risponde-operatore”);
$agi->exec(“sayalpha”,”$agent”);
?>
Come funziona lo script ? Semplicemente estrae il numero dell’interno dell’operatore che risponde e recita il file audio “Risponde-operatore” seguito dal numero di interno dell’operatore stesso. Naturalmente consideriamo il file audio “Risponde-operatore” già creato e presente nel nostro Freepbx.
Il risultato che otteniamo con questo script, è quindi, la comunicazione al chiamante di un messaggio del tipo “Benvenuti, risponde l’operatore ” seguito dal numero dell’operatore.
Terzo Passo
E se volessimo far seguire anche delle operazioni specifiche alla risposta ? Ad esempio recitare un messaggio o meglio richiare uno script o aggiornare un database ? Ecco che ci viene incontro quanto definito nella variabile QGOSUB. Infatti, alla risposta e dopo aver eseguito lo script AGI, viene eseguita la porzione di Dialplan specificata nella variabile QGOSUB, come ad esempio:
[Crea-Ticket]
exten=>s,1,Wait(1)
same=>n,Playback(demo-thanks)
same =>n,Return()
Che, in questo caso, recita il messaggio “demo-thanks”. Naturalmente la porzione di dialplan in questione può essere omessa, qualora l’obiettivo è solo quello di comunicare al chiamante l’operatore che risponde.