Die Einstellungen für eingehende Anrufe haben wir bereits in den letzten Posts behandelt. Um ausgehende Anrufe ENUM-gesteuert über VoIP zu routen, wird ein Asterisk Makro im Dialplan benötigt. Dieses prüft zunächst, ob SIP oder IAX Einträge für die betreffende Rufnummer verfügbar sind. Falls ja, nutzt das Makro den priorisierten Weg zur Anwahl des Teilnehmers.

Falls nicht, wird die gewählte Nummer per Standard-Dial Kommando gewählt - in der Regel also über das Festnetz.

; extensions.conf

[default]
; Wird vor einem ausgehenden Gespräch die 07 gewählt, 
; beruecksichtigt der Asterisk ENUM, wenn ein Eintrag auffindbar ist.
exten => _07X.,1,Answer
exten => _07X.,n,Macro(enum-call,mobile,${EXTEN:4})


; adaptiert von http://www.e164.org/wiki/AsteriskExamples
[macro-enum-call]
exten => s,1,Set(CALLERID(NUM)=493076771840)
exten => s,n,Set(counter=0)
exten => s,n,Set(DS=0)
exten => s,n,Set(count=${ENUMLOOKUP(+${ARG2},ALL,c,e164.org)})
exten => s,n,NoOp("${count} Eintraege fuer Rufnummer ${ARG2} vorhanden.")
exten => s,n,GotoIf($["${count}" = "0"]?noenum)
exten => s,n(start),GotoIf($["${counter}" >= "${count}"]?end)
exten => s,n,Set(counter=$[${counter}+1])
exten => s,n,Set(ENUM=${ENUMLOOKUP(+${ARG2},ALL,,${counter})})
exten => s,n,NoOp("Eintrag: ${ENUM})
exten => s,n,GotoIf($["${LEN(${ENUM})}" = "0" ]?start)
exten => s,n,GotoIf($["${ENUM:0:3}"="sip"]?sip)
exten => s,n,GotoIf($["${ENUM:0:3}"="iax"]?iax:start)
exten => s,n(sip),Set(DS=$[${DS}+1])
exten => s,n,Set(DIALSTR${DS}=SIP/${ENUM:4})
exten => s,n,NoOp("Dial String: ${DIALSTR${DS}}")
exten => s,n,Goto(start)
exten => s,n(iax),Set(DS=$[${DS}+1])
exten => s,n,Set(DIALSTR${DS}=IAX2/${ENUM:5})
exten => s,n,Goto(start)
exten => s,n(end),Set(counter=0)
exten => s,n(start2),GotoIf($["${counter}" >= "${DS}"]?end2)
exten => s,n,Set(counter=$[${counter}+1])
exten => s,n,Set(DIALSTRING=${DIALSTR${counter}})
exten => s,n,Dial(${DIALSTR${counter}},120)
exten => s,n,GotoIf($[$["${DIALSTATUS}"="CHANUNAVAIL"]|$["${DIALSTATUS}"="CONGESTION"]]?start2:hangup)
exten => s,n(end2),NoOp("Ende2.")
exten => s,n,Goto(${ARG2},${ARG3},1)
exten => s,n(hangup),Hangup
exten => s,n(noenum),NoOp("Keine ENUM Eintraege - Nutze Standard Telefonie")
exten => s,n,Dial(${TRUNK}/0${ARG2:2})                ; Diese Zeile sollte das Standard Dial Kommando enthalten.

Sollte jemand für seine Mobilfunknummer ENUM aktiviert haben und statt Mobilfunk lieber sein SIP Telefon nutzen, ruft der so konfigurierte Asterisk das SIP Telefon an - und spart die Mobilfunkgebühren.

Optimal wäre es, wenn der Asterisk auch TEL Einträge berücksichtigen würde. Da TEL Einträge jedoch unversehens hohe Gesprächskosten verursachen könnten (man stelle sich vor, jemand setzt seinen ENUM Eintrag auf eine 0900 Nummer), lassen wir diese Möglichkeit zunächst einmal weg.

Die “07” vorzuwählen kann natürlich keine dauerhafte Lösung sein. Nach einer angemessenen Testphase wird die “07” durch die “0” ersetzt.