Welche Twig-Variablen gibt es in Nonli?

Auch verfügbar in:EnglishFrançaisEspañol

Smart-Message-Vorlagen werden in Twig 3 geschrieben. Diese Seite listet jede Variable, Funktion und jeden Filter auf, die Nonli in diesem Kontext unterstützt, mit Typ, den Fällen, in denen sie fehlen kann, und einem getesteten Beispiel. Um eine Vorlage Schritt für Schritt zu erstellen, beginnen Sie mit So erstellen Sie eine Smart Message.

1. Wo dieser Kontext gilt#

Derselbe Kontext steht an zwei Stellen zur Verfügung:

  • Smart-Message-Vorlagen, die von Bots, von der Glühbirnen-Schaltfläche des Beitragseditors und von der Schaltfläche für den ersten Kommentar verwendet werden. Sie können Nachricht, Titel, Beschreibung, Kommentar, Videotitel, Alternativtext und den Titel des TikTok-Anchors füllen.
  • Dynamische Smart-Image-Werte, wenn ein Smart-Image-Text oder eine -Farbe eine Smart-Message-Vorlage als Quelle verwendet. In diesem Fall ist die Variable context gleich 'smart_image'. Siehe So verwenden Sie dynamische Farben in Smart Image.

Dynamische URL-Parameter und die dynamische Paywall verwenden ebenfalls Twig, jedoch mit einem deutlich kleineren Kontext: einem eingeschränkten post (source, social_account, post_type, author, user_id, breaking_news, short_id), referer, der Funktion isComment() sowie Zählern und Perzentilen. organic, die Aliase auf oberster Ebene und die unten aufgeführten Smart-Message-Funktionen gibt es dort nicht.

2. Regeln für Namen und Typen#

  • Bevorzugen Sie vollständige Pfade. Schreiben Sie organic.title oder post.social_account.type statt eines Alias auf oberster Ebene. Die Aliase bleiben für bestehende Vorlagen weiterhin unterstützt.
  • Namen sind in snake_case und folgen den gespeicherten Feldnamen: canonical_url, published_at, open_graph.
  • Beachten Sie Singular und Plural. Die Pfade lauten organic.category, organic.tag, organic.author; die Aliase sind tags und authors. Ein falscher Name wie categories, organic.categories, tag oder author löst keinen Fehler aus: Er ergibt einen leeren Wert.
  • Typen. Ein string ist ein Text. Eine list ist eine Folge von Werten: Prüfen Sie sie mit in, lesen Sie sie mit |first oder |join(', ') und geben Sie sie niemals direkt aus. Ein object fasst andere Pfade zusammen. Dazu kommen Zahlen, Wahrheitswerte und Datumsangaben. Datumsangaben sind ISO-8601-Zeichenfolgen in UTC wie 2026-10-18T07:30:00.000Z; formatieren Sie sie mit |date.
  • Fehlende Werte. Ein Wert existiert nur, wenn die Quelle ihn liefert. Das hängt von der Herkunft des Beitrags (Artikel, manueller Beitrag, Beitrag ohne Link), dem sozialen Netzwerk, dem Beitragstyp und den Metadaten ab, die der Scraper auf der Seite gefunden hat. Ein fehlender organic-Pfad ergibt einen leeren Wert; eine leere Liste gilt als fehlend.

Verwenden Sie ??, um einen fehlenden oder null-Wert zu ersetzen, und ?: oder |default(), um auch eine leere Zeichenfolge zu ersetzen:

AusdruckWert fehltWert ''Wert 'A'
{{ x ?? 'B' }}B(leer)A
{{ x ?: 'B' }}BBA
{{ x|default('B') }}BBA

Verwenden Sie nach einem Filter ?: oder |default(), niemals ??: {{ x|upper ?? 'B' }} ist ein Syntaxfehler, und die Vorlage wird beim Speichern abgelehnt.

3. Variablen auf oberster Ebene#

Diese Variablen sind in einer Smart Message immer definiert.

