[Frage] XML Telefonbuch / Provisioning

timolage

Neuer User
Mitglied seit
27 Mai 2013
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Gibt es hier im Forum Interesse am Gigaset XML Telefonbuch oder am Gigaset Provisioning ?
 
hmm... Ich bin mir gerade nicht sicher ob das N510Pro ein XML-Telefonbuch nutzen könnte. Interesse wäre vorhanden, da ich kein Bock habe das ganze auf ldap umzustellen :S

Bastelst Du an nem OpenSource-Projekt?
 
Beispiel:
Code:
<?php

// **************************************************************************
// Phonebook Server for Gigaset IP Phones by TimoLage
// History of changes
// V1.5 20/06/12 by TimoLage
//   - support for LDAP servers
// **************************************************************************
// Search request Lastname (ln=L*) 
// http://<IP-Server>/xmlMysql/xmlMysql.php?command=get_list&type=pb&fn=*&ln=L*&st=*&ct=*&hm=*&nr=*&zc=*&sip=*&mb=*&first=1&count=10&reqsrc=user&limit=3072&mac=7C2F800803F1&lang=3
// Detail Search request Firstname (fn=T*) and Lastname (ln=L*) 
// http://<IP-Server>/xmlMysql/xmlMysql.php?command=get_list&type=pb&fn=T*&ln=L*&st=*&ct=*&hm=*&nr=*&zc=*&sip=*&mb=*&first=1&count=10&reqsrc=user&limit=3072&mac=7C2F800803F1&lang=3
// Search request for autolook up (hm=02871*)
// http://<IP-Server>/xmlMysql/xmlMysql.php?command=get_list&type=pb&fn=*&ln=*&st=*&ct=*&hm=02871*&nr=*&zc=*&sip=*&mb=*&first=1&count=10&reqsrc=user&limit=3072&mac=7C2F800803F1&lang=3
 // **************************************************************************
 // get the search criteria from the HTTP GET call
 // **************************************************************************
 // last name
 if (isset($_GET["ln"])){
    $sc_ln = $_GET["ln"];
    $sc_ln = str_replace('*','%',$sc_ln);

 } else {
      $sc_ln = "%";
 }

 // first name
 if (isset($_GET["fn"])){
    $sc_fn = $_GET["fn"];
    $sc_fn = str_replace('*','%',$sc_fn);
 } else {
      $sc_fn = "%";
 }
 // city
 if (isset($_GET["ct"])){
    $sc_ct = $_GET["ct"];
 } else {
    $sc_ct = "%";
 }
// Get directory type
if (isset($_GET["type"])){
    $sc_type = $_GET["type"];
 } else {
    $sc_ct = "%";
 }


 // number - support for reverse search
 if (isset($_GET["hm"])){
    $sc_hm = $_GET["hm"];
    $sc_hm = str_replace('*','%',$sc_hm);
 } else {
    $sc_hm = "%";
 }

 // in $sc_hm we have to replace the leading double zeros by a + eg. 0049 has to be +49 as this is the format I choosed for the DB
 //if (strpos($sc_hm, '00') === 0) {
 // $sc_hm = substr_replace($sc_hm, "+", 0,2);
 //}

 // **************************************************************************
 // get the result parameters from the HTTP GET call
 // **************************************************************************

 // first - which is the first entry of the query we should send? (scrolling down)
 if (isset($_GET["first"])){
    $sc_first = $_GET["first"];
 } else {
    $sc_first = "0";
 }

 // count - what is the number of results we should return
 if (isset($_GET["count"])){
    $sc_count = $_GET["count"];
 } else {
    $sc_count = "1";  // send 1 result by default
 }

 // last - what is the last entry we should return (scrolling up)
 if (isset($_GET["last"])){
    $sc_last = $_GET["last"];
 } else {
    $sc_last = "0";
 }

 // either we have a value for first or for last; in case of last we have to calculate first
 if ($sc_last <> "0"){
    $sc_first = $sc_last-$sc_count+1;
 }
 elseif ($sc_first == "0"){ // if first and last are zero, set first=1 in order to avoid an SQL error
  $sc_first = "1";
 }

 // **************************************************************************
 // create the XML DOM document root and attributes
 // **************************************************************************

 $dom = new DomDocument('1.0');

 $dom->encoding="UTF-8";

 //add root - <list>
 $list = $dom->appendChild($dom->createElement('list'));

 // create list attributes
 $response = $dom->createAttribute("response");  // response type? "get list", what else?
 $list->appendChild($response);
 $type = $dom->createAttribute("type"); // obviously "pb" and "yp"
 $list->appendChild($type);
 $total = $dom->createAttribute("total"); // total results of query?
 $list->appendChild($total);
 $first = $dom->createAttribute("first"); // number of first result in list
 $list->appendChild($first);
 $last = $dom->createAttribute("last"); // number of last result in list
 $list->appendChild($last);
 $reqid = $dom->createAttribute("reqid"); // is this used at all???
 $list->appendChild($reqid);

 // define attribute values
 $responseValue= $dom->createTextNode("get list");
 $response->appendChild($responseValue);

 // currently we only support white pages
 $typeValue= $dom->createTextNode("$sc_type");
 $type->appendChild($typeValue);

 // don't know the exact usage of this - probably not used?
 $reqidValue= $dom->createTextNode("fortytwo");
 $reqid->appendChild($reqidValue);

 // **************************************************************************
 // connect to MySQL server and send the query
 // **************************************************************************

