Content
Maak van socialgesprekken een wekelijkse luisterbrief
Zoek de X-posts van de afgelopen week over je merk en concurrenten, voeg onderbouwde webcontext toe, lees de pagina’s erachter en archiveer elke editie zodat de volgende week bij het bekende begint.
Prompt kopiëren
Vervang de velden tussen blokhaken en plak in Claude Code, Codex of een AI met terminaltoegang. Die installeert de Felo-skill, vraagt voor credits en voert de workflow uit.
Voer een social-listeningbrief uit voor [merk, product of categorie]. Volgtermen: [merk], [productnaam], [concurrentnamen], [categorie-zoekwoorden]. Tijdvenster: laatste [7 / 14] dagen. Tijdzone: [tijdzone]. Publiek: [team]. Toegestane bronnen: alleen publieke X-posts en publieke webpagina’s. Lever: 1. Een samenvatting van vijf regels over wat er in het gesprek veranderde. 2. Thema’s, elk met wat mensen zeggen, de posts die het ondersteunen en de periode die ze dekken. 3. Vermeldingen van concurrenten: wie wordt aanbevolen, en in welke context. 4. Risico’s: klachten, storingen, terugkerende vragen of weerstand. 5. Vervolgstappen, verdeeld in ‘nu antwoorden’, ‘volgen’ en ‘naar product’. 6. Een bronnenlijst met elke post en pagina, URL en datum. Regels: - Rapporteer alleen posts en pagina’s die de API teruggeeft. Verzin nooit sentiment scores, engagementcijfers, citaten of bronnen. - Behandel X als signaal, niet als representatief onderzoek. Zeg het wanneer de steekproef te klein is om conclusies te trekken. - Scheid de woorden van de klant van jouw samenvatting en citeer kort met link. - Zet het tijdvenster om in expliciete begin- en einddatums en noem de tijdzone. - Voordat er credits worden gebruikt, toon je de geplande zoekopdrachten en extracties en wacht je op mijn goedkeuring. - Antwoord niet, post niet, volg niet en stuur niemand een bericht. Deze brief is alleen-lezen. - Schrijf het resultaat naar ./social-listening.md en vat het samen in de chat.
De kopie bevat ook de installatiestappen en veiligheidsregels.
Wat je krijgt
Voorbeelduitvoer van een run. Geen live generatie.
Social-listeningbrief — 2026-10-30
Wat veranderde
- Klachten over de exportflow zijn nu het hoofdthema.
- Een goedkopere rivaal wordt aanbevolen in prijsthreads.
- De storing van 2026-10-27 wordt niet meer genoemd.
Thema’s
- Export is traag sinds de update — @example_dev: “De exportknop kost nu minuten voor een document van 40 pagina’s.” (2026-10-28); @example_ops: “Ziet iemand anders export in de wachtrij aan het eind van de maand?” (2026-10-29)
- Een goedkoper alternatief wordt aanbevolen — Example Rival verschijnt in threads waar om een lagere prijs wordt gevraagd
Concurrenten
Example Rival wordt aanbevolen als om een goedkoper alternatief wordt gevraagd; de aanbeveling gaat over prijs, niet functies.
Risico’s
De exportklacht verschijnt in supportnabije threads en kan verloopgesprekken bereiken.
Volgende
- Nu antwoorden: de exportthread van 2026-10-28.
- Volgen: of de klacht zich verspreidt naar het API-publiek.
- Naar product: exportlatency aan het eind van de maand.
Bronnen
- https://x.com/example_dev/status/... — 2026-10-28
- https://example.com/export-thread — 2026-10-29
De exacte aanroepen
Voor ontwikkelaars: dezelfde workflow als kopieerbare code in uitvoeringsvolgorde.
Exacte API-aanroepen tonen
Zoek de posts van de week
Gebruik X Search voor merk en concurrenten in de laatste 7 dagen en bewaar accounts en datums.
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;Voorbeelduitvoer
{ "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/..." } ] } }Voeg onderbouwde webcontext toe
Vraag Chat naar de context van de discussies en haal een onderbouwde paginalijst op.
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);Voorbeelduitvoer
{ "answer": "The main threads are …", "sources": [ { "link": "https://example.com/thread", "title": "…", "snippet": "…" } ] }Lees de pagina’s erachter
Lees met Web Fetch de twee of drie relevantste pagina’s en voeg feiten en links toe.
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 })), ), );Voorbeelduitvoer
// pages[0].content "# Example thread summary\n\nExtracted page content…"
Schrijf het weekrapport per thema
Stel Markdown samen met thema’s, representatieve posts, context, risico’s en aandachtspunten.
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);Archiveer en vergelijk met vorige week
Bewaar rapport en bronnen in de LiveDoc en zoek volgende week de vorige editie op.
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));Voorbeelduitvoer
[ { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 } ]
Wat inbegrepen is
- Gedateerde X-posts van de week
- Onderbouwde webcontext
- Samenvatting van discussies per thema
- Direct deelbaar weekrapport
- LiveDoc met elke editie
Wat het niet doet
- X-dekking is onvolledig en vertegenwoordigt niet alle gebruikers
- Geen definitieve sentimentconclusies
- Plaatst of antwoordt niet automatisch
- Geen DM’s of privécommunities
- Eén run per week; planning hoort bij je agent of cron
Vragen
Wat telt als bron?
Elke X-post behoudt link, account en datum; webcontext komt uit openbare Chat- en Web Fetch-pagina’s. Beweringen zonder bron komen niet binnen.
Kan ik concurrenten volgen?
Ja. Zoek merk en concurrenten samen en groepeer in het rapport.
Meet het sentiment?
Het vat thema’s en toon samen, maar markeert dat als redactionele beoordeling en claimt geen exact sentimentpercentage.
Hoe ver kijkt het terug?
Standaard de laatste 7 dagen voor het weekrapport; voor een groter venster wijzig je `since_time`.
Kan het wekelijks draaien?
Ja. Zet dezelfde prompt in cron of een agentscheduler en schrijf in dezelfde LiveDoc.
Wat kost een brief?
X Search, Chat en pagina-extractie worden op gebruik gefactureerd; actuele tarieven staan op de prijspagina en de prompt vraagt goedkeuring voor uitgaven.
Gerelateerde workflows
Maak van één vraag een onderbouwde researchbrief
Vraag het web, bewaar de pagina’s achter het antwoord als Markdown, voeg toe wat practitioners op X zeggen en houd het bewijs in een LiveDoc dat je later opnieuw kunt doorzoeken.
Workflow openenResearchBouw een concurrentieanalyse die je salesteam direct kan gebruiken
Verzamel de pagina’s van de concurrent, de berichtgeving eromheen en wat kopers op X zeggen, en zet een analyse in elkaar waarin elke bewering bron, datum en status heeft.
Workflow openenContentPubliceer een dagelijkse AI-nieuwsdigest die je team echt leest
Haal een onderbouwde nieuwssamenvatting, voeg discussies van practitioners op X toe, neem één videotranscript op, stel de editie samen in Markdown en archiveer in een LiveDoc.
Workflow openenMaak het van jou
Hetzelfde recept, aangepast aan hoe je echt oplevert.
Alleen één onderwerp
Beperk tot één launch of discussie om de brief te focussen.
Voeg YouTube-meningen toe
Vul aan met een videotranscript, maar markeer als persoonlijke ervaring.
Maak er een maandrapport van
Zet de frequentie op maandelijks voor merk en PR.
Verder
De referentiepagina’s achter dit recept en de volgende stappen.