PfadTypVerfügbarkeitBeschreibungBeispiel
social_networkstringImmerNetzwerk des Zielkontos; facebook, wenn unbekannt.instagram
post_typestringImmerBeitragstyp; link, wenn unbekannt.photo
empty_messagestringImmerEine leere Zeichenfolge, um bewusst nichts zurückzugeben.''
shortlink_prefixstringImmerDer Text der Marke, der vor einem Shortlink steht.➡️
postobjectImmerDer Beitrag, der erstellt oder bearbeitet wird (siehe post.*).
organicobjectImmerDer Quellartikel (siehe organic.*); eine leere Liste [], wenn der Beitrag keinen Artikel hat.
contextstringImmerDas Feld, das gerade generiert wird: message, title, description, comment, videoTitle, altText, tikTokAnchorTitle oder smart_image, wenn Smart Image die Vorlage rendert.message

3.1. Veraltete Aliase#

Stammt der Beitrag von einem Artikel, kopiert Nonli außerdem einige Artikelfelder auf die oberste Ebene. Diese Aliase sind definiert (möglicherweise null), sobald ein Artikel existiert, und nicht definiert, wenn der Beitrag keinen hat. Jeder hat einen bevorzugten vollständigen Pfad.

AliasBevorzugter vollständiger PfadTypInhalt
titleorganic.titlestringVon Nonli gewählter Artikeltitel
descriptionorganic.descriptionstringVon Nonli gewählte Artikelbeschreibung
title1organic.html.h1stringErste H1-Überschrift der Seite
title2organic.html.h2stringErste H2-Überschrift der Seite
head_titleorganic.head.titlestringHTML-title-Tag, oft ein längerer SEO-Titel
meta_descriptionorganic.meta.descriptionstringNative Meta-Beschreibung der Seite
og_titleorganic.meta.open_graph.titlestringOpen-Graph-Titel
og_descriptionorganic.meta.open_graph.descriptionstringOpen-Graph-Beschreibung
twitter_titleorganic.meta.twitter.titlestringTwitter-Card-Titel
twitter_descriptionorganic.meta.twitter.descriptionstringTwitter-Card-Beschreibung
meta_custom_facebook, meta_custom_twitter, meta_custom_instagram, meta_custom_linkedin, meta_custom_tiktok, meta_custom_pinterestorganic.meta.custom.facebook (und so weiter)stringBenutzerdefinierte Metadaten je Netzwerk, die durch eine websitespezifische Regel extrahiert werden
meta_custom_publisherorganic.meta.custom.publisherstringBenutzerdefiniertes Verlagsfeld, das durch eine websitespezifische Regel extrahiert wird, zum Beispiel der erste Absatz des Textes
meta_custom_rss_titleorganic.meta.custom.rss.titlestringTitel aus dem RSS-Eintrag
meta_custom_rss_descriptionorganic.meta.custom.rss.descriptionstringBeschreibung aus dem RSS-Eintrag
authorsorganic.authorlistAutoren des Artikels
tagsorganic.taglistTags des Artikels

Bei einem echten Artikel enthalten title und title1 oft dieselbe Schlagzeile, head_title den längeren SEO-Titel und meta_description beginnt oft mit dem Vorspann. Jeder von ihnen kann leer sein, planen Sie daher immer eine Rückfalloption ein.

Die Auswahlmöglichkeiten „Meta custom …“ im Editor und in den Bot-Quellen entsprechen diesen meta_custom_*-Aliasen. Sie werden nur auf Websites befüllt, auf denen Nonli eine eigene Extraktionsregel eingerichtet hat. Ein Artikel von einer Website außerhalb Ihres Unternehmens stellt nur seine öffentlichen Felder bereit, daher fehlt organic.counter.view dafür.

4. [object Object],: der Quellartikel#

organic existiert, wenn der Beitrag von einem Artikel stammt (Bot, im Editor eingefügte URL, SDK, RSS). Ein manueller Beitrag oder ein Beitrag ohne Link hat keinen Artikel: organic ist dann eine leere Liste und jeder organic.*-Pfad ist leer.

