- Mitglied seit
- 8 Sep 2010
- Beiträge
- 3,999
- Punkte für Reaktionen
- 758
- 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.
Durchführung:
1. Provisionierungsdatei erweitern
In der Datei [macadresse].cfg folgende Zeilen einfügen:
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:
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.
Den Spaghetti-Code bitte ich zu entschuldigen, ich bin kein Informatiker.
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.