Asterisk e features.conf - Trasferimento di chiamata e molto di più

Versione adatta alla stampaSend to friendPDF version

Continuiamo con la nostra avventura nella configurazione di Asterisk. Oggi vedremo come configurare al meglio il file features.conf. A che serve? Attraverso questo file possiamo definire il “parcheggio” delle chiamate, il trasferimento semplice o assistito e quali tasti dobbiamo premere per attivare o disattivare la registrazione delle chiamate. A cosa ci serve parcheggiare una chiamata? Facciamo un piccolo esempio. Ci chiamano a casa e rispondiamo dall’interno del salotto. Ci chiedono un dato che abbiamo sul computer. Se non abbiamo un telefono senza fili, parcheggiamo la chiamata, andiamo nel nostro studio (dove si trova il computer), solleviamo la cornetta del telefono dello studio (un altro interno) e premiamo una serie di tasti per ricollegarci con la chiamata parcheggiata. Comodo no?

Cominciamo a settare i vari parametri (versione Asterisk 1.6.0.9):

[general]
parkext => 700               ; L’interno da digitare per parcheggiare una chiamata
parkpos => 701-710        ; Il numero di interni riservati per le chiamate parcheggiate (da 701 a 710) 
context => parkedcalls   ; Il nome del contesto da configurare nel file extensions.conf per permettere il parcheggio delle chiamate

parkinghints = yes        ; Se da un telefono IP vogliamo monitorare (vedere lo stato) delle chiamate parcheggiate dobbiamo settare questo parametro a yes
parkingtime => 45        ; Numero di secondi passati i quali la chiamata parcheggiata viene trasferita all’interno definito nel prossimo parametro

comebacktoorigin = yes    ; Se settiamo questo parametro a yes la chiamata parcheggiata, dopo il tempo definito in parkingtime, tornerà all’interno che la parcheggiò. Se viene settato a no la chiamata sarà trasferita al contesto parkedcallstimeout, estensione “s” e priorità “1” (che dovremo creare nel file extensions.conf)

courtesytone = beep        ; Il suono che ascolterà l’utente parcheggiato quando la sua chiamata verrà “presa” da un interno. Lo stesso suono si ascolterà quando viene iniziata o terminata la registrazione di una chiamata.
parkedplay = caller        ; Con questo parametro decidiamo chi deve ricevere il “beep” quando la chiamata parcheggiata viene ripresa. Le possibili opzioni sono: parked(l’utente parcheggiato), caller(chi chiama l’utente parcheggiato), both(entrambi)
parkedcalltransfers = caller   ; Una chiamata parcheggiata, una volta presa, può essere trasferita a un altro interno. Questo parametro definisce chi e se tale funzione è permessa. callee(chiamato – utente parcheggiato), caller (chi chiama l’utente parcheggiato), both (entrambi). Se settato a no si disabilita questa funzione.

parkedcallreparking = caller   ; Con questa opzione possiamo definire se una chiamata parcheggiata, una volta presa, può o no usufruire della funzione del parcheggio delle chiamate e chi è abilitato. Opzioni: callee(chiamato – utente parcheggiato, caller (chi chiama l’utente parcheggiato), both(entrambi). Se settato a no si disabilita questa funzione.

parkedmusicclass=default    ; La classe di musica in attesa che ascolterà l’utente parcheggiato. (file di configurazione musiconhold.conf) 
transferdigittimeout => 5    ; Numero di secondi di attesa tra la pressione di un numero ed il successivo quando stiamo trasferendo una chiamata.

xfersound = beep        ; Tipo di suono che si ascolterà quando il trasferimento di chiamata assistito ha avuto successo.
xferfailsound = beeperr        ; Il tipo di suono che si ascolterà quando il trasferimento di chiamata assistito non ha avuto successo
pickupexten = *8        ; della funzione pickup parleremo in un prossimo articolo. Per adesso lo lasciamo così.
featuredigittimeout = 2000    ;Numero massimo di millisecondi tra la pressione di un numero ed il successivo al momento dell’attivazione di una delle “features” definite (le troviamo un po’ più avanti).

atxfernoanswertimeout = 30 ; Numero massimo di secondi che squillerà il telefono del destinatario di un trasferimento assistito.

atxferdropcall = no        ; Se chi trasferisce la chiamata con il metodo assistito riattacca prima che il trasferimento sia completato, Asterisk richiama l’interno che ha iniziato il trasferimento di chiamata assistito. Se impostato a yes la chiamata si considera terminata.

atxferloopdelay = 10       ; Numero di secondi dopo i quali la chiamata sarà inviata a chi aveva iniziata il trasferimento di chiamata assistito (funziona solamente se abbiamo settato atxferdropcall = no)
atxfercallbackretries = 2  ; Numero di volte che Asterisk cercherà di richiamare chi ha iniziato il trasferimento di chiamata assistito.

; Tutte le funzionalità descritte qui sotto funzionano solamente se i due canali (i due interni) sono in comunicazione tra di loro (stanno parlando)

; Non funzionano finché non è stata stabilito un “ponte” tra i due canali.

[featuremap]
blindxfer => #
             ; Il tasto da premere sul telefono per iniziare il trasferimento di una chiamata (seguito dal numero dell’interno a cui si vuole trasferire)
disconnect => *           ; Se premiamo l’asterisco in qualsiasi momento la chiamata sarà terminata
automon => *1            ; Sequenza di tasti da premere per iniziare la registrazione della chiamata. Verranno creati due file audio, uno per ogni interlocutore)
atxfer => *2                ; Sequenza di tasti per iniziare un trasferimento di chiamata assistito. 
parkcall => *7              ; Sequenza di tasti per parcheggiare una chiamata. Possiamo usare questa sequenza o *700 come definito all’inizio di questo articolo
automixmon => *3       ; Sequenza di tasti per iniziare la registrazione audio della chiamata. In questo caso si creerà un unico file audio miscelando i due canali audio

