Basiskonfiguration für Snom Tischgeräte im XML Format

Vorweg, ich übernehme keinerlei Garantie auf Richtigkeit der hier geposteten Informationen, das soll viel mehr eine Hilfestellung für andere sein, die sich auch eingehender mit der Telefonanlage auseinander setzen wollen!

Hintergrund:
Ich verwende die Telefonanlage im Intranet, ohne Zugriff aus dem Internet und verwende daher ein Selbstsigniertes Zertifikat aus einer Internen Zertifizierungsstelle, damit sich die Snom Endgeräte erfolgreich verbinden können, müssen sie dem Zertifikat der Telefonanlage natürlich vertrauen.
Snom bietet dazu eine Möglichkeit, Root-Zertifikate automatisch mit der Provisionierung zu installieren, welche allerdings eine XML-Konfiguration erfordert.
Zusätzlich gestaltet sich die Konfiguration der Funktionstasten als wesentlich übersichtlicher und passt zur Dokumentation von Snom!

Die folgende Provisionierungs Konfiguration sollte bis auf den teil mit dem Zertifikat, ohne Anpassungen mit der Pascom Version 7.18.11.R kompatibel sein!

    <?xml version="1.0" encoding="utf-8"?>
    <settings>
        {{!-- Install CA --}}
        <certificates>
            <certificate url="<http://webserver-auf-dem-das-root-zertifikat-abgelet-wurde/root-ca.der>" />
        </certificates>
        <phone-settings e="2">
        {{!-- password protection --}}
            <admin_mode perm="!">off</admin_mode>
            <admin_mode_password perm="R">{{{admin_password}}}</admin_mode_password>
            <admin_mode_password_confirm perm="R">{{{admin_password}}}</admin_mode_password_confirm>
            <http_pass perm="R">{{{071ipp_authpass}}}</http_pass>
            <http_user perm="R">{{{071ipp_authuser}}}</http_user>
            <http_scheme perm="R">off</http_scheme>
        {{!-- date/time --}}
            <ntp_server perm="R">pool.ntp.org</ntp_server>
            <ntp_refresh_timer perm="R">86400</ntp_refresh_timer>
            <date_us_format perm="R">{{{list_key lang "de_DE" "off" "en_US" "on"}}}</date_us_format>
            <time_24_format perm="R">on</time_24_format>
            <timezone perm="R">{{{list_key lang "de_DE" "GER+1" "en_US" "GBR-0"}}}</timezone>
        {{!-- language --}}
            <web_language perm="RW">{{{list_key lang "de_DE" "Deutsch" "en_US" "English"}}}</web_language>
            <language perm="RW">{{{list_key lang "de_DE" "Deutsch" "en_US" "English"}}}</language>
            <country_code perm="RW">{{{list_key lang "de_DE" "0049" "en_US" "0044"}}}</country_code>
        {{!-- tone set --}}
            <tone_scheme perm="R">{{{list_key lang "de_DE" "GER" "en_US" "GBR"}}}</tone_scheme>
        {{!-- behaviour --}}
            <mailbox_active perm="R">on</mailbox_active>
            <peer_to_peer_cc perm="R">off</peer_to_peer_cc>
            {{#fw_less 071ipp_cur_fw "8.7.4"}}
                <prioritise_pbx_number_lookup perm="R">off</prioritise_pbx_number_lookup>
            {{else}}
                <contact_source_priority perm="R">Sip Tbook Ldap Memory</contact_source_priority>
            {{/fw_less}}
            <guess_number perm="R">off</guess_number>
            <logon_wizard perm="R">off</logon_wizard>
            <answer_after_policy perm="R">idle</answer_after_policy>
            <auto_connect_indication perm="R">on</auto_connect_indication>
            {{#fw_less 071ipp_cur_fw "8.7.2"}}
                <auto_connect_type perm="R">auto_connect_type_handsfree</auto_connect_type>
                <callpickup_dialoginfo perm="R">off</callpickup_dialoginfo>
            {{else}}
                <intercom_connect_type perm="R">intercom_connect_type_handsfree</intercom_connect_type>
                <goto_monitor_state_on_line_activity perm="R">off</goto_monitor_state_on_line_activity>
            {{/fw_less}}
            <call_completion perm="R">off</call_completion>
            <call_join_xfer perm="R">on</call_join_xfer>
            {{#fw_less 071ipp_cur_fw "8.7.5"}}
                <call_waiting perm="R">{{{bool 011acc_callwaiting}}}</call_waiting>
                <conf_hangup perm="R">on</conf_hangup>
            {{else}}
                <call_waiting idx="1" perm="R">{{{bool 011acc_callwaiting}}}</call_waiting>
                <conf_hangup idx="1" perm="R">on</conf_hangup>
            {{/fw_less}}
            <challenge_response perm="R">off</challenge_response>
            <display_method perm="!">display_name_number</display_method>
            <ignore_security_warning perm="R">on</ignore_security_warning>
            <intercom_connect_type perm="R">intercom_connect_type_handsfree</intercom_connect_type>
            <transfer_on_hangup perm="R">on</transfer_on_hangup>
            <transfer_on_hangup_non_pots perm="R">on</transfer_on_hangup_non_pots>
            <transfer_on_hangup_with_starcode perm="R">on</transfer_on_hangup_with_starcode>
            <contact_source_priority perm="!">Tbook Ldap Sip Memory</contact_source_priority>
            <prioritise_asserted perm="!">off</prioritise_asserted>
            <recording_mechanism perm="!">NONE</recording_mechanism>
        {{!-- SIP general --}}
            <retry_after_failed_register perm="R">3,6:120</retry_after_failed_register>
            <user_phone perm="R">off</user_phone>
        {{!-- SIP account --}}
            <user_active idx="1" perm="R">on</user_active>
            <user_auth_tag idx="1" perm="R">off</user_auth_tag>
            <user_name idx="1" perm="R">{{{013pee_username}}}</user_name>
            <user_pass idx="1" perm="R">{{{013pee_password}}}</user_pass>
            <user_realname idx="1" perm="R">{{{012loc_bez}}}</user_realname>
            <user_sipusername_as_line idx="1" perm="R">on</user_sipusername_as_line>
            <user_mailbox idx="1" perm="R">{{{setting sys.asterisk.dialplan.global.voicebox.watched.value }}}</user_mailbox>
            <user_idle_text idx="1" perm="R">{{{displayname}}}</user_idle_text>
            <user_srtp idx="1" perm="R">{{#if_eq voip_media 'srtp'}}on{{else}}off{{/if_eq}}</user_srtp>
            <user_savp idx="1" perm="R">mandatory</user_savp>
            <user_host idx="1" perm="R">{{{cs_domain}}}</user_host>
            {{#if_eq voip_sip 'tls'}}
                <user_outbound idx="1" perm="R">{{{httpip}}}:5061;transport=tls</user_outbound>
            {{else}}
                {{#if_eq voip_sip 'udp'}}
                    <user_outbound idx="1" perm="R">{{{httpip}}}</user_outbound>
                {{else}}
                <user_outbound idx="1" perm="R">{{{httpip}}}:5060;transport=tcp</user_outbound>
                {{/if_eq}}
            {{/if_eq}}
        {{!-- SIP push --}}
            <offer_gruu perm="R">off</offer_gruu>
            <filter_registrar perm="R">off</filter_registrar>
            <network_id_port perm="R">{{#if_eq voip_sip 'tls'}}5061{{else}}5060{{/if_eq}}</network_id_port>
            <dkey_record perm="RW">url http://{{{httpip}}}/provisioning/{{{071ipp_mac}}}/pui/monitor/record?callid=$call-id</dkey_record>
        {{!-- ldap --}}
            <gui_fkey1 perm="RW">keyevent F_DIRECTORY_SEARCH</gui_fkey1>
            <dkey_directory perm="RW">url http://{{{httpip}}}/provisioning/{{{071ipp_mac}}}/pui/phonebook/search?callid=$call-id</dkey_directory>
            {{#if_eq ldap_proxy 'off'}}
                <ldap_base perm="RW"></ldap_base>
                <ldap_display_name perm="RW"></ldap_display_name>
                {{#fw_less 071ipp_cur_fw "8.7.3"}}
                    <ldap_lookup_ringing perm="RW">off</ldap_lookup_ringing>
                {{/fw_less}}
                <ldap_name_attributes perm="RW"></ldap_name_attributes>
                <ldap_number_attributes perm="RW"></ldap_number_attributes>
                <ldap_number_filter perm="RW"></ldap_number_filter>
                <ldap_password perm="RW"></ldap_password>
                <ldap_port perm="RW"></ldap_port>
                <ldap_over_tls perm="RW">off</ldap_over_tls>
                <ldap_search_filter perm="RW"></ldap_search_filter>
                <ldap_search_filter perm="RW"></ldap_search_filter>
                <ldap_server perm="RW"></ldap_server>
                <ldap_username perm="RW"></ldap_username>
            {{else}}
                <ldap_base perm="R">dc=phonebook,{{{ldap_suffix}}}</ldap_base>
                <ldap_display_name perm="R">%cn</ldap_display_name>
                {{#fw_less 071ipp_cur_fw "8.7.3"}}
                    <ldap_lookup_ringing perm="RW">on</ldap_lookup_ringing>
                {{/fw_less}}
                <ldap_name_attributes perm="R">cn sn displayName</ldap_name_attributes>
                <ldap_number_attributes perm="R">telephoneNumber mobile</ldap_number_attributes>
                <ldap_number_filter perm="RW">(&(telephoneNumber=%)(cn=*))</ldap_number_filter>
                <ldap_number_filter_during_call perm="RW">(&(telephoneNumber=%)(cn=*))</ldap_number_filter_during_call>
                <ldap_password perm="R">{{{ldap_password}}}</ldap_password>
            {{#if vpnconnection}}
                    <ldap_port perm="R">389</ldap_port>
                    <ldap_over_tls perm="R">off</ldap_over_tls>
            {{else}}
                <ldap_port perm="R">636</ldap_port>
                <ldap_over_tls perm="R">on</ldap_over_tls>
            {{/if}}
                <ldap_search_filter perm="R">(|(cn=%)(sn=%))</ldap_search_filter>
                <ldap_server perm="R">{{{httpip}}}</ldap_server>
                <ldap_username perm="R">cn={{{ldap_username}}},dc=devices,{{{ldap_suffix}}}</ldap_username>
            {{/if_eq}}
        {{! --logging --}}
                <syslog_server perm="!"></syslog_server>
                <log_level perm="!"></log_level>
        {{!-- provisioning --}}
                {{#fw_less 071ipp_cur_fw "8.7.2"}}
                    <subscribe_config perm="R">on</subscribe_config>
                {{/fw_less}}
                <pnp_config perm="R">off</pnp_config>
                <update_policy perm="R">settings_only</update_policy>
                <provisioning_order perm="R">dhcp:stop pnp:stop tr69:stop redirection:stop</provisioning_order>
        </phone-settings>
        {{!-- keys --}}
        <functionKeys e="2">
            <fkey idx="0" context="active" label="Pascom" lp="on" default_text="$name" perm="RW">
                url http://{{{httpip}}}/provisioning/{{{071ipp_mac}}}/pui/menu?callid=$call-id
            </fkey> 
        </functionKeys>
    </settings>

Edit 15.04.2020:
LDAP-Namensfilter richtig gestellt!
Bisher hat das Telefon Fälschlicherweise immer nur den ersten eintrag des gesamten Telefonbuchs angezeigt.
Dies sind die geänderten Zeilen:

<ldap_number_filter perm="RW">(&(telephoneNumber=%)(cn=*))</ldap_number_filter>
<ldap_number_filter_during_call perm="RW">(&(telephoneNumber=%)(cn=*))</ldap_number_filter_during_call>

Edit 21.01.2020:
Da obige Konfiguration inzwischen Produktiv auf ca.30, D345 Geräten läuft und einwandfrei funktioniert, möchte ich hier noch ein paar Beispiele für Tastenbelegungen geben:

  • Einfache Nebenstelle auf den dezidierten Tasten, xxx = Durchwahl:
<settings>
    <functionKeys e="2">
        <fkey idx="1" context="active" label="Nebenstelle" lp="on" default_text="$name $state" perm="RW">dest sip:xxx@{{{cs_domain}}}</fkey>
    </functionKeys>
</settings>

  • Pascom-seitige Rufumleitung von der am Endgerät zugewiesenen durchwahl, auf eine definierte nummer, yyy = Ziel der Rufumleitung, alle anderen werte werden beim provisionieren von der PBX ausgefüllt:
 <settings>
    <functionKeys e="2">
        <fkey idx="3" context="active" label="Umleitung" lp="on" default_text="$name $state" perm="RW">dest sip:*74{{009ext_extension}}%23yyy@{{{cs_domain}}}</fkey>
    </functionKeys>
 </settings>

  • Hier noch eine etwas speziellere Konfiguration, um sich wie in diesem Beispiel beschrieben anstatt dem Telefon-Journal, das Pascom-Journal auf den Softkey nummer 2 aufs Display zu legen:
 <settings>
    <phone-settings e="2">
            <gui_fkey2 perm="RW">
            <initialization>
                <state value="off"/>
                <variable name='label' value=''/>
            </initialization>
            <action>
                <url target="http://{{{httpip}}}/provisioning/{{{071ipp_mac}}}/pui/cdr/menu" when="on press" states="off"/>
            </action>
        </gui_fkey2>
    </phone-settings>
 </settings>

Diese aufwändigere Konfiguration ist notwendig, da man auf den Kontext-sensitiven Funktionstasten am Display keine “Aktions URL” hinterlegen kann, daher die abhilfe über die XML-Definition!
Das nicht druckbare Zeichen im label ist übrigens das Snom Icon für “Journal”

Diese Beispiele gehören natürlich im richtigen Kontext in die oben stehende Basis Konfiguration eingefügt, daher sind sie mit den übergeordneten XML-Tags versehen!

Hallo @_dev_simon
danke für das Template. Wir wollen künftig auch unsere Standard-Basiskonfiguration als XML ausliefern. Wenn es so weit ist, werden wir dies natürlich in den Releasenotes bekannt machen.

Besten Gruß
Sebastian