PS PrestaShop Intermedio

AI People Also Ask — Documentazione completa (dfaipaa)

Guida completa al modulo dfaipaa: installazione, provider di scraping (SerpApi, DataForSEO) e IA (Mistral, OpenAI, Anthropic), flusso editoriale, visualizzazione della FAQ, JSON-LD FAQPage e automazione tramite cron.

Aggiornato Versione del modulo 1.0.0

Panoramica

AI People Also Ask (slug tecnico: dfaipaa) cattura le domande che i tuoi clienti pongono realmente a Google — i blocchi «People Also Ask» — genera le risposte con l’IA che preferisci e pubblica una FAQ marcata schema.org sulle tue schede prodotto e pagine categoria.

Il modulo industrializza una pipeline completa in quattro fasi:

  • Scraping — cattura delle domande PAA sulle tue parole chiave tramite SerpApi, DataForSEO o inserimento manuale.
  • Generazione IA — redazione delle risposte con Mistral, OpenAI o Anthropic, con tono e voce del brand configurabili.
  • Flusso editoriale — revisione, assegnazione a prodotti e categorie, pubblicazione (manuale o automatica).
  • Pubblicazione — fisarmonica FAQ accessibile nel negozio più JSON-LD FAQPage per Google e i motori generativi.
Nota — Non è richiesto alcun composer install. Il modulo integra un autoloader PSR-4 minimale sotto il namespace DataFirefly Dfaipaa.

Requisiti

  • PrestaShop 8.0.0 → 9.99.99
  • PHP 8.1, 8.2 o 8.3
  • MySQL 5.7 / MariaDB 10.4 o superiore
  • Una chiave API per almeno un provider IA (Mistral, OpenAI o Anthropic)
  • Opzionale: una chiave SerpApi o un account DataForSEO per automatizzare lo scraping
  • Connessioni HTTPS in uscita (cURL) consentite dal tuo hosting
Suggerimento — La modalità di inserimento manuale consente di usare il modulo senza alcun abbonamento di scraping: inserisci tu le domande e l’IA si occupa delle risposte.

Installazione

  1. Scarica lo ZIP dfaipaa.zip dal tuo account DataFirefly.
  2. Nel back-office PrestaShop, vai su Moduli › Gestore moduli › Carica un modulo.
  3. Trascina lo ZIP, attendi la conferma e clicca su Installa.
  4. Compare un nuovo menu AI People Also Ask nella colonna di sinistra, con tre schede: Configurazione, Parole chiave, Domande.

L’installazione crea 4 tabelle (prefisso ps_dfaipaa_), imposta i valori di configurazione predefiniti e installa 4 schede di amministrazione (una padre più tre figlie) con etichette localizzate in FR, EN, ES, DE, IT e NL.

Importante — Se il tuo strumento di decompressione salta le cartelle vendor/, l’autoloader risulterà mancante e il modulo genererà un errore «Class not found». Decomprimi con unzip o carica lo ZIP direttamente dal back-office, che gestisce correttamente l’albero dei file.

Configurazione — Scraping

Scheda AI People Also Ask › Configurazione, prima sezione.

Campo Descrizione Predefinito
Provider serpapi, dataforseo o manual serpapi
Chiave API Chiave SerpApi o credenziali DataForSEO nel formato login:password vuoto
Lingua Codice ISO a 2 lettere usato nella query a Google fr
Paese Codice ISO a 2 lettere del mercato di destinazione FR
Max domande per parola chiave Limite per operazione di scraping 8
Intervallo di aggiornamento In giorni, oltre i quali una parola chiave è considerata scaduta 30

Ottenere una chiave SerpApi

Crea un account su serpapi.com. Il piano gratuito offre 100 richieste al mese, ovvero circa 100 parole chiave analizzate. La chiave si trova nella dashboard, sezione «Your Account». Il modulo interroga l’endpoint di ricerca Google e utilizza il blocco related_questions della risposta.

Ottenere un account DataForSEO

Crea un account su dataforseo.com. Ricevi una coppia utente / password da incollare nel campo Chiave API nel formato login:password (il modulo gestisce l’autenticazione HTTP Basic). DataForSEO fattura a consumo, più adatto ai volumi elevati. Il modulo usa l’endpoint SERP Google organic live advanced ed estrae gli elementi people_also_ask.

La mappatura dei codici di localizzazione è integrata per questi mercati: FR, BE, CH, LU, CA, US, UK, IE, ES, PT, IT, DE, AT, NL, PL, BR e MX.

Modalità inserimento manuale