// Verbindung aufbauen, auswählen einer Datenbank
$mysqlhost="localhost"; 		// Insert MySQL-Host 
$mysqluser="root"; 			// Insert MySQL-User 
$mysqlpwd="gigaset"; 		// Insert Passwort 
$mysqldatabase="Directory";		// Insert Database
$mysqltabell="Gigaset";		// Insert Tabell
$link = mysql_connect($mysqlhost, $mysqluser, $mysqlpwd)
    or die("Keine Verbindung möglich: " . mysql_error());
//echo "Verbindung zum Datenbankserver erfolgreich";

mysql_select_db($mysqldatabase) or die("Auswahl der Datenbank fehlgeschlagen");

// Ausführen einer SQL-Anfrage
$query = "";

if ($_GET["hm"]!="*")
{
  $query = "SELECT * FROM $mysqltabell WHERE HomePhone LIKE '$sc_hm' or OfficePhone LIKE '$sc_hm' or Mobile LIKE '$sc_hm'or Intern LIKE '$sc_hm' ";
}
else 
{
	if($_GET["fn"]!="*")
	{
		$query = "SELECT * FROM $mysqltabell WHERE Name LIKE '$sc_ln' and Firstname LIKE '$sc_fn' and Type LIKE '$sc_type' order by Name asc";
             
       }
       else
	{
		$query = "SELECT * FROM $mysqltabell WHERE Name LIKE '$sc_ln' and Type LIKE '$sc_type' order by Name asc";
              
	}
}

$result = mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());

$numTotalResults  = mysql_num_rows($result);

//$info = mysql_fetch_array($result, MYSQL_ASSOC);
$info=array();
while ($line = mysql_fetch_assoc($result)) 
{
    $info[] = array($line);
}
 // **************************************************************************
 // calculate result counters
 // **************************************************************************

 // first get number of total results (probably this can be done in a "nicer" way?
 //$numTotalResults =  $info["count"]; // count number of results

 // all results are the arrray, send only those to the phone which where requested
 // check boundaries of result window
 
