Welke Twig-variabelen zijn beschikbaar in Nonli?

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 context gelijk 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.title of post.social_account.type in 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 zijn tags en authors. Een verkeerde naam zoals categories, organic.categories, tag of author geeft 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 |first of |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, zoals 2026-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:

ExpressieWaarde ontbreektWaarde ''Waarde 'A'
{{ x ?? 'B' }}B(leeg)A
{{ x ?: 'B' }}BBA
{{ x|default('B') }}BBA

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.

PadTypeBeschikbaarheidBeschrijvingVoorbeeld
social_networkstringAltijdNetwerk van het doelaccount; facebook als dit onbekend is.instagram
post_typestringAltijdBerichttype; link als dit onbekend is.photo
empty_messagestringAltijdEen lege string, om bewust niets terug te geven.''
shortlink_prefixstringAltijdDe tekst van het merk die vóór een korte link wordt geplaatst.➡️
postobjectAltijdHet bericht dat wordt gemaakt of bewerkt (zie post.*).
organicobjectAltijdHet bronartikel (zie organic.*); een lege lijst [] wanneer het bericht geen artikel heeft.
contextstringAltijdVeld 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.

AliasVolledig voorkeurspadTypeInhoud
titleorganic.titlestringArtikeltitel gekozen door Nonli
descriptionorganic.descriptionstringArtikelbeschrijving gekozen door Nonli
title1organic.html.h1stringEerste H1-kop van de pagina
title2organic.html.h2stringEerste H2-kop van de pagina
head_titleorganic.head.titlestringHTML-tag title, vaak een langere SEO-titel
meta_descriptionorganic.meta.descriptionstringNative metabeschrijving van de pagina
og_titleorganic.meta.open_graph.titlestringOpen Graph-titel
og_descriptionorganic.meta.open_graph.descriptionstringOpen Graph-beschrijving
twitter_titleorganic.meta.twitter.titlestringTwitter Card-titel
twitter_descriptionorganic.meta.twitter.descriptionstringTwitter Card-beschrijving
meta_custom_facebook, meta_custom_twitter, meta_custom_instagram, meta_custom_linkedin, meta_custom_tiktok, meta_custom_pinterestorganic.meta.custom.facebook (enzovoort)stringAangepaste metadata per netwerk, geëxtraheerd door een sitespecifieke regel
meta_custom_publisherorganic.meta.custom.publisherstringAangepast uitgeversveld, geëxtraheerd door een sitespecifieke regel, bijvoorbeeld de eerste alinea van de tekst
meta_custom_rss_titleorganic.meta.custom.rss.titlestringTitel uit het RSS-item
meta_custom_rss_descriptionorganic.meta.custom.rss.descriptionstringBeschrijving uit het RSS-item
authorsorganic.authorlistAuteurs van het artikel
tagsorganic.taglistTags 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.

