Florian Amrhein

Asterisk: extensions.ael

www.vso.de

-> VoIP -> extensions.ael

Seit Version 1.2 von Asterisk unterstützt die Software eine ausgewachsene Programmiersprache um einen Rufnummernplan zu schreiben. Diese Sprache ist mächtiger und zudem übersichtlicher als die alte Form der Definition eines Rufnummernplanes über die Datei extensions.conf

Diese extensions.ael ist das Herzstück unserer Telephonanlage. Hier definieren wir, was mit eingehenden Anrufen passieren soll, also welche Telephone wie lange klingeln sollen, wann welcher Anrufbeantworter dran gehen soll, und natürlich wer durch wählen welcher Nummern welche Teilnehmer über welchen Anbieter anwählt.

1. Raustelephonieren


Der erste Teil zeigt, wie Asterisk dazu bewegt werden kann, ausgehende Gespräche von einem Telephon, hinein in die weite Welt, zu vermitteln:

// ************* Raustelephonieren *****************

// Makro: telephoniert hinaus in die weite welt
// dev: Protokoll (z.B. SIP)
// ext: Extension des Anbieters, wie in sip.conf konfiguriert
// nummer: zu wählende Nummer, im normal üblichen Format
// pkz: 1 für Florian, 2 für Mareike (PersonenKennZiffer)
// callernummer: Nummer, die dem Anrufer signalisiert werden soll
macro waehle( dev, ext, nummer, pkz, callernumber ) {
	agi(showcallee.php|${nummer}|${pkz});
	Set(CALLERID(name)=${callernumber});
	Dial(${dev}/${ext},240,g);
	SendText(Beendet);
	Hangup();
};

context rauswaehlen {
	// fuer florian
	_10.  => { // dus.net
	   &waehle(SIP,${EXTEN:1}@000123456,${EXTEN:1},1,49228243546);
	};
	_150. => { // sipgate
	  &waehle(SIP,${EXTEN:2}@87654321,${EXTEN:2},1,49228975421);
	};
	_190. => { // dus.net: Anonym
	  &waehle(SIP,${EXTEN:2}@000123456,${EXTEN:2},1,anonymous);
	};


	// fuer mareike
	_20.  => { // dus.net
	   &waehle(SIP,${EXTEN:1}@000654321,${EXTEN:1},2,49228132435);
	};
};


Erklärung hierzu:
  1. Als erstes wird ein Makro definiert, mit dem Rausgewählt wird. Dieses bekommt Parameter wie das Protokoll (SIP), die anzurufende Rufnummer, usw.
  2. Danach wird der Kontext für ausgehende Anrufe (rauswaehlen) deklariert. Jedem angeschlossenen Telephon (Also meinem VoIP-Telephon) wird diesr Kontext in der #sip.conf# zugewiesen, so daß es die Möglichkeit erhält, raustelephonieren zu können. Dies hat Sicherheitsgründe: Es sind ja auch andere, weniger previligiertere, Telephone denkbar, die nicht überall hin raus telephonieren können sollen. Auch sollen eingehende Telephonate klar über getrennte Kontexte von ausgehenden Telephonaten getrennt werden.
  3. "_10. => ..." definiert, was passiert, wenn Die Numernfolge 10 gefolgt von beliebig vielen weiteren Nummern gewählt wird. In diesem Fall bedeutet daß, daß ich (Personenkennziffer 1) eine Rufnummer (die grundsätzlich mit einer 0 beginnt, da bei mir die Vorwahl immer mitgewählt werden muß) gewählt habe. Danach wird das wähle-Makro mit den entsprechenden Parametern aufgerufen. ${EXTEN:1} Ist hierbei die Eingegebene Rufnummer, von dem die erste Ziffer (die Personenkennziffer) abgespalten wird, da sie ja schließlich nicht zur eigentlichen Nummer dazu gehört.

Desweiteren sieht man hier, daß ich durch Vorwählen von 15 statt über dus.net über sipgate telephonieren kann, sowie, und das ist ein Special von dus.net, durch wählen von 19 anonym über dus.net! Man kann nämlich bei dus.net bei jedem Gespräch angeben, welche abgehende Rufnummer signalisiert werden soll. Falls diese Rufnummer auf "anonymous" gesetzt wird, wird keine Rufnummer signalisiert.

2. Angerufen werden


Natürlich können wir auch unter unseren Telephonnummern angerufen werden. In der sip.conf wird zu jedem Anbieter eingestellt, zu welchem Kontext in der extensions.ael gesprungen werden soll, falls ein Anruf eingeht. Ich habe mich dazu entschieden, daß grundsätzlich zu der Kategorie mit dem Namen "ankommend" gesprungen werden soll.

Diese sieht in der extensions.ael so aus:

// ************ Eingehende Telephonate, von Telephongesellschaften *****

// Makro: lässt Telephone klingeln
// fuer: 1 für Florian, 2 für Mareike
// beschreibung: Textuelle Beschreibung, des Anschlusses
macro klingeln( fuer, beschreibung ) {
	Ringing(); // dem Anrufer ein Freizeichen signalisieren
	agi(showcaller.php|${fuer}|${beschreibung});
	// ziel-MSN auswaehlen
	if("${fuer}"="1") { // Florian
	  Set(MSN=41);
	} else if ("${fuer}"="2") { // Mareike
	  Set(MSN=42);
	} else { // Unbekannt
	  Set(MSN=43);
	};
	Dial(ZAP/1/${MSN}&SIP/budgetone,30,t);
};

context ankommend {
	// fuer florian
	000123456 => &klingeln(1, dus.net);
	// fuer mareike
	000654321 => &klingeln(2, dus.net);
};



"000123456 => &klingeln(1, dus.net);" beschreibt, was passiert, wenn Extension 000123456 aufgerufen wird. Dies ist die Extension, die ich von dus.net vorgegeben bekommen habe.

Falls also nun eine dieser Extensions durch einen eingehenden Telephonanruf von dus.net (mit meinem Konto dort) aufgerufen wird, wird das Makro "klingeln" aufgerufen, welchen dann die passenden Telephone klingeln läßt.

Das Makro "klingeln" führt nacheinander folgende Befehle aus:
  1. Ringing(); signalisiert dem _Anrufer_ ein Freizeichen
  2. agi(...); ist der Aufruf eines externen Skriptes (siehe nächste Kapitel), welches über diverse Medien (Lautsprecher, On-Screen-Displays) meldet, wer gerade wen anruft. Diese Zeile kann einfach weg gelassen werden.
  3. Daraufhin folgt ein Block, welche ISDN-MSN bei welcher Person klingeln soll. Dies ist nur nötig, wenn ein oder mehrere ISDN-Telephone (siehe unten) angeschlossen werden sollen, und diese je nach Person unterschiedlich klingeln sollen.
  4. Dial(ZAP/1/${MSN}&SIP/budgetone,30,t); läßt zwei Telephone klingeln: Das ISDN-Telephon (siehe späteres Kapitel) sowie das budgetone-SIP-Telephon. Nach 30 Sekunden wird das Klingeln eingestellt (der Anrufer hört jedoch fieser weise weiterhin ein Freizeichen ;-)

Die Telephone werden nun klingeln. Wird eines der Telephone abgehoben, wird das Gespräch durchgestellt, und es kann gesprochen werden.

Links

Diese Seite ist nicht kommentiert. [Kommentare anzeigen]