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"
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)
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],
; 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"