Aggiungi la tua marca di telefono: guida ai templa

3CX include modelli predefiniti per i produttori di telefoni supportati. Se la tua marca o il tuo modello non sono presenti nell’elenco, puoi aggiungere il supporto creando un template personalizzato. Questa guida illustra la procedura utilizzando un template di esempio funzionante che puoi adattare alle tue esigenze.

Cosa fa un template personalizzato

Un template è un file XML che indica a 3CX come generare una configurazione di provisioning per uno specifico modello di telefono. Quando un telefono viene configurato, 3CX:

  1. Carica il template assegnato al dispositivo.
  2. Sostituisce le variabili 3CX (ad es. %%extension_number%%) con valori reali.
  3. Valuta i blocchi condizionali (ad es. {IF network=SBC}).
  4. Scrive il file di configurazione risultante all’URL di provisioning da cui il telefono preleva i dati.

Il tuo compito nell’adattare l’esempio è quello di mappare la sintassi di configurazione del tuo fornitore alle variabili 3CX che forniscono i dati.

Prerequisiti

  • Accedi come amministratore a 3CX (Admin > Avanzate > Template).
  • La documentazione di provisioning del proprio fornitore, in particolare i nomi dei parametri relativi a credenziali SIP, codec, tasti BLF, NTP, fuso orario, VLAN e qualsiasi funzionalità supportata dal proprio telefono; alcuni fornitori forniscono la documentazione tecnica solo su richiesta; per quanto riguarda le risorse online, ecco alcuni esempi pratici:
  • La stringa User-Agent del telefono (visibile nel comando SIP REGISTER del dispositivo o nei log del telefono 3CX una volta che il dispositivo si connette al centralino).
  • Il formato dell’URL di configurazione richiesto dal telefono.

Procedura

  • Vai su Admin > Avanzate > Template > Template telefono.
  • Seleziona un modello che rispecchi la sintassi del proprio fornitore e clicca su Crea copia. Assegnare alla copia un nome che rifletta il proprio marchio (ad es. phonetel-custom.ph).
  • Apri il nuovo template e sostituisci il contenuto con il template di esempio riportato di seguito.
  • Modifica la sezione <header>: imposta il nome del template, l’ua del modello (User-Agent), il logo, i codec e le funzionalità in modo che corrispondano al proprio dispositivo.
  • Modifica la sezione CDATA <deviceconfig>. Sostituisci ogni segnaposto your_*_variable con il nome effettivo del parametro del tuo fornitore. Mantieni le variabili 3CX %%...%% sul lato destro: queste verranno sostituite al momento del provisioning.
  • Salva il template.
  • Aggiungi un telefono in 3CX e seleziona il tuo template personalizzato quando ti viene richiesto il modello.
  • Inserisci l’URL di provisioning fornito da 3CX nel telefono (manualmente o tramite l’opzione DHCP 66 / PNP) e avvia il provisioning.

Struttura del template

Il file XML presenta due sezioni di primo livello.

Tag di intestazione

Il tag <header> dichiara i metadati del modello e i controlli dell’interfaccia utente che 3CX mostra per questo telefono:

Elemento

Scopo

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

Tipo, identità e versione del template.

<templatetype>

Uno tra: preferito, supportato, fornitore, personalizzato.

<models>

Un <model> per ogni variante del dispositivo ua corrisponde all’User-Agent SIP del telefono. canbesbc abilita il provisioning remoto dell’SBC per i telefoni dotati di SBC 3CX integrato. defaultlogo imposta il nome del file dell’immagine del marchio. I parametri logowidth, logoheight, logobitdepth escrivono gli attributi del file del logo, mentre l’elemento text definisce il nome del modello così come apparirà in 3CX.

<parsers>

Parser delle funzionalità — ad es. BLF abilita la generazione dei tasti BLF (Busy Lamp Field).

<rebootParams>, <resyncParams>, <firmwareParams>

Nomi degli eventi SIP NOTIFY utilizzati per riavviare in remoto, risincronizzare la configurazione o avviare l’aggiornamento del firmware.