Seleziona manual per disattivare qualsiasi chiamata esterna. Aggiungi tu stesso le domande dalla scheda Domande; la generazione IA resta pienamente operativa.

Configurazione — Intelligenza artificiale

Seconda sezione della scheda Configurazione.

Campo Descrizione Predefinito
Provider mistral, openai o anthropic mistral
Modello Identificativo del modello presso il provider mistral-large-latest
Chiave API Chiave del provider selezionato vuoto
Temperatura Da 0.0 a 1.0 — più basso = più fattuale 0.3
Token max Lunghezza massima della risposta generata 500
Tono Testo libero: esperto, didattico, commerciale, cordiale… vuoto
Voce del brand Istruzioni aggiuntive per allineare lo stile editoriale vuoto
Pubblicazione automatica Pubblica automaticamente ogni risposta generata disattivato

Modelli consigliati

  • Mistralmistral-large-latest per la qualità, mistral-small-latest per ridurre i costi sui grandi volumi.
  • OpenAIgpt-4o-mini offre un ottimo rapporto qualità-prezzo; gpt-4o per cataloghi tecnici esigenti.
  • Anthropicclaude-sonnet-4-6 per risposte sfumate e ben strutturate.

Vincoli imposti al modello

Il modulo costruisce un prompt di sistema rigoroso, indipendente dal provider: risposte da 60 a 120 parole, solo HTML semplice (paragrafi, grassetto, corsivo, elenchi), niente markdown, niente tag di intestazione, niente script. Il contesto dell’entità (nome e descrizione del prodotto o della categoria, troncati a 1200 caratteri) e la parola chiave di origine vengono iniettati per ancorare la risposta. Lo snippet Google originale è fornito come riferimento con l’istruzione esplicita di riformulare — mai di copiare.

Suggerimento — Se un modello più piccolo restituisce comunque markdown, abbassa la temperatura a 0.2 e aggiungi «solo HTML, niente markdown» nel campo Voce del brand.

Configurazione — Visualizzazione

Terza sezione della scheda Configurazione.

Campo Descrizione Predefinito
Modalità prodotto tab (scheda) o footer (blocco a fondo pagina) tab
Attiva sui prodotti Mostra la FAQ sulle schede prodotto attivo
Attiva sulle categorie Mostra la FAQ a fondo pagina categoria attivo
Titolo scheda Etichetta localizzata della scheda prodotto «Domande frequenti»
Titolo prodotto Titolo del blocco in modalità footer localizzato
Titolo categoria Titolo del blocco categoria localizzato
Emetti JSON-LD Inietta il markup FAQPage attivo

In modalità tab, il modulo si appoggia al meccanismo nativo ProductExtraContent di PrestaShop: la FAQ appare come scheda accanto a «Descrizione» e «Dettagli prodotto», senza sovrascrivere template.

Flusso editoriale

Fase 1 — Aggiungere parole chiave

Scheda Parole chiave. Incolla il tuo elenco nell’area di testo, una parola chiave per riga, poi conferma. I duplicati vengono ignorati automaticamente (l’aggiunta è idempotente per parola chiave, lingua e negozio).

Scegli parole chiave allineate all’intento d’acquisto: «macchina da caffè automatica», «miglior caffè in grani», «manutenzione macchina caffè». Evita le query puramente di marca, che raramente attivano blocchi PAA.

Fase 2 — Scraping

Due opzioni:

  • Scraping — pulsante individuale su ogni riga, utile per testare la configurazione.
  • Scraping di tutte le scadute — elabora a lotti di 20 le parole chiave la cui ultima cattura supera l’intervallo di aggiornamento.

Ogni domanda catturata viene salvata con un hash di unicità (domanda + lingua + negozio): rieseguire lo scraping non crea mai duplicati, aggiorna soltanto la data dell’ultima cattura.

Fase 3 — Generare le risposte

Scheda Domande. Filtra per stato pending, seleziona le domande con le caselle e avvia l’azione di massa Genera. È disponibile anche un pulsante individuale su ogni riga.

Il contesto dell’entità viene costruito a partire dalla prima assegnazione della domanda. Per risposte migliori, assegna la domanda a un prodotto o a una categoria prima di generare: l’IA disporrà così del nome e della descrizione dell’entità.

Fase 4 — Revisionare e assegnare

Clicca su una domanda per aprire il modulo di modifica. Puoi:

  • correggere la risposta HTML nell’editor avanzato;
  • assegnare la domanda a uno o più prodotti e categorie (relazione N a N);
  • riordinare le assegnazioni per controllare l’ordine della fisarmonica;
  • rifiutare una domanda fuori tema (stato rejected, conservata nel database ma mai visualizzata).