PadTypeBeschikbaarheidBeschrijvingVoorbeeld
organic.urlstringElk artikelURL van het artikelhttps://www.example.com/politics/budget
organic.canonical_urlstringIndien gedeclareerdCanonieke URLhttps://www.example.com/politics/budget
organic.typestringElk artikelGedetecteerd contenttypearticle
organic.languagestringIndien gedetecteerdTaalcodefr
organic.titlestringDe meeste artikelenTitel gekozen door NonliBudget 2027: what changes
organic.descriptionstringIndien gevondenBeschrijving gekozen door NonliThe government presents its budget.
organic.html.h1 / organic.html.h2stringIndien aanwezigEerste H1- / H2-kopKey measures
organic.head.titlestringIndien aanwezigHTML-tag titleBudget 2027 - Example News
organic.meta.descriptionstringIndien aanwezigNative metabeschrijvingThe government presents its budget.
organic.meta.open_graph.title / .descriptionstringIndien aanwezigOpen Graph-titel / -beschrijvingBudget 2027
organic.meta.open_graph.article.sectionstringIndien aanwezigOpen Graph article:sectionPolitics
organic.meta.twitter.title / .descriptionstringIndien aanwezigTwitter Card-titel / -beschrijvingBudget 2027
organic.meta.custom.*stringSitespecifieke regelAangepaste velden uit de aliastabel
organic.categorylistIndien gevondenGenormaliseerde categorieën, inclusief JSON-LD articleSection['politics', 'economy']
organic.taglistIndien gevondenTags van het artikel['budget', 'taxes']
organic.authorlistIndien gevondenAuteurs van het artikel['Camille Martin']
organic.imagelistIndien gevondenURL's van afbeeldingen op de pagina['https://…/budget.jpg']
organic.image_altstringIndien gevondenAlternatieve tekst van de hoofdafbeeldingThe National Assembly chamber
organic.published_atdateIndien gevondenPublicatiedatum (UTC)2026-10-18T07:30:00.000Z
organic.modified_atdateIndien gevondenDatum van de laatste wijziging (UTC)2026-10-18T09:00:00.000Z
organic.counter.viewnumberZie tellersArtikelweergaven gemeten door Nonli1520

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.

twig
1{%- set categories = organic.category ?? [] -%}
2{%- if 'politique' in categories -%}
3Politics
4{%- 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.

PadTypeBeschikbaarheidBeschrijvingVoorbeeld
post.post_typestringAltijdBerichttypelink
post.messagestringIndien geschrevenHuidig berichtThree ways to save energy.
post.titlestringIndien geschrevenHuidige titelBudget 2027
post.descriptionstringIndien geschrevenHuidige beschrijvingWhat changes for households.
post.authorstringIndien bekendAuteur van de content van het bericht (één tekst, geen lijst)Camille Martin
post.taglistIndien bekendTags van het bericht['budget']
post.languagestringIndien bekendTaalcodefr
post.target_urlstringLinkberichtenDoel-URLhttps://www.example.com/politics/budget
post.short_idstringNa verkortingID van de korte linkaB3xY
post.social_account.typestringAltijdDoelnetwerklinkedin
post.social_account.namestringAltijdAccountnaamExample News
post.social_account.slugstringAltijdSlug van het accountexample-news
post.social_account.external_idstringAltijdID van het account op het netwerk1000000001
post.source.typestringIndien bekendHerkomst van het bericht (bot, handmatig, enzovoort)bot
post.source.bot_titlestringBotberichtenNaam van de bot die het bericht heeft gemaaktPolitics bot
post.source.organic_urlstringArtikelberichtenURL van het bronartikelhttps://www.example.com/politics/budget
post.breaking_news.activebooleanAltijdBreaking-newsmodusfalse
post.schedule.start_datedateIngeplande berichtenGeplande publicatiedatum (UTC)2026-10-19T06:00:00.000Z
post.published_atdateNa publicatiePublicatiedatum (UTC)2026-10-19T06:00:04.000Z
post.comment.messagestringIndien geschrevenTekst van de eerste reactieRead more: [SHORTLINK]
post.counter.*numberZie tellersPrestaties van het bericht42

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 }}.