<rps>

Imposta su 1 se il fornitore supporta un servizio di reindirizzamento e provisioning.

<hotdesking>

Impostare su 1 se il telefono supporta l’hot-desking.

<AllowedNetworkConfig>

Quali modalità di rete sono valide: LOCALLAN, REMOTESTUN, SBC.

<interfaceLink>

L’URL di accesso alla console web del telefono (visualizzato in 3CX quando il telefono è registrato).

<xfertype>

Valori di trasferimento cieco o assistito per i tasti DSS.

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

Menu a tendina dell’interfaccia utente. Ciascuno può contenere  <option> che definisce ciò che l’amministratore vede e quali variabili vengono esposte quando selezionato, e infine inviate al telefono durante il provisioning.

<Codecspriorities>

Codec ordering. The first option in each <Codecspriority> is the default for that slot.

Template Example

BlfType e tag dati

  • <blftype>: Definisce i formati dei tasti per ciascuna funzione BLF (monitor interni, tasti di linea, composizione rapida, accesso alla coda, parcheggio, stato del profilo). 3CX li genera automaticamente quando un amministratore assegna i BLF nell’interfaccia utente degli interni.
  • <data><device>: Racchiude il blocco CDATA <deviceconfig>. Il CDATA contiene la sintassi di configurazione letterale del proprio fornitore con variabili 3CX incorporate. Può contenere istruzioni IF che 3CX analizza per fornire variabili diverse a seconda dei modelli e delle condizioni.

Variabili 3CX: Guida rapida

Queste sono le variabili più comuni utilizzate all’interno della sezione CDATA. Le variabili sono scritte come %%nome%% e vengono sostituite al momento del provisioning.

Identità e configurazione

Variabile

Significato

%%mac_address%%

Indirizzo MAC del telefono. Spesso utilizzato nel nome del file di configurazione.

%%PROVLINK%%

URL completo di provisioning che il telefono deve utilizzare.

%%firmware%%

Nome del file del firmware dichiarato nel template.

%%PHONE_IP%%

Indirizzo IP rilevato del telefono.

%%PHONE_WEB_PASSWORD%%

Password di amministrazione web generata. Per il tag <interfaceLink>

%%DESKPHONE_PASSWORD%%

Password lato telefono. Per la sezione CDATA del tag <device>

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

Componenti (FQDN, percorso e porta HTTP) utilizzati per costruire manualmente l'URL di provisioning completo se il telefono richiede un formato specifico.

%%param::time_ntp_server%%

Indirizzo del server NTP (Network Time Protocol) che i telefoni devono utilizzare.

Estensione / Account SIP

Variabile

Significato

%%extension_number%%

Numero di interno.

%%extension_first_name%%, %%extension_last_name%%

Nome utente.

%%extension_auth_id%%, %%extension_auth_pw%%

Credenziali di autenticazione SIP.

%%vm_number%%

Numero di accesso alla segreteria telefonica.

Rete

Variabile

Significato

%%pbx_ip%%

IP interno del centralino (modalità LAN).

%%param::pbxpublicip%%

IP pubblico del centralino (modalità SBC).

%%param::sipport%%

Porta di ascolto SIP del centralino.

%%local_sbc_ip%%, %%local_sbc_port%%

ndirizzo SBC per i telefoni remoti.

%%phonesipport%%

Porta SIP locale del telefono (Legacy - utilizzata per i telefoni STUN).

Opzioni disponibili nell'intestazione

Queste derivano dai valori <option> definiti in <header>:

Variabile

Da

%%language%%

<languages>

%%datestyle%%, %%timestyle%%

<dateformat>, <timeformat>

%%defringtone%%

<ringtones>

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

<queueringtones>

%%mwiled%%, %%missedled%%

<powerled>

%%blktime%%

<backlight>

%%scrsavertime%%

<screensaver>

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

<vlan> (WAN port)

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

<vlan> (PC port)

%%lldpenabled%%

<lldp>

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