// if first is beyond TotalResults
 if ($sc_first > $numTotalResults)
 { 
   $sc_first=0; // return empty result
   $sc_last=0;
 }
 else // return the requested result window
 {
   $sc_last = $sc_first + $sc_count-1;
   if ($sc_last > $numTotalResults) $sc_last=$numTotalResults;
   $sc_count = $sc_last - $sc_first;
 }
	
 // generate total attribute for XML reply
 $totalValue = $dom->createTextNode($numTotalResults);
 $total->appendChild($totalValue);

 // generate first and last attributes for the XML reply
 $lastValue= $dom->createTextNode($sc_last);
 $firstValue= $dom->createTextNode($sc_first);
 $last->appendChild($lastValue);
 $first->appendChild($firstValue);

 // iterate over array and insert the found entries into the XML reply
 for ($i=$sc_first; $i<=$sc_last; $i++)
 {
   
   //add entry
   $entry = $list->appendChild($dom->createElement('entry'));

   //add <ln> if available 
   if ($info[$i-1][0]["Name"])
   {
    $ln = $entry->appendChild($dom->createElement('ln'));
    $ln->appendChild($dom->createTextNode($info[$i-1][0]["Name"]));
   }
   //add <fn> if available
   if ($info[$i-1][0]["Firstname"]) {
    $fn = $entry->appendChild($dom->createElement('fn'));
    $fn->appendChild($dom->createTextNode($info[$i-1][0]["Firstname"]));
   }
   //add <st> if available
   if ($info[$i-1][0]["Street"]) 
   {
    $st = $entry->appendChild($dom->createElement('st'));
    $st->appendChild($dom->createTextNode($info[$i-1][0]["Street"]));
   }

    //add <nr> if available
    if ($info[$i-1][0]["Streetnr"])  
    {
    $nr = $entry->appendChild($dom->createElement('nr'));
    $nr->appendChild($dom->createTextNode($info[$i-1][0]["Streetnr"]));
    }
   
   //add <zc> if available
   if ($info[$i-1][0]["ZipCode"]) 
   {
    $zc = $entry->appendChild($dom->createElement('zc'));
    $zc->appendChild($dom->createTextNode($info[$i-1][0]["ZipCode"]));
   }
   
   if ($info[$i-1][0]["City"])
   {
   //add <l> if available
    $ct = $entry->appendChild($dom->createElement('ct'));
    $ct->appendChild($dom->createTextNode($info[$i-1][0]["City"]));
   }
  
    //add <sip> -- don't know the attribute for LDAP?
    
    if ($info[$i-1][0]["HomePhone"]) 
    {
    $sip = $entry->appendChild($dom->createElement('sip'));
    $sip->appendChild($dom->createTextNode($info[$i-1][0]["HomePhone"]));
    }
    //add <hm> if available
    
    if ($info[$i-1][0]["OfficePhone"])
    {
    $hm = $entry->appendChild($dom->createElement('hm'));
    $hm->appendChild($dom->createTextNode($info[$i-1][0]["OfficePhone"]));
    }
    //add <mb> if available
    if ($info[$i-1][0]["Mobile"]) 
    {
    $mb = $entry->appendChild($dom->createElement('mb'));
    $mb->appendChild($dom->createTextNode($info[$i-1][0]["Mobile"]));
    }
    //add <in> if available
    if ($info[$i-1][0]["Intern"]) 
    {
    $mn = $entry->appendChild($dom->createElement('in'));
    $mn->appendChild($dom->createTextNode($info[$i-1][0]["Intern"]));
    }
    //add <em> if available
    if ($info[$i-1][0]["email"]) 
    {
    $mn = $entry->appendChild($dom->createElement('em'));
    $mn->appendChild($dom->createTextNode($info[$i-1][0]["email"]));
    }
    //add <bi> if available
    if ($info[$i-1][0]["Birthday"]) 
    {
    $mn = $entry->appendChild($dom->createElement('bi'));
    $mn->appendChild($dom->createTextNode($info[$i-1][0]["Birthday"]));
    }
    //add <cpn> if available
    if ($info[$i-1][0]["Company"]) 
    {
    $mn = $entry->appendChild($dom->createElement('cpn'));
    $mn->appendChild($dom->createTextNode($info[$i-1][0]["Company"]));
    }


 }

// Freigeben des Resultsets
mysql_free_result($result);

// Schließen der Verbinung
mysql_close($link);

 // **************************************************************************
 // create XML with DB query results and send back to client
 // **************************************************************************

 //generate xml
 $dom->formatOutput = true; // set the formatOutput attribute of domDocument to true
 echo utf8_encode($dom->saveXML()); // output the XML document

