PS PrestaShop Intermédiaire

AI People Also Ask — Documentation complète (dfaipaa)

Guide complet du module dfaipaa : installation, configuration des fournisseurs de scraping (SerpApi, DataForSEO) et IA (Mistral, OpenAI, Anthropic), workflow éditorial, affichage FAQ, JSON-LD FAQPage et automatisation par cron.

Mis à jour Version du module 1.0.0

Présentation

AI People Also Ask (slug technique : dfaipaa) capture les questions que vos clients posent réellement à Google — les blocs « People Also Ask » — génère les réponses avec une IA de votre choix, et publie une FAQ balisée schema.org sur vos fiches produit et pages catégorie.

Le module industrialise un pipeline complet en quatre étapes :

  • Scraping — capture des questions PAA sur vos mots-clés cibles via SerpApi, DataForSEO ou saisie manuelle.
  • Génération IA — rédaction des réponses via Mistral, OpenAI ou Anthropic, avec ton et voix de marque configurables.
  • Workflow éditorial — révision, affectation aux produits et catégories, publication (manuelle ou automatique).
  • Publication — accordéon FAQ accessible côté boutique + JSON-LD FAQPage pour Google et les moteurs génératifs.
Note — Aucun composer install n’est requis. Un autoloader PSR-4 minimal est embarqué dans le module sous le namespace DataFirefly Dfaipaa.

Pré-requis

  • PrestaShop 8.0.0 → 9.99.99
  • PHP 8.1, 8.2 ou 8.3
  • MySQL 5.7 / MariaDB 10.4 ou supérieur
  • Une clé API pour au moins un fournisseur IA (Mistral, OpenAI ou Anthropic)
  • Optionnel : une clé SerpApi ou un compte DataForSEO pour automatiser le scraping
  • Autorisation des connexions HTTPS sortantes (cURL) depuis votre hébergement
Astuce — Le mode « saisie manuelle » permet d’utiliser le module sans aucun abonnement de scraping : vous entrez vous-même les questions, l’IA se charge des réponses.

Installation

  1. Téléchargez le ZIP dfaipaa.zip depuis votre compte DataFirefly.
  2. Dans le back-office PrestaShop, allez dans Modules › Gestionnaire de modules › Téléverser un module.
  3. Glissez-déposez le ZIP, attendez la confirmation puis cliquez sur Installer.
  4. Un nouveau menu AI People Also Ask apparaît dans la colonne de gauche, avec trois onglets : Configuration, Mots-clés, Questions.

L’installation crée 4 tables (préfixe ps_dfaipaa_), pose les valeurs de configuration par défaut et installe 4 onglets d’administration (un parent + trois enfants) avec des libellés localisés en FR, EN, ES, DE, IT et NL.

Important — Si votre outil de décompression ignore les dossiers vendor/, l’autoloader ne sera pas présent et le module lèvera une erreur « Class not found ». Décompressez avec unzip ou téléversez le ZIP directement via le back-office, qui gère correctement l’arborescence.

Configuration — Scraping

Onglet AI People Also Ask › Configuration, première section.

Champ Description Défaut
Fournisseur serpapi, dataforseo ou manual serpapi
Clé API Clé SerpApi, ou identifiants DataForSEO au format login:password vide
Langue Code ISO 2 lettres utilisé dans la requête Google fr
Pays Code ISO 2 lettres du marché ciblé FR
Max questions par mot-clé Limite par opération de scraping 8
Intervalle de rafraîchissement En jours, au-delà duquel un mot-clé est considéré comme périmé 30

Obtenir une clé SerpApi

Créez un compte sur serpapi.com. Le plan gratuit offre 100 requêtes par mois, ce qui correspond à environ 100 mots-clés scrapés. La clé se trouve dans votre tableau de bord, section « Your Account ». Le module interroge l’endpoint de recherche Google et exploite le bloc related_questions de la réponse.

Obtenir un compte DataForSEO

Créez un compte sur dataforseo.com. Vous obtenez un couple identifiant / mot de passe à coller dans le champ Clé API sous la forme login:password (le module gère l’authentification HTTP Basic). DataForSEO facture à l’usage, ce qui convient mieux aux gros volumes. Le module utilise l’endpoint SERP Google organic live advanced et extrait les éléments people_also_ask.