<timezoneParams>

%%XFERmethod_Value%%

<xfertype>

%%logo%%

Attributo defaultlogo nel tag <model>

  • Per Yealink è necessario impostare wallpaper_upload.url = %%PROVLINK%%/%%logo%%

e

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

screensaver.type= 1

  • Per i telefoni Fanvil è necessario<Auto_Etc_Url>%%PROVLINK%%/%%logo%%</Auto_Etc_Url>
  • Per i telefoni Snom è necessario impostare <custom_bg_image_url perm="">%%PROVLINK%%/%%logo%%</custom_bg_image_url>

%%logo_filename%%

Per Yealink è necessario impostare
phone_setting.backgrounds = Config:%%logo_filename%%

Codecs

Variabile

Significato

%%codec1%% … %%codec5%%

Valore del codec in ciascuno slot di priorità.

%%payload1%% … %%payload5%%

Tipo di payload per ciascuno slot.

%%[id].codecselected%%

1 se il codec è abilitato (pcmuid, g729id, opusid, ecc.).

%%[id].priority%%

Slot di priorità occupato dal codec.

BLF / Tasti funzione

All'interno dei blocchi {IF blfN} (dove N è l'indice della chiave):

Variabile

Significato

%%Line%%

Numero di riga dalla definizione <blftype>.

%%type%%

Numero di interno monitorato o codice funzione.

%%PickupValue%%

Destinatario della presa di chiamata.

%%DKtype%%

Codice tipo tasto funzione (specifico del fornitore in <DKtype>).

%%label%%

Etichetta di visualizzazione.

%%blfno%%

Il numero di interno del BLF o del destinatario della composizione rapida.

%%param::pickup%%

Codice di presa di chiamata tratto dalla configurazione del sistema telefonico 3CX.

%%blffirstname%%, %%blflastname%%

Nome e cognome dell'interno utilizzato per l'etichetta di visualizzazione del BLF.

Logica condizionale

La sezione CDATA supporta semplici condizioni. 3CX le valuta prima di inviare la configurazione al telefono.

Modalità di rete

Vengono emessi blocchi diversi a seconda di come il telefono si collega al centralino:

{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}

Tasti BLF

Ogni tasto BLF/funzionale ha una propria condizione. All'interno del blocco, le variabili di contesto BLF (%%Line%%, %%type%%, %%label%%, ecc.) si riferiscono a quel tasto:

{IF blf1}

  linekey.1.type  = %%DKtype%%

  linekey.1.value = %%type%%

  linekey.1.label = %%label%%

{ELSE}

  linekey.1.type  = 0

{ENDIF}

Ripeti l'operazione per blf2, blf3, … fino al numero massimo di tasti programmabili supportati dal tuo telefono.

Parametri di sistema

È possibile fare riferimento a qualsiasi parametro di sistema 3CX tramite sysparam.NAME:

{IF sysparam.CUSTOMIZE_QUEUE_RINGTONES=1}

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

{ELSE}

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

{ENDIF}