PfadTypVerfügbarkeitBeschreibungBeispiel
organic.urlstringJeder ArtikelArtikel-URLhttps://www.example.com/politics/budget
organic.canonical_urlstringWenn angegebenKanonische URLhttps://www.example.com/politics/budget
organic.typestringJeder ArtikelErkannter Inhaltstyparticle
organic.languagestringWenn erkanntSprachcodefr
organic.titlestringDie meisten ArtikelVon Nonli gewählter TitelBudget 2027: what changes
organic.descriptionstringWenn gefundenVon Nonli gewählte BeschreibungThe government presents its budget.
organic.html.h1 / organic.html.h2stringWenn vorhandenErste H1- / H2-ÜberschriftKey measures
organic.head.titlestringWenn vorhandenHTML-title-TagBudget 2027 - Example News
organic.meta.descriptionstringWenn vorhandenNative Meta-BeschreibungThe government presents its budget.
organic.meta.open_graph.title / .descriptionstringWenn vorhandenOpen-Graph-Titel / -BeschreibungBudget 2027
organic.meta.open_graph.article.sectionstringWenn vorhandenOpen Graph article:sectionPolitics
organic.meta.twitter.title / .descriptionstringWenn vorhandenTwitter-Card-Titel / -BeschreibungBudget 2027
organic.meta.custom.*stringWebsitespezifische RegelBenutzerdefinierte Felder aus der Alias-Tabelle
organic.categorylistWenn gefundenNormalisierte Kategorien, einschließlich JSON-LD articleSection['politics', 'economy']
organic.taglistWenn gefundenTags des Artikels['budget', 'taxes']
organic.authorlistWenn gefundenAutoren des Artikels['Camille Martin']
organic.imagelistWenn gefundenAuf der Seite gefundene Bild-URLs['https://…/budget.jpg']
organic.image_altstringWenn gefundenAlternativtext des HauptbildsThe National Assembly chamber
organic.published_atdateWenn gefundenVeröffentlichungsdatum (UTC)2026-10-18T07:30:00.000Z
organic.modified_atdateWenn gefundenDatum der letzten Änderung (UTC)2026-10-18T09:00:00.000Z
organic.counter.viewnumberSiehe ZählerVon Nonli gemessene Artikelaufrufe1520

4.1. Kategorien und ,[object Object]#

Nonli speichert den JSON-LD-Wert articleSection und die anderen Kategoriesignale der Seite in organic.category. Das ist eine Liste, kein Text, und es gibt keine Variable categories. Die Werte sind normalisiert: Kleinbuchstaben, Akzente entfernt, Satzzeichen in Leerzeichen umgewandelt. Zum Beispiel werden Politique & Société, Économie und Sports > Rugby zu politique societe, economie und sports rugby. Vergleichen Sie immer mit Werten, die Sie tatsächlich bei Ihren eigenen Artikeln gesehen haben.

twig
1{%- set categories = organic.category ?? [] -%}
2{%- if 'politique' in categories -%}
3Politics
4{%- endif -%}

Erste Kategorie oder nichts: {{ organic.category|default([])|first|default('') }}

Alle Kategorien: {{ organic.category|default([])|join(', ') }}

Der rohe, nicht normalisierte Open-Graph-Abschnitt bleibt als {{ organic.meta.open_graph.article.section ?? '' }} verfügbar.

5. [object Object],: der Beitrag#

post beschreibt den Beitrag, der erstellt oder bearbeitet wird. Die Felder werden nach und nach befüllt: Ein Feld, das gerade generiert wird, ist noch leer, während seine eigene Vorlage gerendert wird.

PfadTypVerfügbarkeitBeschreibungBeispiel
post.post_typestringImmerBeitragstyplink
post.messagestringWenn geschriebenAktuelle NachrichtThree ways to save energy.
post.titlestringWenn geschriebenAktueller TitelBudget 2027
post.descriptionstringWenn geschriebenAktuelle BeschreibungWhat changes for households.
post.authorstringWenn bekanntAutor des Beitragsinhalts (ein Text, keine Liste)Camille Martin
post.taglistWenn bekanntTags des Beitrags['budget']
post.languagestringWenn bekanntSprachcodefr
post.target_urlstringLink-BeiträgeZiel-URLhttps://www.example.com/politics/budget
post.short_idstringNach dem KürzenKennung des ShortlinksaB3xY
post.social_account.typestringImmerZielnetzwerklinkedin
post.social_account.namestringImmerKontonameExample News
post.social_account.slugstringImmerSlug des Kontosexample-news
post.social_account.external_idstringImmerKennung des Kontos im Netzwerk1000000001
post.source.typestringWenn bekanntHerkunft des Beitrags (Bot, manuell und so weiter)bot
post.source.bot_titlestringBot-BeiträgeName des Bots, der den Beitrag erstellt hatPolitics bot
post.source.organic_urlstringArtikelbeiträgeURL des Quellartikelshttps://www.example.com/politics/budget
post.breaking_news.activebooleanImmerEilmeldungsmodusfalse
post.schedule.start_datedateGeplante BeiträgeGeplantes Veröffentlichungsdatum (UTC)2026-10-19T06:00:00.000Z
post.published_atdateNach der VeröffentlichungVeröffentlichungsdatum (UTC)2026-10-19T06:00:04.000Z
post.comment.messagestringWenn geschriebenText des ersten KommentarsRead more: [SHORTLINK]
post.counter.*numberSiehe ZählerLeistung des Beitrags42