Le mapping des codes de localisation est intégré pour les marchés suivants : FR, BE, CH, LU, CA, US, UK, IE, ES, PT, IT, DE, AT, NL, PL, BR et MX.

Mode saisie manuelle

Sélectionnez manual pour désactiver tout appel externe. Vous ajoutez alors les questions vous-même depuis l’onglet Questions ; la génération IA reste pleinement fonctionnelle.

Configuration — Intelligence artificielle

Deuxième section de l’onglet Configuration.

Champ Description Défaut
Fournisseur mistral, openai ou anthropic mistral
Modèle Identifiant du modèle chez le fournisseur mistral-large-latest
Clé API Clé du fournisseur sélectionné vide
Température 0.0 à 1.0 — plus bas = plus factuel 0.3
Tokens max Longueur maximale de la réponse générée 500
Tonalité Texte libre : expert, pédagogique, commercial, chaleureux… vide
Voix de marque Instructions additionnelles pour aligner le style éditorial vide
Auto-publication Publie automatiquement chaque réponse générée désactivé

Modèles recommandés

  • Mistralmistral-large-latest pour la qualité, mistral-small-latest pour réduire les coûts sur de gros volumes.
  • OpenAIgpt-4o-mini offre un excellent rapport qualité / prix ; gpt-4o pour les catalogues techniques exigeants.
  • Anthropicclaude-sonnet-4-6 pour des réponses nuancées et bien structurées.

Contrainte imposée au modèle

Le module construit un prompt système strict, indépendant du fournisseur : réponses de 60 à 120 mots, HTML simple uniquement (paragraphes, gras, italique, listes), interdiction du markdown, des balises de titre et de tout script. Le contexte de l’entité (nom et description du produit ou de la catégorie, tronqués à 1200 caractères) ainsi que le mot-clé d’origine sont injectés pour ancrer la réponse. Le snippet Google d’origine est fourni comme référence avec une consigne explicite de reformulation — jamais de copie.

Astuce — Si un modèle plus petit renvoie malgré tout du markdown, baissez la température à 0.2 et précisez « HTML uniquement, pas de markdown » dans le champ Voix de marque.

Configuration — Affichage

Troisième section de l’onglet Configuration.

Champ Description Défaut
Mode produit tab (onglet) ou footer (bloc en pied de fiche) tab
Activer sur produit Affiche la FAQ sur les fiches produit activé
Activer sur catégorie Affiche la FAQ en pied de page catégorie activé
Titre onglet Libellé localisé de l’onglet produit « Questions fréquentes »
Titre produit Titre du bloc en mode footer localisé
Titre catégorie Titre du bloc catégorie localisé
Émettre le JSON-LD Injecte le balisage FAQPage activé

En mode tab, le module s’appuie sur le mécanisme natif ProductExtraContent de PrestaShop : la FAQ apparaît comme un onglet aux côtés de « Description » et « Détails du produit », sans surcharge de template.

Workflow éditorial

Étape 1 — Ajouter des mots-clés

Onglet Mots-clés. Collez votre liste dans la zone de texte, un mot-clé par ligne, puis validez. Les doublons sont ignorés automatiquement (l’ajout est idempotent par mot-clé, langue et boutique).

Choisissez des mots-clés qui correspondent à l’intention d’achat : « machine à café automatique », « meilleur café en grain », « entretien cafetière ». Évitez les requêtes de marque pure, qui déclenchent rarement des blocs PAA.

Étape 2 — Scraper

Deux options :

  • Scraper — bouton individuel sur chaque ligne de mot-clé, utile pour tester la configuration.
  • Scraper tous les périmés — traite par lot de 20 les mots-clés dont la dernière capture dépasse l’intervalle de rafraîchissement.

Chaque question capturée est enregistrée avec un hash d’unicité (question + langue + boutique) : re-scraper un mot-clé ne crée jamais de doublon, il met simplement à jour la date de dernière capture.

Étape 3 — Générer les réponses

Onglet Questions. Filtrez par statut pending, sélectionnez les questions via les cases à cocher, puis lancez l’action de masse Générer. Un bouton individuel est également disponible sur chaque ligne.

