Bekannte VOIP-Rufnummern ohne ENUM-Eintrag anrufen

 

Funktioniert nicht mit Asterisk 1.2! Änderung wird demnächst bereitgestellt.

Viele Rufnummern (z.B. die meisten deutschen 018xxx Rufnummern) sind nicht im ENUM hinterlegt. Über ein normales Telefon sind diese Rufnummern nicht so wählbar, dass eine VOIP-Verbindung zu stande kommt. Um dieses Problem zu lösen gibt es mehrere Ansätze, die auf externe Daten zurückgreifen, z.B. über LDAP.

Mir war der Aufwand mit Datenbankeinbindung zu umständlich, ich wollte eine Asterisk-interne Lösung. Die gewählte Lösung beruht auf der Asterisk Datenbank. Diese ist zwar nicht sonderlich konfortabel zu bedienen, aber um 10 oder 20 Rufnummern zu hinterlegen problemlos nutzbar.

Der Eintrag in der extensions.conf sieht so aus:

[raus]  
   
exten => _X.,1,NoOp ;Wir checken die Datenbank vor dem "normalen" wählen
exten => _X.,2,DBGet(voipdial=voip/${EXTEN}) ; sucht in der DB nach der EXTEN und übergibt den "value" an die Variable "voipdial"
  ; wenn kein Eintrag gefunden wird, geht es mit n+101 = 103 weiter !
  ; wenn was gefunden wurde, geht es "normal" weiter
exten => _X.,3,GotoIf($["${voipdial:0:3}" = "SIP"]?4:7) ;{voipdial:0:3}liefert die ersten 3 Zeichen des Strings, bei "SIP" nach 4, sonst nach 7
exten => _X.,4,Dial(${SIP/${voipdial:3},60,Ttr) ;wählt den Eintrag aus der Datenbank mit SIP-Protokoll
exten => _X.,5,Dial(Capi/797633:${EXTEN},60,Ttr) ;wenn nicht erfolgreich, Versuch der gewählten Rufnummer mit ISDN
exten => _X.,6,HangUp ;beendet das Ganze
exten => _X.,7,Dial(IAX2/503400:503400/${voipdial:3},60,Ttr) ;wählt den Eintrag aus der Datenbank mit IAX2-Protokoll
exten => _X.,8,Dial(Capi/797633:${EXTEN},60,Ttr) ;wenn nicht erfolgreich, Versuch der gewählten Rufnummer mit ISDN
exten => _X.,9,HangUp ;beendet das Ganze
exten => _X.,103,Goto(Provider,${EXTEN},1) ;springen zur Weiterverarbeitung (Rufnummer war nicht in der Datenbank)
exten => _X.,104,HangUp ;beendet das Ganze
   



So, nun brauchen wir noch die Datenbankeinträge. Zunächst die Datenbankgrundlagen:

Syntax: database put <Family> <Key> <Value>

"Family" ist dabei beliebig, muß aber bei allen Einträgen gleich sein.
Nehmen wir mal als Beispiel

"Family" = voip,
"Key" ist die Rufnummer die Du eintragen möchtest, also z.B. 491627654321
"value" ist das, was Du als "Ergebnis" zurückhaben möchtest wenn Du die Datenbank abfragst:
zu verwendendes Protokoll, VOIP-Rufnummer@Provider, also z.B. SIP01627654321@nikotel.com.
Ich arbeite mit Protokoll= SIP oder IAX, genausogut währe S oder I möglich (dann {voipdial:1})

Die Speicherung eines Eintrages geht dann wie folgt:

Auf dem CLI> prompt des Asterisk eingeben: database put voip 01627654321 SIP491627654321@nikotel.com

Alle Einträge anzeigen: database show

Weitere Infos zur Asteriskinternen Datenbank gibt es unter voip-info.org/tiki-index.php?page=Asterisk+Database .

 

 

zurück

Stand: 11.12.2005