(changelog debian)
[asterisk-config-auf.git] / etc-asterisk / extensions.conf
index f35450e..8ea40d3 100644 (file)
@@ -226,10 +226,10 @@ exten => s,n,Dial(IAX2/${ARG1}&SIP/${ARG1},30,tThH)       ; on appelle sur SIP et IAX
 ; FIXME : activer les options w,W et d au niveau du Dial ci-dessus dès que tout sera ok (cf "show application Dial")
 exten => s,n,Goto(s-${DIALSTATUS},1)                   ; saut en fonction du status de fin de sonnerie
                                                        ; (parmis : NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)
-exten => s-NOANSWER,1,Voicemail(u${MACRO_EXTEN}@AUF)   ; Si pas de reponse : vers boite vocale avec message "indisponible"
-exten => s-BUSY,1,Voicemail(b${MACRO_EXTEN}@AUF)       ; Si occupé : vers boite vocale avec message "occupé"
+exten => s-NOANSWER,1,Voicemail(${MACRO_EXTEN}@AUF,u)  ; Si pas de reponse : vers boite vocale avec message "indisponible"
+exten => s-BUSY,1,Voicemail(${MACRO_EXTEN}@AUF,b)      ; Si occupé : vers boite vocale avec message "occupé"
 exten => _s-.,1,Goto(s-NOANSWER,1)                     ; Tout le reste : traité comme non-réponse
-exten => a,1,VoicemailMain(${MACRO_EXTEN}@AUF)         ; Si "*" appuyé : VoicemailMain
+exten => a,1,VoicemailMain(${MACRO_EXTEN}@AUF)         ; Si "*" appuyé pendant Voicemail : VoicemailMain
 
 [macro-AUFConference]
 ; Macro pour appel conference (prononce d'abord le numéro de la conférence)
@@ -295,8 +295,38 @@ exten => 5,n,Hangup()
 exten => s,200,Playback(system-crashed)
 exten => s,300,Playback(feature-not-avail-line)
 
+[macro-AUF-sip-caller-id]
+; Indique un Caller ID "correct" en cas d'un appel SIP
+; ( inspiration : http://www.loligo.com/asterisk/sipedu/current/configs/extensions.conf )
+; Si le Caller ID contient un deja @ : c'est sans doute l'adresse SIP, on arrete la
+exten => s,1,Set(rightampersand=${CUT(CALLERID(name),@,2)})
+exten => s,n,GotoIf(${ISNULL(${rightampersand})}?setpri:endmacro)
+; Sinon, le Caller ID sera IIINNN@sip.auf.org (III = indicatif de l'implantation
+; NNN = numero dans l'implantation)
+exten => s,n(setpri),Set(CALLERID(num)=${CALLERID(num):2}@sip.auf.org)
+; S'il n'y a pas de nom d'utilisateur, on met "AUF"
+exten => s,n,GotoIf(${ISNULL(${CALLERID(name)})}?setid:endmacro)
+exten => s,n(setid),Set(CALLERID(name)=AUF)
+exten => s,n(endmacro),NoOp
 
-; pour ceux qui veulent ajouter des macros locales
+[macro-AUF-enumdial]
+; Cherche le correspondant au numero de telephone, en mode ENUM, puis l'appelle
+; argument 1 : le numero a chercher
+; argument 2 : la technologie (iax2 ou sip)
+; argument 3 : la zone DNS (freenum.org, e164.arpa, e164.info, e164.org, ...)
+exten => s,1,NoOp(ENUM search number ${ARG1} for tech ${ARG2} in zone ${ARG3})
+exten => s,n,Set(number=${ARG1})
+exten => s,n,Set(tech=${ARG2})
+exten => s,n,Set(zone=${ARG3})
+exten => s,n,Set(counter=0)
+exten => s,n,Set(count=${ENUMLOOKUP(${number},${tech},c,,${zone})})
+exten => s,n,While($["${counter}"<"${count}"])
+exten => s,n,Set(counter=$[${counter}+1])
+exten => s,n,Dial(${tech}/${ENUMLOOKUP(${number},${tech},,${counter},${zone})},30,tThH)
+exten => s,n,EndWhile
+
+
+; pour ceux qui doivent ajouter des macros locales
 #include "auf/extensions-macros.local"
 
 
@@ -339,33 +369,56 @@ exten => *11,n,Echo
 exten => *11,n,Playback(demo-echodone)
 exten => *11,n,Hangup
 
-[macro-isn-callerid]
-; Indique le bon Caller ID en cas d'un appel SIP vers ISN (ITAD Subscriber Numbers, www.freenum.org)
-; ( inspiration : http://www.loligo.com/asterisk/sipedu/current/configs/extensions.conf )
-; Si le Caller ID contient un @ : c'est sans doute l'adresse SIP, on arrete la
-exten => s,1,Set(rightampersand=${CUT(CALLERID(name),@,2)})
-exten => s,n,GotoIf(${ISNULL(${rightampersand})}?setpri:endmacro)
-; Sinon, le Caller ID sera IIINNN@sip.auf.org (III = indicatif de l'implantation
-; NNN = numero dans l'implantation)
-exten => s,n(setpri),Set(CALLERID(num)=${CALLERID(num):2}@sip.auf.org)
-; S'il n'y a pas de nom d'utilisateur, on met "AUF"
-exten => s,n,GotoIf(${ISNULL(${CALLERID(name)})}?setid:endmacro)
-exten => s,n(setid),Set(CALLERID(name)=AUF)
-exten => s,n(endmacro),NoOp
-
-[isn]
-; Appels vers prefixes ITAD : 00*numero*domaine
-; Voir http://www.freenum.org
-exten => _${AUFPREFIX}*.,1,Goto(isn-suite,${EXTEN:$[${AUFPREFIXLEN} + 1]},1)
+[AUF-00etoile]
+; Appels vers autres systemes externes : ENUM (ISN ou e164), sipbroker, ...
+; Appels avec 00** : sipbroker
+exten => _${AUFPREFIX}**.,1,Goto(AUF-sipbroker,${EXTEN:$[${AUFPREFIXLEN} + 2]},1)
+; Appels vers prefixes 00* : systeme ENUM
+exten => _${AUFPREFIX}*.,1,Set(numero=${EXTEN:$[${AUFPREFIXLEN} + 1]})
+; Si le numéro comporte un "*" alors on va vers ISN, sinon e164
+exten => _${AUFPREFIX}*.,n,Set(isndomain=${CUT(numero,*,2)})
+exten => _${AUFPREFIX}*.,n,GotoIf(${ISNULL(${isndomain})}?e164:isn)
+exten => _${AUFPREFIX}*.,n(e164),Goto(AUF-enum-e164,${numero},1)
+exten => _${AUFPREFIX}*.,n(isn),Goto(AUF-enum-isn,${numero},1)
+
+[AUF-enum-isn]
+; Appel ISN - voir http://www.freenum.org
+exten => _X.,1,NoOp(Call ENUM/ISN ${EXTEN})
+; On coupe les appels de plus de 5 heures
+exten => _X.,n,Set(TIMEOUT(absolute)=18000)
+; On configure le Caller ID pour un appel SIP
+exten => _X.,n,Macro(AUF-sip-caller-id)
+; On appelle le numero SIP correspondant
+exten => _X.,n,Macro(AUF-enumdial,${EXTEN},sip,freenum.org)
+exten => _X.,n(failed),Answer
+exten => _X.,n,Playback(invalid)
+exten => _X.,n,Wait(3)
+exten => _X.,n,Playback(invalid)
+exten => _X.,n,Hangup
+exten => h,1,Hangup
+exten => i,1,Hangup
+exten => T,1,Hangup
 
-[isn-suite]
-exten => _X.,1,Macro(isn-callerid)
+[AUF-enum-e164]
+exten => _X.,1,NoOp(Call ENUM/e164 ${EXTEN})
 ; On coupe les appels de plus de 5 heures
 exten => _X.,n,Set(TIMEOUT(absolute)=18000)
-; On cherche le numero SIP correspondant (systeme ENUM)
-exten => _X.,n,Set(isnresult=${ENUMLOOKUP(${EXTEN},sip,,1,freenum.org)})
-exten => _X.,n,GotoIf($["${isnresult}"=""]?failed:success)
-exten => _X.,n(success),Dial(SIP/${isnresult},100)
+; On cherche+appelle sur les differents services public ENUM, en IAX2
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,e164.arpa)
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,e164.org)
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,e164.info)
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,enum.org)
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,e164.voxgratia.net)
+; exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},iax2,e164.televolution.net)
+; On configure le Caller ID pour un appel SIP
+exten => _X.,n,Macro(AUF-sip-caller-id)
+; On cherche+appelle sur les differents services publics ENUM, en SIP
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,e164.arpa)
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,e164.org)
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,e164.info)
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,enum.org)
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,e164.voxgratia.net)
+exten => _X.,n,Macro(AUF-enumdial,+${EXTEN},sip,e164.televolution.net)
 exten => _X.,n(failed),Answer
 exten => _X.,n,Playback(invalid)
 exten => _X.,n,Wait(3)