Interne Kennungen und technische Felder (Nutzer-, Unternehmens- und Marken-IDs, E-Mail-Adresse des Kontos, Webhook-URL, Status, Fehlerprotokolle, Rohzähler) sind bewusst ausgeschlossen: Sie sind keine stabile öffentliche Schnittstelle und dürfen nicht in veröffentlichten Texten erscheinen. post.user_id ist nur für URL-Parameter dokumentiert.

6. Zähler und Perzentile#

Ein Zähler wird nur geladen, wenn die Vorlage ihn ausdrücklich nennt, zum Beispiel post.counter.click. Er fehlt, wenn die Kennzahl noch nicht existiert, was bei einem noch nicht veröffentlichten Beitrag immer der Fall ist. Schreiben Sie immer eine Rückfalloption: {{ post.counter.click ?? 0 }}.

PfadTypBeschreibung
post.counter.clicknumberKlicks
post.counter.engagementnumberInteraktion
post.counter.reachnumberReichweite
post.counter.videoViewsnumberVideoaufrufe
post.counter.ctrnumberKlickrate
post.counter.overperformingnumberWert der Überperformance
post.counter.monetizationnumberEinnahmen aus der Monetarisierung des Inhalts
organic.counter.viewnumberArtikelaufrufe (nur wenn der Beitrag einen Artikel hat)

Eine Perzentil-Variable vergleicht einen Beitrag mit den Beiträgen, die dasselbe Konto über einen Zeitraum veröffentlicht hat, ohne Eilmeldungen. Ihr Name setzt sich zusammen aus percentile + Perzentil (1 oder 2 Ziffern) + Kennzahl + Dauer (1 oder 2 Ziffern) + Einheit:

  • Kennzahlen: Click, Engagement, Reach, VideoViews, Ctr, Overperforming, Monetization;
  • Einheiten: h Stunde, d Tag, w Woche, m Monat, y Jahr.

percentile50Click1d ist der Median der Klicks über 1 Tag; percentile90Engagement7d das 90. Perzentil der Interaktion über 7 Tage. Der Wert ist null, wenn keine Daten vorliegen, und wird 30 Minuten zwischengespeichert.

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

7. Funktionen#

FunktionRückgabeBeschreibung
hasLink()booleantrue, wenn der Beitrag einen Link enthält. Prüfen Sie dies, bevor Sie [SHORTLINK] schreiben.
hasFirstCommentShortlink()booleantrue, wenn der erste Kommentar bereits [SHORTLINK] enthält.
canPublishPostWithoutSpam()booleantrue, wenn die Anti-Spam-Regeln des Kontos jetzt einen weiteren Link-Beitrag erlauben.
canPublishCommentWithoutSpam()booleanDieselbe Prüfung für einen Kommentar mit Link.
shouldAddComment(metric)booleanWendet die konfigurierte Stichprobenregel für Kommentare an; die optionale Kennzahl nennt den verwendeten Zähler. Das Ergebnis kann variieren.
aiGenerated(source, min, target, max, ending, justCrop)stringFasst source zusammen oder kürzt es an einer Wortgrenze, wenn justCrop den Wert true hat.
gpt(prompt, model), claude(…), gemini(…), mistral(…)stringGeneriert Text mit den Zugangsdaten des Anbieters der Marke. Siehe KI-gestützte Nachrichtengenerierung.
airtable(…)stringLiest einen Wert aus einer verbundenen Airtable-Base. Es wird nur Text zurückgegeben.

aiGenerated() löst nur Namen auf oberster Ebene auf, die als Text übergeben werden. Übergeben Sie 'description' oder den Wert selbst (organic.title), niemals den Text 'organic.title', der wörtlich zurückgegeben wird. Auch ein nicht vorhandener Name wird wörtlich zurückgegeben: Bei einem Beitrag ohne Artikel gibt aiGenerated('description', …) das Wort description zurück. Sichern Sie dies mit einer Bedingung ab:

twig
1{%- if organic -%}
2{{- aiGenerated('description', null, null, 40, '…', true) -}}
3{%- endif -%}

8. Filter#

Standardmäßige Twig-Filter und -Operatoren (default, first, join, length, trim, replace, date, map, in, ??, ?:, ~) sind in der Twig-Dokumentation beschrieben. Nonli ergänzt oder ersetzt die folgenden Filter. Alle unten stehenden Ergebnisse stammen vom Nonli-Renderer.

FilterWirkungBeispielErgebnis
upperGroßbuchstaben, Akzente bleiben erhalten'élan VITAL'|upperÉLAN VITAL
lowerKleinbuchstaben'élan VITAL'|lowerélan vital
capitalizeErster Buchstabe groß, Rest unverändert'élan VITAL'|capitalizeÉlan VITAL
slugifyURL-Slug'Budget 2027 : ménages'|slugifybudget-2027-menages
camelWörter zusammengeschrieben, jedes großgeschrieben'budget des ménages'|camelBudgetDesMénages
cleanReduziert Leerzeichen und entfernt führende und nachfolgende, entfernt die Leerzeichen um einen Bindestrich' Paris - Lyon '|cleanParis-Lyon
ucPhraseTitelschreibweise, kurze Wörter bleiben klein'le budget des ménages'|ucPhraseLe Budget des Ménages
encodeURL-Kodierung, behält aber reservierte Zeichen wie &, =, /, ?, # bei'a b&c'|encodea+b&c
extractMatch(regex)Erste Erfassungsgruppe oder null'Price: 10 €'|extractMatch('/([[:digit:]]+)/u')10
pregReplace(regex, replacement)Ersetzung per regulärem Ausdruck'Budget 2027'|pregReplace('/[[:digit:]]+/', 'N')Budget N
cleanTextTypografische Bereinigung: entfernt überzählige Leerzeichen, fügt französische geschützte Leerzeichen ein'Lire aussi : le budget. '|cleanTextLire aussi : le budget. (geschütztes Leerzeichen vor dem Doppelpunkt)