; Differenza tra blindxfer e atxfer

;blinxfer: Stiamo parlando con un interno e vogliamo trasferire la chiamata a un altro interno. Premiamo il tasto # e il numero dell’interno a cui la vogliamo.

; trasferire. La chiamata verrà trasferita e il nostro canale chiuso (possiamo riattaccare)

;atxfer: Stiamo parlando con un interno e vogliamo trasferire la chiamata a un altro. Premiamo la sequenza *2 e il numero dell’interno a cui vogliamo trasferire

; la chiamata. Ascolteremo squillare l’interno a cui stiamo trasferendo la chiamata. Quando risponde potremo avvisarlo o commentare la chiamata che gli

;stiamo trasferendo.  Quando riattacchiamo il trasferimento si completerà e i due interni potranno parlare direttamente tra loro.

[applicationmap]
; In questa parte del file possiamo configurare le nostre funzioni personalizzate cioè una serie di tasti attraverso i quali svolgere altre funzioni.

; La sintassi per questo tipo di funzioni personalizzate è la seguente:

;<FeatureName> => <DTMF_sequence>,<ActivateOn>[/<ActivatedBy>],<Application>[,<AppArguments>[,MOH_Class]]
;
FeatureName   -> Il nome della nuova funzione;

; DTMF_sequence –> La sequenza di tasti per attivare la funzione;
ActivateOn    -> Qui si definisce a chi viene eseguita la funzione configurata. Con self  a chi la chiama e con peer all’altro interlocutore. Esempio: configuro una funzione definita dai tasti *9 che permette di ascoltare una determinata canzone. Se pongo self la canzone la ascolterá chi preme la sequenza *9, se ponfo peer la ascolterá l’altro interlocutore.

ActivatedBy   -> Questo parametro definisci chi ha il permesso di attivare la funzione definita. Le opnzioni sono: caller (chi chiama), callee (chiamato), both (entrmani).

; Predefinito è both

Application   -> Il tipo di applicazione che eseguiremo

AppArguments  -> Le opzioni che vogliamo assegnare alla suddetta applicazione

MOH_Class     -> La classe di musica in attesa che ascolterà il canale linero mentre l’altro sarà occupato con l’esecuzione della funzione attivata.

