Fritzbox Adressbuch für SPA525g2

Hmm, ich muss gestehen, dann weiß ich mir leider auch keinen Rat. Vielleicht sind die SPA und MPP Phones dann doch verschieden oder es fehlt irgendwo noch eine Grundeinstellung. Bei meinen MPP Phones funktionierte es mit den XML Einträgen auf Anhieb.
 
Zuletzt bearbeitet:
Hallo,

komischerweise werden mir ja im Telefon die von mir im Script definierten Namen über den Softkeys angezeigt...
cisco.jpg

Es passiert nur nix, wenn ich auf die Tasten drücke...

Mfg
Hermann
 
;) ...das mein ich mit: funktionell
 
Zuletzt bearbeitet:
Hallo,

Asche auf mein Haupt....

dadurch, dass die Befehle nicht in einer Zeile stehen:

HTML:
<SoftKeyItem>
<Name>Wählen</Name>
<URL>
SoftKey:Dial
</URL>
<Position>1</Position>
</SoftKeyItem>

wird vor und nach "Softkey:Dial" jeweils ein Leerzeichen eingefügt. Drum gehts nicht ;-(

Mit:
HTML:
<SoftKeyItem>
<Name>Wählen</Name>
<URL>SoftKey:Dial</URL>
<Position>1</Position>
</SoftKeyItem>

gehts...

Mfg
Hermann
 
  • Like
Reaktionen: koyaanisqatsi
Ja, das ists was Sie meinen mit...
! Warning schrieb:
Don't use line break inside this attribute
:cool: ( Eigentlich nicht "attribute" sondern "element" )
Beispiel: <element attribute="Donnerstag Döner kaufen"/>
Oder: Ein Element kann viele Attribute haben, aber nicht umgekehrt
...so lässt sich mit einem inhaltslosen Element ( <binickleer/> ) mit Attributen jede Menge Inhalt erzeugen.
 
Zuletzt bearbeitet:
Hallo,

Für die zusätzlichen Einträge pro <contact/> hab ich eine XSLT, die mir nach HTML transformiert...
Beispiel für <number/>
HTML:
...

kannst Du mir nen Tipp geben, wie ich die jetzt einbinde? 2. Frage, ich hab nicht immer unterschiedliche Zuordnungen der Nummern (z.B. 1x privat, 1x geschäftlich..) sondern beispielsweise auch mal 3x privat bei einem Kontakt. Kann das das Script?
Danke schon mal im Voraus!

Mfg
Hermann
 
Mit foreach an der richtigen Stelle und die Elemente natürlich angepasst ;)
Das Problem seh ich aber eher in der Identifizierbarkeit.
Erzeugt werden kann ja nur das <telephone/> Element, welches eine wählbare Nummer enthalten soll.
...und ein Präfix, wie "Arbeit" ist das eben nicht.
@hermann.a: Also, ohne Präfixe vorzustellen, kannste die mal probieren...
fb2cisco.xsl
HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:processing-instruction name="xml-stylesheet">
<xsl:text>type="text/xsl" href="/sippd2html.xsl"</xsl:text>
</xsl:processing-instruction>
<CiscoIPPhoneDirectory>
<Title><xsl:value-of select="/phonebooks/phonebook/@name"/></Title>
<Prompt>Kontakt wählen</Prompt>
<xsl:for-each select="/phonebooks/phonebook/contact">
<DirectoryEntry>
<Name><xsl:value-of select="person/realName" /></Name>
<xsl:for-each select="telephony/number">
<xsl:choose>
<xsl:when test="@quickdial&lt;10">
<xsl:element name="Telephone">**70<xsl:value-of select="@quickdial"/></xsl:element>
</xsl:when>

<xsl:when test="@quickdial&gt;9">
<xsl:element name="Telephone">**7<xsl:value-of select="@quickdial"/></xsl:element>
</xsl:when>
</xsl:choose>

