Social Media Freigabe (Outstand)
Lies zuerst Social Media — Einstieg (Checkliste für Redaktion). Diese Seite ist die vollständige Referenz.
Erstellen, planen und veröffentlichen bleibt im Dashboard (Editor, Kanäle, KI-Bild). Claude kann offene Freigaben listen und entscheiden, Community lesen und einen Performance-Kurzüberblick holen. Antworten, Liken und Verbergen bleiben im Dashboard. Grenzen: Claude & MCP → wer macht was?.
Fanpage Karma wird durch cockpitOS Freigabe + Outstand Publish** ersetzt. Strategie und Provider-Matrix: Social unter einem Cockpit-Dach.
| Was | Social Cockpit (eigenes Modul): Kanäle, Post-Editor, Freigaben (/dashboard/social/approvals), Engage, Reporting; Publish über Outstand. |
| Warum | Social getrennt vom Website-Workflow — übersichtliche Freigabe, Metriken und Kanäle an einem Ort. |
| Wer | Redaktion, Center Manager, Org-Marketing, Center-Admin (Freigabe); Betrieb/IT (Outstand-Keys, Webhook, Cron). |
| Wo | Sidebar Social Cockpit; Kanäle auch Center-Detail Social Media (?tab=social). |
| So testen | 1) Center → Social Media: Kanal verbinden (Instagram, Facebook, Threads, LinkedIn, TikTok, Bluesky, X) oder vorhandenes Profil zuordnen. 2) Post erstellen → Freigabe anfordern (beliebige aktive Cockpit-Nutzer wählen). 3) Gewählte Prüfer: Glocke + Desktop-Push (opt-in unter Einstellungen → Benachrichtigungen) + Meine Freigaben auf dem Board (für alle eingeloggten Nutzer). 4) Glocke anklicken: Freigabe-Anfrage öffnet das Board am markierten Post; „Post ist freigegeben“ / Ablehnung öffnet den Post. 5) Optional Selbst freigeben (jeder mit Center-Zugang) oder Freigabe-Link für Gast. 6) Mit AgencyOS-Anbindung: zusätzlich Teams-DM vom Bot (Freigeber muss Bot einmal geöffnet haben). |
| Betrieb | OUTSTAND_API_KEY, optional OUTSTAND_ORG_ID (für Erst-Connect ohne bestehende Profile), OUTSTAND_WEBHOOK_SECRET, CRON_SECRET — siehe Abschnitt Env unten. Teams über AgencyOS: AGENCYOS_TEAMS_NOTIFY_URL + AGENCYOS_TEAMS_NOTIFY_SECRET (beide Server). |
Rollen und Zuständigkeiten
Freigabe pro Post: Beim Einreichen wählt die Redaktion konkrete Personen aus allen aktiven Cockpit-Nutzern — nicht nur feste Freigabe-Rollen. Wer in der Liste steht, darf freigeben oder ablehnen (Filter Meine Freigaben auf dem Board).
Sortierung im Dialog: Zuerst Nutzer mit Center-Zuweisung, dann Organisation des Centers, danach das restliche Cockpit-Team. Suche nach Name, E-Mail oder Rolle.
Favoriten & letzte Auswahl: Stern neben einer Person speichert sie als Favorit (lokal im Browser, bis zu 8). Beim nächsten Freigabe-Dialog werden zuerst die letzten Freigeber für dieses Center vorausgewählt — sonst deine Favoriten. Oben erscheinen Favoriten als Schnellauswahl-Chips (z. B. Julia, Sarah).
Legacy ohne Zuweisung: Ältere Posts ohne assignedApproverIds bleiben bei den klassischen Freigabe-Rollen (Center Manager, Org-Marketing, Center-Admin, Super-Admin).
Direkt veröffentlichen: Button Veröffentlichen im Editor weiterhin nur für Freigabe-Rollen (publish_direct). Selbst freigeben im Freigabe-Dialog ist für jeden Nutzer mit Center-Zugang möglich (ohne Warteschlange).
Center Manager
- Landing:
/dashboard/center-manager— KPIs, Freigabe-Kurzliste, Schnellfreigabe (Feed mit ≤1 Medium) - Social Hub: Sidebar Social Cockpit — alles gebündelt (siehe unten)
Social Cockpit (Modul social-cockpit)
Alles an einem Ort unter Social Cockpit in der Sidebar (eigenes Modul, wie Mall Cockpit):
| Menü | Pfad | Funktion |
|---|---|---|
| Übersicht | /dashboard/social | Mission Control: Heute (Freigaben, geplant, live, Kanäle, offene Kommentare), große CTAs, Hub-Kacheln zu Reporting & Kanälen |
Übersicht „Heute für dich“ (StatTile)
Die Startseite Social Cockpit (/dashboard/social) lädt Kennzahlen über GET /api/social/hub?centerId=…:
| Kachel | Bedeutung | Link |
|---|---|---|
| Warten auf Freigabe | Posts in der Freigabe-Warteschlange | Freigaben |
| Kommentare offen | Unbeantwortete Kommentare (Engage) | Community & Antworten |
| Geplant | Terminierte Posts | Freigaben |
| Live (7 Tage) | Kürzlich veröffentlicht | Engage |
| Kanäle verbunden | Verknüpfte Profile | Center → Social Media |
Darunter optional Follower/Reichweite (Monat), Abschnitt Performance · 30 Tage (Reach, Impressions, Engagement, Kanal-Posts, Plattform-Kacheln wie in Reporting — Link Deine Performance), große CTAs (Neuen Post, Freigaben, Antworten) und HubNavTile-Kacheln zu Reporting, Kanälen und Kunden-Reporting — gleiches Muster wie andere Modul-Hubs (HubNavGrid / StatTile in @mall-os/ui).
| Kanäle verknüpfen | Center → Reiter Social Media (?tab=social) | Instagram, Facebook, Threads, LinkedIn, TikTok, Bluesky, X — selbst anmelden oder vorhandenes Profil zuordnen |
| Post erstellen | /dashboard/social/new | Post anlegen |
| Kalender | /dashboard/social/calendar | Social-only: Monat, Woche, Tag, Liste — Thumbnail, Uhrzeit, Kanal, Status. Klick auf die Datum-Kachel plant einen neuen Beitrag für diesen Tag |
| Freigaben | /dashboard/social/approvals | Social-Freigaben (4 Status-Spalten) — inkl. Löschen mit Rückfrage |
| Community & Antworten | /dashboard/social/engage | Post-Liste + Kommentare beantworten (Master-Detail, Suche, Filter) |
| Deine Performance | /dashboard/social/reporting | Follower, Reichweite, Top-Post, Post-Liste mit Suche & Seiten |
Community & Antworten: Zweispaltig — links Posts auf den Kanälen (Cockpit und extern, z. B. direkt auf Facebook), rechts Kommentare zum gewählten Post. Badge Cockpit vs. Kanal zeigt, ob der Post aus dem Cockpit-Editor kam. Oben Zeitraum wählen (7/30/90 Tage, Kalendermonat oder eigenes Von–Bis), Filter nach Quelle (Cockpit / Kanal / Mit Kommentaren) und Kanal (Instagram, Facebook, Threads). KPI-Zeile: Cockpit-/Kanal-Posts, Kommentare (aus Metriken), Likes, Geteilt — Post-Liste zeigt Likes/Kommentare/Shares aus DB-Snapshots; Link Performance führt zu Deine Performance.
Community: Unter Kommentare die Kanal-Posts; unter Instagram-Nachrichten Direktnachrichten des verbundenen Instagram-Kontos (lesen und antworten, 7-Tage-Fenster als Support-Antwort).
Outstand in Community & Antworten:
| Funktion | Über Outstand-API |
|---|---|
| Kommentare lesen | Ja |
| Antwort als Thread unter Kommentar | Ja (parent_comment_id = Kommentar-ID; Facebook, Instagram, LinkedIn) |
| Emoji in Antwort | Ja (Editor im Cockpit) |
| Post-Metriken (Likes, Kommentarzahl) | Ja; Stories zusätzlich Antworten, Profilbesuche, Navigation (24 h) |
| Einzelnen Kommentar liken | Nein — Inbox (Zernio) oder native App |
| Kommentar verbergen | Ja — Instagram und Threads (Cockpit-Posts). Facebook: Inbox oder native App |
| Kommentar löschen | Ja — Instagram und Threads (Cockpit-Posts) |
| Posts die nicht über Outstand veröffentlicht wurden | Nein |
| Post vom Kanal löschen | Ja — Facebook, X, LinkedIn, Bluesky. Instagram, TikTok und Threads können das nicht. |
| Erneut teilen | Ja — X, LinkedIn, Threads, Bluesky (optional mit Text) |
| Instagram-Direktnachrichten | Ja — eigener Reiter Instagram-Nachrichten |
Antworten erscheinen unter dem jeweiligen Kommentar, nicht als neuer Top-Level-Kommentar — dafür wird die native Kommentar-ID an Outstand übergeben.
Deine Performance: Drei KPI-Karten (Follower, Reichweite, Top-Post), Plattform-Kacheln (Instagram, Facebook, …), Impressions- und Engagement-KPIs, Mini-Follower-Trend, Monats-Interaktionen, darunter alle Posts (Cockpit + Kanal-Inbox) mit Suche und 8 pro Seite. Oben Zeitraum wählen (wie Community). Button Als PDF öffnet einen druckoptimierten Report (im Browser „Als PDF speichern“). Follower-Verlauf eingeklappt, optional alle Zeilen. Button Zahlen aktualisieren (technisch Metrik-Sync).
Outstand-Datenfluss: Publish → Outstand (/v1/posts/ + Media-Confirm) → Outstand sync schreibt Account- & Post-Metriken in die DB → Reporting, Engage und Dashboard-Home lesen daraus (Follower-Zuwachs, Monats-Reichweite, Interaktionen, Top-Post).
Performance & Plattform-Hinweise
- Deine Performance:
/dashboard/social/reporting— Kern-KPIs oben:- Follower & Zuwachs (Summe aller verknüpften Kanäle, Delta zwischen erstem und letztem Snapshot im Sync-Zeitraum)
- Reichweite und Impressions (Summe über Posts im gewählten Zeitraum)
- Engagement-Rate (Durchschnitt über Posts mit Outstand-Analytics)
- Top-Post (stärkster Post nach Reach → Impressions → Interaktionen)
- Performance pro Kanal — eigene Kachel je Netzwerk (Follower, Zuwachs, Reach, Posts)
- Follower-Trend — Mini-Chart aus Snapshot-Verlauf
- Interaktionen (eigene Karte): Likes, Kommentare und Geteilt als Monatssumme; in der Post-Liste pro Eintrag inkl. Impressions und Engagement
- Dashboard-Home: Zeigt neben Reichweite auch die Monats-Interaktionen (Likes · Kommentare · Geteilt) mit Link zum Reporting
- Outstand sync lädt frische Metriken von Outstand in die DB — ohne Sync bleiben KPIs leer oder veraltet (manuell in Reporting oder täglich per Cron
/api/cron/outstand-sync) - Bluesky: Outstand liefert derzeit eingeschränkte Metriken und Kommentare
- Detail-Freigabe: Story, Bildreihe und Reel immer im Workflow prüfen
Workflow
Social-Posts haben eine eigene Freigabe-Ansicht unter /dashboard/social/approvals (nicht mehr in der Website-Workflow-Liste vermischt).
Vier Bereiche:
- Zur Freigabe —
in_review, wartet auf Center/Marketing - Überarbeitung — abgelehnt, mit Grund; Button Erneut zur Freigabe
- Entwürfe — noch nicht eingereicht
- Live & geplant — veröffentlicht oder terminiert
Pro Karte: Vorschaubild, Status und Format auf Deutsch (z. B. „Zur Freigabe“, „Bildreihe“), Meta-Zeile (Eingereicht von, Center, Termin), Wartet auf (Avatare + Namen der gewählten Prüfer), aufklappbares Detail-Panel (Text, Medien, Verlauf), darunter Editor, Freigabe-Link, Freigeben / Ablehnen (nur für zugewiesene Prüfer bzw. allgemeine Freigabe-Rolle ohne Zuweisung).
Freigabe anfordern (Dialog)
Beim Klick Zur Freigabe im Editor (oder Erneut zur Freigabe nach Ablehnung):
- Prüfer auswählen — alle aktiven Cockpit-Nutzer (Checkbox-Liste mit Avatar, Rolle; Suche; Center/Org zuerst sortiert)
- Freigabe-Regel: Eine Person reicht oder Alle müssen freigeben (bei mehreren Prüfern)
- Optional Freigabe-Link für Gast — ohne Cockpit-Login, wird in Benachrichtigung/E-Mail mitgeschickt
- Selbst freigeben — direkt veröffentlichen ohne Warteschlange (für jeden Nutzer mit Center-Zugang, z. B. Kopie eines bereits geprüften Posts)
Gewählte Prüfer erhalten Glocke, sofort E-Mail und optional Desktop-Push (Opt-in). Auf dem Freigabe-Board: Filter Meine Freigaben zeigt Posts, bei denen du als Prüfer eingetragen bist — für alle eingeloggten Nutzer, nicht nur klassische Freigabe-Rollen.
Korrektur ohne Ablehnung: Freigeber öffnet Editor, korrigiert Text/Medien, speichert — Status bleibt zur Freigabe (kein Zurückweisen nötig).
Geplant & freigegeben — bearbeiten:
| Status | Editor | Termin ändern | Planung stornieren | Löschen |
|---|---|---|---|---|
| Zur Freigabe / Entwurf / Abgelehnt | Ja | Ja | — | Ja — in der Freigaben-Übersicht und im Editor |
| Geplant oder freigegeben mit Termin | Ja — Text, Bild, Kanäle, Termin | Ja | Ja, wenn schon bei Outstand → zurück zu Entwurf | Ja — Übersicht und Editor (bricht die Planung bei Outstand ab) |
Live (published) | Ja — Text/Medien speichern, Sync zu Outstand | Nein | Nein | Nein (nur auf dem Kanal entfernen) |
Im Editor erscheint der Hinweis: Geplant — Änderungen gelten für den Veröffentlichungstermin.
Wer darf ändern: alle mit Zugang zum Center im Social-Modul (gleiche Schwelle wie bei Entwürfen). Direkt veröffentlichen bleibt den Freigabe-Rollen vorbehalten.
Löschen in der Übersicht (/dashboard/social/approvals, FB-H5TZ6IXO): Auf jeder Karte außer Live-Posts gibt es Löschen. Es erscheint eine Rückfrage. Wer das Center sehen darf (Super-Admin und Center-Rollen mit Zugang), darf löschen — dieselbe Regel wie im Editor. Live-Posts zeigen den Knopf nicht. Nach dem Löschen aktualisiert sich die Liste.
Geplante Posts werden beim Speichern im Cockpit aktualisiert und — wenn schon ein Outstand-Post existiert — dort mitgezogen. Fehlt die Outstand-ID, bleibt die Änderung lokal. Live-Posts: Text, Medien und Kanal-Texte können korrigiert werden; der Footer zeigt nur Speichern (kein erneutes Veröffentlichen). Planung stornieren bricht den Termin ab und setzt den Post auf Entwurf zurück (erneute Freigabe nötig). Löschen entfernt den Post ganz — bei geplanten Posts inklusive der Planung bei Outstand.
Website-Freigaben bleiben unter /dashboard/workflow.
Im Redaktions-Kalender (/dashboard/content/planner) erscheinen Social-Posts am geplanten Termin — Filter-Chip Social. Dazu zählen auch Entwürfe und Ideen mit Datum (Schalter Entwürfe anzeigen, Standard: an). Posts ohne Termin liegen nicht auf „heute“, sondern in der Seitenliste Offene Entwürfe. Klick auf einen Eintrag öffnet den Editor (/dashboard/social/[id]). Klick auf eine Datum-Kachel öffnet Post erstellen mit diesem Tag (Standard 09:00) und dem im Kalender gewählten Center. Status erscheint in Alltagssprache (Entwurf, Idee, Zur Freigabe). Oben: KPI-Zeile und Content-Mix (News, Events, Angebote, Social …). Das gewählte Center bleibt nach einem Seitenwechsel erhalten (gleiche Auswahl wie in der Kopfzeile). Für die Social-Redaktion gibt es zusätzlich einen eigenen Social-Kalender (/dashboard/social/calendar): Monat, zwei Wochen, Woche, Tag und Liste mit Thumbnail, Uhrzeit, Kanal und Status — Filter nach Phase (Entwurf ist standardmäßig an), „Meine Posts“ und „Meine Freigaben“. Undatierte Entwürfe stehen dort ebenfalls unter Offene Entwürfe. Dieselbe Datum-Kachel plant dort ebenfalls einen neuen Beitrag. Dort KPI-Zeile (Gesamt, Zur Freigabe, Geplant, Live) und Post-Mix (Beitrag, Bildreihe, Story, Reel). Beide Kalender nutzen dieselben Dashboard-Tooltips beim Überfahren von Einträgen und dasselbe Center aus der Kopfzeile.
So testen: Social-Post als Entwurf speichern und einen Veröffentlichungstermin setzen → Kalender zeigt den Eintrag an diesem Tag. Ohne Termin → Eintrag unter Offene Entwürfe. Klick auf den Eintrag öffnet /dashboard/social/[id]. Schalter Entwürfe anzeigen aus → Entwürfe verschwinden. Leere oder belegte Datum-Kachel (nicht den Eintrag) anklicken → Editor mit diesem Tag, 09:00, und dem Center aus der Kopfzeile. Kalender mit gewähltem Center öffnen: die Monatstafel muss erscheinen (kein weißer Fehler).
- Neu anlegen: Sidebar Social Cockpit → Post erstellen oder
/dashboard/social/new - Aus Website-Inhalt: Auf der Detailseite von News, Event oder Angebot Button Als Social-Post — übernimmt Titel, Kurztext und Bild(er) in einen neuen Entwurf (
POST /api/social/from-content), Editor unter/dashboard/social/[draftId] - Aus Google-Bewertungen: Unter Analytics → Bewertungen (
/dashboard/analytics/reviews) pro Review Social-Post — KI-Caption zu Lob/Kritik (Fallback: Textbaustein ohne AI-Key). Bei KI-Empfehlungen zusätzlich Social Sammel-Post zum Thema (z. B. mehrfach „Parken“ bemängelt). Optional Center-Hero als Bild. - Auf Google antworten: Nach OAuth-Verbindung (Integration → Google Places → Tab Business Profile, dann auf der Reviews-Seite Mit Google verbinden) Button Bei Google senden im Dialog. Ohne Verbindung: KI-Vorschlag, kopieren, Link zu Google.
- Reviews-Anzahl: Ohne GBP-Verbindung zeigt Google Places höchstens 5 aktuelle Bewertungen; die Gesamtzahl auf Google kann höher sein. Mit verbundenem Business Profile werden mehr Reviews geladen (API mit Paginierung).
- KI-Analyse erneuern: Button Erneut analysieren oder Aktualisieren (lädt Reviews neu und startet bei Bedarf eine neue KI-Auswertung). Fehlermeldung erscheint, wenn kein KI-API-Key konfiguriert ist.
- Social aus Reviews: Buttons Themen-Post / Social: Thema aufgreifen erzeugen einen allgemeinen Beitrag zum Thema (z. B. Parken, Service) — keine direkte Social-Antwort auf eine einzelne Beschwerde. Für die persönliche Antwort: Antworten (Google / Kopieren).
- Kommentare & Glocke: Hub zeigt Kommentare offen; neue Kommentare erzeugen eine Benachrichtigung in der Glocke (Deep-Link zu Community mit Filter „Mit Kommentaren“). Alle 30 Minuten prüft der Cron Social Comment Alerts alle Center mit Social-Kanälen (Outstand + Zernio Inbox). Manuell: Community oder
POST /api/social/comments/sync. - Bearbeiten: In Social Freigaben Button Editor oder
/dashboard/social/[draftId] - Löschen: In Social Freigaben Button Löschen (Rückfrage) — außer bei Live-Posts. Agenten:
cockpit_delete_social_draftbzw.DELETE /api/agencyos/v1/social/drafts/{draftId} - Editor (
/dashboard/social/new): zweispaltiges Layout — zwei Schritte, Vorschau und Aktionen rechts- Immer oben: Center-Leiste (gleiche Auswahl wie Planer und Freigaben). Upload braucht das Center.
- 1. Inhalt: zuerst Kanäle, dann Format (nur was zu den Kanälen passt), dann Text und Foto/Video. Fachbegriffe (Story, Reel, Hashtag …) erklären sich per gepunktetem Tooltip. Gewählte Kanäle sind grün mit Haken, jedes Netzwerk hat seine Farbe am Icon.
- Text: Schalter Selbst / Vorschlag — der Vorschlag erscheint an derselben Stelle, nicht in einem Extra-Reiter.
- Foto: Schalter Hochladen / Zaubern (bei Reel nur Upload, weil ein Reel ein Video braucht).
- 2. Veröffentlichen: Termin; plus nur die Extras, die zum Kanal passen (erster Kommentar, Instagram-Collabs/Markierungen, Reel-Cover, TikTok-Schalter, Threads-Antworten, Standort, Link).
- Gilt für: zeigt das Center aus der Leiste; Center ändern öffnet denselben Switcher (⌘K). Die Auswahl bleibt beim Seitenwechsel, bis du sie manuell änderst.
- Weitere Center nur für diesen Post: optional zusätzlich ankreuzen, ohne die Leiste zu überschreiben (z. B. derselbe Text für zwei Standorte)
- Super-Admin ohne konkretes Center: Hinweis, oben in der Leiste ein Center zu wählen
- Emoji-Button neben dem Textfeld (Smiley) — Emojis direkt einfügen, ohne Tastatur-Hinweis
- Medienvorschau: Thumbnail anklicken → Vergrößern (Lightbox)
- Kanäle (Schritt 1) beziehen sich nur auf die Center dieses Posts; fehlende Outstand-Profile werden pro Center mit Link zum Reiter Social Media genannt
- Rechts immer sichtbar: Veröffentlichen (für Freigabe-Rollen direkt an Outstand), Zur Freigabe, Entwurf
- Vorschau (rechts): Facebook-/Instagram-Feed und Story (9:16) mit Absätzen wie live — Tabs wechseln, Text pro Kanal wird berücksichtigt
- Facebook-Feed: Querformat etwa 1,91:1 oder Quadrat 1:1. Passt das Bild nicht, bleiben helle Ränder sichtbar (kein Vollflächen-Zuschnitt).
- Instagram-Feed: typisch 1:1, bei Hochformat 4:5. Das Bild füllt die Fläche; überstehende Ränder werden abgeschnitten.
- Story: Hochformat 9:16, ebenfalls vollflächig mit möglichem Zuschnitt.
- Unter der Vorschau steht ein kurzer Hinweis, damit Redaktion Ränder und Zuschnitt vor dem Live-Gang einschätzen kann.
- Pro Tab ein Format-Hinweis. Bei einem Reel-Video liegt eine halbtransparente Safe-Zone über dem Bild (Profil oben, Buttons rechts, Text unten); Schalter Safe-Zone anzeigen ist standardmäßig an.
- Text pro Kanal: Bei mehreren Kanälen Schalter direkt unter Dein Text — z. B. Facebook ohne Hashtags, Instagram mit Hashtags. Das gemeinsame Textfeld darf leer bleiben, wenn jeder gewählte Kanal einen eigenen Text hat. Fehlt der Text bei einem Kanal, erscheint ein Hinweis mit dem Kanalnamen (FB-EBKWR0KM).
- Standort & Link: Unter Veröffentlichen — Standortzeile und Link (Facebook-Vorschau mit Link-Karte; Link wird beim Veröffentlichen ergänzt)
- Story: Bild oder Video; mehrere Dateien = Story-Serie (jede Datei eine Slide, erscheint hintereinander im Story-Ring — ein Entwurf, eine Freigabe). Text optional, kein erster Kommentar
- Reel: nur Video (MP4, MOV, WEBM). Ein Bild allein lässt sich nicht mehr planen oder veröffentlichen — die Meldung erscheint vor dem Senden an Outstand. Text optional
- Text vorschlagen: Bei Dein Text auf Vorschlag wechseln — Stichworte und/oder Foto anhängen → optional Regel-Vorlage → Text vorschlagen. Danach steht der Text wieder im normalen Feld. Der Text orientiert sich an den gewählten Centern und Kanälen (Facebook ohne Hashtags). Basis-Prompt: Einstellungen → KI-Verwaltung → Prompt-Einstellungen → Reiter Social.
- Bild-Assistent: Beim Foto auf Zaubern wechseln — Bildidee, Qualität, optionale Vorlagen. Bei Reel gibt es den Schalter nicht, weil ein Video nötig ist. KI-Bilder werden auf Instagram mit dem Hinweis „AI info“ gekennzeichnet.
- Threads: Unter Veröffentlichen Wer darf antworten, wenn ein Threads-Kanal gewählt ist.
- Freigabe-Link (öffentlich):
/freigabe/social/{token}— Medien aus dem Entwurf (containers); relative Pfade werden serverseitig aufgelöst. Ohne gespeichertes Medium erscheint ein Hinweis (Entwurf im Editor speichern, bevor der Link verschickt wird). - Format (Schritt 1, nach den Kanälen): offizielle Namen je Kanal — Instagram/Facebook Beitrag, Karussell, Story, Reel; TikTok Video. Instagram-Beitrag: 1:1, 4:5 oder 1,91:1. Story und Reel: 9:16. Karten, die zum Kanal nicht passen (z. B. Story auf Threads), sind gesperrt.
- Termin (Schritt 2): Veröffentlichungszeitpunkt per Kalender — ohne Termin Veröffentlichung direkt nach Freigabe
- So testen: 1) Neuer Post — Kanäle klicken (gewählt = grün mit Haken, Icon in der Netzfarbe), dann Format. 2) Bei Text Vorschlag einschalten, Text erzeugen, wieder Selbst. 3) Bei Foto Zaubern oder hochladen. 4) Weiter: Veröffentlichen — Termin. Rechts bleiben Vorschau und die Buttons.
- Aus Dispatch: E-Mail → Entwurf → Tab Social Media
Text vorschlagen: eigene Regel-Vorlagen
| Was | Beim Textvorschlag kann die Redaktion benannte Vorlagen anlegen (Name + Regeln, wie eigene Anweisungen). Eine gewählte Vorlage gilt für den nächsten Vorschlag — z. B. immer genau fünf Hashtags: Centername, Stadt, drei zum Thema. |
| Warum | Hashtag- und Tonalitäts-Regeln sollen nicht jedes Mal neu getippt werden. Der Super-Admin-Prompt bleibt die Basis; Vorlagen sind zusätzliche, wiederholbare Anweisungen. |
| Wer | Redaktion mit Center-Zugang (Planetencenter sieht die Vorlagen dieses Centers). Bearbeiten und Löschen nur bei eigenen Vorlagen (Super-Admin darf alle im Center). |
| Wo | Social Cockpit → Neuer Post → Dein Text → Schalter Vorschlag. |
| So testen | 1) Center wählen (z. B. Planetencenter). 2) Neue Vorlage: Name „5 Hashtags“, Regeln „Nur 5 Hashtags: Centername, Stadt, drei zum Thema.“ 3) Vorlage wählen, Stichworte eingeben, Text vorschlagen. 4) Vorlage eines Kollegen: sichtbar, aber ohne Bearbeiten/Löschen. 5) Ohne Center: Hinweis statt Auswahl. |
Nach Freigabe: Outstand POST /v1/posts/ — Medien als containers[].media mit { url, filename }. Story und Reel setzen dieselben Flags für Instagram und Facebook (publishAsStory / publishAsReel). Optional Erster Kommentar im Editor: fährt als zweiter Container mit (auch bei geplanten Posts). Stories ohne ersten Kommentar — die Kanäle lehnen das ab. Kanal-Status (Facebook/Instagram …) erscheint als Badges nach Publish.
Historische / native Posts: Outstand listet nur Beiträge, die über Outstand rausgegangen sind (GET /v1/posts). Kommentare auf fremde Kanal-Posts ebenfalls nicht. Deshalb bleibt Zernio Inbox die Quelle für Posts, die direkt auf Facebook/Instagram o. Ä. entstanden sind (Community-Filter Kanal). Das hat sich in der aktuellen Outstand-Doku nicht geändert.
Planung: Der Termin geht an Outstand (scheduledAt). cockpitOS sendet den Post nicht selbst zum Termin nach. Webhook (post.published / post.error) setzt den Entwurf auf live oder Fehler. Fallback: alle 30 Minuten prüft /api/cron/social-comment-sync überfällige geplante Posts bei Outstand (zusätzlich der tägliche /api/cron/outstand-sync). Öffnet jemand den Entwurf nach dem Termin, wird der Status ebenfalls nachgezogen. Kein Force-Publish.
Outstand-Webhook (optional, in Outstand unter Settings → Webhooks): POST /api/webhooks/outstand — Events post.published, post.error, account.token_expired. Env OUTSTAND_WEBHOOK_SECRET für Signaturprüfung. Metrik-Sync: manuell in Reporting oder Cron POST /api/cron/outstand-sync (CRON_SECRET, empfohlen täglich).
Hinweis: Caption-Änderungen im Workflow speichern die vorhandenen Medien im Entwurf (kein versehentliches Entfernen beim PATCH ohne containers).
Pre-Flight-Qualitätsprüfung (vor Planung / Veröffentlichung)
Vor dem Planen oder Veröffentlichen kann der Entwurf gegen Cockpit-Regeln geprüft werden (Hub C14 — analog AgencyOS, aber serverseitig beim Publish):
- Im Social-Editor (gespeicherter Entwurf): Button Qualitätsprüfung in der Vorschau-Spalte
- Fehler (rot) blockieren Veröffentlichung; Hinweise (gelb) sind Empfehlungen
- Typische Regeln: Kanäle verknüpft, Text vorhanden/Länge, Reel mit Video, Termin nicht in der Vergangenheit, Instagram ohne Hashtags (Hinweis)
API (Dashboard-Session): GET /api/social/drafts/{draftId}/quality-check?forSchedule=1
Antwort: { passed, issues: [{ level, code, message }] }
AgencyOS: GET /api/agencyos/v1/social/drafts/{draftId}/quality-check (Bearer API-Key)
MCP: cockpit_social_draft_quality_check (optional forSchedule=true) — vor cockpit_social_review oder Publish aufrufen.
Freigabe-Link (ohne Login)
Für Center Manager / Marketing, die kein Cockpit-Konto haben:
- Social Cockpit → Freigaben (
/dashboard/social/approvals) → Post in Prüfung → Button Freigabe-Link (neben Editor) - Link wird erzeugt und in die Zwischenablage kopiert — Format:
/freigabe/social/[token] - Empfänger öffnet die gebrandete Vorschauseite (Center-Logo, Farben) und kann freigeben oder ablehnen
- Link ist 30 Tage gültig; bei Ablauf in Freigaben einen neuen Link erzeugen
- Rückmeldung an die Redaktion: Der Ersteller (
createdBy) erhält immer eine Benachrichtigung in der Glocke (Header). E-Mail: Ablehnung und Publish-Fehler sofort (SOCIAL_REVIEW); erfolgreiche Freigabe sofort, außer der Nutzer hat den täglichen Redaktions-Digest aktiviert — dann nur in der Zusammenfassung. Technik: Developer: Dashboard-E-Mails.
Hinweis: Kundenkontakt ist kein Freigabe-Link — dort generiert die KI nur einen E-Mail-Textvorschlag für Mieter/Kunden.
Technisch:
POST /api/social/drafts/[draftId]/review-link— Link erzeugen (Session)GET/POST /api/social/review/[token]— Vorschau / Freigabe / Ablehnung (öffentlich, tokenbasiert)GET/PUT /api/notifications— Cockpit-Glocke (persistente Benachrichtigungen pro Nutzer)
Benachrichtigungen (Glocke)
Die Glocke in der oberen Leiste zeigt ungelesene Workflow-Hinweise (z. B. Social-Freigabe über externen Link). Vollständige Liste: Benachrichtigungen (/dashboard/notifications). Technisch: Tabelle dashboard_notifications — Migration 20260521180000_add_dashboard_notifications_SAFE.sql.
Klick auf eine Meldung öffnet den passenden Ort (FB-28QG00TG):
| Meldung | Ziel |
|---|---|
| Social-Post zur Freigabe | Freigabe-Board, Post markiert und aufgeklappt (/dashboard/social/approvals?highlight=…) |
| Social-Post freigegeben / abgelehnt / Veröffentlichung fehlgeschlagen | Der Post selbst (/dashboard/social/{id}) |
| Neue Kommentare | Community mit Filter „Mit Kommentaren“ |
| Social-Kanal erneut verbinden | Kanäle-Einstellungen |
Fehlt bei älteren Einträgen der gespeicherte Link, leitet das Cockpit ihn aus Typ und Post-ID ab (relatedId oder metadata.draftId / entityId). Ohne Zugang zum Post erscheint eine normale 404- bzw. Leerseite — keine fremden Inhalte.
Bei Freigabe anfordern erhalten gewählte Prüfer zusätzlich:
| Kanal | Wann |
|---|---|
| Cockpit-Glocke + optional Desktop-Push | Immer (Glocke); Browser-Popup nach Opt-in unter Meine Benachrichtigungen — Freigabe-Anfragen mit hoher Priorität (bleiben sichtbar, bis geschlossen) |
| Sofort bei Freigabe-Anfrage (auch wenn Digest aktiv); Ablehnung/Publish-Fehler ebenfalls sofort | |
| Microsoft Teams (AgencyOS-Bot) | Nur wenn AGENCYOS_TEAMS_NOTIFY_URL und AGENCYOS_TEAMS_NOTIFY_SECRET gesetzt sind; Freigeber muss den Bot in Teams mindestens einmal geöffnet haben |
Details und API-Vertrag: AgencyOS-Integration → Teams-Benachrichtigungen.
Verlauf (Timeline)
Unter Social-Freigaben (Karte aufklappen) und im Social-Editor (Seitenleiste) erscheint der Verlauf pro Post: Erstellung, Freigabe-Link, Einreichung, Freigabe/Ablehnung, Veröffentlichung. Technisch: Tabelle social_post_draft_events — Migration 20260521190000_add_social_draft_events_SAFE.sql, API GET /api/social/drafts/[draftId]/events.
Im Dashboard (für Redaktion):
- Empfohlen: Shopping Center öffnen → Center wählen → Reiter Social Media
(/dashboard/content/centers/[centerId]?tab=social) — Kanal verbinden (Instagram, Facebook, Threads, LinkedIn, TikTok, Bluesky, X) oder vorhandenes Profil zuordnen. Kein Ticket an die Technik. - Alternativ: Sidebar Social Cockpit → Kanäle verknüpfen führt mit gewähltem Center auf denselben Reiter. Die Einstellungsseite bleibt für Super-Admin-Migration.
Pro Center Profile (Facebook, Instagram, …) zuordnen. Beim Anlegen von Social-Entwürfen werden verknüpfte Profile vorausgewählt.
Bildvorlagen (Canva-Rahmen)
| Was | Pro Center 0–n Bildvorlagen (PNG/WebP, oft Rahmen mit Freifläche) plus optionaler Canva-Link. Im Editor wählt die Redaktion die Vorlage; das fertige Beitragsbild lädt sie wie bisher hoch. |
| Warum | Viele Center arbeiten mit festen Vorlagen. Manche brauchen gar keine — deshalb ist nichts Pflicht, bis das Center den Schalter setzt. |
| Wer | Center-Betrieb (Vorlagen pflegen), Redaktion (auswählen). |
| Wo | Social-Kanäle (/dashboard/settings/social-accounts oder Center → Reiter Social Media) unten Bildvorlagen. Editor: Block unter den Medien. |
| So testen | 1) Center ohne Vorlagen: Editor zeigt keinen Block. 2) Eine Vorlage anlegen, Post öffnen, Vorlage wählen, fertiges Bild hochladen. 3) Schalter Vorlage beim Posten Pflicht an: Freigabe ohne Auswahl blockiert. 4) Zweites Center: dessen Vorlagen erscheinen nicht im ersten. |
Bewusst nicht: Canva-Login, Live-Bearbeitung in Canva oder automatisches Einfügen des Fotos in die Lücke. Der Canva-Link öffnet nur die Vorlage in einem neuen Tab.
Gewählte Vorlage liegt im Entwurf unter containers[0].options.socialTemplateId (kein neues Pflichtfeld in der Draft-Tabelle).
Technisch: Tabelle social_media_templates, Schalter ShoppingCenter.socialTemplateRequired (Default aus). APIs: GET/POST/PATCH /api/centers/{centerId}/social-templates, AgencyOS analog, MCP cockpit_social_templates. Migration 20260907180000_add_social_media_templates_SAFE.sql.
Technisch: Tabelle center_social_accounts, APIs:
GET/PUT/DELETE /api/social/center-accountsGET /api/social/outstand-accounts— verbundene KontenGET /api/social/outstand-accounts/connect— Anmeldung starten (centerId,network)GET /api/social/outstand-accounts/callback— Rückkehr nach Meta-Login, ordnet das Profil dem Center zu
Die OAuth-Callback-URL wird aus dem öffentlichen Dashboard-Host des laufenden Requests gebaut. Nach Meta/Outstand-Login leitet /api/social/outstand-accounts/callback zurück auf dieselbe öffentliche Domain (nicht localhost).
In Production darf NEXTAUTH_URL nicht http://localhost:3000 sein — sonst schlagen Connect-Start und Rückleitung fehl. Render: https://dashboard.cockpit-os.de (bzw. Org-Host).
Ohne Mapping werden beim Anlegen keine Accounts vorausgewählt.
Env
OUTSTAND_API_KEY— org-weit (Render Dashboard-Service)NEXTAUTH_URL— öffentliche Dashboard-URL (z. B.https://dashboard.cockpit-os.de); nichtlocalhostin Production — sonst schlägt „Kanal verbinden“ nach Meta-Login fehlOUTSTAND_ORG_ID— optional; braucht es nur, wenn noch kein Social-Profil in der Organisation hängt und der Quick „Kanal verbinden“ die öffentliche Anmelde-URL bauen mussOUTSTAND_WEBHOOK_SECRET— optional, HMAC für/api/webhooks/outstandCRON_SECRET— für/api/cron/outstand-sync(täglicher Metrik-Sync; GitHub Action Outstand Metrics Sync, 5:00 UTC)FAL_API_KEY— Bild-Assistent im Post-Editor (Qualitätsstufen Schnell/Schön/Wow)- OpenAI (oder konfigurierter Provider) — Caption-KI über bestehende AI-Einstellungen
AGENCYOS_TEAMS_NOTIFY_URL— optional; vollständige AgencyOS-URL für Social-Review → Teams (z. B.https://team.cockpit-os.de/api/integrations/notifications/social-review)AGENCYOS_TEAMS_NOTIFY_SECRET— optional; gemeinsames Bearer-Secret mit AgencyOS (nur Server)
Migration
Additive Tabellen: 20260521160000_add_social_outstand_SAFE.sql
Nutzungsstatistik: Seitenaufrufe werden anonymisiert erfasst. Im Umami-Dashboard nach diesem Pfad filtern: /dashboard/social-media-freigabe