Le contexte d’entité est construit à partir de la première affectation de la question. Pour de meilleures réponses, affectez la question à un produit ou une catégorie avant de générer : l’IA disposera alors du nom et de la description de l’entité.

Étape 4 — Réviser et affecter

Cliquez sur une question pour ouvrir le formulaire d’édition. Vous pouvez :

  • corriger la réponse HTML dans l’éditeur enrichi ;
  • affecter la question à un ou plusieurs produits et catégories (relation N à N) ;
  • réordonner les affectations pour contrôler l’ordre d’affichage de l’accordéon ;
  • rejeter une question hors sujet (statut rejected, conservée en base mais jamais affichée).

Étape 5 — Publier

Passez le statut à published. La FAQ apparaît immédiatement côté boutique, accompagnée de son JSON-LD.

Si l’option Auto-publication est activée dans la configuration, les étapes 4 et 5 sont fusionnées : la génération publie directement. Pratique pour un pipeline entièrement automatisé, à réserver aux catalogues où la relecture humaine n’est pas critique.

Statuts des questions

Statut Signification Affiché en boutique
pending Question capturée, pas encore de réponse IA Non
generated Réponse générée, en attente de validation Non
published Validée et publiée Oui
rejected Écartée manuellement Non

Affichage côté boutique

L’accordéon repose sur les éléments HTML natifs details et summary, ce qui garantit :

  • une navigation au clavier fonctionnelle sans JavaScript ;
  • un contenu indexable par les moteurs même replié ;
  • une compatibilité avec tous les navigateurs modernes.

Le premier élément est ouvert par défaut. Un fichier CSS léger est chargé, entièrement surchargeable depuis votre thème enfant. Toutes les classes utilisent le préfixe dfaipaa-faq pour éviter les collisions.

Événements JavaScript

Le script front émet deux événements personnalisés que vous pouvez brancher sur votre outil d’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 fermée :', e.detail.question);
});

Le fichier views/js/front.js contient également une constante SINGLE_OPENfalse par défaut) : passez-la à true pour n’autoriser qu’un seul panneau ouvert à la fois.

Deep-linking

Une ancre de la forme #dfaipaa-q-123 ouvre automatiquement la question correspondante et fait défiler la page jusqu’à elle. Pratique pour partager une réponse précise depuis un email ou un ticket SAV.

Balisage JSON-LD FAQPage

À chaque chargement de page produit ou catégorie comportant au moins une question publiée, le module injecte un bloc JSON-LD juste avant la fermeture du corps du document (hook displayBeforeBodyClosingTag).

Structure émise : un nœud FAQPage, un tableau mainEntity, et pour chaque entrée un nœud Question contenant un acceptedAnswer de type Answer. Le contenu HTML des réponses est nettoyé avant émission : les balises de script et de style ainsi que les attributs événementiels sont supprimés.

Astuce — Validez votre balisage avec l’outil de test des résultats enrichis de Google. Notez que Google a restreint l’affichage des rich snippets FAQ aux sites gouvernementaux et de santé, mais le balisage reste précieux pour les moteurs génératifs (ChatGPT, Perplexity, Gemini) qui l’exploitent activement.

Automatisation par cron

Un script CLI est fourni pour exécuter le pipeline sans intervention manuelle.

# Scraper les mots-clés périmés (20 max par défaut)
php modules/dfaipaa/cli/cron.php scrape --limit=20

# Générer les réponses IA pour les questions en attente
php modules/dfaipaa/cli/cron.php generate --limit=10

# Enchaîner scraping puis génération
php modules/dfaipaa/cli/cron.php all --limit=20

Exemple de crontab, exécution nocturne à 3 h :

0 3 * * * cd /var/www/prestashop && php modules/dfaipaa/cli/cron.php all --limit=30 >> /var/log/dfaipaa.log 2>&1
Important — Dimensionnez le paramètre --limit en fonction de vos quotas API. Un lot de 30 mots-clés consomme 30 requêtes SerpApi ; avec le plan gratuit (100 par mois), une exécution hebdomadaire est plus adaptée qu’une exécution quotidienne.

Multilingue et multiboutique

