Wenn from-pstn-toheader ohne „DID“ und ohne „to“ auskommen muss

  • Beitrags-Autor:
  • Beitrags-Kategorie:Software & Co.
  • Lesedauer:5 min Lesezeit

Zur Abwechslung ein Post zu Telefonanlagen auf Asterisk-Basis wie der (teil-)opens-source-Lösung FreePBX. Einige Leser erahnen sicher schon, worum es geht: um böse, böse, böse gratis-Telefondienstanbieter wie die von Sipgate Basic oder Fonial Free. Man kann dort mehrere Telefonnummern bekommen, aber wenn man die einzelnen Trunks anmeldet, bekommt man gar nicht mit, über welchen ein Gespräch eingegangen ist, weil die Zielrufnummer nicht mitgeliefert wird. Ohne diese hat die Telefonanlage (die einen solchen Anruf annimmt) gar keine Chance, zu unterscheiden, für wen der Anruf gilt. Doch es gibt eine Lösung!

Ich bin ein großer Fan von Herrn Griebsch, der in seiner „Themenreihe FreePBX“ mit einem echt netten sächsischen Dialekt in vielen Videos erklärt, wie diese Lösung funktioniert oder welche Bedeutung einige Einstellungen haben. Bei ihm habe ich mehr oder weniger die Handhabung von FreePBX gelernt. Er hat auch eine gute Anleitung für Sipgate Basic erstellt, in der mein Problem das erste Mal erwähnt wurde. Wenn im SIP-Protokoll der Benutzername als Adressat genannt wird und nicht die Zielrufnummer, kann der Anruf für jeden gelten. Bei einem einfachen Telefon ist das kein Problem, denn es klingelt bei jedem ankommenden Anruf. Eine Telefonanlage darf es sich aber nicht leisten, alle angeschlossenen Telefone klingeln zu lassen. Wenn man bei Sipgate Basic nur eine Telefonnummer nutzt (zulässig wären zwei aber nur ein Benutzer, der immer angeklingelt wird), ist die Sache recht einfach.

In mein Beispiel wird die Sipgate-Rufnummer 0123456789 angerufen. Ich setze sie mir in __DID für spätere Verwendung. Doch zuerst muss ich den Kontext erweitern, in dem die Anrufe des Trunks ankommen. In der Konfiguration des Trunks für Sipgate (im Adminbereich unter connectivity -> trunks) wechselt man in den Reiter „pjsip settings“ und uns setzt im Unterrreiter „general“ in der Zeile „context“ einen erfunden aber eindeutigen Namen des Trunks ein. In unserem Fall ist es from-trunk-pjsip-Sipgate-phone-custom. Damit leiten wir alles um, war über die Sipgate-Registrierung geht (dem sog. Trunk) in den Kontext, den wir nach Belieben an einer anderen Stelle erweitern können. Die Einstellungen, die nicht aus dem Web-GUI von FreePBX stammen und mit etwas Sachkenntnis frei programmiert werden können, werden nicht in extensions.conf oder extensions_additional.conf gespeichert, denn diese sind für den Benutzer Tabu! Im Adminbereich im Menü admin gibt es den Unterpunkt config edit wo solche „custom“-Konfigurationsdateien bearbeitet werden können, darunter die extensions_custom.conf welche am beste dafür geeignet wäre. Dort trage ich ein:

[from-trunk-pjsip-Sipgate-phone-custom]
exten => _.,1,Set(__DID="0123456789")
 same => n,NoOp(${CONTEXT} -> ${EXTEN} -> ${DID} as defined in  extensions_custom.conf)
 same => n,Morsecode(hallo)
 same => n,Answer()
 same => n(dest-ext),Goto(from-pstn,0123456789,1)

Die bereits erwähnte eingespeicherte Variable DID dient uns nun in der Folgezeile dazu, einen Log-Eintrag mit interessanten Daten zu erzeugen. Danach wird zu Test-Zwecken per Morse-Code ein „hallo“ gepiept und getuutet. Danach beantwortet die Anlage den Anruf gegenüber Sipgate (Sipgate weiß nun, dass unsere Telefonanlage den Anruf übernommen hat) und in der letzten Zeile („n“ ist eine fortlaufende Nummer aber die „dest-ext“ ist für andere Scripte eine namentlich adressierbare Zeile) wird mit „Goto“ auf den Kontext „from-pstn“ umgeleitet und die Zielrufnummer 0123456789 mitgegeben.

Damit kann die Telefonanlage schon was anfangen. Im Kontext from-pstn, der für die eingehende Anrufe zuständig ist, wird dann geschaut, welche Regel für diese Telefonnummer gilt. (Das -toheader würde selbst versuchen die Rufnummer zu ermittelt aber genau diese wird ja nicht mitgeliefert!) Diese Regeln nennt man im Englischen „Inbound Routes“ und im FreePBX-Admin findet man sie im Menü „Connectivity“ (da wo auch die Trunks waren). Hier muss man in einer Regel die „DID number“ eintragen. Und ratet mal, welche das ist? Die 0123456789 natürlich – aber nur in diesem Beispiel. Bei Euch ist es die Sipgate-Teleonnummer (und zwar überall an stelle von 0123456789).

Was ich mache, ist:

  • Alle Anrufe aus Sipgate-Trunk in einen eigenen Kontext („Arbeitsbereich“ oder „Abteilung“ wenn man so will) umleiten
  • Eine Variable bei diesem „Anruf“ (man spricht fachmännisch von „Channels“) hinterlegen
  • Den Anruf von Sipgate übernehmen („ich kümmere mich darum“)
  • Und den Anruf mit der richtigen Zielrufnummer wieder in den „Eingang“ umleiten, damit die Eingang-Regeln eingesetzt werden können

Das lässt sich natürlich steigern und im Folgebeitrag werde ich zeigen, wie man mit mehreren Nummer ohne to-header umgehen kann.