15.2.2023
Was ist CallThrough? Der Anrufer wählt zunächst eine Einwahlnummer. Per Sprachaufforderung wird er danach aufgefordert die gewünschte Zielnummer einzugeben. In diesem Beispiel wird die Zielnummer erst nach Eingabe des Raute-Symbols abgeschickt. Der Anrufer bekommt dann den Sprachhinweis, dass die gewünschte Verbindung aufgebaut wird. CallThrough kommt zum Beispiel zum Einsatz, wenn aus technischen Gründen eine Durchwahl nicht möglich ist.
Ein Nachteil von Callthrough ist, dass die Nummer nicht über das Impulswahlverfahren gewählt werden kann. Somit sind Wählscheibentelefone und alte Tastentelefone nach dem Impulswahlverfahren nicht geeignet. Außerdem lassen sich die Nummern oft nicht abspeichern, da die notwendige Wählpause nicht abgespeichert werden kann. Manche Softphones können Wählpausen in Form von Kommas realisieren, wobei Komma zum Beispiel eine Pause von 100 Millisekunden erzeugen kann. Wie lange die Pause mindestens sein muss, hängt vom Einzelfall ab.
CallThrough-Routinen kommen auf meinem Asterisk-Server mehrfach zum Einsatz. Mein Telefon-Server ist über Sipgate, Sipcall, und Voiphone aus den öffentlichen Netzen erreichbar. Die Inselnetze von Opensips, Iptel, Antisip und Sip2Sip sind ebenfalls erreichbar, um nur einige Netze zu nennen. Da diese Einwahlnummern keine Durchwahlen ermöglichen, muss CallThrough zum Einsatz kommen. Nachfolgend Beispiele, wie sich CallThrough für Asterisk ohne AGI-Skripte realisieren lässt.
Callthrough für die Asterisk-Konfiguration: Nachfolgend eine CallThrough-Funktion für die extensions.conf, bei der aber die eingetippten Nummern immer mit der Raute abgeschlossen werden müssen:
[general] autofallthrough=no static=yes writeprotect=no [telefone] ; telefone context telefone ; HIer stehen die Extensions und so weiter [callthrough] ; Prompt caller to key-in number to be dialed and to finish with # ; Nach der Ansage Nummer (ev. mit Vorwahl) waehlen und mit # bestaetigen ; Beim Vertippen * und von vorne anfangen exten => s,1,Ringing() exten => s,2,Answer() exten => s,3,Set(NR=) exten => s,4,Background(vm-enter-num-to-call) exten => s,5,Background(vm-then-pound) exten => s,6,Set(TIMEOUT(response)=20) exten => s,7,WaitExten exten => s,8,Playback(vm-dialout) ; exten => _X,1,Set(NR=${NR}${EXTEN}) exten => _X,2,Goto(s,6) exten => *,1,Goto(s,3) exten => #,1,NoOp(${NR}) exten => #,2,Playback(vm-dialout) exten => #,3,NoOP(Dialing Now) exten => #,4,NoOp(Dialing ${NR}) exten => #,5,Dial(SIP/${NR},45,tT) ; nur zu Sip-Telefonen, mit Rufweiterleitung exten => #,6,Playback(beep) ; macht Beep, wenn keine Nebenstellen gewaehlt exten => #,7,Goto(telefone,${NR},1) ; springt zum Context telefone exten => #,n,HangUp() ; Beispiel, wie ein Aufruf der Callthrough erfolgen könnte: [callcentric-in] ; von aussen 17771234567 waehlen (Nummer ist im Beispiel fiktiv) exten => 17771234567,1,Goto(callthrough,s,1)
Wie die Funktion [callthrough] im obigen Beispiel funktioniert? Die gezeigte extensions.conf Datei definiert eine sogenannte „context“ für die Verarbeitung von Anrufen in Asterisk, die „callthrough“ heißt. Diese spezielle „context“ wird verwendet, um eine „callthrough“-Funktion zu implementieren, bei der der Anrufer eine Nummer eingeben kann, die er anrufen möchte, und das System wird ihn automatisch anrufen und mit der gewählten Nummer verbinden.
Die Funktionsweise der callthrough-Funktion ist wie folgt: „exten => s,1,Ringing()“ entspricht der 1. Zeile.
In den Zeilen 1-7 wird der Anrufer aufgefordert, die Nummer einzugeben, die er anrufen möchte, indem er die Nummer wählt und mit # bestätigt.
In Zeile 8 wird eine Audio-Ansage abgespielt, um den Anrufer darüber zu informieren, dass der Anruf durchgeführt wird.
In den Zeilen 9-13 wird die eingegebene Nummer ausgewertet, wobei der Anrufer eine Ziffer nach der anderen wählen kann. Wenn er eine falsche Ziffer wählt, kann er durch Drücken von * von vorne beginnen.
In den Zeilen 14-19 wird die eingegebene Nummer überprüft und der Anruf wird ausgeführt, wenn die Eingabe mit # bestätigt wird. Es wird versucht, die gewählte Nummer über das SIP-Protokoll zu erreichen, und wenn der Anruf erfolgreich ist, wird der Anrufer zur gewählten Nummer weitergeleitet. Wenn keine Nebenstelle gewählt wurde, wird der Anrufer durch ein Beep-Geräusch darauf aufmerksam gemacht und der Anruf wird beendet. Wenn der Anruf nicht erfolgreich ist, wird der Anrufer zur Telefonfunktion weitergeleitet.
Sip.conf: In der sip.conf muss dann folgendes stehen, damit in diesem Beispiel über Callcentric reingerufen werden könnte:
[general] register => 17771234567:passwortblabla@sip.callcentric.net:5060/17771234567 ; Callcentric [callcentric] type=peer context=callcentric-in host=sip.callcentric.net fromdomain=sip.callcentric.net defaultuser=17771234567 fromuser=17771234567 secret=passwortblabla insecure=port,invite disallowed_methods=UPDATE directmedia=no videosupport=no disallow=all allow=ulaw port=5060
Mit Callcentric wollte ich hier nur das Prinzip zeigen. So kann es zum Beispiel auch mit Sipgate, Iptel, AntiSip und Opensips machen, um ein paar Beispiele zu nennen. In der Praxis funktioniert das Einwählen über Callcentric bei mir leider nicht mehr. Pragmatische Lösung: Eintragen einer zweiten Callcentric-Nummer in die Fritzbox und eine Rufumleitung auf den Asterisk-Server mit Hilfe von zwei internen SIP-Nummern, wobei die eine davon auf der FritzBox registriert ist. Nicht elegant, aber es klappt einwandfrei. Man muss sich zu helfen wissen.
Der Vollständigkeit halber noch ein Beispiel aus der extensions.conf, wie man umgekehrt mit Vorwahlen über SIP ein ein externes Netz wie Callcentric telefonieren:
; Weiterleitung auf Callcentric exten => _8866X.,1,Dial(SIP/${EXTEN:4}@callcentric,60,tT) ; schneidet 8866 vorne ab exten => _1777[0-9].,1,Dial(SIP/${EXTEN}@callcentric,60,tT) ; alles was mit 1777 beginnt
Wichtig: Damit das Zusammenspiel von sip.conf und und extensions.conf funktioniert, ist für das Verständnis darauf zu achten, wo in diesem Beispiel die Strings „callcentric“ und „callcentric-in“ und „17771234567“ vorzufinden sind.
Es werden zwei Möglichkeiten mit Pattern Matching angeboten. 1. Über die Vorwahl 8866. 2. Da alle Callcentric-Nummern mit 1777 anfangen, bietet es sich an alle gewählten Nummern, die mit 1777 beginnen, auf Callcentric zu leiten.
CallThrough mit einem AGI-Script für Python: Der Vorteil ist, dass dieses Verfahren ohne die abschließende Eingabe der Raute auskommt. Wenn vier Sekunden lang keine Eingabe von Ziffern erfolgt, wird die bis dahin eingetippte Abfolge von Nummern abeschickt und an Asterisk übergeben.
Asterisk AGI-Skript in Python für die Rufweiterleitung mit CallThrough – 14. Februar 2023: Wird dieses AGI-Skript für Python 2.7 oder Python 3 durch einen Telefonanruf aufgerufen, wird der Anrufer durch eine Sound-Datei aufgefordert seine gewünschte Zielnummer in seine Telefontastatur einzugeben. Das Skript wartet maximal vier Sekunden, bis die nächste Ziffer eingegeben wird. Wenn die 4 Sekunden ohne eine Aktion des Anrufers verstrichen sind, wird die bisher eingetippte Abfolge von Ziffern als Zahl an Asterisk übergeben, um damit in diesem Fall eine Nummer zu wählen. Es dient also dazu CallThrough zu ermöglichen. Dieser Artikel stellt auch eine Alternative für Callthrough ohne AGI-Skripte vor. – weiter – |
Asterisk-Telefonserver auf einem Raspberry Pi – Installation, Konfiguration, Programmierung, SIP, IAX2, AGI-Skripte, Sicherheit und Tipps zum praktischen Betrieb – 2.11.2022: Diese Seite richtet sich an jene, welche einen Asterisk-Telefon-Server auf einem Raspberry Pi betreiben möchten und später ein kleines Netzwerk aus Asterisk-Servern planen, um ein eigenständiges Telefonnetz aufzubauen. Los geht es mit der Installation von Raspbian und Asterisk auf einem Raspberry Pi und dann nach Lust und Laune immer tiefer in die Programmierung von Asterisk. Die Themen werden laufend erweitert.
Selbstverständlich muss es nicht unbedingt ein Raspberry Pi sein. Andere Linux-Rechner gehen auch. – weiter – |