<xsl:choose>
<xsl:when test="@vanity!=''">
<xsl:element name="Telephone">**8<xsl:value-of select="@vanity"/></xsl:element>
</xsl:when>
</xsl:choose>

<xsl:choose>
<xsl:when test="@type='home'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='intern'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type=''"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='memo'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='work'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='fax_work'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='mobile'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:otherwise><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</DirectoryEntry>
</xsl:for-each>
</CiscoIPPhoneDirectory>
</xsl:template>
</xsl:stylesheet>
Das sieht dann so aus...
Screenshot_20200323-221338.png
( Nicht vom "Snom" irritieren lassen, hab keine Ciscos )
Die wird nochmal nach HTML mittels XSLT-Transformation...
sippd2html.xsl
HTML:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/SnomIPPhoneDirectory">
<xsl:element name="html">
<xsl:element name="head">
<xsl:element name="title">
<xsl:value-of select="normalize-space(/SnomIPPhoneDirectory/Title)" />
</xsl:element>

<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="theme-color" content="Silver"/>

<xsl:element name="meta">
<xsl:attribute name="content">
<xsl:text>application/xhtml+xml; charset=UTF-8</xsl:text>
</xsl:attribute>
<xsl:attribute name="http-equiv">
<xsl:text>content-type</xsl:text>
</xsl:attribute>
</xsl:element>

<xsl:element name="meta">
<xsl:attribute name="content">
<xsl:value-of select="number(/SnomIPPhoneDirectory/Fetch/@mil div 1000)" />
<xsl:text>; URL=</xsl:text>
<xsl:value-of select="normalize-space(/SnomIPPhoneDirectory/Fetch)" />
</xsl:attribute>
<xsl:attribute name="http-equiv">
<xsl:text>refresh</xsl:text>
</xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel">
<xsl:text>stylesheet</xsl:text>
</xsl:attribute>
<xsl:attribute name="media">
<xsl:text>screen</xsl:text>
</xsl:attribute>
<xsl:attribute name="type">
<xsl:text>text/css</xsl:text>
</xsl:attribute>
<xsl:attribute name="href">
<xsl:text>xml.css</xsl:text>
</xsl:attribute>
</xsl:element>

<xsl:element name="link">
<xsl:attribute name="rel"><xsl:text>shortcut icon</xsl:text></xsl:attribute>
<xsl:attribute name="type"><xsl:text>image/x-ico</xsl:text></xsl:attribute>
<xsl:attribute name="href"><xsl:text>/favicon.ico</xsl:text></xsl:attribute>
</xsl:element>

<xsl:element name="style">
<xsl:attribute name="type"><xsl:text>text/css</xsl:text></xsl:attribute>
*{margin:0px 0px 0px 0px;
padding:0px 0px 0px 0px;}
table,th,td{margin:1px 1px 1px 1px;
border:1px outset black;
padding:1px 1px 1px 1px;
border-collapse:collapse;}
th,td{white-space:nowrap;}
table{width:auto;}</xsl:element>
</xsl:element>

<xsl:element name="body">
<xsl:element name="center">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:text>http://osmc</xsl:text></xsl:attribute>
<xsl:value-of select="/SnomIPPhoneDirectory/Prompt" />
</xsl:element>

<table>
<xsl:element name="caption"><xsl:value-of select="normalize-space(/SnomIPPhoneDirectory/Title)" />
</xsl:element>

<thead><tr><th>Name</th><th>Telephone</th></tr></thead>
<tbody>
<xsl:for-each select="/SnomIPPhoneDirectory/DirectoryEntry">
<tr><td><xsl:value-of select="./Name"/></td><td>
<xsl:for-each select="./Telephone">
<xsl:element name="div">
<xsl:element name="a"><xsl:attribute name="href">tel:<xsl:value-of select="."/></xsl:attribute><xsl:value-of select="."/></xsl:element>
</xsl:element>
</xsl:for-each>
</td></tr>
</xsl:for-each>
</tbody>
</table>

