Plus aucun produit écarté en silence
Un titre en majuscules, du HTML dans une description ou un prix écrit « 25,99 » est repéré avant qu’OpenAI ne le voie, avec la correction à faire.
Flux produit
OpenAI écarte un produit mal formé sans vous prévenir, et le produit n’apparaît jamais. Convrail garde votre catalogue à jour, contrôle chaque ligne de votre flux produit selon la spécification officielle avant l’envoi, livre les lignes acceptées dans le format attendu par OpenAI et liste chaque rejet avec sa correction.
Flux du jour, 9 987 produits
✓ 9 974 prêts pour ChatGPT 13 à corriger avant l’envoi
Envoyé à OpenAI à 04:00, journal complet disponible
Un titre en majuscules, du HTML dans une description ou un prix écrit « 25,99 » est repéré avant qu’OpenAI ne le voie, avec la correction à faire.
Les modifications de votre boutique arrivent chez OpenAI dans l’heure, et votre catalogue complet est renvoyé une fois par jour.
Chaque livraison est journalisée : produits lus, acceptés et rejetés, ce qui a changé depuis la précédente, et si le fichier est bien arrivé.
Les webhooks produits sur Shopify et la synchronisation par lots sur WooCommerce gardent le flux à jour, avec une resynchronisation complète à la demande.
Les 9 champs requis et leurs limites exactes, le format des prix, les fichiers image, les identifiants et les valeurs de remplissage, contrôlés sur chaque ligne.
Chaque produit rejeté est listé avec le champ, la règle enfreinte et la correction à apporter.
Le HTML est retiré des descriptions, les prix sont dans la devise de la boutique et les variantes sont regroupées sous un même produit.
Nom de la boutique, pays ciblés et éligibilité à la recherche et à la publicité dans ChatGPT, réglés une fois et appliqués à chaque produit.
Un GTIN au chiffre de contrôle faux est omis plutôt qu’envoyé : le produit reste dans le flux.
JSON Lines compressé par défaut, ou Parquet, CSV ou TSV, avec des fichiers découpés sous les limites de taille de la spécification.
Dès que votre compte ChatGPT Ads est relié, Convrail crée votre flux chez OpenAI et y dépose chaque livraison, avec des reprises et une alerte si l’envoi échoue encore.
Nombre de produits acceptés et rejetés, ce qui a été ajouté, retiré ou modifié depuis l’exécution précédente, et le statut de livraison.
Sur Shopify ou WooCommerce. Votre catalogue se synchronise tout seul.
Nom de la boutique et pays ciblés. Reliez votre compte ChatGPT Ads : votre flux est créé chez OpenAI, sans rien d’autre à saisir.
Les produits acceptés sont livrés dans l’heure ; les rejetés attendent la correction indiquée dans l’application.
Pour les équipes techniques et les agences : les champs requis et leurs limites, le passage du catalogue au fichier livré, et ce que chaque exécution enregistre.
L’ingestion du flux OpenAI ne renvoie pas de rapport d’erreur par ligne. Un titre en majuscules, du HTML resté dans une description ou un prix écrit « 25,99 » : le produit est ignoré, et rien ne vous prévient. Les marchands le découvrent des semaines plus tard, quand un produit vendu chaque jour n’apparaît jamais dans ChatGPT. Convrail déplace ce contrôle de votre côté : chaque ligne est validée avant la livraison, et chaque rejet est écrit dans le journal d’exécution avec le champ, la règle et la correction.
✗ « 25,99 » comme prix : la ligne disparaît, et le produit avec
✓ intercepté avant livraison : le prix doit être « 25.99 EUR »
Voici les règles que Convrail applique, issues de la spécification du flux produit OpenAI. Chacune est couverte par un test automatisé.
| Champ | Règle | Rejet typique |
|---|---|---|
| item_id | Requis, stable, 100 caractères max | Identifiant de variante qui change à chaque import |
| title | Requis, 150 caractères max, pas tout en majuscules | « CASQUE SANS FIL XL » |
| description | Requise, 5 000 caractères max, texte brut | Balises HTML laissées par l’éditeur de la boutique |
| url | Requise, URL http(s) valide | Chemin relatif |
| brand | Requis, 70 caractères max | Champ fournisseur vide |
| image_url | Requise, lien HTTP(S) direct vers un JPEG ou PNG, HTTPS recommandé | Fichier .webp, URL avec identifiants |
| price | « <montant> <ISO-4217> », supérieur à 0 | « 25,99 », « 25.99 », « 25,99 € » |
| availability | in_stock, out_of_stock, pre_order, backorder ou unknown | « disponible » |
| seller_name | Requis, vrai nom de vendeur, 70 caractères max | Absent, « unknown » |
Les champs conditionnels et recommandés sont contrôlés de la même façon quand ils sont présents, car un champ optionnel mal formé écarte aussi la ligne.
| Champ | Règle | Rejet typique |
|---|---|---|
| is_eligible_search | « true » ou « false » en minuscules ; absent vaut true | Booléen, « TRUE », « oui » |
| is_ads_eligible | « true » ou « false » en minuscules ; requis pour la publicité | « 1 », « oui » |
| target_countries | Codes ISO 3166-1 alpha-2 en majuscules, configurés avec votre compte OpenAI | « France », « USA » |
| gtin | 8, 12, 13 ou 14 chiffres avec un chiffre de contrôle valide | Faute de frappe dans le code-barres, tirets |
| sale_price | Même devise, strictement inférieur à price | Prix promotionnel égal au prix |
| group_id | Stable et différent de item_id | group_id copié depuis item_id |
| brand, seller_name | Vraies valeurs, jamais de remplacement | « n/a », « null », « unknown » |
Également contrôlés quand ils sont présents : mpn (70 caractères max), availability_date (ISO 8601), star_rating et popularity_score (de 0 à 5), review_count et return_deadline_in_days (entiers positifs). Sans GTIN ni MPN, identifier_exists vaut « no ». Un GTIN au chiffre de contrôle erroné est omis plutôt qu’envoyé : la ligne reste valide.
Les webhooks produit maintiennent à jour la copie de votre catalogue chez Convrail. Les changements sont regroupés sur 30 secondes : une modification en masse déclenche une reconstruction, pas cent. Une synchronisation complète est disponible à la demande.
Le HTML est retiré des descriptions, les prix sont formatés avec la devise de la boutique, les variantes sont regroupées sous group_id, et votre nom de vendeur, vos pays cibles et vos indicateurs d’éligibilité sont appliqués depuis les réglages du flux.
Les lignes acceptées entrent dans le fichier. Les lignes rejetées sont journalisées avec le champ et la règle enfreinte. Le nombre de rejets est visible dans l’application avant que le fichier ne parte.
Formats : jsonl.gz par défaut, ou parquet, csv.gz ou tsv.gz. Les fichiers sont découpés à 500 000 articles ou environ 450 Mo, sous les limites de la spécification, avec des noms stables (feed-organic-000.jsonl.gz) pour que chaque livraison remplace l’instantané précédent.
Convrail crée votre flux chez OpenAI, avec son propre accès de dépôt, et y livre les fichiers : les modifications de produits dans l’heure, une livraison par heure au plus pour laisser OpenAI terminer le traitement de la précédente, et le catalogue complet une fois par jour. Les livraisons en échec sont rejouées, puis ouvrent une alerte.
Chaque exécution enregistre le nombre d’articles lus, acceptés et rejetés, le diff avec l’exécution précédente (ajoutés, retirés, modifiés) et le statut de livraison. Les erreurs par ligne sont conservées avec l’exécution : vous pouvez retrouver quand un produit a quitté le flux, et pourquoi.
| Champ du journal | Signification |
|---|---|
| itemsTotal, itemsValid, itemsRejected | Nombre de lignes construites, conservées et écartées |
| added, removed, changed | Diff avec l’exécution précédente, calculé à partir d’un hash de chaque ligne |
| errors | Une entrée par article rejeté : item_id, champ, message |
| deliveryStatus | pending, delivered ou failed, avec le nombre de tentatives |
La plupart des champs se transposent, pas tous. OpenAI attend is_eligible_search, is_ads_eligible et target_countries que Google n’a jamais demandés, utilise seller_name à la place d’un compte marchand, et formate les booléens en chaînes minuscules. Convrail conserve aussi une projection compatible Google de votre flux : le même catalogue sert les deux canaux sans maintenir deux exports.
Parquet (recommandé pour les gros catalogues), JSON Lines compressé, CSV et TSV. Convrail exporte les quatre : le JSON Lines compressé (jsonl.gz) est le format par défaut, et un autre format se choisit dans les réglages avancés du flux.
Les modifications de vos produits partent dans l’heure, avec une livraison par heure au plus pour laisser OpenAI terminer le traitement de la précédente, et votre catalogue complet est renvoyé une fois par jour. Les noms de fichiers restent stables : chaque livraison remplace la précédente.
Il est exclu de cette livraison et listé dans le journal d’exécution avec le champ et la règle enfreinte. Corrigez le produit dans votre boutique et l’exécution suivante le reprend.
Non. OpenAI utilise un seul flux produit pour les résultats organiques et la publicité : chaque ligne indique si elle peut servir en publicité avec l’indicateur is_ads_eligible. Convrail le renseigne depuis vos réglages de flux.
Les fichiers sont découpés à 500 000 articles ou environ 450 Mo chacun, dans les limites de la spécification. Dans notre test automatisé, un catalogue de 10 000 produits est validé, exporté et livré par SFTP en moins d’une minute.
L’accès de dépôt créé chez OpenAI pour votre flux est chiffré au repos en AES-256-GCM, comme chaque secret que Convrail stocke, et n’est déchiffré qu’au moment de la livraison.
Convrail démarre avec une offre gratuite, et les offres payantes commencent par un essai gratuit. Laissez votre email et vous recevez le lien d'installation dès qu'une place s'ouvre.