[HowTo] Fritz!Box Anrufbeantworternachrichten am Mitel SIP Telefon abfragen

chrsto

IPPF-Promi
Mitglied seit
8 Sep 2010
Beiträge
3,726
Punkte für Reaktionen
703
Punkte
113
In meiner Wahnvorstellung die Fritz!Box zusammen mit Mitel SIP Telefonen zur vollwertigen Telefonanlage aufzurüsten, anbei der nächste PHP Code Schnipsel:

Einleitung und Voraussetzungen:

Den Anrufbeantworter bequem über ein Menü (für die iPhone User VisualVoicemail-Like) abfragen und Sprachnachrichten löschen.

  • Mitel SIP Telefon der Serie 6800i bzw. 6900i (6867i, 6869i, 6873i, 6920i, 6930i, 6940i, teilw. auch 67xx Serie, hier aber nicht berücksichtigt)
  • Linux Server mit Webserver (z.B. nginx) und PHP und ffmpeg
  • Gewisses Grundwissen in Linux/Web (wie installiere ich was, wie editiere ich was, Zuordnung Webpfad->lokaler Pfad)

Durchführung:

1. Provisionierungsdatei erweitern

In der Datei [macadresse].cfg folgende Zeilen einfügen:

Code:
topsoftkey1 type: xml
topsoftkey1 label: Voicemail
topsoftkey1 value: http://[ip-oder-url-vom-webserver]/voicemail.php

Mit topsoftkey1 ist die erste Taste, oben links neben dem Display gemeint und lässt sich natürlich beliebig abändern. Wenn kein Provisionierungsserver genutzt wird, kann die Taste auch über das Webinterface des Telefons angelegt werden.

Sofern das Telefon über eine eigene Taste für Voicemail verfügt, kann diese auch belegt werden:

Code:
voicemail script: http://[ip-oder-url-vom-webserver]/voicemail.php

Speichern und das Telefon neu starten

2. PHP Script für das Telefon auf dem Webserver erstellen:

Folgende Datei erstellen und im DocRoot des Webservers (z.B. /var/www/html/fritzbox) als voicemail.php abspeichern.

PHP:
<?php

// Config
$fb_url = 'fritz.box'; // Url oder IP der Fritz!Box, ohne http
$fb_user = 'fritz47110815';
$fb_pass = '';
$fb_ab = 0; // Nummer des AB 600 -> 0, 601 -> 1 ...

$webserver_url = 'http://192.168.178.10/fritzbox';
$webserver_path = '/var/www/html/fritzbox';
// Config Ende

$client = new SoapClient(
    null,
    array(
          'location' => "http://$fb_url:49000/upnp/control/x_tam",
          'uri'      => "urn:dslforum-org:service:X_AVM-DE_TAM:1",
          'noroot'   => False,
          'login'    => $fb_user,
          'password' => $fb_pass
    )
);

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

  $s = $_GET['selection'];
  $s = (int)$s;

  $delete = $client->DeleteMessage(
     new SoapParam($fb_ab, 'NewIndex'),
     new SoapParam($s, 'NewMessageIndex'));

  echo '<AastraIPPhoneTextMenu fontMono="no"><TopTitle>Voicemail</TopTitle>
            <MenuItem><Prompt>Nachricht gelöscht</Prompt><URI>Sofkey:Exit</URI></MenuItem>
            <SoftKey index = "3"><Label>OK</Label><URI>SoftKey:Exit</URI></SoftKey>
            </AastraIPPhoneTextMenu>';
  exit;

}

$result = $client->GetMessageList(new SoapParam($fb_ab, 'NewIndex'));
$xml = simplexml_load_file($result);

$sid = explode('sid=',$result);
$sid = explode('&', $sid[1]);
$sid = $sid[0];

if(isset($_GET['selection'])) {
  $s = $_GET['selection'];
  $s = (int)$s;
  $filename = sha1(rand());

  foreach($xml->Message as $message) {

    if($message->Index == $s) {

      $url = 'http://'.$fb_url.':49000'.$message->Path.'&sid='.$sid;

      set_time_limit(0);
      $fp = fopen ($webserver_path . '/' . $filename.'.tmp', 'w+');
      $ch = curl_init(str_replace(" ","%20",$url));
      curl_setopt($ch, CURLOPT_TIMEOUT, 600);
      curl_setopt($ch, CURLOPT_FILE, $fp);
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
      curl_exec($ch);
      curl_close($ch);
      fclose($fp);

      $ffmpeg_command = '/usr/bin/ffmpeg -i '.$webserver_path.'/'.$filename.'.tmp -codec:a pcm_alaw -ar 8000 -ac 1 '.$webserver_path.'/'.$filename.'.wav';
      shell_exec($ffmpeg_command);

      echo '<AastraIPPhoneExecute>
                <ExecuteItem URI="Wav.Play:5:'.$webserver_url.'/'.$filename.'.wav"/>
                </AastraIPPhoneExecute>';
    }
  }
} else {

echo '<AastraIPPhoneTextMenu fontMono="no"><TopTitle>Voicemail</TopTitle>';

if(count($xml->Message) > 0) {

    foreach($xml->Message as $message) {

        echo '<MenuItem><Prompt>'.$message->Number.', '.$message->Date.'</Prompt><URI>SoftKey:Dial2</URI><Dial>'.$message->Number.'</Dial><Selection>'.$message->Index.'</Selection></MenuItem>';

    }

    echo '<SoftKey index = "1">
        <Label>Abspielen</Label>
        <URI>'.$webserver_url.'/voicemail.php</URI>
        </SoftKey>
        <SoftKey index = "2">
        <Label>Löschen</Label>
        <URI>'.$webserver_url.'/voicemail.php?del=1</URI>
        </SoftKey>';

} else {

    echo '<MenuItem><Prompt>keine Nachrichten</Prompt><URI>Sofkey:Exit</URI></MenuItem>';

}

echo '<SoftKey index = "3">
        <Label>Verlassen</Label>
        <URI>SoftKey:Exit</URI>
        </SoftKey>
</AastraIPPhoneTextMenu>';
}
?>

Den Spaghetti-Code bitte ich zu entschuldigen, ich bin kein Informatiker.
 
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.