==== PoC: Einfaches BLF für Mitel Telefone (6800,6900) in Verbindung mit einer Fritz!Box ====
Die Fritz!Box unterstützt bis zuletzt kein BLF (BusyLampField), trotzdem kommt dazu immer mal wieder eine Nachfrage auf.
Dieses Proof of Concept soll darlegen, dass es möglich ist, dies mit etwas Aufwand nachzurüsten. In wie weit der Aufwand sinnvoll gegenüber der Wahl einer "richtigen" Telefonanlage ist, soll hier nicht Thema sein.
Voraussetzungen:
* Fritz!Box (oder ein beliebiger anderer Router, die Einrichtung der SIP Konten muss dann entsprechend angepasst werden)
* zwei oder mehrere Mitel Telefone mit festen IP Adressen
* ein Webserver mit PHP im lokalen Netzwerk
* ein Provisionierungsserver (z.B. TFTP), alternativ können die Telefone auch von Hand konfiguriert werden
Was funktioniert:
Bei zwei Telefonen ist jeweils eine Taste als //BLF// eingerichtet und leuchtet entweder rot, wenn auf dem anderen Telefon gesprochen wird, blinkt (gelb) wenn auf dem anderen Telefon ein Anruf eingeht, oder ist aus (grün), wenn das Gespräch beendet wurde bzw. die Leitung frei ist. Zusätzlich kann mit einem Druck auf die Taste das andere Telefon gerufen werden.
Was funktioniert nicht:
* Es ist kein Heranholen möglich. Mit dem Einsatz einer Datenbank und dem Zwischenspeichern des Status des jew. Telefons lässt sich das aber nachrüsten.
* Schnurlose, ISDN und analoge Telefone an der Fritz!Box werden nicht unterstützt. Die Fritz!Box bietet afaik keine Möglichkeit den Status bzw. ein Event zu einem Server zu senden. Es existiert zwar ein CallMonitor, dieser müsste aber aktiv abgefragt werden.
* Bei einem Neustart des Telefons ist der Status des anderen Telefons 'unbekannt'. Durch die Einbindung der Action URI //register// lässt sich das aber korrigieren.
Einrichtung:
Anpassung der Konfigurationsdateien für die Telefone auf dem Provisionierungsserver. Betrachtet werden hier nur die Zeilen, die für die Funktion des BLF notwendig sind:
startup.cfg
[...]
xml application post list:
[...]
Erläuterung:
Damit wird festgelegt, dass von dieser IP XML Code zum Telefon gesendet und dort ausgeführt werden darf.
.cfg für das Telefon mit der internen Nummer 620
[...]
sip line1 screen name:
sip line1 screen name 2:
sip line1 user name:
sip line1 display name: 620
sip line1 auth name:
sip line1 password:
[...]
action uri incoming: http:///xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http:///xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http:///xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey12 type: xml
topsoftkey12 label:
topsoftkey12 value: http:///xml.php?nst=$$DISPLAYNAME$$&call=**621
[...]
Erläuterung:
Im ersten Teil wird das SIP Konto der Fritz!Box eingerichetet. Die Action URI werden beim jeweiligen Event aufgerufen. //incoming// ist dabei ein eingehender Ruf, //connected// ist ein laufendes Gespräch und //disconnected// ist auflegen.
Für dieses Telefon wurde die obere Taste mit der ID 12 als //BLF// ausgewählt. Durch die Definition als xml kann die Taste von außen manipuliert werden. In unserem Fall hier, soll sie blinken (Anruf geht ein), leuchten, oder aus sein. Bei Telefonen mit entsprechenden Displays soll das Event zusätzliche farblich marktiert werden: grün, wenn die Leitung frei ist, gelb blinkend, wenn ein Anruf eingeht und rot, wenn gesprochen wird. Beim drücken der Taste wird auch wieder eine URL aufgerufen, dazu später mehr.
.cfg für das Telefon mit der internen Nummer 621
[...]
sip line1 screen name:
sip line1 screen name 2:
sip line1 user name:
sip line1 display name: 621
sip line1 auth name:
sip line1 password:
[...]
action uri incoming: http:///xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http:///xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http:///xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey2 type: xml
topsoftkey2 label:
topsoftkey2 value: http:///xml.php?nst=$$DISPLAYNAME$$&call=**620
[...]
Erläuterung:
Siehe Erläuterung Telefon 620.
Datei xml.php auf dem Webserver:
'; $phonekey = 'topsoftkey2'; }
if($nst == 621) { $phoneip = ''; $phonekey = 'topsoftkey12'; }
$actions = [
'incoming' => '',
'connected' => '',
'disconnected' => '',
];
$xml = $actions[$action];
push2phone($server,$phoneip,$xml);
}
if(isset($_GET['call'])) {
$call = $_GET['call'];
$nst = $_GET['nst'];
if($nst == 620) { $phoneip = ''; }
if($nst == 621) { $phoneip = ''; }
$xml = '';
push2phone($server,$phoneip,$xml);
}
?>
Erläuterung:
Diese PHP Script besteht aus zwei Teilen: //action// für die Manipulation der BLF Taste und //call// für den Ruf des jeweils anderen Telefons. Über die Funktion push2phone() wird das XML zum Telefon gesendet und dort ausgeführt. Hinweis für //action//: Hier sind Nebenstelle und IP Adresse des Telefons vertauscht. Es soll ja die Taste des anderen Telefons blinken oder leuchten.
Das Script lässt sich natürlich um weitere Telefone erweitern. Bei 3 und mehr Telefonen lohnt dann aber wahrscheinlich schon der Einsatz einer Datenbank inkl. Schleifen. Damit ist es einfacher festzuhalten, welches Telefon, welche BLF an welcher Position eingerichetet hat.