Social Media Freigabe (Outstand)
Lies zuerst Social Media — Einstieg (Checkliste für Redaktion). Diese Seite ist die vollständige Referenz.
Social Cockpit läuft nicht über MCP. Posts, Freigaben, Engage und Performance bedient ihr im Dashboard — auch wenn ihr sonst viel mit Claude oder v0 arbeitet. 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: Outstand-Profil verknüpfen. 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) Optional Selbst freigeben (jeder mit Center-Zugang) oder Freigabe-Link für Gast. 5) Mit AgencyOS-Anbindung: zusätzlich Teams-DM vom Bot (Freigeber muss Bot einmal geöffnet haben). |
| Betrieb | OUTSTAND_API_KEY, optional 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.
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 Outstand-Profile | Kanäle verknüpfen |
Darunter optional Follower/Reichweite (Monat), 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 | /dashboard/settings/social-accounts | Outstand-Profile pro Center |
| Post erstellen | /dashboard/social/new | Post anlegen |
| Freigaben | /dashboard/social/approvals | Social-Freigaben (4 Status-Spalten) |
| 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).
Outstand in Community & Antworten:
| Funktion | Über Outstand-API |
|---|---|
| Kommentare lesen | Ja |
| Antwort als Thread unter Kommentar | Ja (platform_post_id = Kommentar-ID) |
| Emoji in Antwort | Ja (Editor im Cockpit) |
| Post-Metriken (Likes, Kommentarzahl) | Ja |
| Einzelnen Kommentar liken | Nein — native App (FB/IG) |
| Kommentar verbergen | Nein — native App (FB/IG) |
| Posts die nicht über Outstand veröffentlicht wurden | Nein |
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), Monats-Interaktionen, darunter alle Posts 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 (Summe Reach aller Posts im laufenden Kalendermonat; Fallback Impressions wenn Reach fehlt)
- Top-Post des Monats (stärkster Post im Kalendermonat nach Reach → Impressions → Interaktionen)
- Interaktionen (eigene Karte): Likes, Kommentare und Geteilt als Monatssumme über alle synchronisierten Posts; in der Post-Liste pro Eintrag dieselben Werte im Detail
- 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/Karussell/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“, „Karussell“), Meta-Zeile (Eingereicht von, Center, Termin), Wartet auf (Avatare + Namen der gewählten Prüfer), aufklappbares Detail-Panel (Caption, 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 und (ohne Digest) E-Mail. 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).
Website-Freigaben bleiben unter /dashboard/workflow.
Im Content Planner (/dashboard/content/planner) erscheinen Social-Posts am geplanten Termin (scheduledAt) bzw. Veröffentlichungsdatum — Filter-Chip Social.
- 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“). Der tägliche Outstand-Cron prüft zusätzlich aktive Center.
- Bearbeiten: In Social Freigaben Button Editor oder
/dashboard/social/[draftId] - Editor (
/dashboard/social/new): zweispaltiges Layout (volle Seitenbreite) — Center für diesen Post unabhängig vom Header-Switcher wählen- Emoji-Button neben dem Textfeld (Smiley) — Emojis direkt einfügen, ohne Tastatur-Hinweis
- Medienvorschau: Thumbnail anklicken → Vergrößern (Lightbox)
- Organisation filtern → Alle wählen oder einzelne Center per Checkbox ab-/auswählen
- Kanäle beziehen sich nur auf die im Editor gewählten Center; fehlende Outstand-Profile werden pro Center mit Link zum Reiter Social Media genannt
- Veröffentlichen (für Freigabe-Rollen direkt an Outstand), Zur Freigabe, Entwurf
- KI Caption: Stichworte eingeben → Button Caption — Text orientiert sich an den im Editor gewählten Centern (Name, Stadt, Beschreibung, passende Shops/Events/Angebote aus der DB) und an den gewählten Kanälen (Plattform-Regeln, v. a. Facebook ohne Hashtags; bei Facebook + Instagram optional Hashtags als Erstkommentar). System-Prompt:
socialCaptionGenerator(Quellcode:apps/dashboard/src/lib/social-caption-prompts.ts) - Bild-Assistent: Stichworte oder eigene Bildidee → Bild zaubern; Qualität wählen (Schnell / Schön / Wow) — ohne Technik-Jargon in der UI (Server:
FAL_API_KEY) - 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). - Termin & Format (aufklappbar): Post-Typ, geplante Veröffentlichung
- Aus Dispatch: E-Mail → Entwurf → Tab Social Media
Nach Freigabe: Outstand POST /v1/posts/ — Medien als containers[].media mit { url, filename }. Optional Erster Kommentar im Editor (wird nach Live-Gang gepostet). Kanal-Status (Facebook/Instagram …) erscheint als Badges nach 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).
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.
Bei Freigabe anfordern erhalten gewählte Prüfer zusätzlich:
| Kanal | Wann |
|---|---|
| Cockpit-Glocke + optional Desktop-Push | Immer (Glocke); Browser-Popup nur nach Opt-in unter Glocke → Desktop-Benachrichtigungen einrichten |
| Wenn kein täglicher E-Mail-Digest aktiv | |
| 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) - Alternativ: Sidebar Social Cockpit → Kanäle verknüpfen
(/dashboard/settings/social-accounts) — dort Center wählen und Outstand-Profile verknüpfen
Pro Center Outstand-Profile (Facebook, Instagram, …) zuordnen. Beim Anlegen von Social-Entwürfen werden verknüpfte Profile vorausgewählt.
Technisch: Tabelle center_social_accounts, APIs:
GET/PUT/DELETE /api/social/center-accountsGET /api/social/outstand-accounts— verbundene Outstand-Konten
Ohne Mapping werden beim Anlegen keine Accounts vorausgewählt.
Env
OUTSTAND_API_KEY— org-weit (Render Dashboard-Service)OUTSTAND_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