</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
<!--EOF-->
...die auch ein CSS-Stylesheet einbindet...
xml.css
Code:
body{background-color:Silver;color:Black;font-size:2em;}
a:any-link{
background-color:Black;
color:Silver;
font:bold 1.3em Georgia,Times,serif;
text-decoration:none;}
...
Bildschirmfoto vom 2020-03-24 11-20-48.png
...umgewandelt.

Der Style im HTML Browser eines Smartfons sieht noch moderner aus (Theme-Color) und die URL tel: kann auch genutzt werden...
Screenshot_20200324-112748.png
 
Zuletzt bearbeitet:
Hallo koyaanisqatsi,

hab das mal eben probiert. Es wird eine Cisco-Struktur erzeugt (musste nur in der Datei von uft-16 auf utf 8 umschreiben). Nun zeigt die Liste die zusätzlichen Nummern bei jedem Eintrag an.

Beispiel:
HTML:
-<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>0800664xxxx</Telephone>
<Telephone>0800526xxxx</Telephone>
<Telephone>0800665xxxx</Telephone>
</DirectoryEntry>
Das kann aber wohl das Cisco SPA525g2 nicht verarbeiten, wenn ich das Verzeichnis am Telefon aufrufe, wird nur die letzte Nummer angezeigt (Nummern oben habe ich ausgeixt)... Muss ich wohl in der Fritzbox für jede Nummer einen eigenen Eintrag erzeugen, und dann nach Cisco konvertieren.

Ich glaub, ich bau mir eine <CiscoIPPhoneMenu>, wo ich dann auf 6-8 verschiedene <CiscoIPPhoneDirectory> verweise, die ich biomechanisch dann erstelle, z.B. Eintrag 1 "A-B", Eintrag 2 "C-E", Eintrag 3 "F-I", usw., iss zwar etwas Handarbeit, aber anders sehe ich für mich grad keine praktikable Lösung. Eine Lösung mit "Suchen nach Name" möchte ich nicht umsetzen, bis ich da was getippt habe, scrolle ich 3x rauf und runter... (und das krieg ich script-technisch sowieso nicht hin ;-)).

Mfg
Hermann
 
Zuletzt bearbeitet:
  • Like
Reaktionen: koyaanisqatsi
Moinsen


Denke auch, dass das CiscoIPPhoneMenu wesentlich flexibler ist.
Wenn du da Startschwierigkeiten hast, oder später nicht weiterkommst, helf ich gern weiter.

So sehen auch andere Leser, wie mächtig XML/XSLT sein kann und es nicht nur als ein schnödes Konfigurationsdateiformat oder billiger Datenbankersatz herhalten muss.
 
Hallo,

danke schon mal im Voraus, ich werd sicher drauf zurückkommen *g*

Mfg
Hermann
 
Also, mein SPA303 kann nur eine Nummer pro Telefonbucheintrag
 
Hallo koyaanisqatsi,

siehst Du eine Möglichkeit, das Script:

HTML:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:processing-instruction name="xml-stylesheet">
<xsl:text>type="text/xsl" href="/sippd2html.xsl"</xsl:text>
</xsl:processing-instruction>
<CiscoIPPhoneDirectory>
<Title><xsl:value-of select="/phonebooks/phonebook/@name"/></Title>
<Prompt>Kontakt wählen</Prompt>
<xsl:for-each select="/phonebooks/phonebook/contact">
<DirectoryEntry>
<Name><xsl:value-of select="person/realName" /></Name>
<xsl:for-each select="telephony/number">
<xsl:choose>
<xsl:when test="@quickdial&lt;10">
<xsl:element name="Telephone">**70<xsl:value-of select="@quickdial"/></xsl:element>
</xsl:when>

<xsl:when test="@quickdial">&gt;9">
<xsl:element name="Telephone">**7<xsl:value-of select="@quickdial"/></xsl:element>
</xsl:when>
</xsl:choose>

<xsl:choose>
<xsl:when test="@vanity!=''">
<xsl:element name="Telephone">**8<xsl:value-of select="@vanity"/></xsl:element>
</xsl:when>
</xsl:choose>