?>

Edit foschi:
Code:
-Tags hinzugefügt.[/SIZE]
 

Anhänge

  • public_pbs_protocol_spec.pdf
    352.4 KB · Aufrufe: 171
Zuletzt bearbeitet:
Könntest Du das ganze mal bitte in code-Tags setzen?

Bsp.: (Ohne die Leerzeichen in den Eckigen Klammern.)

[ code ]
<hier der Code>
[/ code ]
 
@timolage: Ja, das Interesse besteht, auch wenn hier grad keiner aktiv in die Puschen kommt :)
 
Ich werde hier die Gigaset pro Provisioning Unterlagen online stellen.
 
Ich wäre auch dafür.
Das Ergebnis müßte aber sein, das das Telefonbuch im Mobilteil vom Server geladen und ins MT gespeichert wird.
Also nicht wie das Klicktel-Telefonbuch, das nur über einen zusätzlichen Schritt aufgerufen werden und dann nur per Sucheingabe genutzt werden kann.

Gilt das Provisioning auch für das C610 A IP?
Was geht da alles zu Provisionieren?

Ich brauche das C610 A IP wegen dem Analog-Amt.
Analog zu VoIP mit Fritz!Box o.ä. geht leider nicht wegen:
- Dauert viel zu lang, da ohne CLIP die Fritz!Box viel zu lange wartet.
- Man hat hinterher einen entgangenen Anruf, was aber nicht soll.
Falls hier wer ne Geräte-Idee hat? Analog-Amt (vom Sx353) zu VoIP-Endgerät, das einen Ruf ohne CLIP sofort meldet und auch wenn man nicht drangeht einen 'completed elsewhere' sendet?

Alternativ wäre folgendes zu wünschen:
- Dx800A, das endlich 'fertig' wird. Nicht nur, das es zur Markteinführung unfertig war, 2 Jahre später ist es noch immer weit davon entfernt, ein Sx353 zu ersetzen.
- Integration zwischen Dx800A und N510 IP pro: So das man 12 Mobilteile hat, als seien die alle direkt am Dx800A (Interne Wahl, Ruflisten, AB-Steuerung und so)

- Oder das Multizellen-System zu diesem Zweck erweitern: Mit ABs und n:m Zuordnung der Mobilteile zu den Nummern. (Wenn das ginge, hätte ich es gekauft)
 
Zuletzt bearbeitet:
Ich denke nicht, daß die Datenrate des DECT-Steuerkanals dafür nutzbar ist, ein Telbuch zu syncen. Und Speicher auf dem Mobilteil ist auch immer eine Kostenfrage. Es gibt ja auch durchaus sehr grosse Telefonbücher in TK-Systemen mit mehreren 100 Teilnehmern. Und dann noch ein internes, ein oder mehrere externe Telbücher.

Der Aastra-Ansatz, bei dem man die serverbasierten Telefonbücher vernünftig browsen kann, halte ich für besser.
 
Jo obs technisch auf dem Mobilteil oder dem Server liegt, ist im Grunde egal.
Wichtig ist aber, das man es einfach handhaben kann ohne unnötige Umwege.
In größeren Firmen mag man durch 1000e Einträge sicher nicht blättern.

Privat oder in Kleinen Betrieben ist das Blättern und Buchstaben-Springen durch vielleicht 300 Einträge aber einfacher, so wie es eben jetzt lokal am Gerät geht.
Der Mobilteil-Speicher dürfte für kleinere Mengen recht egal sein. Der ist ja aktuell schon vorhanden.
Die Frage ist eher, ob der Sync mit vorhandenen C-Mobilteilen überhaupt geht, da die Firmware nicht updatebar ist.