Regeln, die Renderfehler vermeiden:

  • extractMatch und pregReplace schlagen fehl, wenn der Wert null ist. Fügen Sie davor |default('') ein: {{ meta_custom_publisher|default('')|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') }}.
  • encode schützt &, = oder # nicht: Verwenden Sie es nicht, um einen Parameter aus einem Wert zu bilden, der diese Zeichen enthalten kann.
  • Bevorzugen Sie POSIX-Klassen wie [[:digit:]], [[:space:]] und [[:alpha:]] gegenüber Backslash-Sequenzen: Sie überstehen Kopieren und Einfügen. Kopieren Sie Vorlagen aus einem Codeblock, niemals aus einer gerenderten Chat- oder E-Mail-Zeile, in der Backslashes verloren gehen können.

9. Getestete Rezepte#

Jedes der folgenden Rezepte wurde mit der Nonli-Twig-Engine an vollständigen, teilweisen und leeren Artikel-Testdaten gerendert.

Schlagzeile (H1 oder Titel) gefolgt von der Meta-Beschreibung, mit einem Shortlink nur dort, wo er gebraucht wird. Bei einem Facebook-Link-Beitrag gibt es die Schlagzeile und die Beschreibung zurück; bei einem Facebook-Foto fügt es ➡️ [SHORTLINK] hinzu; auf Instagram fügt es nie einen Link hinzu; ohne Artikel gibt es einen leeren Text zurück.

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

Erster Satz der Beschreibung, dann die Beschreibung, dann der Titel.

twig
1{%- set source = meta_description ?: description ?: '' -%}
2{{- source|extractMatch('/^(.+?[.!?…])(?=[[:space:]]|$)/u') ?: source ?: title -}}

Erster Satz des benutzerdefinierten Verlagsfelds, mit dem Alternativtext des Bilds als Rückfalloption und dann dem Titel.

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

Text nach Netzwerk und Beitragstyp.

twig
1{%- if social_network == 'instagram' -%}
2{{- title -}}
3{%- elseif post_type == 'link' -%}
4{{- description ?: title -}}
5{%- else -%}
6{{- title -}}
7{%- endif -%}

Smart-Image-Farbe nach Kategorie. Gibt #E50032 für Politik, #16A34A für Sport und sonst #6F819D zurück.

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

Tracking-Werte aus dem Zielkonto.

twig
1utm_source={{ post.social_account.type|default('social') }}&utm_campaign={{ post.social_account.slug|default('')|encode }}

Veröffentlichungsdatum in der Zeitzone der Redaktion. 2026-10-18T07:30:00.000Z wird zu 18/10/2026 09:30. Ohne Veröffentlichungsdatum würde date das aktuelle Datum ausgeben, daher lässt die Bedingung den Text stattdessen leer.

twig
1{%- if organic.published_at|default(null) -%}
2{{- organic.published_at|date('d/m/Y H:i', 'Europe/Paris') -}}
3{%- endif -%}

Hashtags aus Tags. ['budget', 'impots'] wird zu #Budget #Impots.

twig
1{{ tags|default([])|map(t => '#' ~ t|camel)|join(' ') }}

Kurze Wörter und Zahlen mit dem folgenden Wort zusammenhalten (für Smart-Image-Titel, die an einem geschützten Leerzeichen nie umbrechen). La finale se jouera à guichets fermés hält La, se und à am folgenden Wort fest, und 16 septembre oder 3 000 euros bleiben zusammen. Die Änderung gilt nur für neu generierte Bilder.

twig
1{%- set titre = organic.title ?? title -%}
2{{- titre|pregReplace("/(?<=^|[[:space:]])([[:alpha:]]{1,2}|[[:digit:]]+)[[:space:]]+/u", "$1\xC2\xA0") -}}

Twig wandelt \xC2\xA0 in ein geschütztes Leerzeichen um; $1 behält das kurze Wort oder die Zahl, die gefunden wurde.

10. Automatische und per Klick ausgelöste Smart Fields#

Jede Marke hat zwei Einstellungen: Automatic configuration of smart fields (Automatische Konfiguration der Smart Fields) und Smart field configuration at the click of the button (Smart-Field-Konfiguration per Klick auf die Schaltfläche). Die Schaltfläche im Editor verwendet die Konfiguration per Klick und greift nur dann auf die automatische zurück, wenn keine Konfiguration per Klick existiert. Ein Feld, das auf die öffentliche Vorlage Empty (Leer) gesetzt ist, wird beim Klick auf die Schaltfläche geleert, weil der Editor den generierten Wert zurück in das Feld schreibt.

Bots verwenden diese Markeneinstellungen nicht. Jeder Bot hat seine eigenen Quellen, etwa Message's source (Quelle der Nachricht) und Description's source (Quelle der Beschreibung), die auf einen integrierten Wert (Title, Description und so weiter) oder auf eine Smart-Message-Vorlage verweisen.

11. Fehlerbehebung#

11.1. Mein Bot ruft seine Quelle ab, erstellt aber keinen Beitrag#

Ein aktiver Bot kann den Artikel finden und trotzdem keinen Beitrag erstellen, wenn seine Smart Message eine leere Nachricht rendert. Das passiert zum Beispiel, wenn die Vorlage ein optionales Feld wie meta_custom_publisher liest und der Artikel es nicht hat. Nonli filtert den Kandidaten dann vor jeder Veröffentlichung heraus: Eine Nachricht, die leer ist oder ohne den Shortlink fünf Zeichen oder weniger hat, wird verworfen, ebenso ein Link-Beitrag mit leerem Titel. Die Prüfung auf leere Nachrichten gilt nicht für Bots, die auf No message (Keine Nachricht) gesetzt sind, und nicht für Pinterest; die Prüfung auf leere Titel gilt für jeden Bot.

Das unterscheidet sich von einem Beitrag, der erstellt wurde und dann im Netzwerk fehlgeschlagen ist: Ein solcher Beitrag ist unter Posts mit einem Fehlerstatus sichtbar. Siehe Warum hat mein Bot diesen Artikel nicht veröffentlicht?, um zuerst die Stufe zu bestimmen.

  1. Vergleichen. Bestimmen Sie den genauen Bot. Vergleichen Sie einige Nachrichten, die er früher erfolgreich generiert hat, mit den Metadaten der passenden Artikel und prüfen Sie, was sich an seiner Konfiguration geändert hat. Ein Vorlagenname oder das aktuelle HTML der Seite allein belegt nicht, was früher funktioniert hat. Rendern Sie die aktuelle Vorlage an einem repräsentativen, infrage kommenden Artikel und prüfen Sie, ob die Variable fehlt oder vorhanden, aber leer ist.

  2. Beheben. Stellen Sie bevorzugt die frühere Nachrichtenquelle wieder her, wenn sie die gewünschte Formulierung lieferte, oder fügen Sie eine zum Variablentyp passende Rückfalloption hinzu:

    twig
    1{{- meta_custom_publisher ?: title -}}

    Entspricht der Artikeltitel der gewünschten Formulierung, öffnen Sie den Bot, setzen Sie Message's source auf Title und klicken Sie dann auf Save (Speichern). Das ändert den generierten Text.

    Nonli-Bot-Einstellungen mit Message's source auf Title, neben den Schaltflächen Cancel und Save

    Ausschnitt der Bot-Einstellungen: Message's source auf Title gesetzt, vor dem Klick auf Save.

  3. Umfang. Die Änderung der Quelle des Bots betrifft nur die künftigen Beiträge dieses Bots. Die Bearbeitung einer gemeinsam genutzten Smart-Message-Vorlage betrifft jeden Bot und jedes Feld, die sie verwenden. Bestehende Beiträge werden nie umgeschrieben.

  4. Prüfen. Warten Sie die nächste normale Abfrage ab und sehen Sie sich Artikel an, die noch infrage kommen. Ältere Artikel werden nicht automatisch nachgeholt, und ein manueller Beitrag belegt nicht, dass sich der Bot erholt hat.

11.2. Kurzer Marker, Vorspann und erster Satz sind verschiedene Werte#

Ein kurzer redaktioneller Marker (manchmal Kicker oder Dachzeile genannt), der vollständige Vorspann und der erste Satz eines Textes sind drei verschiedene Dinge. Nonli hat keine eigene Variable für den kurzen Marker: Eine websitespezifische Regel kann ihn in einem meta_custom_*-Feld ablegen, und manche Artikel haben berechtigterweise keinen. Ersetzen Sie einen fehlenden Marker nicht durch den ganzen Vorspann. Zeigen Sie den Marker nur an, wenn er existiert:

twig
1{%- set marker = meta_custom_instagram|default('')|trim -%}
2{%- if marker -%}{{- marker ~ ' | ' -}}{%- endif -%}
3{{- title -}}

Mit Marker lautet das Ergebnis EXCLUSIVE | Budget 2027: what changes; ohne Marker nur der Titel. Hier ist meta_custom_instagram nur ein Beispiel: Verwenden Sie das Feld, das Ihre Website-Regel tatsächlich befüllt.

meta_description (native Meta-Beschreibung), meta_custom_publisher (benutzerdefiniertes Feld) und description (von Nonli gewählte Beschreibung) sind getrennte Eingaben. Eine Vorlage, die eine davon liest, ist nicht betroffen, wenn eine andere korrigiert wird. Die Aktualisierung eines erfassten Feldes ändert weder die gewählte Bot-Quelle noch den Smart-Image-Text oder bereits generierte Beiträge.

11.3. Vollständige erfasste Beschreibung oder erster Satz des Vorspanns#

Vier Werte werden beim Verfassen der Nachricht eines Bots oft verwechselt:

  • Erfasste Beschreibung (description, organic.description): die Artikelbeschreibung, die Nonli erfasst hat, unverändert verwendet und nicht in Sätze zerlegt. Nonli entnimmt sie zuerst den strukturierten Daten des Artikels, sonst seinem Open Graph, dann der Twitter Card, dann der nativen Meta-Beschreibung. Stammt sie aus diesen Tags, behält sie deren Kürzung auf 500 Zeichen. Die Beschreibung des RSS-Eintrags (meta_custom_rss_description) wird nie als erfasste Beschreibung verwendet.
  • Native Metadaten (meta_description, og_description, twitter_description): die in den Meta-Tags der Seite deklarierten Beschreibungen. Nonli kürzt jede von ihnen bei der Erfassung auf 500 Zeichen. Diese Grenze gilt nur für diese drei Felder: Eine erfasste Beschreibung aus strukturierten Daten wird nicht gekürzt.
  • Erster Satz: Eine Vorlage wie Template: [public] Message from first standfirst sentence behält bewusst einen Satz und behandelt den Link über ihren eigenen Marker [SHORTLINK].
  • Kurzer Marker: ein optionales Feld, das im vorherigen Abschnitt beschrieben wird und das manche Artikel nicht haben.

Weder ein Vorlagenname noch die gewählte Quelle belegt, dass die erfasste Beschreibung Ihr vollständiger Vorspann ist. So veröffentlichen Sie die vollständige erfasste Beschreibung statt ihres ersten Satzes:

  1. Prüfen, was erfasst wurde. Vergleichen Sie bei einigen repräsentativen Artikeln description mit dem erwarteten vollständigen Vorspann. Fehlt er, ist er abgeschnitten oder enthält er statt des Vorspanns Fließtext, bitten Sie den Support, die Erfassung zuerst zu korrigieren und zu prüfen. Das Ändern der Quelle des Bots kann Text, der nicht erfasst wurde, nicht wiederherstellen.
  2. Die Quelle ändern. Öffnen Sie den Bot, setzen Sie Message's source auf Description und klicken Sie dann auf Save. Verwechseln Sie sie nicht mit Description's source, die das Beschreibungsfeld des Beitrags füllt, nicht seinen Text.
  3. Die nächste Nachricht prüfen. Sehen Sie sich den nächsten Beitrag an, den der Bot generiert: den vollständigen Text, die Stelle, an der der Link erscheint, und die Textgrenze jedes Zielnetzwerks. Eine vollständige Beschreibung kann lang sein, und ihre Auswahl garantiert nicht, dass jedes Netzwerk den gesamten Text akzeptiert. Nonli kümmert sich weiterhin um den Shortlink: Bei einem Beitrag ohne nativen Link fügt es den Shortlink direkt nach dem generierten Text ein, vor einem Bot-Suffix und Hashtags, sofern ihn nicht schon der erste Kommentar enthält. Link- und Share-Beiträge erhalten keinen angehängten Shortlink, außer Link-Beiträgen auf X und Mastodon, bei denen er ganz am Ende hinzugefügt wird. Instagram- und TikTok-Nachrichten erhalten keinen Shortlink. Eine Vorlage für den ersten Satz kann den Text je nach Netzwerk kürzen oder den Link anders platzieren, erwarten Sie daher nicht dasselbe Ergebnis.
  4. Umfang. Die Änderung gilt nur für die Beiträge, die dieser Bot ab jetzt generiert. Bestehende Beiträge, andere Bots und gemeinsam genutzte Smart-Message-Vorlagen bleiben unverändert, und kein älterer Artikel wird importiert oder erneut veröffentlicht.

11.4. Apostrophe machen meine Vorlage kaputt#

In einer Twig-Zeichenfolge in einfachen Anführungszeichen beendet ein Apostroph die Zeichenfolge. Diese Vorlage wird beim Speichern mit einem Fehler wie „Invalid template syntax at line 1“ abgelehnt:

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

Maskieren Sie den Apostroph, verwenden Sie einen typografischen Apostroph oder doppelte Anführungszeichen:

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") }}

Die gemeldete Zeilennummer ist die Zeile der Vorlage, die den Fehler enthält.

11.5. Eine Variable bleibt leer#

  • Prüfen Sie die genaue Schreibweise: organic.category, nicht categories; tags, nicht tag.
  • Prüfen Sie, ob der Beitrag einen Artikel hat: organic ist bei manuellen Beiträgen und Beiträgen ohne Link leer, und die Aliase sind dann nicht definiert.
  • Geben Sie eine Liste mit |join(', ') aus oder prüfen Sie sie mit in.
  • Vergleichen Sie Kategorien mit ihrer normalisierten Form (politique societe, nicht Politique & Société).
  • Prüfen Sie Zähler mit ?? 0: Vor der Veröffentlichung fehlen sie.

11.6. Kann eine Vorlage Instagram-Collaborators hinzufügen?#

Nein. Vorlagen füllen nur Textfelder, und airtable() gibt Text zurück: Es kann eine @-Erwähnung schreiben, aber keine Zusammenarbeit anlegen. Fügen Sie Collaborators im Beitragseditor über Collaborators hinzu oder über das API-Feld collaborator[] (slug, type) von POST oder PUT /v2.1/posts/bulk. Meta akzeptiert bis zu 3 Collaborators; siehe So führen Sie mit Nonli eine Instagram-Kooperation durch.

War dieser Artikel hilfreich?

Buchen Sie eine personalisierte Demo mit unserem Team.