Szablony niestandardowe: Własna marka telefonu

System 3CX jest dostarczany z wbudowanymi szablonami dla obsługiwanych producentów telefonów. Jeśli Twoja marka lub model nie znajduje się na tej liście, możesz dodać jej obsługę, tworząc szablon niestandardowy (Custom Template). Niniejszy przewodnik przeprowadzi Cię przez ten proces przy użyciu gotowego, przykładowego szablonu, który możesz dostosować do własnych potrzeb.

Co robi szablon niestandardowy

Szablon to plik XML, który instruuje system 3CX, jak wygenerować plik autokonfiguracji (provisioning) dla konkretnego modelu telefonu. Podczas procesu autokonfiguracji system 3CX:

  1. Wczytuje szablon przypisany do urządzenia.
  2. Zastępuje zmienne 3CX (np.  %%extension_number%%) rzeczywistymi wartościami.
  3. Przetwarza bloki warunkowe (np. {IF network=SBC}).
  4. Zapisuje wygenerowany plik konfiguracyjny pod adresem URL autokonfiguracji, z którego pobiera go telefon.

Twoim zadaniem przy dostosowywaniu szablonu jest zmapowanie składni konfiguracyjnej danego producenta na zmienne 3CX dostarczające odpowiednie dane.

Wymagania wstępne

  • Dostęp administratora do systemu 3CX („Admin” > „Advanced” > „Templates”).
  • Dokumentacja autokonfiguracji wydana przez producenta sprzętu, a w szczególności nazwy parametrów dla danych uwierzytelniających SIP, kodeków, przycisków BLF, NTP, strefy czasowej, VLAN oraz wszelkich innych funkcji oferowanych przez dany telefon. Niektórzy producenci udostępniają dokumentację techniczną wyłącznie na zamówienie; oto praktyczne przykłady dostępne online:
  • Ciąg User-Agent telefonu (widoczny w komunikatach SIP REGISTER urządzenia lub w dziennikach telefonu 3CX, gdy urządzenie połączy się z centralą PBX).
  • Format adresu URL autokonfiguracji wymagany przez dany telefon.

Procedura

  • Przejdź do „Admin” > „Advanced” (Zaawansowane) > „Templates” (Szablony) > „Phone Templates” (Szablony telefonów).
  • Wybierz szablon zbliżony składnią do rozwiązań Twojego producenta i kliknij „Create Copy” (Utwórz kopię). Nazwij kopię według swojej marki (np. phonetel-custom.ph).
  • Otwórz nowy szablon i zastąp jego zawartość poniższym przykładowym szablonem.
  • Edytuj sekcję <header>: ustaw nazwę szablonu, parametry modelu ua (User-Agent), logo, kodeki oraz możliwości urządzenia dostosowane do Twojego telefonu.
  • Edytuj sekcję CDATA znacznika <deviceconfig>. Zastąp każdy zastępczy parametr your_*_variable rzeczywistą nazwą parametru używaną przez Twojego producenta. Zachowuj zmienne 3CX w formacie %%...%% po prawej stronie — zostaną one zastąpione właściwymi wartościami podczas autokonfiguracji.
  • Zapisz szablon.
  • Dodaj telefon w systemie 3CX i wybierz swój szablon niestandardowy, gdy system poprosi o wybór modelu.
  • Wprowadź adres URL autokonfiguracji dostarczony przez 3CX w telefonie (ręcznie lub przez opcję DHCP 66 / PNP) i uruchom proces autokonfiguracji.

Struktura szablonu

Plik XML składa się z dwóch głównych sekcji najwyższego poziomu.

Znacznik Header

Znacznik <header> deklaruje metadane szablonu oraz elementy sterujące interfejsu użytkownika, które 3CX wyświetla dla tego telefonu:

Element

Przeznaczenie

<type>, <version>, <time>, <name>, <url>,<description>

Typ szablonu, identyfikator oraz wersja.

<templatetype>

Jeden z typów: preferred, supported, vendor, custom.

<models>

Jeden znacznik <model> na wariant urządzenia. ua odpowiada nagłówkowi SIP User-Agent telefonu. canbesbc włącza zdalną autokonfigurację SBC dla telefonów posiadających wbudowany moduł 3CX SBC. defaultlogo określa nazwę pliku z logo marki. Atrybuty logowidth, logoheight, logobitdepth opisują właściwości pliku logo, a tekst znacznika definiuje nazwę modelu wyświetlaną w systemie 3CX.