Einen Sync muss man nicht zwingend per Steuerkanal machen. Das kann ja auch über eine 'normale' Verbindung (z.b. täglich einmal, oder auf Anfrage des Servers, oder durch die Basis die dies bei Änderungen an der Quelle macht).
Es gibt ja schon jetzt die Möglichkeit, per Weboberfläche die Telefonbücher von und zum Gerät zu übertragen. Nur ist das neu Übertragene dann kein Ersatz des alten sondern kommt zusätzlich. Man muss das Telefonbuch vorher am Gerät löschen.
Also fehlt garnicht viel:
1. Automatisch löschen vor Neuübertragung.
2. Basis holt Telefonbuch aus irgendeiner Quelle, z.b. Google, CardDAV, XML per URL, CSV per URL. Basis überträgt Telefonbuch nacheinander an alle Mobilteile, wenn sich seit dem letzten mal was geändert hat.
2b.: für Update-fähige Mobilteile: Telefonbuch-Taste ruft wahlweise direkt ein von der Basis verwaltetes Telefonbuch auf, statt dem internen. So machen das die AVM-Knochen auch. Die Basis dürfte auch genug Speicher haben, das per Weboberfläche übertragene CSV wird ja dort auch erstmal zwischengeparkt.
 
Alternativ wäre folgendes zu wünschen:
- Dx800A, das endlich 'fertig' wird. Nicht nur, das es zur Markteinführung unfertig war, 2 Jahre später ist es noch immer weit davon entfernt, ein Sx353 zu ersetzen.
- Integration zwischen Dx800A und N510 IP pro: So das man 12 Mobilteile hat, als seien die alle direkt am Dx800A (Interne Wahl, Ruflisten, AB-Steuerung und so)

Das DX800 wird echt extrem stiefmütterlich behandelt!!!!

Der Ansatz mit der 510er gefällt mir und sollte ja auch recht einfach zu realisieren sein liebes Gigaset Team????????
 
Ohne Handover und durch die maximal 12 Mobilteile hätte man ja noch immer eine gute Abgrenzung gegenüber professionelleren Lösungen.
Aber 6 Geräte sind eben zu wenig, wenn man ein Haus oder größere Wohnung hat.

Was gehen muss:
- Die weiteren Mobilteile bekommen fortlaufend weitere INT-Nummern. Auf Sammelruf INT * reagieren alle.
- Interne Wahl zu einem Gerät an der anderen Basis belegt dann eben je einen IP-Kanal.
- Anrufliste und AB-Steuerung wird per LAN (und ggf während Abhören belegten Kanal) synchronisiert, bzw durchgeführt.

Stellt sich noch die Frage, wie man das mit den externen Anrufen macht.
Am einfachsten wohl, indem man die Nummern/Accounts in beiden anlegt und wo zuordnet, welche Nummer des 510 mit einer des Dx 800A übereinstimmt (damit das Dx800 per ISDN, das 510 aber per VoIP angebunden werden kann).


Offene Punkte Dx 800A (und auch teilweise Dx600A und IP-Gigasets):
- Keine Rückfrage/Anklopfen/Konferenz zwischen VoIP und ISDN bzw VoIP und Analog
- Leitungswahl per #-Suffix (das erste IP-Gigaset konnte das)
- Anzeige, wie viele/welche Leitungen belegt sind
- 3 getrennte Anrufbeanworter: Drangeh-Zeit und SMS-Benachrichtigung müssen getrennt einstellbar sein.
- Analoge Nebenstelle: Es muss wählbar sein, ob Fax oder Telefon angeschlossen ist (auf Sammelruf reagieren oder nicht).
- Analoge Nebenstelle: Sollte T-Net Kompatibel steuerbar sein. Damit Rückfrage, Makeln, ... mit den von vielen Telefonen (inkl Analog-Gigasets) bereitgestellten Funktionen nutzbar sind.
- Am Analog-Amt sollten die Töne ausgewertet werden, zumindest das Auflegen der Gegenseite. Die Funktion steckt ja eh im Anrufbeantworter.
- Dx800A legt bei Intern-Gespräch das andere Gerät nicht automatisch auf. Es sollte Grundsätzlich (z.b. nach 3 x tuten) automatisch aufgelegt werden, wenn die Gegenseite aufgelegt hat.
- Bei DisplayMessage-Nachrichten und Stummschaltung wird das ganze Display mit dieser Meldung belegt. In solchen Fällen sollte eher so wenig wie möglich die Anzeige überdeckt werden.
- Nachtschaltungen getrennt je externer Nummer einrichten.
- Bluetooth-Funktion 'funktionsfähig'. Man muss BT immer neu verbinden, wenn man außer Reichweite war. Sowas hat automatisch zu gehen. Ging beim Sx353 ja auch...