Fase 5 — Pubblicare

Passa lo stato a published. La FAQ appare immediatamente nel negozio, accompagnata dal suo JSON-LD.

Se l’opzione Pubblicazione automatica è attiva, le fasi 4 e 5 si fondono: la generazione pubblica direttamente. Pratico per una pipeline completamente automatizzata, consigliabile solo per cataloghi in cui la revisione umana non è critica.

Stati delle domande

Stato Significato Visibile nel negozio
pending Domanda catturata, ancora senza risposta IA No
generated Risposta generata, in attesa di convalida No
published Convalidata e pubblicata
rejected Scartata manualmente No

Visualizzazione nel negozio

La fisarmonica si basa sugli elementi HTML nativi details e summary, il che garantisce:

  • navigazione da tastiera funzionante senza JavaScript;
  • contenuto indicizzabile dai motori anche da chiuso;
  • compatibilità con tutti i browser moderni.

Il primo elemento è aperto per impostazione predefinita. Viene caricato un CSS leggero, interamente sovrascrivibile dal tuo tema figlio. Tutte le classi usano il prefisso dfaipaa-faq per evitare collisioni.

Eventi JavaScript

Lo script frontend emette due eventi personalizzati che puoi collegare al tuo strumento di analytics:

document.addEventListener('dfaipaa:open', function (e) {
  // e.detail.question, e.detail.index, e.detail.type, e.detail.entityId
  gtag('event', 'faq_open', { question: e.detail.question });
});

document.addEventListener('dfaipaa:close', function (e) {
  console.log('FAQ chiusa:', e.detail.question);
});

Il file views/js/front.js contiene inoltre una costante SINGLE_OPEN (a false per impostazione predefinita): impostala a true per consentire un solo pannello aperto alla volta.

Deep-linking

Un’ancora della forma #dfaipaa-q-123 apre automaticamente la domanda corrispondente e fa scorrere la pagina fino ad essa. Utile per condividere una risposta specifica da un’email o da un ticket di assistenza.

Markup JSON-LD FAQPage

A ogni caricamento di pagina prodotto o categoria con almeno una domanda pubblicata, il modulo inietta un blocco JSON-LD subito prima della chiusura del corpo del documento (hook displayBeforeBodyClosingTag).

Struttura emessa: un nodo FAQPage, un array mainEntity e, per ogni voce, un nodo Question contenente un acceptedAnswer di tipo Answer. Il contenuto HTML delle risposte viene ripulito prima dell’emissione: i tag di script e stile e gli attributi di evento vengono rimossi.

Suggerimento — Valida il tuo markup con lo strumento di test dei risultati avanzati di Google. Nota che Google ha limitato la visualizzazione dei rich snippet FAQ ai siti governativi e sanitari, ma il markup resta prezioso per i motori generativi (ChatGPT, Perplexity, Gemini) che lo sfruttano attivamente.

Automazione tramite cron

È fornito uno script CLI per eseguire la pipeline senza intervento manuale.

# Scraping delle parole chiave scadute (max 20 per impostazione predefinita)
php modules/dfaipaa/cli/cron.php scrape --limit=20

# Generare le risposte IA per le domande in attesa
php modules/dfaipaa/cli/cron.php generate --limit=10

# Concatenare scraping e generazione
php modules/dfaipaa/cli/cron.php all --limit=20

Esempio di crontab, esecuzione notturna alle 3:

0 3 * * * cd /var/www/prestashop && php modules/dfaipaa/cli/cron.php all --limit=30 >> /var/log/dfaipaa.log 2>&1
Importante — Dimensiona il parametro --limit in base alle tue quote API. Un lotto di 30 parole chiave consuma 30 richieste SerpApi; con il piano gratuito (100 al mese), un’esecuzione settimanale è più adatta di una quotidiana.

Multilingua e multinegozio

Le domande sono indicizzate per id_lang e id_shop. In pratica:

  • la stessa parola chiave analizzata in italiano e in inglese produce due insiemi distinti di domande;
  • le risposte sono generate nella lingua della domanda, applicando il prompt una direttiva linguistica esplicita (fr, en, es, de, it, nl, pt, pl);
  • in multinegozio, le domande e le assegnazioni di un negozio non appaiono mai in un altro;
  • i titoli di visualizzazione (scheda, prodotto, categoria) sono salvati come configurazione localizzata.

Risoluzione dei problemi