<xsl:choose>
<xsl:when test="@type='home'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='intern'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type=''"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='memo'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='work'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='fax_work'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:when test="@type='mobile'"><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:when>
<xsl:otherwise><xsl:element name="Telephone"><xsl:value-of select="."/></xsl:element></xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</DirectoryEntry>
</xsl:for-each>
</CiscoIPPhoneDirectory>
</xsl:template>
</xsl:stylesheet>

so umzuschreiben, dass aus dem Fritzbox-Eintrag:

HTML:
-<contact>
<category>0</category>
-<person>
<realName>KD-Service-Nummer</realName>
</person>
-<telephony nid="3">
<number id="0" prio="1" type="work">0800664xxxx</number>
<number id="1" prio="0" type="work">0800526xxxx</number>
<number id="2" prio="0" type="work">0800665xxxx</number>
</telephony>
<services/>
<setup/>
<mod_time>1456851566</mod_time>
<uniqueid>121</uniqueid>
</contact>

nicht der Cisco-Eintrag:

HTML:
<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>0800664xxxx</Telephone>
<Telephone>0800526xxxx</Telephone>
<Telephone>0800665xxxx</Telephone>
</DirectoryEntry>

sondern folgende Einträge generiert werden:

HTML:
<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>0800664xxxx</Telephone>
</DirectoryEntry>

<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>0800526xxxx</Telephone>
</DirectoryEntry>

<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>0800665xxxx</Telephone>
</DirectoryEntry>

oder ist das meinerseits jetzt völlig aus der Luft gegriffen?

Mfg
Hermann
 
Mal so gesagt ;) ...
Wenn das zweite for-each für "number" das komplette <DirectoryEntry><Name></Name><Telephone></Telephone></DirectoryEntry> generiert, Nein, dann hast du das nicht aus der Luft gegriffen.
HTML:
<CiscoIPPhoneDirectory>
<xsl:for-each select="/phonebooks/phonebook/contact">
<xsl:for-each select="telephony/number">
<DirectoryEntry>
<Name><xsl:value-of select="../../person/realName" /></Name>
<!-- Weiter mit den Choose und When Knoff-Hoff -->
...denk dran, dass dann logischerweise auch </DirectoryEntry> vor den zwei abschliessenden </xsl:for-each> gehört, und nicht dazwischen.

@Theo Tintensich: Ja, das Problem versuchen wir grad zu lösen
Der interne XML/XSLT/XPath Prozessor und die internen Cisco Transformationskripte (XSL) sind mir nicht bekannt, kriegt man so nur durchs Ausprobieren raus ;)
...oder kennst du eine Referenz auf die du mich mal stupsen kannst?
 
Zuletzt bearbeitet:
Hallo,

hab das mal eingebaut, incl. hochziehen des </DirectoryEntry> -Eintrages. Ich erhalte dann zwar 3 Einträge mit den verschiedenen Nummern, aber der Name erscheint nicht mehr...

HTML:
-<DirectoryEntry>
<Name/>
<Telephone>08006648390</Telephone>
</DirectoryEntry>

-<DirectoryEntry>
<Name/>
<Telephone>08005266625</Telephone>
</DirectoryEntry>

-<DirectoryEntry>
<Name/>
<Telephone>08006648389</Telephone>
</DirectoryEntry>