@@ -375,6 +428,29 @@ exten => h,1,Hangup
 exten => i,1,Hangup
 exten => T,1,Hangup
 
+[AUF-sipbroker]
+exten => _X.,1,NoOp(Call *${EXTEN}@sipbroker.com)
+exten => _X.,n,Set(TIMEOUT(absolute)=18000)
+;exten => _X.,n,Macro(AUF-sip-caller-id)
+; exten => _X.,n,Dial(SIP/*${EXTEN}@sipbroker.com)
+exten => _X.,n,Dial(SIP/sipbroker-out/*${EXTEN},30,tThH)
+exten => _X.,n,Goto(s-${DIALSTATUS},1) ; saut en fonction du status de fin de sonnerie
+exten => s-CONGESTION,1,Playback(cannot-complete-otherend-error)
+exten => s-CONGESTION,n,Wait(3)
+exten => s-CONGESTION,n,Playback(cannot-complete-otherend-error)
+exten => s-CONGESTION,n,Hangup
+exten => s-BUSY,1,Playback(on-busy)
+exten => s-BUSY,n,Hangup
+exten => s-.,1,Answer
+exten => s-.,n,Playback(invalid)
+exten => s-.,n,Wait(3)
+exten => s-.,n,Playback(invalid)
+exten => s-.,n,Hangup
+exten => h,1,Hangup
+exten => i,1,Hangup
+exten => T,1,Hangup
+
+
 [AUF-debut]
 #include "auf/extensions-debut.local"
 ; ce fichier contient les extensions a ajouter au debut du contexte [AUF],
@@ -410,8 +486,8 @@ include => AUF-local
 ; Appels vers les postes internationaux AUF
 include => AUF-global
 
-; Appels vers ISN (ITAD Subscriber Numbers / www.freenum.org)
-include => isn
+; Appels vers autres systemes externes : ENUM (ISN ou e164), sipbroker, ...
+include => AUF-00etoile
 
 ; Pour surcharges finales, si besoin (autres contextes, surcharges de contextes, etc)
 #include "auf/extensions-final.local"