PadTypeBeschrijving
post.counter.clicknumberKlikken
post.counter.engagementnumberEngagement
post.counter.reachnumberBereik
post.counter.videoViewsnumberVideoweergaven
post.counter.ctrnumberDoorklikratio
post.counter.overperformingnumberScore voor bovengemiddelde prestaties
post.counter.monetizationnumberInkomsten uit contentmonetisering
organic.counter.viewnumberArtikelweergaven (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: h uur, d dag, w week, m maand, y jaar.

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.

twig
1{%- if (post.counter.engagement ?? 0) > (percentile50Engagement7d ?? 0) -%}TOP{%- else -%}NORMAL{%- endif -%}

7. Functies#

FunctieGeeft terugBeschrijving
hasLink()booleantrue wanneer het bericht een link bevat. Controleer dit voordat u [SHORTLINK] schrijft.
hasFirstCommentShortlink()booleantrue wanneer de eerste reactie al [SHORTLINK] bevat.
canPublishPostWithoutSpam()booleantrue wanneer de antispamregels van het account nu nog een linkbericht toestaan.
canPublishCommentWithoutSpam()booleanDezelfde controle voor een reactie met een link.
shouldAddComment(metric)booleanPast 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)stringVat source samen, of kort de tekst in op een woordgrens wanneer justCrop true is.
gpt(prompt, model), claude(…), gemini(…), mistral(…)stringGenereert tekst met de toegangsgegevens van de provider van het merk. Zie AI-berichtgeneratie.
airtable(…)stringLeest 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:

twig
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.

FilterEffectVoorbeeldResultaat
upperHoofdletters, accenten behouden'élan VITAL'|upperÉLAN VITAL
lowerKleine letters'élan VITAL'|lowerélan vital
capitalizeEerste letter hoofdletter, rest ongewijzigd'élan VITAL'|capitalizeÉlan VITAL
slugifyURL-slug'Budget 2027 : ménages'|slugifybudget-2027-menages
camelWoorden aaneengeschreven, elk met hoofdletter'budget des ménages'|camelBudgetDesMénages
cleanVoegt spaties samen, verwijdert spaties aan begin en eind, en verwijdert de spaties rond een koppelteken' Paris - Lyon '|cleanParis-Lyon
ucPhraseHoofdletter aan het begin van elk woord, korte woorden blijven in kleine letters'le budget des ménages'|ucPhraseLe Budget des Ménages
encodeURL-codeert, maar behoudt gereserveerde tekens zoals &, =, /, ?, #'a b&c'|encodea+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
cleanTextTypografische opschoning: verwijdert spaties aan begin en eind, voegt Franse vaste spaties toe'Lire aussi : le budget. '|cleanTextLire aussi : le budget. (vaste spatie vóór de dubbele punt)

Regels die renderfouten voorkomen:

  • extractMatch en pregReplace mislukken wanneer de waarde null is. Voeg er |default('') vóór toe: {{ meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') }}.
  • encode beschermt &, = 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.

twig
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.

twig
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.

twig
1{{- meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: organic.image_alt|default('') ?: title -}}

Tekst per netwerk en berichttype.

twig
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.

twig
1{%- set categories = organic.category ?? [] -%}
2{%- if 'politique' in categories -%}#E50032
3{%- elseif 'sport' in categories -%}#16A34A
4{%- else -%}#6F819D
5{%- endif -%}

Trackingwaarden uit het doelaccount.

twig
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.

twig
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.

twig
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.

twig
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.

  1. 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.

  2. 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:

    twig
    1{{- 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.

    Botinstellingen in Nonli met Message's source ingesteld op Title, naast de knoppen Cancel en Save

    Uitsnede van de botinstellingen: Message's source ingesteld op Title, voordat op Save wordt geklikt.

  3. 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.

  4. 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:

twig
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 sentence behoudt 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:

  1. Controleer wat er is verzameld. Vergelijk op enkele representatieve artikelen description met 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.
  2. 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.
  3. 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.
  4. 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”:

twig
1{{ gpt('Summarize the article's main point') }}

Escape de apostrof, gebruik een typografische apostrof of gebruik dubbele aanhalingstekens:

twig
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, niet categories; tags, niet tag.
  • Controleer of het bericht een artikel heeft: organic is leeg bij handmatige berichten en berichten zonder link, en de aliassen zijn dan ongedefinieerd.
  • Druk een lijst af met |join(', ') of test haar met in.
  • Vergelijk categorieën met hun genormaliseerde vorm (politique societe, niet Politique & 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.

Was dit artikel nuttig?

Plan een persoonlijke demo met ons team.