Ich komm auch nicht auf den Fehler ;-(

Mfg
Hermann

P.S. Wenn ich die Datei mit einem Editor öffne, ist auch kein Zeilenumbruch vorhanden, war auch in der ersten Version, wo alle Nummern übernommen wurden, schon so. Wo müsste da im Script noch ein CR rein?
 
Denkfehler meinerseits, wir befinden uns ja in einer Baumstruktur...
/phonebooks/phonebook/contact/
...darauf visiert das erste for-each, aber das Zweite springt ja von Dort nach...
telephony/number
...und aus der relativen Sichtweise muss es dann von Dort aus...
HTML:
<Name><xsl:value-of select="../../person/realName" /></Name>
...heissen, um geholt werden zu können.
(Oben auch korrigiert)

. = aktuelles Element, <number>
../ = Ein Element zurück, oder in diesen Fall: <telephony>
../../ = Zwei zurück, oder in diesen Fall: <contact>
 
Zuletzt bearbeitet:
Hallo,

super!!! Jetzt zeigt der Browser:

HTML:
-<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>08006648390</Telephone>
</DirectoryEntry>

-<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>08005266625</Telephone>
</DirectoryEntry>

-<DirectoryEntry>
<Name>KD-Service-Nummer</Name>
<Telephone>08006648389</Telephone>
</DirectoryEntry>

Hab zwar die Änderung jetzt nicht kapiert, aber das macht ja nix ;-)

Eine Frage noch, wenn ich die erstellte .xml im Editor aufmache, steht alles in einer Zeile... Da ich die gesamte Datei ja noch ein paar mal splitten muss, wäre es toll, wenns im Editor (Notepad++) auch zeilenweise angezeigt würde... Fehlt da noch irgendeine Formatierungsdefinition?

Mfg
Hermann
 
Kommt wahrscheinlich von den <xsl:element>.

Für die Erzeugung nutz ich xsltproc und für die Formatierung unter Linux: xmllint --format infile.xml >outfile.xml

Dann wirds hübsch eingerückt und bekommt auch Zeilenumbrüche.

Oder nutze <xsl:element> nicht, sondern mach die HTML Tags wie im ersten Beispiel.
Für den XSLT Prozessor macht das keinen Unterschied.
 
Zuletzt bearbeitet:
Hallo,

ok, gleich mal testen, ob das auch klappt. Habs nach Suchen auch mit Notepad ++ hinbekommen (suchen/ersetzen >< durch >\n<); automatisiert ist natürlich besser!
Wenn ich die html-Tags in die fb2cisco.xsl einbaue, brauche ich die sippd2html.xsl dann nicht, oder?

Mfg
Hermann

Edit meint:

Mit den html-Tags schauts so aus:
HTML:
<DirectoryEntry>
    <Name>
      KD-Service-Nummer
    </Name>
    <Telephone>
      08006648390
    </Telephone>
  </DirectoryEntry>
  <DirectoryEntry>
    <Name>
      KD-Service-Nummer
    </Name>
    <Telephone>
      08005266625
    </Telephone>
  </DirectoryEntry>
  <DirectoryEntry>
    <Name>
      KD-Service-Nummer
    </Name>
    <Telephone>
      08006648389
    </Telephone>
  </DirectoryEntry>

Auch nicht so prickelnd...

Mfg
Hermann
 
Zuletzt bearbeitet:
Moin Moin


Zeig mal die XSL, die das erzeugt.

Wenn ich die html-Tags in die fb2cisco.xsl einbaue, brauche ich die sippd2html.xsl dann nicht, oder?
Die sippd2html.xsl baut nur das HTML für normale Webbrowser mit normalen XSLT Prozessor und wird auch normalerweise vom Snom und Cisco Prozessor ignoriert.

Die <xsl:/> Anweisungen um die Verwendete für normale Webbrowser anzuzeigen...
HTML:
<p><b><xsl:text>XSL Version: </xsl:text></b> <xsl:value-of select="system-property('xsl:version')" /></p>
<p><b><xsl:text>XSL Prozessor-Hersteller: </xsl:text></b> <xsl:value-of select="system-property('xsl:vendor')" /></p>
<p><b><xsl:text>Hersteller URL-Adresse: </xsl:text></b> <xsl:value-of select="system-property('xsl:vendor-url')" /></p>
Beispielsweise...
Screenshot_20200325-112541.png
 
Zuletzt bearbeitet:

Neueste Beiträge

Statistik des Forums

Themen
244,695
Beiträge
2,216,690
Mitglieder
371,315
Neuestes Mitglied
jack-mack
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.