Smart Message-sjablonen worden geschreven in Twig 3. Deze pagina vermeldt alle variabelen, functies en filters die Nonli in die context ondersteunt, met hun type, wanneer ze kunnen ontbreken en een getest voorbeeld. Om stap voor stap een sjabloon te maken, begint u met Een Smart Message maken.
1. Waar deze context geldt#
Dezelfde context is op twee plaatsen beschikbaar:
- Smart Message-sjablonen, gebruikt door bots, door de lampknop van de berichteditor en door de knop voor de eerste reactie. Ze kunnen het bericht, de titel, de beschrijving, de reactie, de videotitel, de alt-tekst en de titel van het TikTok-anker invullen.
- Dynamische waarden van Smart Image, wanneer een tekst of kleur van Smart Image een Smart Message-sjabloon als bron gebruikt. In dat geval is de variabele
contextgelijk aan'smart_image'. Zie Dynamische kleuren gebruiken in Smart Image.
Dynamische URL-parameters en de dynamische paywall gebruiken ook Twig, maar met een veel kleinere context: een beperkte post (source, social_account, post_type, author, user_id, breaking_news, short_id), referer, de functie isComment(), en tellers en percentielen. organic, de aliassen op het hoogste niveau en de Smart Message-functies hieronder bestaan daar niet.
2. Regels voor namen en typen#
- Gebruik bij voorkeur volledige paden. Schrijf
organic.titleofpost.social_account.typein plaats van een alias op het hoogste niveau. De aliassen blijven ondersteund voor bestaande sjablonen. - Namen zijn in snake_case en volgen de namen van de opgeslagen velden:
canonical_url,published_at,open_graph. - Let op enkelvoud en meervoud. De paden zijn
organic.category,organic.tag,organic.author; de aliassen zijntagsenauthors. Een verkeerde naam zoalscategories,organic.categories,tagofauthorgeeft geen foutmelding: hij levert een lege waarde op. - Typen. Een string is tekst. Een list is een reeks waarden: test deze met
in, lees deze met|firstof|join(', '), en druk hem nooit rechtstreeks af. Een object groepeert andere paden. Daarnaast zijn er getallen, booleans en datums. Datums zijn ISO 8601-strings in UTC, zoals2026-10-18T07:30:00.000Z; formatteer ze met|date. - Ontbreken. Een waarde bestaat alleen wanneer de bron haar levert. Dat hangt af van de herkomst van het bericht (artikel, handmatig bericht, bericht zonder link), het sociale netwerk, het berichttype en de metadata die de scraper op de pagina heeft gevonden. Een ontbrekend
organic-pad levert een lege waarde op; een lege lijst wordt behandeld als ontbrekend.
Gebruik ?? om een ontbrekende waarde of null te vervangen, en ?: of |default() om ook een lege string te vervangen:
| Expressie | Waarde ontbreekt | Waarde '' | Waarde 'A' |
|---|---|---|---|
{{ x ?? 'B' }} | B | (leeg) | A |
{{ x ?: 'B' }} | B | B | A |
{{ x|default('B') }} | B | B | A |
Gebruik na een filter ?: of |default(), nooit ??: {{ x|upper ?? 'B' }} is een syntaxisfout, en het sjabloon wordt geweigerd wanneer u het opslaat.
3. Variabelen op het hoogste niveau#
Deze variabelen zijn in een Smart Message altijd gedefinieerd.
| Pad | Type | Beschikbaarheid | Beschrijving | Voorbeeld |
|---|---|---|---|---|
social_network | string | Altijd | Netwerk van het doelaccount; facebook als dit onbekend is. | instagram |
post_type | string | Altijd | Berichttype; link als dit onbekend is. | photo |
empty_message | string | Altijd | Een lege string, om bewust niets terug te geven. | '' |
shortlink_prefix | string | Altijd | De tekst van het merk die vóór een korte link wordt geplaatst. | ➡️ |
post | object | Altijd | Het bericht dat wordt gemaakt of bewerkt (zie post.*). | |
organic | object | Altijd | Het bronartikel (zie organic.*); een lege lijst [] wanneer het bericht geen artikel heeft. | |
context | string | Altijd | Veld dat wordt gegenereerd: message, title, description, comment, videoTitle, altText, tikTokAnchorTitle, of smart_image wanneer Smart Image het sjabloon rendert. | message |
3.1. Verouderde aliassen#
Wanneer het bericht uit een artikel komt, kopieert Nonli ook enkele artikelvelden naar het hoogste niveau. Deze aliassen zijn gedefinieerd (mogelijk null) zodra er een artikel is, en ongedefinieerd wanneer het bericht er geen heeft. Elk ervan heeft een voorkeurspad.
| Alias | Volledig voorkeurspad | Type | Inhoud |
|---|---|---|---|
title | organic.title | string | Artikeltitel gekozen door Nonli |
description | organic.description | string | Artikelbeschrijving gekozen door Nonli |
title1 | organic.html.h1 | string | Eerste H1-kop van de pagina |
title2 | organic.html.h2 | string | Eerste H2-kop van de pagina |
head_title | organic.head.title | string | HTML-tag title, vaak een langere SEO-titel |
meta_description | organic.meta.description | string | Native metabeschrijving van de pagina |
og_title | organic.meta.open_graph.title | string | Open Graph-titel |
og_description | organic.meta.open_graph.description | string | Open Graph-beschrijving |
twitter_title | organic.meta.twitter.title | string | Twitter Card-titel |
twitter_description | organic.meta.twitter.description | string | Twitter Card-beschrijving |
meta_custom_facebook, meta_custom_twitter, meta_custom_instagram, meta_custom_linkedin, meta_custom_tiktok, meta_custom_pinterest | organic.meta.custom.facebook (enzovoort) | string | Aangepaste metadata per netwerk, geëxtraheerd door een sitespecifieke regel |
meta_custom_publisher | organic.meta.custom.publisher | string | Aangepast uitgeversveld, geëxtraheerd door een sitespecifieke regel, bijvoorbeeld de eerste alinea van de tekst |
meta_custom_rss_title | organic.meta.custom.rss.title | string | Titel uit het RSS-item |
meta_custom_rss_description | organic.meta.custom.rss.description | string | Beschrijving uit het RSS-item |
authors | organic.author | list | Auteurs van het artikel |
tags | organic.tag | list | Tags van het artikel |
Bij een echt artikel bevatten title en title1 vaak dezelfde kop, bevat head_title de langere SEO-titel en begint meta_description vaak met de intro. Elk ervan kan leeg zijn, dus voorzie altijd in een terugvalwaarde.
De keuzes “Meta custom …” van de editor en van de botbronnen komen overeen met deze meta_custom_*-aliassen. Ze worden alleen ingevuld op sites waarvoor Nonli een speciale extractieregel heeft geconfigureerd. Een artikel van een site buiten uw bedrijf toont alleen zijn openbare velden, dus daarvoor ontbreekt organic.counter.view.
4. [object Object],: het bronartikel#
organic bestaat wanneer het bericht uit een artikel komt (bot, URL geplakt in de editor, SDK, RSS). Een handmatig bericht of een bericht zonder link heeft geen artikel: organic is dan een lege lijst en elk organic.*-pad is leeg.
| Pad | Type | Beschikbaarheid | Beschrijving | Voorbeeld |
|---|---|---|---|---|
organic.url | string | Elk artikel | URL van het artikel | https://www.example.com/politics/budget |
organic.canonical_url | string | Indien gedeclareerd | Canonieke URL | https://www.example.com/politics/budget |
organic.type | string | Elk artikel | Gedetecteerd contenttype | article |
organic.language | string | Indien gedetecteerd | Taalcode | fr |
organic.title | string | De meeste artikelen | Titel gekozen door Nonli | Budget 2027: what changes |
organic.description | string | Indien gevonden | Beschrijving gekozen door Nonli | The government presents its budget. |
organic.html.h1 / organic.html.h2 | string | Indien aanwezig | Eerste H1- / H2-kop | Key measures |
organic.head.title | string | Indien aanwezig | HTML-tag title | Budget 2027 - Example News |
organic.meta.description | string | Indien aanwezig | Native metabeschrijving | The government presents its budget. |
organic.meta.open_graph.title / .description | string | Indien aanwezig | Open Graph-titel / -beschrijving | Budget 2027 |
organic.meta.open_graph.article.section | string | Indien aanwezig | Open Graph article:section | Politics |
organic.meta.twitter.title / .description | string | Indien aanwezig | Twitter Card-titel / -beschrijving | Budget 2027 |
organic.meta.custom.* | string | Sitespecifieke regel | Aangepaste velden uit de aliastabel | |
organic.category | list | Indien gevonden | Genormaliseerde categorieën, inclusief JSON-LD articleSection | ['politics', 'economy'] |
organic.tag | list | Indien gevonden | Tags van het artikel | ['budget', 'taxes'] |
organic.author | list | Indien gevonden | Auteurs van het artikel | ['Camille Martin'] |
organic.image | list | Indien gevonden | URL's van afbeeldingen op de pagina | ['https://…/budget.jpg'] |
organic.image_alt | string | Indien gevonden | Alternatieve tekst van de hoofdafbeelding | The National Assembly chamber |
organic.published_at | date | Indien gevonden | Publicatiedatum (UTC) | 2026-10-18T07:30:00.000Z |
organic.modified_at | date | Indien gevonden | Datum van de laatste wijziging (UTC) | 2026-10-18T09:00:00.000Z |
organic.counter.view | number | Zie tellers | Artikelweergaven gemeten door Nonli | 1520 |
4.1. Categorieën en ,[object Object]#
Nonli slaat de JSON-LD-waarde articleSection, en de andere categoriesignalen van de pagina, op in organic.category. Dit is een lijst, geen tekst, en er bestaat geen variabele categories. De waarden worden genormaliseerd: kleine letters, accenten verwijderd, leestekens omgezet in spaties. Zo worden Politique & Société, Économie en Sports > Rugby respectievelijk politique societe, economie en sports rugby. Vergelijk altijd met waarden die u daadwerkelijk bij uw eigen artikelen ziet.
1{%- set categories = organic.category ?? [] -%}2{%- if 'politique' in categories -%}3Politics4{%- endif -%}Eerste categorie, of niets: {{ organic.category|default([])|first|default('') }}
Alle categorieën: {{ organic.category|default([])|join(', ') }}
De ruwe, niet-genormaliseerde Open Graph-sectie blijft beschikbaar als {{ organic.meta.open_graph.article.section ?? '' }}.
5. [object Object],: het bericht#
post beschrijft het bericht dat wordt gemaakt of bewerkt. Velden worden stapsgewijs ingevuld: een veld dat wordt gegenereerd, is nog leeg terwijl zijn eigen sjabloon wordt gerenderd.
| Pad | Type | Beschikbaarheid | Beschrijving | Voorbeeld |
|---|---|---|---|---|
post.post_type | string | Altijd | Berichttype | link |
post.message | string | Indien geschreven | Huidig bericht | Three ways to save energy. |
post.title | string | Indien geschreven | Huidige titel | Budget 2027 |
post.description | string | Indien geschreven | Huidige beschrijving | What changes for households. |
post.author | string | Indien bekend | Auteur van de content van het bericht (één tekst, geen lijst) | Camille Martin |
post.tag | list | Indien bekend | Tags van het bericht | ['budget'] |
post.language | string | Indien bekend | Taalcode | fr |
post.target_url | string | Linkberichten | Doel-URL | https://www.example.com/politics/budget |
post.short_id | string | Na verkorting | ID van de korte link | aB3xY |
post.social_account.type | string | Altijd | Doelnetwerk | linkedin |
post.social_account.name | string | Altijd | Accountnaam | Example News |
post.social_account.slug | string | Altijd | Slug van het account | example-news |
post.social_account.external_id | string | Altijd | ID van het account op het netwerk | 1000000001 |
post.source.type | string | Indien bekend | Herkomst van het bericht (bot, handmatig, enzovoort) | bot |
post.source.bot_title | string | Botberichten | Naam van de bot die het bericht heeft gemaakt | Politics bot |
post.source.organic_url | string | Artikelberichten | URL van het bronartikel | https://www.example.com/politics/budget |
post.breaking_news.active | boolean | Altijd | Breaking-newsmodus | false |
post.schedule.start_date | date | Ingeplande berichten | Geplande publicatiedatum (UTC) | 2026-10-19T06:00:00.000Z |
post.published_at | date | Na publicatie | Publicatiedatum (UTC) | 2026-10-19T06:00:04.000Z |
post.comment.message | string | Indien geschreven | Tekst van de eerste reactie | Read more: [SHORTLINK] |
post.counter.* | number | Zie tellers | Prestaties van het bericht | 42 |
Interne ID's en technische velden (ID's van gebruiker, bedrijf en merk, e-mailadres van het account, webhook-URL, statussen, fouttraces, ruwe tellers) zijn bewust uitgesloten: ze vormen geen stabiele openbare interface en mogen niet in gepubliceerde tekst verschijnen. post.user_id is alleen gedocumenteerd voor URL-parameters.
6. Tellers en percentielen#
Een teller wordt alleen geladen wanneer het sjabloon hem expliciet noemt, bijvoorbeeld post.counter.click. Hij ontbreekt wanneer de meetwaarde nog niet bestaat, wat altijd het geval is bij een bericht dat nog niet is gepubliceerd. Schrijf altijd een terugvalwaarde: {{ post.counter.click ?? 0 }}.
| Pad | Type | Beschrijving |
|---|---|---|
post.counter.click | number | Klikken |
post.counter.engagement | number | Engagement |
post.counter.reach | number | Bereik |
post.counter.videoViews | number | Videoweergaven |
post.counter.ctr | number | Doorklikratio |
post.counter.overperforming | number | Score voor bovengemiddelde prestaties |
post.counter.monetization | number | Inkomsten uit contentmonetisering |
organic.counter.view | number | Artikelweergaven (alleen wanneer het bericht een artikel heeft) |
Een percentielvariabele vergelijkt een bericht met de berichten die hetzelfde account in een bepaalde periode heeft gepubliceerd, breaking news uitgezonderd. De naam bestaat uit percentile + percentiel (1 of 2 cijfers) + meetwaarde + duur (1 of 2 cijfers) + eenheid:
- meetwaarden:
Click,Engagement,Reach,VideoViews,Ctr,Overperforming,Monetization; - eenheden:
huur,ddag,wweek,mmaand,yjaar.
percentile50Click1d is de mediaan van de klikken over 1 dag; percentile90Engagement7d het 90e percentiel van het engagement over 7 dagen. De waarde is null zonder gegevens en wordt 30 minuten in de cache bewaard.
1{%- if (post.counter.engagement ?? 0) > (percentile50Engagement7d ?? 0) -%}TOP{%- else -%}NORMAL{%- endif -%}7. Functies#
| Functie | Geeft terug | Beschrijving |
|---|---|---|
hasLink() | boolean | true wanneer het bericht een link bevat. Controleer dit voordat u [SHORTLINK] schrijft. |
hasFirstCommentShortlink() | boolean | true wanneer de eerste reactie al [SHORTLINK] bevat. |
canPublishPostWithoutSpam() | boolean | true wanneer de antispamregels van het account nu nog een linkbericht toestaan. |
canPublishCommentWithoutSpam() | boolean | Dezelfde controle voor een reactie met een link. |
shouldAddComment(metric) | boolean | Past de geconfigureerde steekproefregel voor reacties toe; de optionele meetwaarde geeft aan welke teller wordt gebruikt. Het resultaat kan variëren. |
aiGenerated(source, min, target, max, ending, justCrop) | string | Vat source samen, of kort de tekst in op een woordgrens wanneer justCrop true is. |
gpt(prompt, model), claude(…), gemini(…), mistral(…) | string | Genereert tekst met de toegangsgegevens van de provider van het merk. Zie AI-berichtgeneratie. |
airtable(…) | string | Leest een waarde uit een gekoppelde Airtable-base. Geeft alleen tekst terug. |
aiGenerated() herkent alleen namen op het hoogste niveau die als tekst worden opgegeven. Geef 'description' of de waarde zelf door (organic.title), nooit de tekst 'organic.title', die letterlijk wordt teruggegeven. Een naam die niet bestaat, wordt ook letterlijk teruggegeven: bij een bericht zonder artikel geeft aiGenerated('description', …) het woord description terug. Bescherm de aanroep met een voorwaarde:
1{%- if organic -%}2{{- aiGenerated('description', null, null, 40, '…', true) -}}3{%- endif -%}8. Filters#
Standaard Twig-filters en -operatoren (default, first, join, length, trim, replace, date, map, in, ??, ?:, ~) zijn gedocumenteerd in de Twig-documentatie. Nonli voegt de volgende filters toe of vervangt ze. Alle onderstaande resultaten komen uit de renderer van Nonli.
| Filter | Effect | Voorbeeld | Resultaat |
|---|---|---|---|
upper | Hoofdletters, accenten behouden | 'élan VITAL'|upper | ÉLAN VITAL |
lower | Kleine letters | 'élan VITAL'|lower | élan vital |
capitalize | Eerste letter hoofdletter, rest ongewijzigd | 'élan VITAL'|capitalize | Élan VITAL |
slugify | URL-slug | 'Budget 2027 : ménages'|slugify | budget-2027-menages |
camel | Woorden aaneengeschreven, elk met hoofdletter | 'budget des ménages'|camel | BudgetDesMénages |
clean | Voegt spaties samen, verwijdert spaties aan begin en eind, en verwijdert de spaties rond een koppelteken | ' Paris - Lyon '|clean | Paris-Lyon |
ucPhrase | Hoofdletter aan het begin van elk woord, korte woorden blijven in kleine letters | 'le budget des ménages'|ucPhrase | Le Budget des Ménages |
encode | URL-codeert, maar behoudt gereserveerde tekens zoals &, =, /, ?, # | 'a b&c'|encode | a+b&c |
extractMatch(regex) | Eerste capturegroep, of null | 'Price: 10 €'|extractMatch('/([[:digit:]]+)/u') | 10 |
pregReplace(regex, replacement) | Vervanging met een reguliere expressie | 'Budget 2027'|pregReplace('/[[:digit:]]+/', 'N') | Budget N |
cleanText | Typografische opschoning: verwijdert spaties aan begin en eind, voegt Franse vaste spaties toe | 'Lire aussi : le budget. '|cleanText | Lire aussi : le budget. (vaste spatie vóór de dubbele punt) |
Regels die renderfouten voorkomen:
extractMatchenpregReplacemislukken wanneer de waardenullis. Voeg er|default('')vóór toe:{{ meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') }}.encodebeschermt&,=of#niet: gebruik het niet om een parameter te bouwen uit een waarde die deze tekens kan bevatten.- Gebruik bij voorkeur POSIX-klassen zoals
[[:digit:]],[[:space:]]en[[:alpha:]]in plaats van reeksen met backslashes: die blijven intact bij kopiëren en plakken. Kopieer sjablonen uit een codeblok, nooit uit een weergegeven chat- of e-mailregel, waarin backslashes kunnen wegvallen.
9. Geteste recepten#
Elk recept hieronder is gerenderd met de Twig-engine van Nonli op volledige, gedeeltelijke en lege artikelfixtures.
Kop (H1 of titel) gevolgd door de metabeschrijving, met alleen waar nodig een korte link. Bij een Facebook-linkbericht geeft het de kop en de beschrijving terug; bij een Facebook-foto voegt het ➡️ [SHORTLINK] toe; op Instagram voegt het nooit een link toe; zonder artikel geeft het een lege tekst terug.
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 -%}Eerste zin van de beschrijving, anders de beschrijving, anders de titel.
1{%- set source = meta_description ?: description ?: '' -%}2{{- source|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: source ?: title -}}Eerste zin van het aangepaste uitgeversveld, met als terugvalwaarde de alt-tekst van de afbeelding en daarna de titel.
1{{- meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: organic.image_alt|default('') ?: title -}}Tekst per netwerk en berichttype.
1{%- if social_network == 'instagram' -%}2{{- title -}}3{%- elseif post_type == 'link' -%}4{{- description ?: title -}}5{%- else -%}6{{- title -}}7{%- endif -%}Smart Image-kleur per categorie. Geeft #E50032 terug voor politiek, #16A34A voor sport en anders #6F819D.
1{%- set categories = organic.category ?? [] -%}2{%- if 'politique' in categories -%}#E500323{%- elseif 'sport' in categories -%}#16A34A4{%- else -%}#6F819D5{%- endif -%}Trackingwaarden uit het doelaccount.
1utm_source={{ post.social_account.type|default('social') }}&utm_campaign={{ post.social_account.slug|default('')|encode }}Publicatiedatum in de tijdzone van de redactie. 2026-10-18T07:30:00.000Z wordt 18/10/2026 09:30. Zonder publicatiedatum zou date de huidige datum afdrukken; daarom laat de voorwaarde de tekst in dat geval leeg.
1{%- if organic.published_at|default(null) -%}2{{- organic.published_at|date('d/m/Y H:i', 'Europe/Paris') -}}3{%- endif -%}Hashtags uit tags. ['budget', 'impots'] wordt #Budget #Impots.
1{{ tags|default([])|map(t => '#' ~ t|camel)|join(' ') }}Korte woorden en getallen bij het volgende woord houden (voor Smart Image-titels, die nooit een regel afbreken op een vaste spatie). La finale se jouera à guichets fermés houdt La, se en à vast aan het volgende woord, en 16 septembre of 3 000 euros blijven bij elkaar. De wijziging geldt alleen voor nieuw gegenereerde afbeeldingen.
1{%- set titre = organic.title ?? title -%}2{{- titre|pregReplace("/(?<=^|[[:space:]])([[:alpha:]]{1,2}|[[:digit:]]+)[[:space:]]+/u", "$1\xC2\xA0") -}}Twig zet \xC2\xA0 om in een vaste spatie; $1 behoudt het korte woord of getal dat is gevonden.
10. Automatische slimme velden en slimme velden op klik#
Elk merk heeft twee instellingen: Automatic configuration of smart fields (automatische configuratie van slimme velden) en Smart field configuration at the click of the button (configuratie van slimme velden met een klik op de knop). De knop in de editor gebruikt de configuratie op klik en valt alleen terug op de automatische configuratie wanneer er geen configuratie op klik bestaat. Een veld dat is ingesteld op het openbare sjabloon Empty wordt leeggemaakt wanneer u op de knop klikt, omdat de editor de gegenereerde waarde terugschrijft in het veld.
Bots gebruiken deze merkinstellingen niet. Elke bot heeft zijn eigen bronnen, zoals Message's source (bron van het bericht) en Description's source (bron van de beschrijving), die verwijzen naar een ingebouwde waarde (Title, Description, enzovoort) of naar een Smart Message-sjabloon.
11. Probleemoplossing#
11.1. Mijn bot raadpleegt zijn bron, maar maakt geen bericht aan#
Een actieve bot kan het artikel vinden en toch geen bericht aanmaken wanneer zijn Smart Message een leeg bericht rendert. Dat gebeurt bijvoorbeeld wanneer het sjabloon een optioneel veld zoals meta_custom_publisher leest en het artikel dat veld niet heeft. Nonli filtert de kandidaat dan vóór elke publicatie: een bericht dat leeg is, of vijf tekens of minder telt zodra de korte link is verwijderd, wordt verworpen, net als een linkbericht met een lege titel. De controle op lege berichten geldt niet voor bots die zijn ingesteld op No message of voor Pinterest; de controle op een lege titel geldt voor elke bot.
Dit is iets anders dan een bericht dat is aangemaakt en daarna op het netwerk is mislukt: zo'n bericht is zichtbaar in Posts met een foutstatus. Zie Waarom heeft mijn bot dit artikel niet gepubliceerd? om eerst de fase te bepalen.
-
Vergelijk. Bepaal om welke bot het precies gaat. Vergelijk enkele berichten die hij eerder met succes heeft gegenereerd met de metadata van de bijbehorende artikelen, en controleer wat er in zijn configuratie is veranderd. Een sjabloonnaam of alleen de huidige HTML van de pagina bewijst niet wat eerder werkte. Render het huidige sjabloon op een representatief geschikt artikel en controleer of de variabele ontbreekt of aanwezig maar leeg is.
-
Herstel. Zet bij voorkeur de vorige berichtbron terug als die de gewenste formulering gaf, of voeg een terugvalwaarde toe die past bij het type variabele:
twig1{{- meta_custom_publisher ?: title -}}Als de artikeltitel overeenkomt met de gewenste formulering, open dan de bot, stel Message's source in op Title en klik daarna op Save. Hierdoor verandert de gegenereerde tekst.

Uitsnede van de botinstellingen: Message's source ingesteld op Title, voordat op Save wordt geklikt.
-
Reikwijdte. Het wijzigen van de bron van de bot heeft alleen invloed op de toekomstige berichten van die bot. Het bewerken van een gedeeld Smart Message-sjabloon heeft invloed op elke bot en elk veld dat het gebruikt. Bestaande berichten worden nooit herschreven.
-
Controleer. Wacht op de volgende normale raadpleging en bekijk artikelen die nog in aanmerking komen. Oudere artikelen worden niet automatisch ingehaald, en een handmatig bericht bewijst niet dat de bot weer werkt.
11.2. Korte markering, intro en eerste zin zijn verschillende waarden#
Een korte redactionele markering (ook wel bovenkop genoemd), de volledige intro en de eerste zin van een tekst zijn drie verschillende dingen. Nonli heeft geen aparte variabele voor de korte markering: een sitespecifieke regel kan haar opslaan in een meta_custom_*-veld, en sommige artikelen hebben er terecht geen. Vervang een ontbrekende markering niet door de hele intro. Toon de markering alleen wanneer ze bestaat:
1{%- set marker = meta_custom_instagram|default('')|trim -%}2{%- if marker -%}{{- marker ~ ' | ' -}}{%- endif -%}3{{- title -}}Met een markering is het resultaat EXCLUSIVE | Budget 2027: what changes; zonder markering alleen de titel. meta_custom_instagram is hier slechts een voorbeeld: gebruik het veld dat uw siteregel daadwerkelijk invult.
meta_description (native metabeschrijving), meta_custom_publisher (aangepast veld) en description (beschrijving gekozen door Nonli) zijn afzonderlijke invoerwaarden. Een sjabloon dat er één leest, wordt niet beïnvloed wanneer een andere wordt gecorrigeerd. Het bijwerken van een verzameld veld verandert niets aan de geselecteerde botbron, de Smart Image-tekst of al gegenereerde berichten.
11.3. Volledige verzamelde beschrijving of eerste zin van de intro#
Vier waarden worden vaak door elkaar gehaald wanneer een bot zijn bericht samenstelt:
- Verzamelde beschrijving (
description,organic.description): de artikelbeschrijving die Nonli heeft verzameld, ongewijzigd gebruikt en niet in zinnen opgesplitst. Nonli haalt haar eerst uit de gestructureerde gegevens van het artikel, anders uit Open Graph, daarna Twitter Card en daarna de native metabeschrijving. Wanneer ze uit deze tags komt, behoudt ze hun inkorting tot 500 tekens. De beschrijving van het RSS-item (meta_custom_rss_description) wordt nooit als verzamelde beschrijving gebruikt. - Native metadata (
meta_description,og_description,twitter_description): de beschrijvingen die in de metatags van de pagina zijn gedeclareerd. Nonli kort elk ervan bij het verzamelen in tot 500 tekens. Deze limiet geldt alleen voor deze drie velden: een verzamelde beschrijving die uit gestructureerde gegevens komt, wordt niet ingekort. - Eerste zin: een sjabloon zoals
Template: [public] Message from first standfirst sentencebehoudt bewust één zin en verwerkt de link via zijn eigen[SHORTLINK]-markering. - Korte markering: een optioneel veld dat in de vorige sectie is beschreven en dat sommige artikelen niet hebben.
Noch een sjabloonnaam noch de geselecteerde bron bewijst dat de verzamelde beschrijving uw volledige intro is. Om de volledige verzamelde beschrijving te plaatsen in plaats van de eerste zin ervan:
- Controleer wat er is verzameld. Vergelijk op enkele representatieve artikelen
descriptionmet de volledige intro die u verwacht. Ontbreekt deze, is ze afgekapt of bevat ze broodtekst in plaats van de intro, vraag support dan eerst de verzameling te corrigeren en te controleren. Het wijzigen van de bron van de bot kan geen tekst terughalen die niet is verzameld. - Wijzig de bron. Open de bot, stel Message's source in op Description en klik daarna op Save. Verwar dit niet met Description's source, die het beschrijvingsveld van het bericht invult en niet de tekst ervan.
- Controleer het volgende bericht. Bekijk het volgende bericht dat de bot genereert: de volledige tekst, waar de link verschijnt en de tekstlimiet van elk doelnetwerk. Een volledige beschrijving kan lang zijn, en door haar te kiezen is niet gegarandeerd dat elk netwerk de hele tekst accepteert. Nonli verwerkt de korte link nog steeds: bij een bericht zonder native link voegt zij de korte link direct na de gegenereerde tekst toe, vóór een eventueel achtervoegsel van de bot en hashtags, tenzij de eerste reactie hem al bevat. Link- en deelberichten krijgen geen toegevoegde korte link, behalve linkberichten op X en Mastodon, waar hij helemaal aan het einde wordt toegevoegd. Berichten op Instagram en TikTok krijgen geen korte link. Een sjabloon voor de eerste zin kan de tekst inkorten of de link per netwerk anders plaatsen, dus verwacht niet hetzelfde resultaat.
- Reikwijdte. De wijziging geldt alleen voor de berichten die deze bot vanaf nu genereert. Bestaande berichten, andere bots en gedeelde Smart Message-sjablonen blijven ongewijzigd, en er wordt geen ouder artikel geïmporteerd of opnieuw gepubliceerd.
11.4. Apostrofs breken mijn sjabloon#
In een Twig-string tussen enkele aanhalingstekens beëindigt een apostrof de string. Dit sjabloon wordt geweigerd wanneer u het opslaat, met een foutmelding zoals “Invalid template syntax at line 1”:
1{{ gpt('Summarize the article's main point') }}Escape de apostrof, gebruik een typografische apostrof of gebruik dubbele aanhalingstekens:
1{{ gpt('Summarize the article\'s main point') }}2{{ gpt('Summarize the article’s main point') }}3{{ gpt("Summarize the article's main point") }}Het gemelde regelnummer is de regel van het sjabloon waarin de fout staat.
11.5. Een variabele blijft leeg#
- Controleer de exacte spelling:
organic.category, nietcategories;tags, niettag. - Controleer of het bericht een artikel heeft:
organicis leeg bij handmatige berichten en berichten zonder link, en de aliassen zijn dan ongedefinieerd. - Druk een lijst af met
|join(', ')of test haar metin. - Vergelijk categorieën met hun genormaliseerde vorm (
politique societe, nietPolitique & Société). - Controleer tellers met
?? 0: ze ontbreken vóór publicatie.
11.6. Kan een sjabloon Instagram-medewerkers toevoegen?#
Nee. Sjablonen vullen alleen tekstvelden in, en airtable() geeft tekst terug: het kan een @-vermelding schrijven, maar geen samenwerking aanmaken. Voeg medewerkers toe in de berichteditor met Collaborators, of met het API-veld collaborator[] (slug, type) van POST of PUT /v2.1/posts/bulk. Meta accepteert maximaal 3 medewerkers; zie Een Instagram-samenwerking maken met Nonli.