<parsers>

Parsery funkcji — np. BLF włącza generowanie przycisków pola zajętości (Busy Lamp Field).

<rebootParams>, <resyncParams>, <firmwareParams>

Nazwy zdarzeń SIP NOTIFY używane do zdalnego ponownego uruchamiania, resynchronizacji konfiguracji lub wyzwalania aktualizacji oprogramowania układowego (firmware).

<rps>

Ustaw na 1, jeśli producent obsługuje usługę Redirection and Provisioning Service (RPS).

<hotdesking>

Ustaw na 1, jeśli telefon obsługuje funkcję Hot-Desking.

<AllowedNetworkConfig>

Określa prawidłowe tryby sieciowe: LOCALLAN, REMOTESTUN, SBC.

<interfaceLink>

Adres URL logowania do konsoli WWW telefonu (wyświetlany w 3CX, gdy telefon jest zarejestrowany).

<xfertype>

Wartości transferu ślepego (blind) i z zapowiedzią (attended) dla klawiszy DSS.

<languages>, <ringtones>, <queueringtones>, <dateformat>, <timeformat>, <powerled>, <backlight>, <screensaver>, <vlan>, <lldp>, <timezoneParams>

Rozwijane menu interfejsu. Każde z nich może zawierać znacznik <option>, który definiuje, co widzi administrator i jakie zmienne są udostępniane po wybraniu danej opcji, a następnie przesyłane do telefonu podczas autokonfiguracji.

<Codecspriorities>

Kolejność kodeków. Pierwsza opcja w każdym znaczniku <Codecspriority> jest domyślną dla danego slotu.

Przykładowy szablon

Znaczniki BlfType i Data

  • <blftype> — definiuje formaty klawiszy dla każdej funkcji BLF (monitorowanie numeru wewnętrznego, klawisz linii, szybkie wybieranie, logowanie do kolejki, parkowanie, status profilu). System 3CX iteruje po nich, gdy administrator przypisuje przyciski BLF w interfejsie numeru wewnętrznego.
  • <data><device> — otacza blok CDATA znacznika <deviceconfig>. Blok CDATA zawiera dosłowną składnię konfiguracyjną producenta ze wstawionymi zmiennymi 3CX. Może zawierać instrukcje warunkowe IF, które 3CX przetwarza, dostarczając różne zmienne dla różnych modeli i warunków.

Zmienne 3CX: Szybka ściąga

Są to najczęściej używane zmienne wewnątrz sekcji CDATA. Zmienne są zapisywane w formacie %%name%% i są zastępowane właściwymi wartościami podczas autokonfiguracji.

Tożsamość i autokonfiguracja (provisioning)

Zmienna

Znaczenie

%%mac_address%%

Adres MAC telefonu. Często używany w nazwie pliku konfiguracyjnego.

%%PROVLINK%%

Pełny adres URL autokonfiguracji, którego powinien używać telefon.

%%firmware%%

Nazwa pliku oprogramowania układowego zadeklarowana w szablonie.

%%PHONE_IP%%

Wykryty adres IP telefonu.

%%PHONE_WEB_PASSWORD%%

Wygenerowane hasło administratora WWW. Używane w sekcji <interfaceLink>.

%%DESKPHONE_PASSWORD%%

Hasło po stronie telefonu. Używane w sekcji CDATA znacznika <device>.

%%PROVLINK.HOST%%, %%PROVLINK.PATH%%, %%PROVLINK.PORT%%

Składniki (FQDN, ścieżka i port HTTP) używane do ręcznego zbudowania pełnego adresu URL autokonfiguracji, jeśli telefon wymaga specyficznego formatu.

%%param::time_ntp_server%%

Adres serwera Network Time Protocol (NTP) przeznaczony dla telefonów.

Numer wewnętrzny / Konto SIP

Zmienna

Znaczenie

%%extension_number%%

Numer wewnętrzny.

%%extension_first_name%%, %%extension_last_name%%

Imię i nazwisko użytkownika.

%%extension_auth_id%%, %%extension_auth_pw%%

Dane uwierzytelniające SIP.

%%vm_number%%

Numer dostępowy do poczty głosowej.

Sieć

Zmienna

Znaczenie