Test e verifica

  • Dopo aver salvato il template, aggiungi un'estensione di prova e assegna il tuo template personalizzato come template del telefono.
  • Ripristina le impostazioni di fabbrica del telefono (consigliato per un test senza interferenze).
  • Configura il telefono utilizzando una delle seguenti opzioni:
  • Manuale: Inserisci %%PROVLINK%% (visibile nella scheda “IP Phone” dell'estensione) nel campo URL di configurazione del telefono.
  • Opzione DHCP 66: Indirizza l’opzione all’URL di configurazione del centralino.
  • PNP / RPS: Se il produttore lo supporta e nel template è impostato <rps>1</rps>.
  • Controlla il registro attività di 3CX e i registri locali del telefono. Verifica che il dispositivo recuperi la configurazione e si registri correttamente.
  • Verifica ogni funzionalità che hai mappato: ordine dei codec, tasti BLF, suonerie, comportamento dei trasferimenti, VLAN.

Se un valore risulta errato, controlla direttamente il file di configurazione generato — 3CX lo rende disponibile all’indirizzo %%PROVLINK%%/<mac_address>.cfg (o secondo il modello di nome file che hai impostato in <deviceconfig filename="...">).

Imposta automaticamente il fuso orario in base al tuo dipartimento

Il fuso orario globale 3CX o il fuso orario personalizzato del tuo dipartimento ha un ID corrispondente al nome della regione, come illustrato nella tabella di esempio qui sotto:

Id

Descrizione

Fuso orario

121

-12:00 Linea internazionale del cambio di data (ovest)

-12:00

120

-11:00 Isola di Midway, Samoa

-11:00

1

-10:00 United Stati Uniti - Hawaii-Aleutine

-10:00

2

-10:00 Stati Uniti - Alaska-Aleutine

-10:00

Se il tuo modello contiene gli ID nel tag <timezoneParams>, i tuoi telefoni potranno utilizzare l’opzione predefinita Usa fuso orario globale. Provvederemo quindi automaticamente ad abbinare il fuso orario per te e a configurare i tuoi telefoni di conseguenza, così non dovrai selezionare manualmente un fuso orario per ogni singolo telefono.

Se devi impostare manualmente un ID, trova l’elenco completo degli ID dei fusi orari nella guida di riferimento sui fusi orari qui.

Template di esempio

Copia questo template nel tuo template personalizzato come punto di partenza, quindi sostituisci i segnaposto delle variabili (visibili nel frammento di template qui sotto nel formato your_*_variable e [Example_*]) con i parametri e i nomi effettivi del tuo dispositivo e del tuo fornitore.

Migliori pratiche per la modifica dei modelli:

  • Formato: Utilizza editor .ph.xml o di testo semplice. Evita il testo formattato (Word/Docs) per prevenire il danneggiamento dei dati.
  • Struttura: Al di fuori del blocco CDATA <deviceconfig>, l’indentazione viene ignorata.
  • CDATA: All’interno della sezione CDATA, mantieni esattamente la sintassi richiesta dal fornitore (spazi/interruzioni).
  • Convalida: Salva in formato UTF-8, convalida l’XML e verifica le configurazioni visualizzate su un dispositivo di prova.

<?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>

Risoluzione dei problemi

Sintomo

Causa probabile

Il telefono non scarica mai la configurazione.

URL di provisioning errato o discrepanza tra HTTP e HTTPS. Controlla <AllowSSLProvisioning>.

La configurazione viene scaricata, ma il telefono non riesce a registrarsi.

Manca il blocco network=LOCALLAN, oppure la variabile della porta SIP è errata.

Il telefono remoto si registra, ma non c'è audio.

Mancano le righe your_proxy_* nel blocco network=SBC oppure le porte SBC sono chiuse.

I tasti BLF sono vuoti dopo il provisioning.

L'indicizzazione dei tasti del fornitore è basata su 0 anziché su 1; oppure i codici DKtype non corrispondono alla mappa dei tasti funzione del fornitore.

L'ordine dei codec sul telefono è errato.

%%[id].codecselected%% / %%[id].priority%% non mappati, viene utilizzato solo %%codecN%%.

Il link alla console web in 3CX apre una pagina sbagliata.

Aggiusta il  pattern <interfaceLink> nell’intestazione.

Prossimi passi

Una volta che il template è stato configurato correttamente, valuta di:

  • Pubblicarlo tramite Crea copia e condividerlo con altri amministratori della tua organizzazione;
  • Inviarlo a 3CX affinché venga incluso come template supportato dalla comunità.
  • Aggiungere ulteriori voci <model> allo stesso template se i modelli del proprio fornitore condividono uno schema di configurazione.

Per saperne di più

Il contenuto si applica alla versione: da V20 U8 - Edizione: AI, Pro, Basic - Implementazione: HostedBy3CX, OnPremises, SelfHosted

Ultimo aggiornamento
Questo documento è stato aggiornato il 14 settembre 2026
https://www.3cx.it/doc/custom-phone-template-configuration/