Ciao a tutti, nell’intento di trovare una soluzione elegante per la gestione della chiamata diretta ad un interno di un centralino telefonico Askozia, ecco come ho risolto.
La richiesta del mio cliente era quella di poter chiamare in ufficio e alla risposta automatica di una voce guida, digitare il numero dell’interno per poter essere collegato senza passare per il centralino. In passato con centralini IP basati su FreePBX (TrixBox o Elastix) risolvevo il problema creando un IVR dove abilitato l’opzione “Enable Direct Dial”. Su Askozia non è così immediato.
La soluzione che ho trovato è quella di creare un nuovo pezzo di DialPlan che concettualmente fa questo:
- riproduce un messaggio audio personalizzato del tipo “Benvenuti, se conoscete l’interno digitatelo ora o rimanete in linea per parlare con l’operatore”;
- legge l’input dato dal chiamante tramite toni DTMF;
- capisce se è stato digitato qualcosa di valido o meno;
- invia la chiamata all’interno digitato se valido o invia la chiamata ad un interno predefinito.
Ecco come fare per creare un DialPlan personalizzato:
- entrare nell’Integrator Panel di Askozia, premendo il tasto ESC sulla vostra tastiera quando siete dentro all’interfaccia grafica di configurazione di Askozia;
- andare sul TAB “Configuration Files” per editare i file di configurazione di Asterisk;
- selezionare il file “extensions.conf”;
- nel box vuoto aggiungere il codice sotto riportato lasciando selezionato “Append”:
; DialPlan per chiamata diretta Interni
[DirettoInterni]
exten => s,1,Answer()
exten => s,n,Read(INTEXTEN,/storage/usbdisk1/askoziapbx/media/sounds/cfe/cfe_uploaded_file_1363962166,2,,0,5)
exten => s,n,NoOp(${READSTATUS})
exten => s,n,NoOp(${INTEXTEN})
exten => s,n,GotoIf($[“${READSTATUS}”=”TIMEOUT”]?DirettoInterniKO:DirettoInterniOK)
exten => s,n(DirettoInterniOK),Goto(CFE-PHONE-UNIQUE-allinternal,${INTEXTEN},1)
exten => s,n(DirettoInterniKO),Goto(CFE-PHONE-UNIQUE-allinternal,800,1)
exten => s,3,Hangup()
- salvare le modifiche;
- a questo punto per poter richiamare questo DialPlan all’arrivo di una chiamata è possibile creare una “Application” che potete nominare come volete e alla quale potete associare una qualsiasi numerazione. La “Application” per richiamare il DialPlan creato deve contenere il seguente codice:
1,NoOp(DirettoInterni)
2,GoTo(DirettoInterni,s,1)
Fatto a questo punto è sufficiente inviare le chiamate in ingresso alla “Application” appena creata.
Di seguito due parole sul codice del DialPlan per eventualmente personalizzarlo sulle vostre esigenze.
; DialPlan per chiamata diretta Interni
;Nome del DialPlan da richiamare poi nella vostra “Application”
[DirettoInterni]
exten => s,1,Answer()
;Qui uso Read per leggere l’input DTMF del chiamante, settare una variabile INTEXTEN, riprodurre un file audio che ho caricato su askozia e del quale mi sono ricavato il percorso, imposto a 2 la lunghezza massima che il chiamante può digitare (dovete impostare secondo la vostra numerazione degli interni se per esempio avete interni della classe 300 impostate la lunghezza massima a 3), poi indico con 0 (zero) che al chiamante non viene ripetuto il messaggio e alla fine indico con 5 i secondi prima che la chiamata vada in timeout per mancanza o errore di digitazione da parte del chiamante
exten => s,n,Read(INTEXTEN,/storage/usbdisk1/askoziapbx/media/sounds/cfe/cfe_uploaded_file_1363962166,2,,0,5)
; Uso NoOp solo per debug per vedere sul log il valore della variabile READSTATUS restituita da Read
exten => s,n,NoOp(${READSTATUS})
; Uso NoOp solo per debug per vedere sul log il valore della variabile INTEXTEN restituita da Read
exten => s,n,NoOp(${INTEXTEN})
;Uso GotoIf per valutare la variabile READSTATUS ritornata da READ per capire sel il chiamante non ha digitato nulla o indicato un interno errato. Se READSTATUS è TIMEOUT allora mando alla riga DirettoInterniKO se no mando a DirettoInterniOK
exten => s,n,GotoIf($[“${READSTATUS}”=”TIMEOUT”]?DirettoInterniKO:DirettoInterniOK)
;Qui uso Goto per mandare la chiamata al contesto per le chiamate esclusivamente per i numeri interni e chiamo l’interno digitato dal chiamante
exten => s,n(DirettoInterniOK),Goto(CFE-PHONE-UNIQUE-allinternal,${INTEXTEN},1)
;Qui uso Goto per mandare la chiamata al contesto per le chiamate esclusivamente per i numeri interni e chiamo l’interno o il CallFlow nel caso in cui il chiamante non abbia digitato nulla o digitato un interno non valido
exten => s,n(DirettoInterniKO),Goto(CFE-PHONE-UNIQUE-allinternal,800,1)
exten => s,3,Hangup()
Ciao a tutti Luca