%%pbx_ip%%

Wewnętrzny adres IP centrali PBX (tryb LAN).

%%param::pbxpublicip%%

Publiczny adres IP centrali PBX (tryb SBC).

%%param::sipport%%

Port nasłuchiwania SIP centrali PBX.

%%local_sbc_ip%%, %%local_sbc_port%%

Adres SBC dla telefonów zdalnych.

%%phonesipport%%

Lokalny port SIP telefonu (starsze/legacy – używane dla telefonów STUN).

Opcje udostępniane przez sekcję Header

Wartości te pochodzą ze znaczników <option> zdefiniowanych w sekcji <header>:

Zmienna

Z sekcji

%%language%%

<languages>

%%datestyle%%, %%timestyle%%

<dateformat>, <timeformat>

%%defringtone%%

<ringtones>

%%queueringtone%%, %%queueringtonevalue%%, %%queueid%%

<queueringtones>

%%mwiled%%, %%missedled%%

<powerled>

%%blktime%%

<backlight>

%%scrsavertime%%

<screensaver>

%%vlanwanenabled%%, %%vlanwanportid%%, %%vlanwanportpriority%%

<vlan> (port WAN)

%%vlanpcenabled%%, %%vlanpcportid%%, %%vlanpcportpriority%%

<vlan> (port PC)

%%lldpenabled%%

<lldp>

%%param::time_timezone_yealink%%, %%TimeZoneName%%

<timezoneParams>

%%XFERmethod_Value%%

<xfertype>

%%logo%%

Atrybut defaultlogo w znaczniku <model>

  • dla Yealink należy ustawić: wallpaper_upload.url = %%PROVLINK%%/%%logo%%

oraz

screensaver.upload_url= %%PROVLINK%%/%%logo%%

screensaver.type= 1

  • dla Fanvil należy użyć: <Auto_Etc_Url>%%PROVLINK%%/%%logo%%</Auto_Etc_Url>
  • dla telefonów Snom należy użyć <custom_bg_image_url perm="">%%PROVLINK%%/%%logo%%</custom_bg_image_url>

%%logo_filename%%

dla Yealink należy ustawić
phone_setting.backgrounds = Config:%%logo_filename%%

Kodeki

Zmienna

Znaczenie

%%codec1%% … %%codec5%%

Wartość kodeka na danym pozycji priorytetu.

%%payload1%% … %%payload5%%

Typ ładunku (payload type) dla każdej pozycji.

%%[id].codecselected%%

Wartość 1, jeśli kodek jest włączony (pcmuid, g729id, opusid, itp.).

%%[id].priority%%

Slot priorytetowy zajmowany przez dany kodek.

BLF / Przyciski funkcyjne

Wewnątrz bloków {IF blfN} (gdzie N oznacza indeks klawisza):

Zmienna

Znaczenie

%%Line%%

Numer linii z definicji <blftype>.

%%type%%

Monitorowany numer wewnętrzny lub kod funkcji.

%%PickupValue%%

Cel przechwycenia połączenia (pickup).

%%DKtype%%

Kod typu klawisza funkcyjnego (zależny od producenta w <DKtype>).

%%label%%

Etykieta wyświetlana.

%%blfno%%

Numer wewnętrzny celu BLF lub szybkiego wybierania (Speed Dial).

%%param::pickup%%

Kod przechwycenia połączenia pobrany z konfiguracji systemu 3CX.

%%blffirstname%%, %%blflastname%%

Imię i nazwisko użytkownika numeru wewnętrznego używane dla etykiety BLF.

Logika warunkowa

Sekcja CDATA obsługuje proste instrukcje warunkowe. System 3CX przetwarza je przed wysłaniem konfiguracji do telefonu.

Tryb sieciowy

W zależności od tego, jak telefon łączy się z centralą PBX, generowane są różne bloki:

{IF network=LOCALLAN}

  ...config for LAN-attached phones...

{ENDIF}

{IF network=SBC}

  ...config for remote phones using the SBC...

{ENDIF}

{IF network=REMOTESTUN}

  ...config for STUN-based remote phones...

{ENDIF}

Sloty BLF

Każdy przycisk BLF/funkcyjny posiada własny warunek. Wewnątrz bloku zmienne kontekstowe BLF (%%Line%%, %%type%%, %%label%% itp.) odnoszą się do tego konkretnego klawisza:

{IF blf1}

  linekey.1.type  = %%DKtype%%

  linekey.1.value = %%type%%

  linekey.1.label = %%label%%

{ELSE}

  linekey.1.type  = 0

{ENDIF}

Powtórz tę strukturę dla blf2, blf3, … aż do maksymalnej liczby programowalnych klawiszy obsługiwanych przez Twój telefon.

Parametry systemowe

Możesz odwołać się do dowolnego parametru systemowego 3CX poprzez sysparam.NAME:

{IF sysparam.CUSTOMIZE_QUEUE_RINGTONES=1}

  ...emit per-queue ringtone mappings...

{ELSE}

  ...emit a single default queue ringtone...

{ENDIF}

Testowanie i weryfikacja

  • Po zapisaniu szablonu dodaj testowy numer wewnętrzny i przypisz swój niestandardowy szablon jako model telefonu.
  • Przywróć telefon do ustawień fabrycznych (zalecane dla czystego testu).
  • Przeprowadź autokonfigurację (provisioning) telefonu za pomocą jednej z metod:
  • Ręcznie — wprowadź %%PROVLINK%% (widoczny w zakładce „IP Phone” numeru wewnętrznego) w polu adresu URL autokonfiguracji telefonu.
  • Opcja DHCP 66 — wskaż adres URL autokonfiguracji centrali PBX.
  • PNP / RPS — jeśli producent to obsługuje i w Twoim szablonie ustawiono <rps>1</rps>.
  • Obserwuj Dziennik aktywności 3CX (Activity Log) oraz lokalne dzienniki telefonu. Potwierdź, że urządzenie pobiera konfigurację i pomyślnie się rejestruje.
  • Zweryfikuj każdą zamapowaną funkcję: kolejność kodeków, przyciski BLF, dzwonki, zachowanie przy transferze, VLAN.

Jeśli jakaś wartość jest nieprawidłowa, przejrzyj wygenerowany plik konfiguracyjny bezpośrednio — system 3CX udostępnia go pod adresem %%PROVLINK%%/<mac_address>.cfg (lub według wzorca nazwy pliku ustawionego w znaczniku <deviceconfig filename="...">).

Automatyczne ustawianie strefy czasowej zgodnie z Twoim działem

Globalna strefa czasowa 3CX lub niestandardowa strefa czasowa działu posiada odpowiadający jej identyfikator (ID) dla każdej nazwy regionu, jak pokazano w poniższej tabeli przykładowej:

Id

Opis

Strefa

121

-12:00 Międzynarodowa linia zmiany daty (Zachód)

-12:00

120

-11:00 Wyspy Midway, Samoa

-11:00

1

-10:00 Stany Zjednoczone – Hawaje-Aleuty

-10:00

2

-10:00 Stany Zjednoczone – Alaska-Aleuty

-10:00

Jeśli Twój szablon zawiera te identyfikatory w sekcji <timezoneParams>, telefony będą mogły korzystać z domyślnej opcji „Use Global Time Zone” (Użyj globalnej strefy czasowej). System automatycznie dopasuje strefę czasową i skonfiguruje telefony, dzięki czemu nie musisz ręcznie wybierać strefy czasowej dla każdego telefonu z osobna.

Jeśli musisz ręcznie ustawić identyfikator, pełną listę identyfikatorów stref czasowych znajdziesz w dokumentacji referencyjnej stref czasowych.

Przykładowy szablon

Skopiuj poniższy szablon do swojego szablonu niestandardowego jako punkt startowy, a następnie zastąp zastępcze parametry zmiennych (widoczne w poniższym fragmencie w formacie your_*_variable oraz [Example_*]) rzeczywistymi parametrami i nazwami Twojego urządzenia i producenta.

Dobre praktyki edycji szablonu:

  • Format: Używaj surowych plików .ph.xml lub edytorów tekstu niesformatowanego. Unikaj edytorów tekstu sformatowanego (Word/Docs), aby zapobiec uszkodzeniu struktury.
  • Struktura: Poza blokiem CDATA znacznika <deviceconfig> wcięcia są ignorowane.
  • CDATA: Wewnątrz sekcji CDATA zachowaj dokładną składnię wymaganą przez producenta (odstępy i znaki nowej linii).
  • Walidacja: Zapisuj plik w kodowaniu UTF-8, zweryfikuj poprawność XML i przeanalizuj wygenerowaną konfigurację na urządzeniu testowym.

