[HowTo] PoC: Einfaches BLF für Mitel Telefone (6800/6900) in Verbindung mit einer Fritz!Box

chrsto

IPPF-Promi
Mitglied seit
8 Sep 2010
Beiträge
3,093
Punkte für Reaktionen
586
Punkte
113
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
Code:
[...]
xml application post list: <ip des webservers>
[...]

Erläuterung:
Damit wird festgelegt, dass von dieser IP XML Code zum Telefon gesendet und dort ausgeführt werden darf.


<mac des telefons>.cfg für das Telefon mit der internen Nummer 620
Code:
[...]
sip line1 screen name: <name>
sip line1 screen name 2: <name>
sip line1 user name: <benutzername fritzbox ip telefon 620>
sip line1 display name: 620
sip line1 auth name: <benutzername fritzbox ip telefon 620>
sip line1 password: <passwort fritzbox ip telefon 620>
[...]
action uri incoming: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey12 type: xml
topsoftkey12 label: <beschriftung der taste>
topsoftkey12 value: http://<ip des webservers>/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.


<mac des telefons>.cfg für das Telefon mit der internen Nummer 621
Code:
[...]
sip line1 screen name: <name>
sip line1 screen name 2: <name>
sip line1 user name: <benutzername fritzbox ip telefon 621>
sip line1 display name: 621
sip line1 auth name: <benutzername fritzbox ip telefon 621>
sip line1 password: <passwort fritzbox ip telefon 621>
[...]
action uri incoming: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=incoming
action uri connected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=connected
action uri disconnected: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&action=disconnected
[...]
topsoftkey2 type: xml
topsoftkey2 label: <beschriftung der taste>
topsoftkey2 value: http://<ip des webservers>/xml.php?nst=$$DISPLAYNAME$$&call=**620
[...]

Erläuterung:
Siehe Erläuterung Telefon 620.


Datei xml.php auf dem Webserver:
PHP:
<?php

function push2phone($server,$phone,$data)
{
    $xml = "xml=".$data;
    $post = "POST / HTTP/1.1\r\n";
    $post .= "Host: $phone\r\n";
    $post .= "Referer: $server\r\n";
    $post .= "Connection: Keep-Alive\r\n";
    $post .= "Content-Type: text/xml\r\n";
    $post .= "Content-Length: ".strlen($xml)."\r\n\r\n";
    $fp = @fsockopen ( $phone, 80, $errno, $errstr, 5);
    if($fp)
    {
        fputs($fp, $post.$xml);
        flush();
        fclose($fp);
    }
}

$server = '<ip des webservers';

if(isset($_GET['action'])) {

  $action = $_GET['action'];
  $nst = $_GET['nst'];
  if($nst == 620) { $phoneip = '<ip des telefons mit der nst 621>'; $phonekey = 'topsoftkey2'; }
  if($nst == 621) { $phoneip = '<ip des telefons mit der nst 620>'; $phonekey = 'topsoftkey12'; }

  $actions = [
    'incoming' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=fastflash:yellow"/></AastraIPPhoneExecute>',
    'connected' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=on:red"/></AastraIPPhoneExecute>',
    'disconnected' => '<AastraIPPhoneExecute><ExecuteItem URI="Led: '.$phonekey.'=off:green"/></AastraIPPhoneExecute>',
  ];

  $xml = $actions[$action];
  push2phone($server,$phoneip,$xml);

}

if(isset($_GET['call'])) {

  $call = $_GET['call'];
  $nst = $_GET['nst'];

  if($nst == 620) { $phoneip = '<ip des telefons mit der nst 620>'; }
  if($nst == 621) { $phoneip = '<ip des telefons mit der nst 621>'; }

  $xml = '<AastraIPPhoneExecute triggerDestroyOnExit="yes"><ExecuteItem URI="Dial:'.$call.'" interruptCall="yes" title="Test"/></AastraIPPhoneExecute>';
  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.
 

Statistik des Forums

Themen
244,878
Beiträge
2,220,031
Mitglieder
371,603
Neuestes Mitglied
broekar
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.