(PROMIUM FAQ insieme a PROMIUM FORM compone la soluzione completa per i contatti web mediati dalla AI, PROMIUM WEB CONTACT)
Introduzione PROMIUM FAQ
Il sistema FAQ Promium offre un’interfaccia di ricerca intelligente e interattiva che può essere facilmente integrata nel tuo sito web. Il widget può presentarsi in tre modalità: una barra di ricerca completa, un pulsante minimale che si espande in un’interfaccia completa, oppure agganciato a elementi DOM personalizzati.
Caratteristiche principali:
- Interfaccia responsive e adattiva con tre modalità di visualizzazione (default/minimal/custom-listener)
- Supporto per temi chiari e scuri con rilevamento automatico
- Posizionamento flessibile (center, left, right)
- Dimensioni personalizzabili (width/height)
- Integrazione seamless con il tuo sito
- Supporto per container specifici
- Traduzione automatica multilingue (100+ lingue via Google Translate)
- Rilevamento automatico della lingua del browser
- Sistema di retry intelligente per traduzioni affidabili
- Modalità custom-listener per integrazione avanzata su elementi personalizzati
⚠️ Posizionamento dello Script
Scenario 1: Utilizzo con data-target (Raccomandato)
Quando si utilizza l’attributo data-target, inserire lo script prima della chiusura del tag</body>:
<div id="faq-container"></div>
<!-- Posizionare prima della chiusura del body -->
<script
src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="nome-azienda"
data-target="faq-container"
async defer></script>
</body>
Scenario 2: Utilizzo senza data-target
Inserire lo script direttamente nel punto del DOM dove si desidera che appaia il widget:
<div class="header">
<!-- Altri elementi dell'header -->
<script
src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="nome-azienda"
data-mode="minimal"
async defer></script>
<!-- Altri elementi dell'header -->
</div>
Scenario 3: Utilizzo con custom-listener
Quando si utilizza la modalità custom-listener, lo script può essere posizionato ovunque poiché si aggancie a un elemento trigger specifico:
<button id="apri-faq" class="btn btn-help">Aiuto</button>
<script
src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="nome-azienda"
data-mode="custom-listener"
data-faq-trigger="#apri-faq"
async defer></script>
Opzioni di Configurazione
Il widget può essere personalizzato attraverso i seguenti attributi data:
| Attributo | Valori | Default | Descrizione |
|---|---|---|---|
| data-id | stringa | – | Identificativo dell’azienda (obbligatorio) |
| data-mode | “default” | “minimal” | “custom-listener” | “default” | Modalità di visualizzazione (barra completa / bottone / elemento personalizzato) |
| data-theme | “light” | “dark” | “light” | Tema dell’interfaccia |
| data-position | “center” | “left” | “right” | “center” | Posizionamento della barra/bottone (non applicabile in custom-listener) |
| data-target | selettore CSS | – | Selettore dell’elemento dove inserire il widget (non usare con custom-listener) |
| data-width | CSS width | “100%” | Larghezza del widget (es: “400px”, “50%”) |
| data-height | CSS height | “90px” | Altezza del widget (es: “60px”) – ignorato in custom-listener per il container principale |
| data-translatetolang | codice ISO 639-1 | – | Lingua per traduzione automatica (es: “en”, “es”, “fr”) |
| data-faq-trigger | selettore CSS | – | Selettore dell’elemento trigger (obbligatorio in modalità custom-listener) |
Esempi di Configurazione
1. Configurazione Base
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
async defer></script>
2. Modalità Minimal con Posizionamento
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-mode="minimal"
data-position="right"
data-width="150px"
async defer></script>
3. Configurazione Completa (Default)
<div id="faq-container"></div>
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-mode="default"
data-theme="dark"
data-position="left"
data-target="faq-container"
data-width="500px"
data-height="70px"
async defer></script>
4. Con Traduzione Automatica in Inglese
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-translatetolang="en"
async defer></script>
5. Configurazione Avanzata Multilingue
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-mode="default"
data-theme="dark"
data-position="center"
data-translatetolang="es"
async defer></script>
6. Modalità Custom-Listener con Elemento Personalizzato
<button id="apri-faq" class="btn btn-help">Aiuto</button>
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-mode="custom-listener"
data-faq-trigger="#apri-faq"
data-theme="dark"
async defer></script>
7. Custom-Listener con Traduzione Automatica
<nav>
<a href="#home">Home</a>
<a href="#servizi">Servizi</a>
<a id="nav-faq" href="javascript:void(0)">FAQ</a>
</nav>
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-mode="custom-listener"
data-faq-trigger="#nav-faq"
data-translatetolang="en"
async defer></script>
🌐 Traduzione Automatica Multilingue
Come Funziona
Quando l’utente apre il pannello FAQ, il sistema rileva automaticamente l’attributo de>data-translatetolang e applica la traduzione nella lingua specificata. Il processo avviene in modo trasparente e richiede solo 1-5 secondi, garantendo un’esperienza utente fluida e professionale.
Utilizzo Base
Aggiungi semplicemente l’attributo de>data-translatetolang con il codice della lingua desiderata:
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="nome-azienda"
data-translatetolang="en"></script>
Lingue Supportate
Il widget supporta oltre 100 lingue tramite Google Translate. Ecco le principali:
| Codice | Lingua | Esempio Utilizzo |
|---|---|---|
| it | 🇮🇹 Italiano | data-translatetolang=”it” |
| ab | 🏳️ Abcaso | data-translatetolang=”ab” |
| ace | 🏳️ Accinese | data-translatetolang=”ace” |
| ach | 🏳️ Acioli | data-translatetolang=”ach” |
| aa | 🇩🇯 Afar | data-translatetolang=”aa” |
| af | 🇿🇦 Afrikaans | data-translatetolang=”af” |
| sq | 🇦🇱 Albanese | data-translatetolang=”sq” |
| alz | 🏳️ Alur | data-translatetolang=”alz” |
| am | 🇪🇹 Amarico | data-translatetolang=”am” |
| ar | 🇸🇦 Arabo | data-translatetolang=”ar” |
| hy | 🇦🇲 Armeno | data-translatetolang=”hy” |
| as | 🇮🇳 Assamese | data-translatetolang=”as” |
| av | 🇷🇺 Avaro | data-translatetolang=”av” |
| awa | 🇮🇳 Awadhi | data-translatetolang=”awa” |
| ay | 🇧🇴 Aymara | data-translatetolang=”ay” |
| az | 🇦🇿 Azero | data-translatetolang=”az” |
| ban | 🇮🇩 Balinese | data-translatetolang=”ban” |
| bm | 🇲🇱 Bambara | data-translatetolang=”bm” |
| eu | 🇪🇸 Basco | data-translatetolang=”eu” |
| ba | 🇷🇺 Bashkir | data-translatetolang=”ba” |
| btx | 🇮🇩 Batak karo | data-translatetolang=”btx” |
| bts | 🇮🇩 Batak simalungun | data-translatetolang=”bts” |
| bbc | 🇮🇩 Batak toba | data-translatetolang=”bbc” |
| bci | 🇨🇮 Baulé | data-translatetolang=”bci” |
| bal | 🇵🇰 Beluci | data-translatetolang=”bal” |
| bn | 🇧🇩 Bengalese | data-translatetolang=”bn” |
| bew | 🇮🇩 Betawi | data-translatetolang=”bew” |
| bho | 🇮🇳 Bhojpuri | data-translatetolang=”bho” |
| bik | 🇵🇭 Bicol | data-translatetolang=”bik” |
| be | 🇧🇾 Bielorusso | data-translatetolang=”be” |
| my | 🇲🇲 Birmano | data-translatetolang=”my” |
| bs | 🇧🇦 Bosniaco | data-translatetolang=”bs” |
| br | 🇫🇷 Bretone | data-translatetolang=”br” |
| bg | 🇧🇬 Bulgaro | data-translatetolang=”bg” |
| bua | 🇷🇺 Buriat | data-translatetolang=”bua” |
| yue | 🇭🇰 Cantonese | data-translatetolang=”yue” |
| ca | 🇪🇸 Catalano | data-translatetolang=”ca” |
| ceb | 🇵🇭 Cebuano | data-translatetolang=”ceb” |
| ce | 🇷🇺 Ceceno | data-translatetolang=”ce” |
| cs | 🇨🇿 Ceco | data-translatetolang=”cs” |
| ch | 🇬🇺 Chamorro | data-translatetolang=”ch” |
| ny | 🇲🇼 Chichewa | data-translatetolang=”ny” |
| cgg | 🇺🇬 Chiga | data-translatetolang=”cgg” |
| ky | 🇰🇬 Chirghiso | data-translatetolang=”ky” |
| chk | 🇫🇲 Chuukese | data-translatetolang=”chk” |
| ak | 🇬🇭 Ci | data-translatetolang=”ak” |
| zh-CN | 🇨🇳 Cinese (semplificato) | data-translatetolang=”zh-CN” |
| zh-TW | 🇹🇼 Cinese (tradizionale) | data-translatetolang=”zh-TW” |
| cv | 🇷🇺 Ciuvascio | data-translatetolang=”cv” |
| ko | 🇰🇷 Coreano | data-translatetolang=”ko” |
| co | 🇫🇷 Corso | data-translatetolang=”co” |
| crs | 🇸🇨 Creolo delle Seychelles | data-translatetolang=”crs” |
| ht | 🇭🇹 Creolo haitiano | data-translatetolang=”ht” |
| mfe | 🇲🇺 Creolo mauriziano | data-translatetolang=”mfe” |
| hr | 🇭🇷 Croato | data-translatetolang=”hr” |
| ku | 🇹🇷 Curdo (Kurmanji) | data-translatetolang=”ku” |
| ckb | 🇮🇶 Curdo (Sorani) | data-translatetolang=”ckb” |
| da | 🇩🇰 Danese | data-translatetolang=”da” |
| fa-AF | 🇦🇫 Dari | data-translatetolang=”fa-AF” |
| dv | 🇲🇻 Dhivehi | data-translatetolang=”dv” |
| din | 🇸🇸 Dinka | data-translatetolang=”din” |
| dyu | 🇨🇮 Diula | data-translatetolang=”dyu” |
| doi | 🇮🇳 Dogri | data-translatetolang=”doi” |
| dov | 🏳️ Dombe | data-translatetolang=”dov” |
| dz | 🇧🇹 Dzongkha | data-translatetolang=”dz” |
| iw | 🇮🇱 Ebraico | data-translatetolang=”iw” |
| eo | 🏳️ Esperanto | data-translatetolang=”eo” |
| et | 🇪🇪 Estone | data-translatetolang=”et” |
| ee | 🇬🇭 Ewe | data-translatetolang=”ee” |
| fo | 🇫🇴 Faroese | data-translatetolang=”fo” |
| fj | 🇫🇯 Figiano | data-translatetolang=”fj” |
| tl | 🇵🇭 Filippino | data-translatetolang=”tl” |
| fi | 🇫🇮 Finlandese | data-translatetolang=”fi” |
| fon | 🇧🇯 Fon | data-translatetolang=”fon” |
| fr | 🇫🇷 Francese | data-translatetolang=”fr” |
| fr-CA | 🇨🇦 Francese (Canada) | data-translatetolang=”fr-CA” |
| fy | 🇳🇱 Frisone | data-translatetolang=”fy” |
| fur | 🇮🇹 Friulano | data-translatetolang=”fur” |
| ff | 🇸🇳 Fulah | data-translatetolang=”ff” |
| gaa | 🇬🇭 Ga | data-translatetolang=”gaa” |
| gd | 🏴 Gaelico scozzese | data-translatetolang=”gd” |
| gl | 🇪🇸 Galiziano | data-translatetolang=”gl” |
| cy | 🏴 Gallese | data-translatetolang=”cy” |
| ka | 🇬🇪 Georgiano | data-translatetolang=”ka” |
| ja | 🇯🇵 Giapponese | data-translatetolang=”ja” |
| jw | 🇮🇩 Giavanese | data-translatetolang=”jw” |
| el | 🇬🇷 Greco | data-translatetolang=”el” |
| gn | 🇵🇾 Guaraní | data-translatetolang=”gn” |
| gu | 🇮🇳 Gujarati | data-translatetolang=”gu” |
| cnh | 🇲🇲 Hakha Chin | data-translatetolang=”cnh” |
| ha | 🇳🇬 Hausa | data-translatetolang=”ha” |
| haw | 🇺🇸 Hawaiano | data-translatetolang=”haw” |
| hi | 🇮🇳 Hindi | data-translatetolang=”hi” |
| hmn | 🏳️ Hmong | data-translatetolang=”hmn” |
| hrx | 🇧🇷 Hunsrik | data-translatetolang=”hrx” |
| iba | 🇲🇾 Iban | data-translatetolang=”iba” |
| ig | 🇳🇬 Igbo | data-translatetolang=”ig” |
| ilo | 🇵🇭 Ilocano | data-translatetolang=”ilo” |
| hil | 🇵🇭 Ilongo | data-translatetolang=”hil” |
| id | 🇮🇩 Indonesiano | data-translatetolang=”id” |
| en | 🇬🇧 Inglese | data-translatetolang=”en” |
| iu-Latn | 🇨🇦 Inuktut (latino) | data-translatetolang=”iu-Latn” |
| iu | 🇨🇦 Inuktut (sillabico) | data-translatetolang=”iu” |
| ga | 🇮🇪 Irlandese | data-translatetolang=”ga” |
| is | 🇮🇸 Islandese | data-translatetolang=”is” |
| kac | 🇲🇲 Jingpo | data-translatetolang=”kac” |
| kl | 🇬🇱 Kalaallisut | data-translatetolang=”kl” |
| kn | 🇮🇳 Kannada | data-translatetolang=”kn” |
| kr | 🇳🇬 Kanuri | data-translatetolang=”kr” |
| pam | 🇵🇭 Kapampangan | data-translatetolang=”pam” |
| kk | 🇰🇿 Kazako | data-translatetolang=”kk” |
| kha | 🇮🇳 Khasi | data-translatetolang=”kha” |
| km | 🇰🇭 Khmer | data-translatetolang=”km” |
| rw | 🇷🇼 Kinyarwanda | data-translatetolang=”rw” |
| ktu | 🇨🇩 Kituba | data-translatetolang=”ktu” |
| trp | 🇮🇳 Kokborok | data-translatetolang=”trp” |
| kv | 🇷🇺 Komi | data-translatetolang=”kv” |
| kg | 🇨🇩 Kongo | data-translatetolang=”kg” |
| gom | 🇮🇳 Konkani | data-translatetolang=”gom” |
| kri | 🇸🇱 Krio | data-translatetolang=”kri” |
| lo | 🇱🇦 Lao | data-translatetolang=”lo” |
| la | 🇻🇦 Latino | data-translatetolang=”la” |
| ltg | 🇱🇻 Letgallo | data-translatetolang=”ltg” |
| lv | 🇱🇻 Lettone | data-translatetolang=”lv” |
| lij | 🇮🇹 Ligure | data-translatetolang=”lij” |
| li | 🇳🇱 Limburghese | data-translatetolang=”li” |
| ln | 🇨🇩 Lingala | data-translatetolang=”ln” |
| lt | 🇱🇹 Lituano | data-translatetolang=”lt” |
| lmo | 🇮🇹 Lombardo | data-translatetolang=”lmo” |
| lg | 🇺🇬 Luganda | data-translatetolang=”lg” |
| luo | 🇰🇪 Luo | data-translatetolang=”luo” |
| lb | 🇱🇺 Lussemburghese | data-translatetolang=”lb” |
| mk | 🇲🇰 Macedone | data-translatetolang=”mk” |
| mad | 🇮🇩 Madurese | data-translatetolang=”mad” |
| mai | 🇮🇳 Maithili | data-translatetolang=”mai” |
| mak | 🇮🇩 Makasar | data-translatetolang=”mak” |
| ml | 🇮🇳 Malayalam | data-translatetolang=”ml” |
| ms | 🇲🇾 Malese | data-translatetolang=”ms” |
| ms-Arab | 🇲🇾 Malese (Jawi) | data-translatetolang=”ms-Arab” |
| mg | 🇲🇬 Malgascio | data-translatetolang=”mg” |
| mt | 🇲🇹 Maltese | data-translatetolang=”mt” |
| mam | 🇬🇹 Mam | data-translatetolang=”mam” |
| gv | 🇮🇲 Manx | data-translatetolang=”gv” |
| mi | 🇳🇿 Maori | data-translatetolang=”mi” |
| mr | 🇮🇳 Marathi | data-translatetolang=”mr” |
| chm | 🇷🇺 Mari Meadow | data-translatetolang=”chm” |
| mh | 🇲🇭 Marshallese | data-translatetolang=”mh” |
| mwr | 🇮🇳 Marwari | data-translatetolang=”mwr” |
| yua | 🇲🇽 Maya yucateco | data-translatetolang=”yua” |
| mni-Mtei | 🇮🇳 Meiteilon (Manipuri) | data-translatetolang=”mni-Mtei” |
| min | 🇮🇩 Menangkabau | data-translatetolang=”min” |
| lus | 🇮🇳 Mizo | data-translatetolang=”lus” |
| mn | 🇲🇳 Mongolo | data-translatetolang=”mn” |
| bm-Nkoo | 🇬🇳 N’Ko | data-translatetolang=”bm-Nkoo” |
| nhe | 🇲🇽 Nahuatl (Huasteca orientale) | data-translatetolang=”nhe” |
| ndc-ZW | 🇿🇼 Ndau | data-translatetolang=”ndc-ZW” |
| nr | 🇿🇦 Ndebele del sud | data-translatetolang=”nr” |
| new | 🇳🇵 Nepalbhasa (newari) | data-translatetolang=”new” |
| ne | 🇳🇵 Nepalese | data-translatetolang=”ne” |
| no | 🇳🇴 Norvegese | data-translatetolang=”no” |
| nus | 🇸🇸 Nuer | data-translatetolang=”nus” |
| oc | 🇫🇷 Occitano | data-translatetolang=”oc” |
| or | 🇮🇳 Odia (Oriya) | data-translatetolang=”or” |
| nl | 🇳🇱 Olandese | data-translatetolang=”nl” |
| om | 🇪🇹 Oromo | data-translatetolang=”om” |
| os | 🇷🇺 Osseto | data-translatetolang=”os” |
| pag | 🇵🇭 Pangasinan | data-translatetolang=”pag” |
| pap | 🇦🇼 Papiamento | data-translatetolang=”pap” |
| ps | 🇦🇫 Pashto | data-translatetolang=”ps” |
| jam | 🇯🇲 Patois giamaicano | data-translatetolang=”jam” |
| fa | 🇮🇷 Persiano | data-translatetolang=”fa” |
| pl | 🇵🇱 Polacco | data-translatetolang=”pl” |
| pt | 🇧🇷 Portoghese (Brasile) | data-translatetolang=”pt” |
| pt-PT | 🇵🇹 Portoghese (Portogallo) | data-translatetolang=”pt-PT” |
| pa | 🇮🇳 Punjabi (Gurmukhi) | data-translatetolang=”pa” |
| pa-Arab | 🇵🇰 Punjabi (Shahmukhi) | data-translatetolang=”pa-Arab” |
| kek | 🇬🇹 Q’eqchi’ | data-translatetolang=”kek” |
| qu | 🇵🇪 Quechua | data-translatetolang=”qu” |
| rom | 🏳️ Romanì | data-translatetolang=”rom” |
| ro | 🇷🇴 Rumeno | data-translatetolang=”ro” |
| rn | 🇧🇮 Rundi | data-translatetolang=”rn” |
| ru | 🇷🇺 Russo | data-translatetolang=”ru” |
| se | 🇳🇴 Sami del nord | data-translatetolang=”se” |
| sm | 🇼🇸 Samoano | data-translatetolang=”sm” |
| sg | 🇨🇫 Sango | data-translatetolang=”sg” |
| sa | 🇮🇳 Sanscrito | data-translatetolang=”sa” |
| sat-Latn | 🇮🇳 Santali (latino) | data-translatetolang=”sat-Latn” |
| sat | 🇮🇳 Santali (Ol Chiki) | data-translatetolang=”sat” |
| nso | 🇿🇦 Sepedi | data-translatetolang=”nso” |
| sr | 🇷🇸 Serbo | data-translatetolang=”sr” |
| st | 🇱🇸 Sesotho | data-translatetolang=”st” |
| shn | 🇲🇲 Shan | data-translatetolang=”shn” |
| sn | 🇿🇼 Shona | data-translatetolang=”sn” |
| scn | 🇮🇹 Siciliano | data-translatetolang=”scn” |
| sd | 🇵🇰 Sindhi | data-translatetolang=”sd” |
| si | 🇱🇰 Singalese | data-translatetolang=”si” |
| szl | 🇵🇱 Slesiano | data-translatetolang=”szl” |
| sk | 🇸🇰 Slovacco | data-translatetolang=”sk” |
| sl | 🇸🇮 Sloveno | data-translatetolang=”sl” |
| so | 🇸🇴 Somalo | data-translatetolang=”so” |
| es | 🇪🇸 Spagnolo | data-translatetolang=”es” |
| su | 🇮🇩 Sundanese | data-translatetolang=”su” |
| sus | 🇬🇳 Susu | data-translatetolang=”sus” |
| sv | 🇸🇪 Svedese | data-translatetolang=”sv” |
| sw | 🇹🇿 Swahili | data-translatetolang=”sw” |
| ss | 🇸🇿 Swati | data-translatetolang=”ss” |
| tg | 🇹🇯 Tagico | data-translatetolang=”tg” |
| ty | 🇵🇫 Taitiano | data-translatetolang=”ty” |
| ber-Latn | 🇲🇦 Tamazight | data-translatetolang=”ber-Latn” |
| ber | 🇲🇦 Tamazight (Tifinagh) | data-translatetolang=”ber” |
| ta | 🇮🇳 Tamil | data-translatetolang=”ta” |
| tt | 🇷🇺 Tataro | data-translatetolang=”tt” |
| crh | 🇺🇦 Tataro di Crimea (cirillico) | data-translatetolang=”crh” |
| crh-Latn | 🇺🇦 Tataro di Crimea (latino) | data-translatetolang=”crh-Latn” |
| de | 🇩🇪 Tedesco | data-translatetolang=”de” |
| te | 🇮🇳 Telugu | data-translatetolang=”te” |
| tet | 🇹🇱 Tetum | data-translatetolang=”tet” |
| th | 🇹🇭 Thai | data-translatetolang=”th” |
| bo | 🇨🇳 Tibetano | data-translatetolang=”bo” |
| ti | 🇪🇷 Tigrino | data-translatetolang=”ti” |
| tiv | 🇳🇬 Tiv | data-translatetolang=”tiv” |
| tpi | 🇵🇬 Tok pisin | data-translatetolang=”tpi” |
| to | 🇹🇴 Tongano | data-translatetolang=”to” |
| lua | 🇨🇩 Tshiluba | data-translatetolang=”lua” |
| ts | 🇿🇦 Tsonga | data-translatetolang=”ts” |
| tn | 🇧🇼 Tswana | data-translatetolang=”tn” |
| tcy | 🇮🇳 Tulu | data-translatetolang=”tcy” |
| tum | 🇲🇼 Tumbuka | data-translatetolang=”tum” |
| tr | 🇹🇷 Turco | data-translatetolang=”tr” |
| tk | 🇹🇲 Turkmeno | data-translatetolang=”tk” |
| tyv | 🇷🇺 Tuvinian | data-translatetolang=”tyv” |
| uk | 🇺🇦 Ucraino | data-translatetolang=”uk” |
| udm | 🇷🇺 Udmurt | data-translatetolang=”udm” |
| ug | 🇨🇳 Uiguro | data-translatetolang=”ug” |
| hu | 🇭🇺 Ungherese | data-translatetolang=”hu” |
| ur | 🇵🇰 Urdu | data-translatetolang=”ur” |
| uz | 🇺🇿 Uzbeco | data-translatetolang=”uz” |
| ve | 🇿🇦 Venda | data-translatetolang=”ve” |
| vec | 🇮🇹 Veneziano | data-translatetolang=”vec” |
| vi | 🇻🇳 Vietnamita | data-translatetolang=”vi” |
| war | 🇵🇭 Waray | data-translatetolang=”war” |
| bem | 🇿🇲 Wemba | data-translatetolang=”bem” |
| wo | 🇸🇳 Wolof | data-translatetolang=”wo” |
| xh | 🇿🇦 Xhosa | data-translatetolang=”xh” |
| sah | 🇷🇺 Yakut | data-translatetolang=”sah” |
| yi | 🏳️ Yiddish | data-translatetolang=”yi” |
| yo | 🇳🇬 Yoruba | data-translatetolang=”yo” |
| zap | 🇲🇽 Zapotec | data-translatetolang=”zap” |
| zu | 🇿🇦 Zulu | data-translatetolang=”zu” |
E oltre 80+ altre lingue supportate!
Esempi Avanzati
Traduzione con Tema Scuro
<script src="https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js"
data-id="i-tech"
data-theme="dark"
data-translatetolang="es"></script>
Rilevamento Automatico Lingua Browser
Per rilevare automaticamente la lingua preferita del browser dell’utente:
<script>
// Rileva la lingua del browser
const browserLang = navigator.language.split('-')[0]; // es: 'en', 'it', 'es'
// Crea lo script tag dinamicamente
const script = document.createElement('script');
script.src = 'https://promium-embed.s3.amazonaws.com/promium_embed/faq_ui/faqexternal.js';
script.setAttribute('data-id', 'i-tech');
script.setAttribute('data-translatetolang', browserLang);
document.head.appendChild(script);
</script>
Siti Multilingue
Per siti web con versioni in diverse lingue:
<!-- Versione Italiana --> <script src="..." data-id="i-tech" data-translatetolang="it"></script> <!-- Versione Inglese --> <script src="..." data-id="i-tech" data-translatetolang="en"></script> <!-- Versione Spagnola --> <script src="..." data-id="i-tech" data-translatetolang="es"></script>
Caratteristiche Tecniche
- Automatico: La traduzione si applica automaticamente all’apertura del modale FAQ
- Retry Intelligente: Sistema con 15 tentativi (300ms ciascuno) per garantire l’applicazione della traduzione anche con connessioni lente
- Gestione Errori: Robusto error handling che continua a funzionare anche se Google Translate non è disponibile
- Debug Mode: Console logging dettagliato con emoji per identificare rapidamente gli eventi (🌐 traduzione, ✅ successo, ❌ errori)
- Performance: Impatto minimo sul caricamento della pagina (~150 linee di codice aggiuntive)
- Sicurezza: XSS-safe e CORS-compliant, nessuna iniezione di codice
- Compatibilità: Funziona su tutti i browser moderni (Chrome 90+, Firefox 88+, Safari 14+, Edge 90+)
- Multimodale: Funziona con tutte le modalità di visualizzazione (default, minimal, custom-listener)
Flusso di Esecuzione
- Caricamento dello Script: Lo script rileva l’attributo de>data-translatetolang
- Apertura del Modale: L’utente clicca sul pulsante “Cerca FAQ” (o elemento trigger in custom-listener)
- Caricamento iframe: Il contenuto FAQ viene caricato nell’iframe
- Ricerca Dropdown: Il sistema cerca il dropdown di Google Translate
- Selezione Lingua: Seleziona automaticamente la lingua specificata
- Attivazione Traduzione: Simula gli eventi di interazione utente
- Pagina Tradotta: L’esperienza FAQ è completamente localizzata
Best Practices
✅ Da Fare
- Usa codici lingua ufficiali ISO 639-1 (es: de>en, de>es, de>fr)
- Testa la traduzione su diversi browser prima del deploy
- Verifica che Google Translate sia disponibile nella tua regione
- Combina l’attributo con altri parametri di configurazione per massima personalizzazione
- Monitora la console del browser per eventuali warning o errori
❌ Da Evitare
- Non usare codici lingua errati (es: de>eng invece di de>en)
- Non assumere che il widget funzioni senza Google Translate disponibile
- Non sovrascrivere manualmente la traduzione durante il caricamento
- Non usare caratteri speciali nel codice lingua
Monitoraggio e Debug
Per verificare il corretto funzionamento della traduzione automatica, apri la Console del Browser (F12) e cerca i seguenti messaggi:
🌐 Lingua traduzione automatica: en 🌐 Tentativo di applicazione della traduzione automatica... 🔄 Tentativo 1/15 per trovare il dropdown di Google Translate... ✅ Traduzione automatica applicata: en
Tutti gli eventi sono registrati con emoji per una facile identificazione:
- 🌐 = Azioni di traduzione
- ✅ = Operazione completata con successo
- 🔄 = Tentativo/Retry in corso
- ⚠️ = Avviso (non critico)
- ❌ = Errore che richiede attenzione
Modalità di Visualizzazione
Modalità Default
- Mostra una barra di ricerca completa con input text
- Include ombreggiatura e effetti hover
- Ideale per pagine FAQ dedicate
- Compatibile con traduzione automatica
- Supporto per data-target per posizionamento personalizzato
Modalità Minimal
- Mostra solo un bottone “Cerca” in stile minimal
- Design pulito senza ombreggiature
- Perfetto per header o sidebar
- Supporta traduzione automatica multilingue
- Occupazione minima dello spazio nel layout
Modalità Custom-Listener
- Agganciamento a qualsiasi elemento DOM existente tramite selettore CSS
- Nessun container o interfaccia automatica generata
- Modale si apre esclusivamente al click dell’elemento trigger
- Massima flessibilità di design e posizionamento
- Ideale per integrare FAQ su elementi di navigazione personalizzati
- Supporta traduzione automatica come le altre modalità
- Evita duplicazione di elementi nel DOM
Modalità Custom-Listener: Documentazione Tecnica Completa
Panoramica
La modalità custom-listener consente di integrare il widget FAQ di Promium agganciandolo a qualsiasi elemento DOM esistente tramite un selettore CSS, senza creare container o interfacce automatiche. Il modale si apre esclusivamente quando l’utente interagisce con l’elemento trigger specificato.
Caso d’Uso
Utilizzi ideali:
- Integrare FAQ su pulsanti di aiuto esistenti
- Attivare FAQ da elementi di navigazione personalizzati
- Agganciare FAQ a link o icone già presenti nel layout
- Evitare duplicazione di elementi DOM
- Mantenere piena libertà di design e posizionamento
Sintassi Base
<button id="apri-faq" class="btn btn-help">Aiuto</button>
<script src="faqexternal.js"
data-id="azienda"
data-mode="custom-listener"
data-faq-trigger="#apri-faq"
data-theme="light"
data-translatetolang="en"
async defer></script>
Parametri Specifici
| Parametro | Valore | Descrizione |
|---|---|---|
| data-mode | custom-listener | Attiva la modalità custom-listener |
| data-faq-trigger | Selettore CSS | Elemento su cui agganciare l’event listener di apertura del modale (obbligatorio) |
Selettori Supportati
<!-- ID --> <script data-faq-trigger="#id-elemento"></script> <!-- Classe --> <script data-faq-trigger=".classe-elemento"></script> <!-- Selettore attributo --> <script data-faq-trigger="[data-role='faq']"></script> <!-- Selettore composto --> <script data-faq-trigger="button.help-btn[data-type='faq']"></script>
Comportamento Tecnico
Fase di Inizializzazione:
- Lo script legge l’attributo data-faq-trigger dal tag <script>
- Crea il modale container (#promium-faq-modal-container) e overlay (#promium-faq-modal-overlay)
- NON crea il container principale (#promium-faq-container)
- NON crea l’iframe minimale iniziale
- Registra un event listener su tutti gli elementi corrispondenti al selettore data-faq-trigger
Fase di Attivazione (al click del trigger):
- Utente clicca l’elemento trigger
- Funzione openModal() viene invocata
- L’iframe FAQ viene creato e inserito nel modale container
- Lo scroll della pagina viene disabilitato (overflow: hidden)
- Il modale appare con la pagina FAQ caricata
Fase di Chiusura:
- Utente clicca il pulsante di chiusura o l’overlay
- Funzione closeModal() viene invocata
- L’iframe viene rimosso dal DOM
- Lo scroll della pagina viene ripristinato
- Lo stato del modale viene resettato
Compatibilità della Modalità Custom-Listener
La modalità custom-listener è pienamente compatibile con:
- ✅ data-theme (light/dark)
- ✅ data-translatetolang (traduzione automatica)
- ✅ data-width e data-height (dimensioni modale)
- ✅ data-id (identificativo aziendale)
- ✅ Tutti i messaggi postMessage da parent a child
Differenze tra le Modalità
| Aspetto | Default | Minimal | Custom-Listener |
|---|---|---|---|
| Container principale | ✅ Creato | ✅ Creato | ❌ Non creato |
| iframe minimale | ✅ Visibile | ✅ Visibile | ❌ Non creato |
| Trigger | Widget GUI | Widget GUI | Elemento personalizzato |
| Apertura modale | Click automatico | Click barra ricerca | Click su elemento specifico |
| Flessibilità design | Bassa | Media | Alta |
| Utilità ideale | Pagine dedicate | Header/Sidebar | Integrazione avanzata |
Esempi Avanzati
Esempio 1: Pulsante di Help Corner
<style>
.help-corner {
position: fixed;
bottom: 20px;
right: 20px;
padding: 12px 16px;
background-color: #007bff;
color: white;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
}
.help-corner:hover {
background-color: #0056b3;
}
</style>
<button class="help-corner" id="help-btn">
<i class="fas fa-question-circle"></i> Aiuto
</button>
<script src="faqexternal.js"
data-id="miazienda"
data-mode="custom-listener"
data-faq-trigger="#help-btn"
data-theme="dark"></script>
Esempio 2: Link nella Navbar
<nav>
<a href="#home">Home</a>
<a href="#servizi">Servizi</a>
<a id="nav-faq" href="javascript:void(0)">FAQ</a>
</nav>
<script src="faqexternal.js"
data-id="azienda"
data-mode="custom-listener"
data-faq-trigger="#nav-faq"
data-translatetolang="en"></script>
Esempio 3: Icona in Header
<header>
<h1>I-Tech</h1>
<button class="icon-btn" data-help="faq">
<i class="fas fa-info-circle"></i>
</button>
</header>
<script src="faqexternal.js"
data-id="i-tech"
data-mode="custom-listener"
data-faq-trigger="button[data-help='faq']"></script>
Esempio 4: Multiple Trigger su Pagina
<!-- Trigger nel header -->
<button class="help-trigger">Aiuto 1</button>
<!-- Trigger nel footer -->
<button class="help-trigger">Aiuto 2</button>
<!-- Un singolo script aggancia entrambi -->
<script src="faqexternal.js"
data-id="azienda"
data-mode="custom-listener"
data-faq-trigger=".help-trigger"
data-theme="dark"></script>
Esempio 5: Custom-Listener con Traduzione Dinamica
<div id="language-selector">
<select id="lang-select">
<option value="it">Italiano</option>
<option value="en">English</option>
<option value="es">Español</option>
</select>
</div>
<button id="open-faq">Domande Frequenti</button>
<script>
// Carica il widget con traduzione dinamica
const langSelect = document.getElementById('lang-select');
const selectedLang = langSelect.value;
const script = document.createElement('script');
script.src = 'faqexternal.js';
script.setAttribute('data-id', 'azienda');
script.setAttribute('data-mode', 'custom-listener');
script.setAttribute('data-faq-trigger', '#open-faq');
script.setAttribute('data-translatetolang', selectedLang);
document.head.appendChild(script);
</script>
Note Importanti
- Elemento deve esistere: L’elemento specificato in data-faq-trigger deve essere presente nel DOM prima che lo script FAQ si carichi. Per elementi caricati dinamicamente, assicurati di posizionare lo script FAQ dopo il caricamento dell’elemento trigger.
- Selettore univoco: Usa selettori che identifichino univocamente l’elemento trigger. Se il selettore corrisponde a più elementi, l’event listener verrà agganciato a tutti, permettendo l’apertura del modale da qualsiasi elemento corrispondente.
- Nessun container target: L’attributo data-target viene ignorato in modalità custom-listener, poiché il modale ha una posizione fissa.
- Modale sempre centrato: Il modale appare sempre al centro della viewport, indipendentemente dalla posizione del trigger.
- Event listener single: Un singolo event listener gestisce tutti i click sul/i elemento/i trigger, non uno per elemento, ottimizzando le prestazioni.
- No body scroll: Durante l’apertura del modale, lo scroll della pagina viene disabilitato automaticamente per evitare comportamenti indesiderati.
- Overlay clickable: Cliccando sull’overlay (area scura intorno al modale), il modale si chiude automaticamente.
Best Practices per Custom-Listener
✅ Raccomandazioni
- Posiziona lo script FAQ dopo l’elemento trigger nel DOM
- Usa selettori CSS il più specifici possibile per evitare conflitti
- Testa il comportamento con l’overlay e le combinazioni di tema
- Considera l’accessibilità dell’elemento trigger (keyboard navigation)
- Monitora la console per eventuali errori di selettore non trovato
- Combina con traduzione automatica per massima internazionalizzazione
❌ Evitare
- Non usare selettori generici che potrebbero selezionare elementi indesiderati
- Non rimuovere l’elemento trigger dal DOM dopo l’inizializzazione
- Non modificare il selettore dinamicamente dopo il caricamento dello script
- Non caricare più istanze della modalità custom-listener con lo stesso trigger
Risoluzione dei Problemi
Checklist di Verifica Generale
- Verifica che l’attributo de>data-id sia corretto e in minuscolo
- Controlla la console del browser per eventuali errori
- Se usi de>data-target, verifica che l’elemento esista
- Assicurati che le dimensioni specificate siano valide
- Per traduzione automatica: Verifica il codice lingua (es: “en”, non “english”)
- Per traduzione automatica: Controlla che Google Translate sia disponibile
- Per traduzione automatica: Attendi 1-5 secondi per il completamento della traduzione
Checklist per Modalità Custom-Listener
- Verifica che l’elemento trigger specificato in de>data-faq-trigger esista nel DOM
- Controlla che il selettore CSS sia corretto e non ambiguo
- Assicurati che lo script sia caricato DOPO l’elemento trigger nel DOM
- Se il trigger è un link, verifica che non abbia un comportamento di default che interferisce (href=”#”)
- Controlla nella console che il selettore sia stato trovato correttamente
- Verifica che solo la modalità custom-listener sia abilitata (data-mode=”custom-listener”)
- Non usare contemporaneamente de>data-target e de>data-mode=”custom-listener”
Debug Mode
Il widget include una modalità debug che fornisce informazioni dettagliate nella console del browser. Verifica i log contrassegnati con emoji per il tracciamento degli eventi:
- 🔍 Ricerca elementi e selezione target
- 📝 Lettura parametri di configurazione
- ✅ Conferme di inizializzazione
- ⚠️ Avvisi e problemi non critici
- ❌ Errori che richiedono attenzione
- 🌐 Azioni di traduzione automatica
- 🔄 Tentativi di retry per la traduzione
- 🎯 Agganciamento di event listener su trigger (modalità custom-listener)
- 🚀 Apertura e chiusura del modale (modalità custom-listener)
Problemi Comuni con la Traduzione
Problema: La traduzione non si applica
Soluzione 1: Verifica nella console che Google Translate sia disponibile digitando:
document.querySelector('select.goog-te-combo')
Soluzione 2: Controlla di aver usato il codice lingua corretto (ISO 639-1)
<!-- Corretto --> <script data-translatetolang="en"></script> <!-- Sbagliato --> <script data-translatetolang="english"></script>
Soluzione 3: Attendi qualche secondo in più – il retry intelligente potrebbe aver bisogno di più tempo
Problema: Lingua sbagliata visualizzata
Soluzione: Verifica l’attributo de>data-translatetolang e assicurati che corrisponda al codice della lingua desiderata. I codici sono case-sensitive per alcune lingue (es: zh-CN vs zh-cn).
Problema: Errori nella console
Soluzione: Cerca messaggi con emoji ❌ o ⚠️ nella console. Questi messaggi forniscono dettagli specifici sull’errore e suggerimenti per risolverlo.
Problemi Specifici Custom-Listener
Problema: Il modale non si apre al click
Causa probabile: L’elemento trigger non è stato trovato dal selettore CSS.
Soluzione: Apri la console (F12) e verifica se appare il messaggio di errore ❌. Controlla che:
- Il selettore CSS è sintatticamente corretto
- L’elemento esiste nel DOM prima del caricamento dello script
- Non ci sono typo nel selettore
Problema: Il modale si apre ma il trigger rimane attivo
Soluzione: Se il trigger è un link (tag <a>), aggiungi de>href=”javascript:void(0)” per evitare navigazione:
<a id="nav-faq" href="javascript:void(0)">FAQ</a>
Problema: Stili CSS del trigger spariscono
Causa probabile: Lo scroll è stato disabilitato durante l’apertura del modale.
Soluzione: Questo è il comportamento atteso. Lo scroll si ripristina quando chiudi il modale.
Problema: Custom-Listener agganciato a troppi elementi
Causa probabile: Il selettore CSS è troppo generico.
Soluzione: Usa un selettore più specifico, ad esempio una combinazione di classe e attributo:
<!-- Troppo generico --> data-faq-trigger="button" <!-- Migliore --> data-faq-trigger="button.help-btn" <!-- Ancora migliore --> data-faq-trigger="button.help-btn[data-section='faq']"
⚡ Performance e Compatibilità
Metriche di Performance
| Metrica | Valore | Note |
|---|---|---|
| Tempo Traduzione | 800ms – 5s | Dipende dalla velocità di Google Translate |
| Memory Usage | Minimo | Nessun memory leak rilevato |
| Compatibilità Browser | 5+ browser | Chrome, Firefox, Safari, Edge, Opera |
| Tempo Apertura Modale Custom-Listener | <100ms | Agilità estrema nell’apertura del modale |
Compatibilità Browser
| Browser | Versione Minima | Status |
|---|---|---|
| Google Chrome | 90+ | ✅ Completamente supportato |
| Mozilla Firefox | 88+ | ✅ Completamente supportato |
| Safari | 14+ | ✅ Completamente supportato |
| Microsoft Edge | 90+ | ✅ Completamente supportato |
| Opera | 76+ | ✅ Completamente supportato |
Compatibilità Dispositivi
- ✅ Desktop (Windows, macOS, Linux)
- ✅ Tablet (iOS, Android)
- ✅ Mobile (iOS, Android)
- ✅ Design Responsive su tutti i dispositivi
- ✅ Touch-friendly per modalità custom-listener
Sicurezza
Il widget PROMIUM FAQ è progettato con la sicurezza come priorità:
- ✅ Nessuna valutazione dinamica del codice (no eval())
- ✅ Sanitizzazione completa degli input utente
- ✅ Error handling robusto che previene crash
- ✅ CORS-compliant per comunicazione cross-domain sicura
- ✅ XSS-safe con protezione contro injection attacks
- ✅ Content Security Policy compatibile
- ✅ Validazione rigorosa dei selettori CSS in modalità custom-listener
- ✅ Nessun accesso a proprietà DOM sensibili
Supporto Tecnico
Il team di Promium AI è a tua disposizione per qualsiasi domanda o problema tecnico relativo all’implementazione del widget FAQ, della funzionalità di traduzione automatica e della modalità custom-listener.
Contatti
- Email: assistenza@promiumai.com
- Telefono: +39 379 158 2010
- Website: https://promiumai.com