<?xml version="1.0" encoding="utf-8"?>

<doc xmlns:tcx="http://www.3cx.com">

  <header>

    <type>phone-template</type>

    <version>150000</version>

    <time>2026-01-01 12:30:00</time>

    <!-- Template Name -->

    <name>[Example_GreatPhone]</name>

    <url>https://www.3cx.com/sip-phones/</url>

    <templatetype>supported</templatetype>

    <!-- List the model user agent, SBC capability, logo filename/dimensions/bitdepth, and model name -->

    <models>

      <model ua="[Example_GP100]" canbesbc="true" defaultlogo="[Example_GreatPhone.png]" logowidth="320" logoheight="240" logobitdepth="24">[Example_GreatPhone GP100]</model>

      <model ua="[Example_GreatPhone GP200]" canbesbc="true" defaultlogo="[Example_GreatPhone.png]" logowidth="320" logoheight="240" logobitdepth="24">GreatPhone GP200</model>

      <!-- The name "[Example_GreatPhone.png]" also defines the firmware foldername -->

    </models>

    <description>[Example_GreatPhone SIP Phones]</description>

...

    <languages>

    <!-- Options: Language drop-down entries -->

      <option value="English">

        <item name="your_language_variable">English</item>

      </option>

    </languages>

    <ringtones>

    <!-- Default Ringtone drop-down entries -->

      <option value="Ring 1">

        <item name="defringtone">your_ring1_variable</item>

      </option>

    </ringtones>

....

  <data>

    <device>

      <type>phone</type>

      <!-- Friendly Name -->

      <field name="Name">[Example_GreatPhone GP100 Identity]</field>

      <deviceconfig filename="%%mac_address%%.cfg"><![CDATA[

<!-- The below example section will contain all of your own vendor syntax, replacing 3CX variables with what you define above -->

your_provisioning_url_variable = %%PROVLINK%%

your_firmware_url_variable = %%PROVLINK%%/firmware/[Example_GreatPhone]/%%firmware%%

your_ntp_server_variable = %%param::time_ntp_server%%

...

<!-- Your own vendor syntax ends here -->

]]></deviceconfig>

    </device>

  </data>

</doc>

Rozwiązywanie problemów

Objaw

Prawdopodobna przyczyna

Telefon nigdy nie pobiera konfiguracji.

Błędny adres URL autokonfiguracji lub niezgodność HTTP/HTTPS. Sprawdź znacznik <AllowSSLProvisioning.

Konfiguracja jest pobierana, ale telefon nie rejestruje się.

Brak bloku network=LOCALLAN lub błędna zmienna portu SIP.

Zdalny telefon rejestruje się, ale brakuje dźwięku.

W bloku network=SBC brakuje linii your_proxy_* lub porty SBC są zablokowane.

Klawisze BLF są puste po autokonfiguracji.

Indeksowanie klawiszy producenta jest oparte na indeksie 0 vs 1; lub kody DKtype nie odpowiadają mapowaniu klawiszy funkcyjnych producenta.

Nieprawidłowa kolejność kodeków w telefonie.

Zmienne %%[id].codecselected%% / %%[id].priority%% nie zostały zmapowane i użyto tylko %%codecN%%.

Link do konsoli WWW w systemie 3CX otwiera niewłaściwą stronę.

Popraw wzorzec w znaczniku <interfaceLink> w sekcji header.

Kolejne kroki

Gdy Twój szablon poprawnie konfiguruje telefony, rozważ:

  • Opublikowanie go za pomocą opcji „Create Copy” i udostępnienie go innym administratorom w Twojej organizacji.
  • Przesłanie go do firmy 3CX w celu włączenia jako szablonu wspieranego przez społeczność.
  • Dodanie kolejnych wpisów <model> do tego samego szablonu, jeśli modele Twojego producenta dzielą wspólny schemat konfiguracji.

Zobacz także

Treść dotyczy wersji: od V20 U8 – Edycja: AI, Pro, Basic – Wdrożenie: Hosted By 3CX, On Premise, Self Hosted


Ostatnia aktualizacja

Ten dokument został ostatnio zaktualizowany 10 września 2026 r.
https://www.3cx.pl/docs/custom-phone-template-configuration/