Appunti su extensions.conf

Chiamare in uscita con diversi numeri a seconda di che interno chiama

Questo sistema puo` essere usato in generale per eseguire comandi personalizzati a seconda di che interno sta eseguendo la chiamata.

Se abbiamo diversi interni, alcuni dei quali vogliamo che escano con un numero speciale, mentre tutti gli altri con un numero "di base", possiamo usare una configurazione come questa. In questa configurazione tutti gli interni "generici" chiamano con l'istanza "ehiweb77", mentre l'interno 178 chiama con l'istanza "ehiweb78", cosi` come l'interno 179 chiama con l'istanza "ehiweb79", e allo stesso modo l'interno 180 con l'istanza "ehiweb80". Dopo ogni comando di Dial viene eseguito un goto alla riga relativa al risultato contenuto nella variabile DIALSTATUS.

exten => _0./178,1,Dial(SIP/ehiweb78/${EXTEN:1})
exten => _0./178,n,Goto(${DIALSTATUS})
exten => _0./179,1,Dial(SIP/ehiweb79/${EXTEN:1})
exten => _0./179,n,Goto(${DIALSTATUS})
exten => _0./180,1,Dial(SIP/ehiweb80/${EXTEN:1})
exten => _0./180,n,Goto(${DIALSTATUS})
exten => _0.,1,Dial(SIP/ehiweb77/${EXTEN:1})
exten => _0.,n,Goto(${DIALSTATUS})
exten => _0.,n(NOANSWER),Hangup
exten => _0.,n(BUSY),Busy(30)
exten => _0.,n(CONGESTION),Congestion(30)
exten => _0.,n(CHANUNAVAIL),Congestion(30)
exten => _0.,n(CANCEL),Hangup

Se avessimo un trunk ISDN anziche` SIP, potremmo allo stesso modo impostare il caller ID in uscita prima del dial, piu` o meno cosi`. In questo caso non uso diversi comandi di dial a seconda di che interno sta chiamando, ma uso diversi comandi di set callerid e poi dopo aver fatto il set eseguo un dial.

exten => _0./178,1,Set(CALLERID(num)=05111178)
exten => _0./179,1,Set(CALLERID(num)=05111179)
exten => _0./180,1,Set(CALLERID(num)=05111180)
exten => _0.,1,Dial(DAHDI/g0/${EXTEN:1})

Configurazione di esempio generica

Questo e` un esempio di extensions.conf per Asterisk 1.6. Qui provo a usare una feature sperimentale di Asterisk 1.6, quella della creazione automatica delle entry in extensions.conf per gli interni e per gli hint. E` una configurazione molto semplice (e peraltro contiene incongruenze, per esempio nei numeri degli interni).

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

[globals]

; "globals" e` vuoto in questo esempio.


; #########################################################
; il context default dove non dovrebbe finire
; nulla, pero` siccome il sip.conf vuole un context
; dove mettere la roba che entra e che non sa dove mettere
; l'ho fatto.
; #########################################################

[default]

; default e` volutamente vuoto



; ##############################
; Il context per i miei interni
; ##############################

[interni]


;;; Gestione del dialstatus (risultato della chiamata col comando Dial)
;;; La faccio centralmente cosi` non devo ripeterla per ogni interno.
;;; Ho le variabili ${chiamante} e ${chiamato} che contengono i numeri del CID
;;; del chiamante e dell'interno chiamato (questo solo se la chiamata viene da un altro interno)
;;; Faccio anche un controllo se la chiamata e` stata oggetto di un "blind transfer", e se lo e`
;;; stata la tratto in modo particolare.

exten => gest_dialstatus,1,NoOp(Status ${DIALSTATUS} Chiamante ${chiamante} Chiamato ${chiamato} BlindT ${BLINDTRANSFER} AttT ${TRANSFERERNAME})

; se non non c'e` stato blind transfer, vai alla label NoBlindTransfer, altrimenti procedi qui sotto
; questo sistema rimanda la chiamata trasferita al "trasferitore" nel caso in cui il destinatario del
; trasferimento non risponda. Se anche il trasferitore non risponde, va in occupato e amen.
exten => gest_dialstatus,n,GotoIf($[ "x${BLINDTRANSFER}" = "x" ]?NoBlindTransfer)
exten => gest_dialstatus,n,Set(DIALRET=${CUT(BLINDTRANSFER,-,1)});
exten => gest_dialstatus,n,Set(CALLERID(name)=RET_${nomechiamante})
exten => gest_dialstatus,n,Set(CALLERID(num)=${chiamante})
exten => gest_dialstatus,n,Dial(${DIALRET},40)
exten => gest_dialstatus,n,Busy
; fine della gestione della chiamata trasferita

; non c'e` stato blind transfer, trattiamla come una chiamata normale.
exten => gest_dialstatus,n(NoBlindTransfer),Goto(${DIALSTATUS})
exten => gest_dialstatus,n(NOANSWER),Hangup
exten => gest_dialstatus,n(BUSY),Busy
exten => gest_dialstatus,n(CONGESTION),Congestion
exten => gest_dialstatus,n(CHANUNAVAIL),Congestion
exten => gest_dialstatus,n(CANCEL),Hangup
; fine gestione della chiamata "normale"



