Les templates Smart Message s’écrivent en Twig 3. Cette page liste chaque variable, fonction et filtre que Nonli prend en charge dans ce contexte, avec son type, les cas où elle peut manquer et un exemple testé. Pour créer un template pas à pas, commencez par Comment créer un Smart Message.
1. Où ce contexte s’applique#
Le même contexte est disponible à deux endroits :
- Les templates Smart Message, utilisés par les robots, par le bouton ampoule de l’éditeur de publication et par le bouton du premier commentaire. Ils peuvent remplir le message, le titre, la description, le commentaire, le titre de vidéo, le texte alternatif et le titre d’ancre TikTok.
- Les valeurs dynamiques de Smart Image, quand un texte ou une couleur de Smart Image a pour source un template Smart Message. La variable
contextvaut alors'smart_image'. Voir Comment utiliser les couleurs dynamiques dans Smart Image.
Les paramètres d’URL dynamiques et le paywall dynamique utilisent aussi Twig, mais avec un contexte beaucoup plus réduit : un post restreint (source, social_account, post_type, author, user_id, breaking_news, short_id), referer, la fonction isComment(), ainsi que les compteurs et percentiles. organic, les alias de premier niveau et les fonctions Smart Message ci-dessous n’y existent pas.
2. Règles de nommage et de type#
- Préférez les chemins complets. Écrivez
organic.titleoupost.social_account.typeplutôt qu’un alias de premier niveau. Les alias restent pris en charge pour les templates existants. - Les noms sont en snake_case et reprennent les noms des champs stockés :
canonical_url,published_at,open_graph. - Respectez le singulier et le pluriel. Les chemins sont
organic.category,organic.tag,organic.author; les alias sonttagsetauthors. Un nom erroné commecategories,organic.categories,tagouauthorne provoque pas d’erreur : il produit une valeur vide. - Types. Une chaîne est un texte. Une liste est une suite de valeurs : testez-la avec
in, lisez-la avec|firstou|join(', '), ne l’affichez jamais directement. Un objet regroupe d’autres chemins. Viennent ensuite les nombres, les booléens et les dates. Les dates sont des chaînes ISO 8601 en UTC, comme2026-10-18T07:30:00.000Z; formatez-les avec|date. - Absence. Une valeur n’existe que si la source la fournit. Cela dépend de l’origine de la publication (article, publication manuelle, publication sans lien), du réseau social, du type de publication et des métadonnées trouvées sur la page. Un chemin
organicabsent produit une valeur vide ; une liste vide est traitée comme absente.
Utilisez ?? pour remplacer une valeur absente ou null, et ?: ou |default() pour remplacer aussi une chaîne vide :
| Expression | Valeur absente | Valeur '' | Valeur 'A' |
|---|---|---|---|
{{ x ?? 'B' }} | B | (vide) | A |
{{ x ?: 'B' }} | B | B | A |
{{ x|default('B') }} | B | B | A |
Après un filtre, utilisez ?: ou |default(), jamais ?? : {{ x|upper ?? 'B' }} est une erreur de syntaxe, et le template est refusé à l’enregistrement.
3. Variables de premier niveau#
Ces variables sont toujours définies dans un Smart Message.
| Chemin | Type | Disponibilité | Description | Exemple |
|---|---|---|---|---|
social_network | chaîne | Toujours | Réseau du compte de destination ; facebook s’il est inconnu. | instagram |
post_type | chaîne | Toujours | Type de publication ; link s’il est inconnu. | photo |
empty_message | chaîne | Toujours | Une chaîne vide, pour ne rien renvoyer volontairement. | '' |
shortlink_prefix | chaîne | Toujours | Texte de la marque placé avant un lien court. | ➡️ |
post | objet | Toujours | La publication en cours de création ou d’édition (voir post.*). | |
organic | objet | Toujours | L’article source (voir organic.*) ; une liste vide [] quand la publication n’a pas d’article. | |
context | chaîne | Toujours | Champ en cours de génération : message, title, description, comment, videoTitle, altText, tikTokAnchorTitle, ou smart_image quand Smart Image exécute le template. | message |
3.1. Alias historiques#
Quand la publication provient d’un article, Nonli copie aussi certains champs de l’article au premier niveau. Ces alias sont définis (éventuellement null) dès qu’un article existe, et non définis quand la publication n’en a pas. Chacun a un chemin complet à privilégier.
| Alias | Chemin complet à privilégier | Type | Contenu |
|---|---|---|---|
title | organic.title | chaîne | Titre de l’article retenu par Nonli |
description | organic.description | chaîne | Description de l’article retenue par Nonli |
title1 | organic.html.h1 | chaîne | Premier titre H1 de la page |
title2 | organic.html.h2 | chaîne | Premier titre H2 de la page |
head_title | organic.head.title | chaîne | Balise HTML title, souvent le titre SEO plus long |
meta_description | organic.meta.description | chaîne | Meta description native de la page |
og_title | organic.meta.open_graph.title | chaîne | Titre Open Graph |
og_description | organic.meta.open_graph.description | chaîne | Description Open Graph |
twitter_title | organic.meta.twitter.title | chaîne | Titre Twitter Card |
twitter_description | organic.meta.twitter.description | chaîne | Description Twitter Card |
meta_custom_facebook, meta_custom_twitter, meta_custom_instagram, meta_custom_linkedin, meta_custom_tiktok, meta_custom_pinterest | organic.meta.custom.facebook (et ainsi de suite) | chaîne | Métadonnée personnalisée par réseau, extraite par une règle propre au site |
meta_custom_publisher | organic.meta.custom.publisher | chaîne | Champ éditeur personnalisé extrait par une règle propre au site, par exemple le premier paragraphe du corps |
meta_custom_rss_title | organic.meta.custom.rss.title | chaîne | Titre de l’élément RSS |
meta_custom_rss_description | organic.meta.custom.rss.description | chaîne | Description de l’élément RSS |
authors | organic.author | liste | Auteurs de l’article |
tags | organic.tag | liste | Tags de l’article |
Sur un article réel, title et title1 contiennent souvent le même titre, head_title le titre SEO plus long et meta_description commence souvent par le chapô. Chacun peut être vide : prévoyez toujours une valeur de repli.
Les choix « Meta custom … » de l’éditeur et des sources de robot correspondent à ces alias meta_custom_*. Ils ne sont remplis que sur les sites où Nonli a configuré une règle d’extraction dédiée. Un article d’un site extérieur à votre entreprise n’expose que ses champs publics : organic.counter.view y est alors absent.
4. [object Object], : l’article source#
organic existe quand la publication provient d’un article (robot, URL collée dans l’éditeur, SDK, RSS). Une publication manuelle ou sans lien n’a pas d’article : organic est alors une liste vide et tous les chemins organic.* sont vides.
| Chemin | Type | Disponibilité | Description | Exemple |
|---|---|---|---|---|
organic.url | chaîne | Chaque article | URL de l’article | https://www.example.com/politique/budget |
organic.canonical_url | chaîne | Si déclarée | URL canonique | https://www.example.com/politique/budget |
organic.type | chaîne | Chaque article | Type de contenu détecté | article |
organic.language | chaîne | Si détectée | Code de langue | fr |
organic.title | chaîne | La plupart des articles | Titre retenu par Nonli | Budget 2027 : ce qui change |
organic.description | chaîne | Si trouvée | Description retenue par Nonli | Le gouvernement présente son budget. |
organic.html.h1 / organic.html.h2 | chaîne | Si présent | Premier titre H1 / H2 | Les mesures clés |
organic.head.title | chaîne | Si présent | Balise HTML title | Budget 2027 - Example News |
organic.meta.description | chaîne | Si présente | Meta description native | Le gouvernement présente son budget. |
organic.meta.open_graph.title / .description | chaîne | Si présent | Titre / description Open Graph | Budget 2027 |
organic.meta.open_graph.article.section | chaîne | Si présente | article:section Open Graph | Politique |
organic.meta.twitter.title / .description | chaîne | Si présent | Titre / description Twitter Card | Budget 2027 |
organic.meta.custom.* | chaîne | Règle propre au site | Champs personnalisés listés dans le tableau des alias | |
organic.category | liste | Si trouvées | Catégories normalisées, dont articleSection du JSON-LD | ['politique', 'economie'] |
organic.tag | liste | Si trouvés | Tags de l’article | ['budget', 'impots'] |
organic.author | liste | Si trouvés | Auteurs de l’article | ['Camille Martin'] |
organic.image | liste | Si trouvées | URL des images trouvées sur la page | ['https://…/budget.jpg'] |
organic.image_alt | chaîne | Si trouvé | Texte alternatif de l’image principale | L’hémicycle de l’Assemblée nationale |
organic.published_at | date | Si trouvée | Date de publication (UTC) | 2026-10-18T07:30:00.000Z |
organic.modified_at | date | Si trouvée | Date de dernière modification (UTC) | 2026-10-18T09:00:00.000Z |
organic.counter.view | nombre | Voir les compteurs | Vues de l’article mesurées par Nonli | 1520 |
4.1. Catégories et ,[object Object]#
Nonli enregistre la valeur articleSection du JSON-LD, ainsi que les autres signaux de catégorie de la page, dans organic.category. C’est une liste, pas un texte, et il n’existe pas de variable categories. Les valeurs sont normalisées : minuscules, accents retirés, ponctuation remplacée par des espaces. Par exemple Politique & Société, Économie et Sports > Rugby deviennent politique societe, economie et sports rugby. Comparez toujours avec des valeurs réellement observées sur vos propres articles.
1{%- set categories = organic.category ?? [] -%}2{%- if 'politique' in categories -%}3Politique4{%- endif -%}Première catégorie, ou rien : {{ organic.category|default([])|first|default('') }}
Toutes les catégories : {{ organic.category|default([])|join(', ') }}
La section Open Graph brute, non normalisée, reste disponible avec {{ organic.meta.open_graph.article.section ?? '' }}.
5. [object Object], : la publication#
post décrit la publication en cours de création ou d’édition. Les champs se remplissent progressivement : un champ en cours de génération est encore vide pendant l’exécution de son propre template.
| Chemin | Type | Disponibilité | Description | Exemple |
|---|---|---|---|---|
post.post_type | chaîne | Toujours | Type de publication | link |
post.message | chaîne | Si rédigé | Message actuel | Trois façons d’économiser l’énergie. |
post.title | chaîne | Si rédigé | Titre actuel | Budget 2027 |
post.description | chaîne | Si rédigée | Description actuelle | Ce qui change pour les ménages. |
post.author | chaîne | Si connu | Auteur du contenu publié (un texte, pas une liste) | Camille Martin |
post.tag | liste | Si connus | Tags de la publication | ['budget'] |
post.language | chaîne | Si connue | Code de langue | fr |
post.target_url | chaîne | Publications avec lien | URL de destination | https://www.example.com/politique/budget |
post.short_id | chaîne | Après raccourcissement | Identifiant du lien court | aB3xY |
post.social_account.type | chaîne | Toujours | Réseau de destination | linkedin |
post.social_account.name | chaîne | Toujours | Nom du compte | Example News |
post.social_account.slug | chaîne | Toujours | Slug du compte | example-news |
post.social_account.external_id | chaîne | Toujours | Identifiant du compte sur le réseau | 1000000001 |
post.source.type | chaîne | Si connue | Origine de la publication (robot, manuelle, etc.) | bot |
post.source.bot_title | chaîne | Publications de robot | Nom du robot qui a créé la publication | Robot politique |
post.source.organic_url | chaîne | Publications d’article | URL de l’article source | https://www.example.com/politique/budget |
post.breaking_news.active | booléen | Toujours | Mode breaking news | false |
post.schedule.start_date | date | Publications programmées | Date de publication prévue (UTC) | 2026-10-19T06:00:00.000Z |
post.published_at | date | Après publication | Date de publication (UTC) | 2026-10-19T06:00:04.000Z |
post.comment.message | chaîne | Si rédigé | Texte du premier commentaire | À lire : [SHORTLINK] |
post.counter.* | nombre | Voir les compteurs | Performances de la publication | 42 |
Les identifiants internes et les champs techniques (identifiants d’utilisateur, de société et de marque, e-mail du compte, URL de webhook, statuts, traces d’erreur, compteurs bruts) sont volontairement exclus : ils ne constituent pas une interface publique stable et ne doivent pas apparaître dans un texte publié. post.user_id n’est documenté que pour les paramètres d’URL.
6. Compteurs et percentiles#
Un compteur n’est chargé que si le template le nomme explicitement, par exemple post.counter.click. Il est absent tant que la mesure n’existe pas, ce qui est toujours le cas pour une publication pas encore publiée. Prévoyez toujours une valeur de repli : {{ post.counter.click ?? 0 }}.
| Chemin | Type | Description |
|---|---|---|
post.counter.click | nombre | Clics |
post.counter.engagement | nombre | Engagement |
post.counter.reach | nombre | Portée |
post.counter.videoViews | nombre | Vues vidéo |
post.counter.ctr | nombre | Taux de clic |
post.counter.overperforming | nombre | Score de surperformance |
post.counter.monetization | nombre | Revenus de monétisation du contenu |
organic.counter.view | nombre | Vues de l’article (uniquement si la publication a un article) |
Une variable de percentile compare une publication aux publications du même compte sur une période, breaking news exclues. Son nom est percentile + percentile (1 ou 2 chiffres) + mesure + durée (1 ou 2 chiffres) + unité :
- mesures :
Click,Engagement,Reach,VideoViews,Ctr,Overperforming,Monetization; - unités :
hheure,djour,wsemaine,mmois,yannée.
percentile50Click1d est la médiane des clics sur 1 jour ; percentile90Engagement7d le 90e percentile d’engagement sur 7 jours. La valeur est null sans données et reste en cache 30 minutes.
1{%- if (post.counter.engagement ?? 0) > (percentile50Engagement7d ?? 0) -%}TOP{%- else -%}NORMAL{%- endif -%}7. Fonctions#
| Fonction | Renvoie | Description |
|---|---|---|
hasLink() | booléen | true si la publication contient un lien. Vérifiez-la avant d’écrire [SHORTLINK]. |
hasFirstCommentShortlink() | booléen | true si le premier commentaire contient déjà [SHORTLINK]. |
canPublishPostWithoutSpam() | booléen | true si les règles anti-spam du compte autorisent maintenant une nouvelle publication avec lien. |
canPublishCommentWithoutSpam() | booléen | Même vérification pour un commentaire contenant un lien. |
shouldAddComment(metric) | booléen | Applique la règle d’échantillonnage des commentaires configurée ; la mesure facultative désigne le compteur utilisé. Le résultat peut varier. |
aiGenerated(source, min, target, max, ending, justCrop) | chaîne | Résume source, ou le coupe sur une limite de mot quand justCrop vaut true. |
gpt(prompt, model), claude(…), gemini(…), mistral(…) | chaîne | Génèrent du texte avec la clé du fournisseur de la marque. Voir Génération de messages IA. |
airtable(…) | chaîne | Lit une valeur dans une base Airtable connectée. Elle ne renvoie que du texte. |
aiGenerated() ne résout que les noms de premier niveau passés en texte. Passez 'description' ou la valeur elle-même (organic.title), jamais le texte 'organic.title', qui est renvoyé tel quel. Un nom qui n’existe pas est aussi renvoyé tel quel : sur une publication sans article, aiGenerated('description', …) renvoie le mot description. Protégez-le par une condition :
1{%- if organic -%}2{{- aiGenerated('description', null, null, 40, '…', true) -}}3{%- endif -%}8. Filtres#
Les filtres et opérateurs Twig standard (default, first, join, length, trim, replace, date, map, in, ??, ?:, ~) sont documentés dans la documentation Twig. Nonli ajoute ou remplace les filtres suivants. Tous les résultats ci-dessous proviennent du moteur de rendu Nonli.
| Filtre | Effet | Exemple | Résultat |
|---|---|---|---|
upper | Majuscules, accents conservés | 'élan VITAL'|upper | ÉLAN VITAL |
lower | Minuscules | 'élan VITAL'|lower | élan vital |
capitalize | Première lettre en majuscule, le reste inchangé | 'élan VITAL'|capitalize | Élan VITAL |
slugify | Slug d’URL | 'Budget 2027 : ménages'|slugify | budget-2027-menages |
camel | Mots accolés, chacun avec une majuscule | 'budget des ménages'|camel | BudgetDesMénages |
clean | Réduit et retire les espaces superflus, et supprime les espaces autour d’un trait d’union | ' Paris - Lyon '|clean | Paris-Lyon |
ucPhrase | Majuscule à chaque mot, petits mots en minuscules | 'le budget des ménages'|ucPhrase | Le Budget des Ménages |
encode | Encode pour une URL mais conserve les caractères réservés comme &, =, /, ?, # | 'a b&c'|encode | a+b&c |
extractMatch(regex) | Premier groupe capturé, ou null | 'Prix : 10 €'|extractMatch('/([[:digit:]]+)/u') | 10 |
pregReplace(regex, remplacement) | Remplacement par expression régulière | 'Budget 2027'|pregReplace('/[[:digit:]]+/', 'N') | Budget N |
cleanText | Nettoyage typographique : retire les espaces superflus, ajoute les espaces insécables françaises | 'Lire aussi : le budget. '|cleanText | Lire aussi : le budget. (espace insécable avant les deux-points) |
Règles qui évitent les erreurs de rendu :
extractMatchetpregReplaceéchouent quand la valeur estnull. Ajoutez|default('')avant eux :{{ meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') }}.encodene protège pas&,=ni#: ne l’utilisez pas pour construire un paramètre à partir d’une valeur qui peut en contenir.- Préférez les classes POSIX comme
[[:digit:]],[[:space:]]et[[:alpha:]]aux séquences avec barre oblique inverse : elles résistent au copier-coller. Copiez les templates depuis un bloc de code, jamais depuis une ligne de chat ou d’e-mail mise en forme, qui peut perdre des barres obliques inverses.
9. Recettes testées#
Chaque recette ci-dessous a été exécutée avec le moteur Twig de Nonli sur des articles complets, partiels et vides.
Titre (H1 ou titre) suivi de la meta description, avec un lien court seulement là où il est utile. Sur une publication Facebook avec lien, elle renvoie le titre et la description ; sur une photo Facebook, elle ajoute ➡️ [SHORTLINK] ; sur Instagram, elle n’ajoute jamais de lien ; sans article, elle renvoie un texte vide.
1{%- set titre = title1 ?: title -%}2{%- set desc = meta_description ?: description -%}3{{- titre -}}4{%- if desc -%}{{- '\n\n' ~ desc -}}{%- endif -%}5{%- if post_type != 'link' and social_network not in ['instagram', 'tiktok', 'pinterest'] and not hasFirstCommentShortlink() and hasLink() -%}6{{- '\n\n' ~ shortlink_prefix -}}[SHORTLINK]7{%- endif -%}Première phrase de la description, puis la description, puis le titre.
1{%- set source = meta_description ?: description ?: '' -%}2{{- source|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: source ?: title -}}Première phrase du champ éditeur personnalisé, avec repli sur le texte alternatif de l’image, puis sur le titre.
1{{- meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: organic.image_alt|default('') ?: title -}}Texte selon le réseau et le type de publication.
1{%- if social_network == 'instagram' -%}2{{- title -}}3{%- elseif post_type == 'link' -%}4{{- description ?: title -}}5{%- else -%}6{{- title -}}7{%- endif -%}Couleur Smart Image selon la catégorie. Renvoie #E50032 pour la politique, #16A34A pour le sport et #6F819D sinon.
1{%- set categories = organic.category ?? [] -%}2{%- if 'politique' in categories -%}#E500323{%- elseif 'sport' in categories -%}#16A34A4{%- else -%}#6F819D5{%- endif -%}Valeurs de suivi tirées du compte de destination.
1utm_source={{ post.social_account.type|default('social') }}&utm_campaign={{ post.social_account.slug|default('')|encode }}Date de publication dans le fuseau horaire de la rédaction. 2026-10-18T07:30:00.000Z devient 18/10/2026 09:30. Sans date de publication, date afficherait la date du jour : la condition laisse alors le texte vide.
1{%- if organic.published_at|default(null) -%}2{{- organic.published_at|date('d/m/Y H:i', 'Europe/Paris') -}}3{%- endif -%}Hashtags à partir des tags. ['budget', 'impots'] devient #Budget #Impots.
1{{ tags|default([])|map(t => '#' ~ t|camel)|join(' ') }}Garder les mots courts et les nombres avec le mot suivant (pour les titres Smart Image, qui ne coupent jamais une ligne sur une espace insécable). La finale se jouera à guichets fermés garde La, se et à attachés au mot suivant, et 16 septembre ou 3 000 euros restent groupés. Le changement ne s’applique qu’aux nouvelles images générées.
1{%- set titre = organic.title ?? title -%}2{{- titre|pregReplace("/(?<=^|[[:space:]])([[:alpha:]]{1,2}|[[:digit:]]+)[[:space:]]+/u", "$1\xC2\xA0") -}}Twig transforme \xC2\xA0 en espace insécable ; $1 conserve le mot court ou le nombre trouvé.
10. Champs intelligents automatiques et au clic#
Chaque marque a deux réglages : Configuration automatique des champs intelligents et Configuration des champs intelligents au clic sur le bouton. Le bouton de l’éditeur utilise la configuration au clic, et ne revient à la configuration automatique que si aucune configuration au clic n’existe. Un champ réglé sur le template public Vide est effacé quand vous cliquez sur le bouton, car l’éditeur réécrit la valeur générée dans le champ.
Les robots n’utilisent pas ces réglages de marque. Chaque robot a ses propres sources, comme Source du message et Source de la description, qui pointent vers une valeur intégrée (Titre, Description, etc.) ou vers un template Smart Message.
11. Dépannage#
11.1. Mon robot consulte sa source mais ne crée aucune publication#
Un robot actif peut trouver l’article et ne créer aucune publication quand son Smart Message produit un message vide. Cela arrive par exemple quand le template lit un champ facultatif comme meta_custom_publisher et que l’article ne l’a pas. Nonli écarte alors le candidat avant toute publication : un message vide, ou de cinq caractères ou moins une fois le lien court retiré, est écarté, tout comme une publication avec lien dont le titre est vide. Le contrôle du message vide ne s’applique pas aux robots réglés sur Pas de message ni à Pinterest ; le contrôle du titre vide s’applique à tous les robots.
C’est différent d’une publication créée puis refusée par le réseau : celle-ci est visible dans Posts avec un statut d’erreur. Voir Pourquoi mon robot n’a-t-il pas publié cet article ? pour localiser d’abord l’étape.
-
Comparer. Identifiez le robot exact. Comparez quelques messages qu’il a générés avec succès auparavant avec les métadonnées des articles correspondants, et vérifiez ce qui a changé dans sa configuration. Un nom de template ou le HTML actuel de la page ne prouvent pas à eux seuls ce qui fonctionnait. Exécutez le template actuel sur un article éligible représentatif et vérifiez si la variable est absente ou présente mais vide.
-
Corriger. Rétablissez de préférence la source de message précédente quand elle donnait la formulation voulue, ou ajoutez une valeur de repli adaptée au type de la variable :
twig1{{- meta_custom_publisher ?: title -}}Si le titre de l’article correspond à la formulation voulue, ouvrez le robot, réglez Source du message sur Titre, puis cliquez sur Enregistrer. Cela change le texte généré.
-
Périmètre. Changer la source du robot ne concerne que les futures publications de ce robot. Modifier un template Smart Message partagé concerne tous les robots et tous les champs qui l’utilisent. Les publications existantes ne sont jamais réécrites.
-
Vérifier. Attendez la prochaine consultation normale et regardez les articles encore éligibles. Les articles plus anciens ne sont pas rattrapés automatiquement, et une publication manuelle ne prouve pas que le robot est rétabli.
11.2. Surtitre, chapô et première phrase sont des valeurs différentes#
Un surtitre court, le chapô complet et la première phrase d’un texte sont trois choses différentes. Nonli n’a pas de variable dédiée au surtitre : une règle propre au site peut le stocker dans un champ meta_custom_*, et certains articles n’en ont légitimement pas. Ne remplacez pas un surtitre absent par tout le chapô. Affichez le surtitre seulement s’il existe :
1{%- set marker = meta_custom_instagram|default('')|trim -%}2{%- if marker -%}{{- marker ~ ' | ' -}}{%- endif -%}3{{- title -}}Avec un surtitre, le résultat est EXCLUSIF | Budget 2027 : ce qui change ; sans surtitre, seulement le titre. Ici meta_custom_instagram n’est qu’un exemple : utilisez le champ que la règle de votre site remplit réellement.
meta_description (meta description native), meta_custom_publisher (champ personnalisé) et description (description retenue par Nonli) sont des entrées distinctes. Un template qui lit l’une n’est pas affecté quand une autre est corrigée. Mettre à jour un champ collecté ne change ni la source sélectionnée du robot, ni le texte Smart Image, ni les publications déjà générées.
11.3. Les apostrophes cassent mon template#
Dans une chaîne Twig entre apostrophes droites, une apostrophe termine la chaîne. Ce template est refusé à l’enregistrement, avec une erreur comme « Syntaxe du template invalide à la ligne 1 » :
1{{ gpt('Résume l'article en une phrase') }}Échappez l’apostrophe, utilisez une apostrophe typographique, ou utilisez des guillemets doubles :
1{{ gpt('Résume l\'article en une phrase') }}2{{ gpt('Résume l’article en une phrase') }}3{{ gpt("Résume l'article en une phrase") }}Le numéro de ligne indiqué est celui de la ligne du template qui contient l’erreur.
11.4. Une variable reste vide#
- Vérifiez l’orthographe exacte :
organic.category, pascategories;tags, pastag. - Vérifiez que la publication a un article :
organicest vide pour les publications manuelles et sans lien, et les alias ne sont alors pas définis. - Affichez une liste avec
|join(', ')ou testez-la avecin. - Comparez les catégories avec leur forme normalisée (
politique societe, pasPolitique & Société). - Vérifiez les compteurs avec
?? 0: ils sont absents avant la publication.
11.5. Un template peut-il ajouter des collaborateurs Instagram ?#
Non. Les templates ne remplissent que des champs texte, et airtable() renvoie du texte : il peut écrire une @mention, pas créer une collaboration. Ajoutez les collaborateurs dans l’éditeur de publication avec Collaborateurs, ou avec le champ d’API collaborator[] (slug, type) de POST ou PUT /v2.1/posts/bulk. Meta accepte jusqu’à 3 collaborateurs ; voir Comment faire une collaboration Instagram avec Nonli.