; Esempio
;
test1 => *9,peer,Playback,tt-monkeys,default
; Premendo la sequenza *9 mentre stiamo parlando con un altro interlocutore, quest’ultimo ascolterà la voce tt-monkeys (presente tra le voci installate al

; al momento della compilazione e installazione di Asterisk. Chi ha attivato la funzione, finché questa non finisce, ascolterà la musica in attesa.

; Sia il chiamante che il chiamato possono attivare questa funzione.

_____________________________________________________________________

La parte che segue del file fa riferimento alla possibilità di configurare un altro slot di interni da dedicare al parcheggio delle chiamate con la possibilità di definire un contesto diverso. Può esserci utile se vogliamo differenziare l’utilizzo del parcheggio delle chiamate a determinati gruppi di interni configurati nel nostro centralino. Credo che per una configurazione di base di Asterisk non ci sia bisogno di addentrarci anche in questa parte.

Adesso dobbiamo passare alla modifica del file extensions.conf per rendere accessibili tutte le funzionalità che abbiamo appena definito. Riprendiamo il file come lo avevamo lasciato e aggiungiamo le linee che appaiono in neretto:

nano /etc/asterisk/extensions.conf

[general]
static=yes
writeprotect=no
autofallthrough=yes
extenpatternmatchnew=yes
priorityjumping=yes
clearglobalvars=no

[globals]
luigi=SIP/1000
marco=SIP/1001
DYNAMIC_FEATURES=test1#automon#disconnect#atxfer#parkcall#automixmon#blindxfer

[locale]
exten => 100,1, Answer()
exten => 100,2, Playback(demo-echotest)
exten => 100,3, Echo
exten => 100,4, Playback(demo-echodone)
exten => 100,5, Hangup

exten => 97,1,Answer(2)
exten => 97,n,VoiceMail
exten => 97,n,Hangup()

[fisso]
exten => _00390.,1,Dial(SIP/provider1/${EXTEN},45)
exten => _00390.,n,Hangup

[cellulare]
exten => _00393.,1,Dial(SIP/provider2/${EXTEN},45)
exten => _00393.,n,Hangup

[subscribe]
exten => 701,hint,park:701@parkedcalls
exten => 702,hint,park:702@parkedcalls
exten => 703,hint,park:703@parkedcalls
exten => 704,hint,park:704@parkedcalls
exten => 705,hint,park:705@parkedcalls
exten => 706,hint,park:706@parkedcalls
exten => 707,hint,park:707@parkedcalls
exten => 708,hint,park:708@parkedcalls
exten => 709,hint,park:709@parkedcalls
exten => 710,hint,park:710@parkedcalls

[gruppoa]
include => locale
include => subscribe
include => parkedcalls

[gruppob]
include => local
include => fisso
include => cellulare
include => subscribe
include => parkedcalls

 

__________________________________

Prima di tutto abbiamo settato tra le variabili globali, la variabile DYNAMIC_FEATURES e gli abbiamo assegnato come valori tutte le funzioni definite nel file features.conf. In questo modo le funzioni saranno disponibili in tutto il dialplan. Un altra opzione potrebbe essere quella di attivare questa variabile all’interno di un contesto e in questo modo renderla disponibile unicamente all’interno di quel contesto.

Abbiamo creato un contesto subscribe (vi ricordate della configurazione della parte generale del sip.conf?) e abbiamo definito tutti gli interni dedicati al parcheggio delle chiamate. In questo modo potremo monitorare lo stato di questi interni con i telefoni IP o softphone che permettono questo tipo di configurazione. Alla fine di questo articolo un esempio usando X-Lite

Abbiamo incluso i contesti subscribe e parketcalls nei due contesti che avevamo creato durante la configurazione del sip.conf.

Arrivati a questo punto dobbiamo ricaricare la configurazione di Asterisk.

/etc/init.d/asterisk restart

Apriamo la console:

asterisk –rvvvvvvvvvvvv

e scriviamo:

CLI> features show
Builtin Feature           Default Current
---------------           ------- -------
Pickup                    *8      *8
Blind Transfer            #       #
Attended Transfer                 *2
One Touch Monitor                 *1
Disconnect Call           *       *
Park Call                         *7
One Touch MixMonitor              *3

Dynamic Feature           Default Current
---------------           ------- -------
test1                     no def  *9

Call parking
------------
Parking extension   :      700
Parking context     :      parkedcalls
Parked call extensions:      701-710

Come potete vedere incontreremo tutte le funzionalità come le abbiamo definite nel file features.conf.

Passiamo ad un esempio pratico di come monitorare gli interni dedicati al parcheggio delle chiamate.

Apriamo X-Lite e connettiamoci ad un interno configurato nel sip.conf di Asterisk.

Una volta connessi apriamo, cliccando sulla freccia che compare alla destra dello schermo dl programma, il menu contatti e chiamate. Dovremo vedere qualcosa del genere:

Features1

Clicchiamo con il tasto destro del mouse sulla parola Friends e scegliamo l’opzione Add Contact… Nella finestra che appare nella riga softphone scriviamo 701 e selezioniamo la casella “Show this contact disponibility”. Concludiamo cliccando su Aceptar o Acept (a seconda della versione di X-Lite installata).

Features2

Comparirà l’interno 701 in verde (disponibile).

Ripetiamo la stessa operazione per gli altri nove interni. Alla fine la nostra lista di contatti dovrebbe apparire così:

Features3

Adesso da un interno ne chiamiamo un altro e quando questo risponde lo parcheggiamo digitando *7 La nostra lista di contatti cambierà così:

Features4

Cliccando con il tasto destro del mouse sulla chiamata parcheggiata (l’interno 701) potremo chiamarla e in questo modo parlare con l’interno parcheggiato.

Nel prossimo articolo vedremo come integrare l’applicazione DIAL con le varie funzioni definite in features.conf.

Se nel frattempo volete darci un’occhiata, dalla console di Asteriks digitate il seguente comando:

CLI> core show application dial

vedrete la descrizione dell’applicazione e tutte le varie opzioni disponibili.

Condividi contenuti