Content
Sozialgespräche in ein wöchentliches Listening-Briefing verwandeln
Suche die X-Posts der letzten Woche zu Marke und Wettbewerbern, ergänze belegten Web-Kontext, lies die Seiten dahinter und archiviere jede Ausgabe, damit die nächste Woche mit Bekanntem beginnt.
Prompt kopieren
Ersetze die Felder in eckigen Klammern und füge den Prompt in Claude Code, Codex oder eine KI mit Terminalzugriff ein. Sie installiert den Felo-Skill, fragt vor Credits und führt den Workflow aus.
Führe ein Social-Listening-Briefing zu [Marke, Produkt oder Kategorie] durch. Beobachtungsbegriffe: [Marke], [Produktname], [Wettbewerbernamen], [Kategorie-Keywords]. Zeitraum: letzte [7 / 14] Tage. Zeitzone: [Zeitzone]. Zielgruppe: [Team]. Erlaubte Quellen: nur öffentliche X-Beiträge und öffentliche Webseiten. Erstelle: 1. Eine fünfzeilige Zusammenfassung, was sich im Gespräch verändert hat. 2. Themen mit dem, was Menschen sagen, den stützenden Beiträgen und dem abgedeckten Zeitraum. 3. Wettbewerbsnennungen: wer empfohlen wird und in welchem Kontext. 4. Risiken: Beschwerden, Ausfälle, wiederkehrende Fragen oder Gegenwind. 5. Nächste Schritte, geteilt in „jetzt antworten“, „beobachten“ und „an das Produkt geben“. 6. Eine Quellenliste mit jeder Beitrags- und Seiten-URL und ihrem Datum. Regeln: - Melde nur Beiträge und Seiten, die die API zurückgibt. Erfinde niemals Sentiment-Scores, Engagement-Zahlen, Zitate oder Quellen. - Behandle X als Signal, nicht als repräsentative Umfrage. Sage es, wenn die Stichprobe zu klein für Schlüsse ist. - Trenne die Worte des Kunden von deiner Zusammenfassung und zitiere kurz mit Link. - Löse den Zeitraum in explizite Start- und Enddaten auf und nenne die Zeitzone. - Bevor Credits verbraucht werden, zeige die geplanten Suchen und Extraktionen und warte auf meine Freigabe. - Antworte nicht, poste nicht, folge nicht und schreibe niemandem. Dieses Briefing ist schreibgeschützt. - Schreibe das Ergebnis nach ./social-listening.md und fasse es im Chat zusammen.
Die Kopie enthält auch die Installationsschritte und Sicherheitsregeln.
Das bekommst du
Beispielausgabe eines Laufs. Keine Live-Generierung.
Social-Listening-Briefing — 2026-10-30
Was sich geändert hat
- Beschwerden über den Export-Flow sind jetzt das Top-Thema.
- In Preis-Threads wird ein günstigerer Rivale empfohlen.
- Der Ausfall vom 2026-10-27 wird nicht mehr erwähnt.
Themen
- Exporte sind seit dem Update langsam — @example_dev: „Der Export-Button braucht jetzt Minuten für ein 40-Seiten-Dokument.“ (2026-10-28); @example_ops: „Sehen andere Exporte am Monatsende in der Queue?“ (2026-10-29)
- Eine günstigere Alternative wird empfohlen — Example Rival taucht in Threads auf, in denen nach einem niedrigeren Preis gefragt wird
Wettbewerber
Example Rival wird empfohlen, wenn nach einer günstigeren Alternative gefragt wird; die Empfehlung betrifft den Preis, nicht die Funktionen.
Risiken
Die Export-Beschwerde taucht in supportnahen Threads auf und könnte Abwanderungsgespräche erreichen.
Nächste Schritte
- Jetzt antworten: der Export-Thread vom 2026-10-28.
- Beobachten: ob sich die Beschwerde auf das API-Publikum ausbreitet.
- An das Produkt geben: Export-Latenz am Monatsende.
Quellen
- https://x.com/example_dev/status/... — 2026-10-28
- https://example.com/export-thread — 2026-10-29
Die konkreten Aufrufe
Für Entwickler: derselbe Workflow als kopierbarer Code in Ausführungsreihenfolge.
Konkrete API-Aufrufe zeigen
Posts der Woche suchen
Suche mit X Search nach Marke und Wettbewerbern in den letzten 7 Tagen und behalte Konten und Daten.
listening.ts const BASE = "https://openapi.felo.ai"; const headers = { Authorization: `Bearer ${process.env.FELO_API_KEY}`, "Content-Type": "application/json", }; async function felo<T>(path: string, body?: unknown): Promise<T> { const res = await fetch(`${BASE}${path}`, { method: body ? "POST" : "GET", headers, body: body ? JSON.stringify(body) : undefined, }); if (!res.ok) throw new Error(`${res.status}: ${await res.text()}`); return res.json() as Promise<T>; } type XData = { data: { tweets: { content: string; author: { username: string }; created_at: string; metrics: { retweet_count: number; favorite_count: number; reply_count: number }; url: string; }[]; }; }; const since = Math.floor((Date.now() - 7 * 24 * 60 * 60 * 1000) / 1000); const search = await felo<XData>("/v2/x/tweet/search", { query: '"Acme" OR "Acme app"', limit: 50, since_time: since, }); const posts = search.data.tweets;Beispielausgabe
{ "data": { "tweets": [ { "content": "The export flow is slow again.", "author": { "username": "example_dev" }, "created_at": "2026-10-28T09:14:00Z", "metrics": { "retweet_count": 4, "favorite_count": 21, "reply_count": 6 }, "url": "https://x.com/example_dev/status/..." } ] } }Belegten Web-Kontext ergänzen
Frage Chat nach dem Kontext der Diskussionen und hole eine belegte Seitenliste.
listening.ts type ChatData = { data: { answer: string; resources: { link: string; title: string; snippet: string }[]; }; }; const context = await felo<ChatData>("/v2/chat", { query: "Recent customer complaints and competitor mentions around Acme", }); const sources = context.data.resources.slice(0, 5);Beispielausgabe
{ "answer": "The main threads are …", "sources": [ { "link": "https://example.com/thread", "title": "…", "snippet": "…" } ] }Die Seiten dahinter lesen
Lies mit Web Fetch die zwei oder drei relevantesten Seiten und ergänze Fakten und Links.
listening.ts type ExtractData = { data: { content: string } }; const pages = await Promise.all( sources.slice(0, 3).map((source) => felo<ExtractData>("/v2/web/extract", { url: source.link, output_format: "markdown", with_readability: true, with_cache: true, }).then((page) => ({ ...source, content: page.data.content })), ), );Beispielausgabe
// pages[0].content "# Example thread summary\n\nExtracted page content…"
Wochenbericht nach Themen schreiben
Gliedere Markdown nach Themen, repräsentativen Posts, Kontext, Risiken und Fokuspunkten.
listening.ts const date = new Date().toISOString().slice(0, 10); const ranked = [...posts].sort( (a, b) => b.metrics.favorite_count - a.metrics.favorite_count, ); const brief = [ `# Social listening brief — ${date}`, "", "## What the web says", context.data.answer, "", "## What people are posting", ...ranked.slice(0, 10).map( (post) => `- @${post.author.username} (${post.created_at.slice(0, 10)}): ${post.content}\n ${post.url}`, ), "", "## Pages behind the answer", ...pages.map((page) => `- [${page.title}](${page.link})`), "", "## Sources", ...sources.map((source) => `- [${source.title}](${source.link})`), ].join("\n"); console.log(brief);Archivieren und mit Vorwoche vergleichen
Speichere Bericht und Quellen im LiveDoc und suche in der nächsten Woche die Vorausgabe zum Vergleich.
listening.ts type LiveDocData = { data: { short_id: string } }; const archive = await felo<LiveDocData>("/v2/livedocs", { name: "Social listening archive", description: "One document resource per weekly brief", }); await felo(`/v2/livedocs/${archive.data.short_id}/resources/doc`, { title: `Social listening — ${date}`, content: brief, }); type Retrieved = { data: { title: string; content: string; score: number }[] }; const previous = await felo<Retrieved>( `/v2/livedocs/${archive.data.short_id}/resources/retrieve`, { query: "what changed since last week" }, ).then((res) => res.data.filter((hit) => hit.score >= 0.7));Beispielausgabe
[ { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 } ]
Enthalten
- Datierte X-Posts der Woche
- Belegter Web-Kontext
- Nach Themen gruppierte Zusammenfassung
- Direkt teilbarer Wochenbericht
- LiveDoc mit jeder Ausgabe
Was es nicht macht
- X-Abdeckung ist unvollständig und repräsentiert nicht alle Nutzer
- Keine eindeutigen Stimmungsaussagen
- Postet oder antwortet nicht automatisch
- Keine DMs oder privaten Communities
- Ein Lauf pro Woche; Zeitplanung übernimmt dein Agent oder cron
Fragen
Was zählt als Quelle im Briefing?
Jeder X-Post behält Link, Konto und Datum; Web-Kontext kommt aus öffentlichen Chat- und Web-Fetch-Seiten. Aussagen ohne Quelle werden nicht aufgenommen.
Kann ich Wettbewerber mitverfolgen?
Ja. Suche Marke und Wettbewerber zusammen und gruppiere sie im Bericht.
Misst es Stimmung?
Es fasst Themen und Ton zusammen, markiert das aber als redaktionelle Einschätzung und behauptet keinen genauen Stimmungsanteil.
Wie weit reicht der Blick?
Standard sind die letzten 7 Tage für den Wochenbericht; für ein größeres Fenster ändere `since_time`.
Kann es wöchentlich laufen?
Ja. Setze denselben Prompt in cron oder einen Agent-Scheduler und schreibe in dasselbe LiveDoc.
Was kostet ein Briefing?
X Search, Chat und Seitenextraktion werden nutzungsbasiert abgerechnet; aktuelle Preise stehen auf der Preisseite, und der Prompt fragt vor Ausgaben nach Bestätigung.
Verwandte Workflows
Eine Frage in ein belegtes Research-Briefing verwandeln
Frage das Web, speichere die Seiten hinter der Antwort als Markdown, ergänze, was Praktiker auf X sagen, und halte die Belege in einem LiveDoc fest, das du später erneut durchsuchen kannst.
Workflow öffnenResearchEin Wettbewerbs-Teardown erstellen, das dein Vertrieb direkt nutzt
Sammle die Seiten des Wettbewerbers, die Berichterstattung darum und die Stimmen von Käufern auf X und baue daraus ein Teardown, in dem jede Aussage Quelle, Datum und Status trägt.
Workflow öffnenContentEinen täglichen KI-News-Digest bauen, den dein Team wirklich liest
Hole eine belegte News-Zusammenfassung, ergänze Diskussionen von Praktikern auf X, nimm ein Video-Transkript auf, verfasse die Ausgabe in Markdown und archiviere sie im LiveDoc.
Workflow öffnenMach es zu deinem
Dasselbe Rezept, angepasst an deinen tatsächlichen Ablauf.
Nur ein Thema
Beschränke dich auf einen Launch oder eine Debatte, damit das Briefing fokussiert bleibt.
YouTube-Meinungen ergänzen
Ergänze ein Video-Transkript, markiere es aber als persönliche Erfahrung.
Monatsbericht daraus machen
Stelle die Frequenz auf monatlich um und bediene Marke und PR.
Weiter
Die Referenzseiten hinter diesem Rezept und die nächsten Schritte.