Lo scraping non restituisce alcuna domanda

  • Verifica la tua quota presso il provider: SerpApi si interrompe silenziosamente oltre il piano gratuito.
  • Controlla la coerenza lingua / paese: «it» con «US» dà risultati incoerenti.
  • Alcune parole chiave semplicemente non attivano blocchi PAA su Google. Prova la query manualmente in una finestra anonima.
  • Per DataForSEO, verifica il formato login:password del campo Chiave API.

L’IA restituisce markdown invece di HTML

Abbassa la temperatura a 0.2 o passa a un modello più capace. Il prompt impone già regole HTML rigorose, ma i modelli più leggeri possono ignorarle in parte.

La FAQ non appare nel negozio

  • Verifica che almeno una domanda sia in stato published.
  • Verifica che sia assegnata all’entità consultata (prodotto o categoria).
  • Controlla che la visualizzazione sia attiva per quel tipo di entità nella configurazione.
  • Svuota la cache Smarty da Parametri avanzati › Prestazioni.

Il JSON-LD non appare nel codice sorgente

Assicurati che l’opzione «Emetti JSON-LD» sia attiva e che il tuo tema chiami effettivamente l’hook displayBeforeBodyClosingTag. Alcuni temi di terze parti lo omettono: in tal caso aggiungi {hook h='displayBeforeBodyClosingTag'} prima della chiusura del corpo nel tuo layouts/layout-both-columns.tpl.

Errore «Class not found» dopo l’installazione

La cartella vendor/ non è stata estratta. Reinstalla il modulo caricando lo ZIP dal back-office anziché decomprimerlo manualmente.

Consultare i log delle operazioni

Tutte le operazioni (scraping, generazione, pubblicazione) vengono registrate. Per indagare:

SELECT * FROM ps_dfaipaa_log ORDER BY date_add DESC LIMIT 50;

Disinstallazione

Da Moduli › Gestore moduli, clicca su Disinstalla. L’operazione elimina le 4 tabelle ps_dfaipaa_*, le 4 schede di amministrazione e tutte le chiavi di configurazione DFAIPAA_. Il contenuto generato viene perso definitivamente: esporta le tue domande in anticipo se desideri conservarle.

Riferimento tecnico

  • Slug tecnico: dfaipaa
  • Namespace: DataFirefly Dfaipaa (PSR-4, autoloader integrato)
  • Tabelle create: ps_dfaipaa_keyword, ps_dfaipaa_question, ps_dfaipaa_assignment, ps_dfaipaa_log
  • Hook utilizzati: displayHeader, displayProductExtraContent, displayFooterProduct, displayCategoryFooter, displayBeforeBodyClosingTag, actionFrontControllerSetMedia, actionAdminControllerSetMedia, actionProductUpdate, actionProductSave, actionCategoryUpdate, actionObjectProductDeleteAfter, actionObjectCategoryDeleteAfter
  • Schede back-office: AdminDfaipaa (padre), AdminDfaipaaConfig, AdminDfaipaaKeywords, AdminDfaipaaQuestions
  • Chiavi di configurazione: DFAIPAA_SCRAPER_PROVIDER, DFAIPAA_SCRAPER_API_KEY, DFAIPAA_SCRAPER_LANG, DFAIPAA_SCRAPER_COUNTRY, DFAIPAA_SCRAPER_MAX_PER_KEYWORD, DFAIPAA_AI_PROVIDER, DFAIPAA_AI_MODEL, DFAIPAA_AI_API_KEY, DFAIPAA_AI_TEMPERATURE, DFAIPAA_AI_MAX_TOKENS, DFAIPAA_AI_TONE, DFAIPAA_AI_BRAND_VOICE, DFAIPAA_AUTO_PUBLISH, DFAIPAA_REFRESH_INTERVAL, DFAIPAA_PRODUCT_MODE, DFAIPAA_EMIT_JSONLD, DFAIPAA_TAB_TITLE, DFAIPAA_PRODUCT_TITLE, DFAIPAA_CATEGORY_TITLE
  • CLI: modules/dfaipaa/cli/cron.php (comandi scrape, generate, all)
  • Template frontend: views/templates/hook/faq.tpl

Conformità GDPR

Il modulo non raccoglie né memorizza alcun dato personale: vengono registrati solo parole chiave, domande, risposte generate e log tecnici delle operazioni. Nel negozio non viene depositato alcun cookie. Le chiamate alle API esterne (scraping, IA) trasmettono solo la parola chiave, la domanda e il contesto del prodotto — mai dati dei clienti.

Assistenza

Per qualsiasi domanda tecnica, contatta il team DataFirefly all’indirizzo [email protected] o consulta la tua area cliente su datafirefly.com.

Questa pagina ti è stata utile?

Ancora bloccato? Contatta l'assistenza