Les questions sont indexées par id_lang et id_shop. Concrètement :

  • un même mot-clé scrapé en français et en anglais produit deux jeux de questions distincts ;
  • les réponses sont générées dans la langue de la question, le prompt appliquant une directive linguistique explicite (fr, en, es, de, it, nl, pt, pl) ;
  • en multiboutique, les questions et affectations d’une boutique n’apparaissent jamais sur une autre ;
  • les titres d’affichage (onglet, produit, catégorie) sont stockés en configuration localisée.

Dépannage

Le scraping ne renvoie aucune question

  • Vérifiez votre quota chez le fournisseur : SerpApi coupe silencieusement au-delà du plan gratuit.
  • Contrôlez la cohérence langue / pays : « fr » avec « US » donne des résultats erratiques.
  • Certains mots-clés ne déclenchent tout simplement pas de bloc PAA chez Google. Testez la requête manuellement dans un navigateur en navigation privée.
  • Pour DataForSEO, vérifiez le format login:password du champ Clé API.

L’IA renvoie du markdown au lieu du HTML

Baissez la température à 0.2, ou passez à un modèle plus capable. Le prompt impose déjà des règles HTML strictes, mais les modèles les plus légers peuvent les ignorer partiellement.

La FAQ ne s’affiche pas en boutique

  • Vérifiez qu’au moins une question est au statut published.
  • Vérifiez qu’elle est bien affectée à l’entité consultée (produit ou catégorie).
  • Contrôlez que l’affichage est activé pour ce type d’entité dans la configuration.
  • Videz le cache Smarty depuis Paramètres avancés › Performances.

Le JSON-LD n’apparaît pas dans le code source

Assurez-vous que l’option « Émettre le JSON-LD » est activée et que le thème appelle bien le hook displayBeforeBodyClosingTag. Certains thèmes tiers l’omettent : ajoutez alors {hook h='displayBeforeBodyClosingTag'} avant la fermeture du corps dans votre layouts/layout-both-columns.tpl.

Erreur « Class not found » après installation

Le dossier vendor/ n’a pas été extrait. Réinstallez le module en téléversant le ZIP via le back-office plutôt qu’en décompressant manuellement.

Consulter les logs d’opération

Toutes les opérations (scraping, génération, publication) sont journalisées. Pour investiguer :

SELECT * FROM ps_dfaipaa_log ORDER BY date_add DESC LIMIT 50;

Désinstallation

Depuis Modules › Gestionnaire de modules, cliquez sur Désinstaller. L’opération supprime les 4 tables ps_dfaipaa_*, les 4 onglets d’administration et toutes les clés de configuration DFAIPAA_. Le contenu généré est définitivement perdu : exportez vos questions au préalable si vous souhaitez les conserver.

Référence technique

  • Slug technique : dfaipaa
  • Namespace : DataFirefly Dfaipaa (PSR-4, autoloader embarqué)
  • Tables créées : ps_dfaipaa_keyword, ps_dfaipaa_question, ps_dfaipaa_assignment, ps_dfaipaa_log
  • Hooks utilisés : displayHeader, displayProductExtraContent, displayFooterProduct, displayCategoryFooter, displayBeforeBodyClosingTag, actionFrontControllerSetMedia, actionAdminControllerSetMedia, actionProductUpdate, actionProductSave, actionCategoryUpdate, actionObjectProductDeleteAfter, actionObjectCategoryDeleteAfter
  • Onglets back-office : AdminDfaipaa (parent), AdminDfaipaaConfig, AdminDfaipaaKeywords, AdminDfaipaaQuestions
  • Clés de configuration : 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 (commandes scrape, generate, all)
  • Template front : views/templates/hook/faq.tpl

Conformité RGPD

Le module ne collecte ni ne stocke aucune donnée personnelle : seuls des mots-clés, des questions, des réponses générées et des journaux d’opérations techniques sont enregistrés. Aucun cookie n’est déposé côté boutique. Les appels aux API externes (scraping, IA) ne transmettent que le mot-clé, la question et le contexte produit — jamais de données client.

Support

Pour toute question technique, contactez l’équipe DataFirefly à [email protected] ou consultez votre espace client sur datafirefly.com.

Cette page vous a-t-elle été utile ?

Toujours bloqué ? Contactez le support