Paar Wünsche (für alle Geräte wo zutreffend, bzw für neue Hardware)
- Amt Analog + ISDN gleichzeitig (bei Dx800A)
- Anrufbeantworter wahlweise statt oder Zusätzlich zur SMS per eMail melden, inkl Aufnahme als Anhang.
- Lautsprechertaste wieder als eigene Taste inkl roter LED. (Soviel billiger kann der Verzicht doch nicht sein, das man damit die Kunden ärgern muss)
- DECT-Repeater, der ECO+ und Cat.Iq unterstützt
 
Das N510 und die N720 unterstützen ein VcardList import :) Alle Telefonbücher sollen dem LDAP Telefonbuch angeglichen werden. Beim Ldap Telefonbuch wird direkt eine Liste geladen und kann dann mit den Buchstaben die Ansicht eingrenzen.
 
@timolage
In welcher Gigaset Abteilung bist du denn tätig?

LDAP ist immer so eine Sache, geht dann auch die Nummernauflösung bei Anrufen?
 
Mit LDAP wird auch eine Nummernauflösung unterstützt.
 
Provisioning Unterlagen : Stand Mai 2013

General Provisioning --> Alle Produkte
info_paper_mini_xml_browser --> DE700 / DE 900
InfoServive RAP --> N510 / N720
Parameterliste --> Alle Produkte
pbx_te_telephony_interface --> DE 310 / DE410 / DE700 / DE 900 (PBX System : T300/500 PORT 50080) :)
public_pbs_protocol_spec --> alle Produkte
 

Anhänge

  • General_Provisioning_guide.pdf
    1.4 MB · Aufrufe: 124
  • info_paper_mini_xml_browser.pdf
    1.8 MB · Aufrufe: 138
  • InfoServices_RAP.zip
    706.3 KB · Aufrufe: 142
  • Parameter-list_working.xls
    1.4 MB · Aufrufe: 133
  • pbx_te_telephony_interface_v4.2.4.pdf
    1.1 MB · Aufrufe: 107
  • public_pbs_protocol_spec.pdf
    352.4 KB · Aufrufe: 111
Mit der LDAP Auflösung seit ihr SEN ein gewaltiges Stück voraus! Die blocken Anfragen mit der Begründung ab, es würde zuviel Rechenleistung kosten!
 
@timolage

Gibts zu dem PHP Script evtl. auch ein Mysql Script um die DB und die Tabellen zu erstellen?

Danke

Gruß

Felix
 
Ich habe Interesse an einem XML Telefonbuch

Da habe ich mir gerade für meine N720 Anlage für den Garten ein R630H gekauft und nun muss ich feststellen, dass ich da kein Telefonbuch rein bekomme.

Man Gigaset, in jedes 08/15 Gerät baut ihr einen USB Anschluss rein selbst in Pro Hangeräten wie z.B. SL610 PRO und dann nicht bei dem. Das nervt extrem!

Man kann nicht mal am N720 über Intern das TB kopieren, da es kein Intern dort gibt wenn man keine Gigaset TK Anlage davor betreibt!!!!!
 
Hallo thghh,

Da habe ich mir gerade für meine N720 Anlage für den Garten ein R630H gekauft und nun muss ich feststellen, dass ich da kein Telefonbuch rein bekomme.
Dann hast du wohl das falsche Geraet gekauft. Schau dir mal das Gigaset M2 professional an.

Man Gigaset, in jedes 08/15 Gerät baut ihr einen USB Anschluss rein selbst in Pro Hangeräten wie z.B. SL610 PRO und dann nicht bei dem.
PC-Schnittstellen sind der S- und SL-Klasse vorbehalten. Das sind sicherlich keine 08/15 Geraete.

Gruss
 
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.