; Se chiamo il 10, suonano tutti gli interni
; exten => 10,1,Dial(SIP/11&SIP/12&SIP/13&SIP/14&SIP/15&SIP/20&IAX2/13,40)


; hint automatici a 3 cifre. In pratica questa sola riga dovrebbe sostituire tutte quelle degli hint degli interni.
exten => _XXX,hint,SIP/${EXTEN}

; Una sola configurazione dinamica per tutti gli interni a 3 cifre che iniziano per 3
exten => _3XX,1,Set(__PICKUPMARK=${EXTEN})
exten => _3XX,n,Dial(SIP/${EXTEN}&IAX2/${EXTEN},40)
exten => _3XX,n,set(_chiamante=${CALLERID(num)})
exten => _3XX,n,set(_chiamato=${EXTEN})
exten => _3XX,n,goto(gest_dialstatus,1)


; Inclusioni nel context degli interni

; Servizi (segreteria, echo test)
include => servizi
; Sistema di call parking
include => parkedcalls
; Provider per le chiamate uscenti
include => chiamate_uscenti


; ##############################
;     Context per i servizi
; ##############################

[servizi]

; Sistema di paging, usa il vivavoce dei GXP
; richiede due configurazioni sul GXP:
; Allow Auto Answer by Call-Info: YES
; Turn off speaker on remote disconnect: YES
exten => *10,1,SIPAddHeader(Call-Info: answer-after=0)
exten => *10,n,Page(SIP/11&SIP/12)


; chiamando **<interno> si fa il pickup via BLF
; funziona con i GXP-2000 che chiamano quel numero
; quando si pigia un bottone BLF il cui interno
; sta suonando (lampeggia rosso)
exten => _**XXX,1,Pickup(${EXTEN:2})
exten => _**XXX,2,Hangup

; Chiama il 6 per verificare l'eco e la latenza
exten => 6,1,Playback(demo-echotest)  ; Let them know what's going on
exten => 6,2,Echo                     ; Do the echo test
exten => 6,3,Playback(demo-echodone)  ; Let them know it's over

; Chiama 1  per ascoltare la segreteria 1 (numero dell'ufficio)
; la riga "Answer" serve se chiamo la segreteria dal chan IAX.
; exten => 1,1,Answer()
exten => 1,1,VoicemailMain(s1@default)
exten => 1,n,Hangup

; Chiama 2  per ascoltare la segreteria 2 (numero di casa)
;exten => 2,1,VoicemailMain(s2@default)
;exten => 2,n,Hangup

; chiama il 5 per ascoltare la musica
exten => 5,1,Answer
exten => 5,n,MusicOnHold



; ###############################################
; Context da includere per consentire le chiamate
; verso l'esterno
; ###############################################

[chiamate_uscenti]

; Note the 'G2' in the Dial command below. It specifies which group (defined
; in chan_dahdi.conf) to dial, i.e. group 2, and how to choose a channel to use
; in the specified group. The four possible options are:
;
; g: select the lowest-numbered non-busy DAHDI channel
;    (aka. ascending sequential hunt group).
; G: select the highest-numbered non-busy DAHDI channel
;    (aka. descending sequential hunt group).
; r: use a round-robin search, starting at the next highest channel than last
;    time (aka. ascending rotary hunt group).
; R: use a round-robin search, starting at the next lowest channel than last
;    time (aka. descending rotary hunt group).

exten => _0.,1,Dial(DAHDI/G0/${EXTEN:1})
exten => _0.,n,Goto(${DIALSTATUS})
exten => _0.,n(NOANSWER),Hangup
exten => _0.,n(BUSY),Busy(30)
exten => _0.,n(CONGESTION),Congestion(30)
exten => _0.,n(CHANUNAVAIL),Congestion(30)
exten => _0.,n(CANCEL),Hangup

exten => _9.,1,Dial(SIP/ehiweb2/${EXTEN:1})
exten => _9.,n,Goto(${DIALSTATUS})
exten => _9.,n(NOANSWER),Hangup
exten => _9.,n(BUSY),Busy(30)
exten => _9.,n(CONGESTION),Congestion(30)
exten => _9.,n(CHANUNAVAIL),Congestion(30)
exten => _9.,n(CANCEL),Hangup



; ######################################################
; il context dove entrano le chiamate da ehiweb
; ######################################################

[ehiweb]

exten => 0510512345,1,Set(CALLERID(num)=0${CALLERID(num)})
exten => 0510512345,n,Set(CALLERID(name)=${DB(cidname/${CALLERID(num)})})
exten => 0510512345,n,SIPAddHeader(Alert-Info:\;info=due)
exten => 0510512345,n,Dial(SIP/11&SIP/12&SIP/13&SIP/14&SIP/15&SIP/20&IAX2/13,40)
exten => 0510512345,n,VoiceMail(1@default,su)

Asterisk/ExtensionsConf (last edited 2015-11-10 12:27:56 by Kurgan)