Contenu
Transformez les conversations sociales en brief d’écoute hebdomadaire
Cherchez les posts X de la semaine sur votre marque et vos concurrents, ajoutez un contexte web sourcé, lisez les pages derrière et archivez chaque édition pour que la semaine suivante parte du connu.
Copier le prompt
Remplacez les champs entre crochets, puis collez dans Claude Code, Codex ou toute IA avec accès au terminal. Elle installe le skill Felo, demande avant de dépenser des crédits et exécute le workflow.
Réalise un brief d’écoute sociale pour [marque, produit ou catégorie]. Termes surveillés : [marque], [nom du produit], [noms des concurrents], [mots-clés de catégorie]. Période : [7 / 14] derniers jours. Fuseau : [fuseau]. Public : [équipe]. Sources autorisées : publications X publiques et pages web publiques uniquement. Produis : 1. Un résumé en cinq lignes de ce qui a changé dans la conversation. 2. Des thèmes, chacun avec ce que disent les gens, les publications qui l’appuient et la période couverte. 3. Les mentions concurrentes : qui est recommandé, et dans quel contexte. 4. Les risques : plaintes, pannes, questions récurrentes ou réactions négatives. 5. Les prochaines étapes, séparées en « répondre maintenant », « surveiller » et « transmettre au produit ». 6. Une liste de sources avec chaque publication et page, URL et date. Règles : - Ne reporte que les publications et pages renvoyées par l’API. N’invente jamais de score de sentiment, de chiffre d’engagement, de citation ou de source. - Traite X comme un signal, pas comme un sondage représentatif. Dis-le quand l’échantillon est trop petit pour conclure. - Sépare les mots du client de ton résumé, et cite brièvement avec un lien. - Transforme la période en dates de début et de fin explicites et indique le fuseau. - Avant de consommer des crédits, montre les recherches et extractions prévues et attends mon accord. - Ne réponds pas, ne publie pas, ne suis personne et n’écris à personne. Ce brief est en lecture seule. - Écris le résultat dans ./social-listening.md et résume-le dans le chat.
La copie inclut aussi les étapes d'installation et les règles de sécurité.
Ce que vous obtenez
Exemple de sortie d'une exécution. Pas de génération en direct.
Brief d’écoute sociale — 2026-10-30
Ce qui a changé
- Les plaintes sur l’export sont devenues le thème principal.
- Un rival moins cher est recommandé dans les fils sur les prix.
- La panne du 2026-10-27 n’est plus mentionnée.
Thèmes
- Les exports sont lents depuis la mise à jour — @example_dev : « Le bouton d’export prend maintenant des minutes pour un document de 40 pages. » (2026-10-28) ; @example_ops : « D’autres voient des exports en file en fin de mois ? » (2026-10-29)
- Une alternative moins chère est recommandée — Example Rival apparaît dans les fils où l’on demande un prix plus bas
Concurrents
Example Rival est recommandé quand on demande une alternative moins chère ; la recommandation porte sur le prix, pas sur les fonctionnalités.
Risques
La plainte sur l’export apparaît dans des fils proches du support ; elle peut atteindre les conversations de attrition.
Suite
- Répondre maintenant : le fil export du 2026-10-28.
- Surveiller : la plainte s’étend-elle au public API.
- Transmettre au produit : latence d’export en fin de mois.
Sources
- https://x.com/example_dev/status/... — 2026-10-28
- https://example.com/export-thread — 2026-10-29
Les appels exacts
Pour les développeurs : le même workflow en code, dans l'ordre d'exécution.
Afficher les appels API
Cherchez les posts de la semaine
Utilisez X Search pour la marque et les concurrents sur 7 jours, en gardant comptes et dates.
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;Exemple de sortie
{ "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/..." } ] } }Ajoutez un contexte web sourcé
Demandez à Chat le contexte des discussions et obtenez une liste de pages sourcées.
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);Exemple de sortie
{ "answer": "The main threads are …", "sources": [ { "link": "https://example.com/thread", "title": "…", "snippet": "…" } ] }Lisez les pages derrière
Avec Web Fetch, lisez les deux ou trois pages les plus pertinentes et ajoutez faits et liens.
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 })), ), );Exemple de sortie
// pages[0].content "# Example thread summary\n\nExtracted page content…"
Écrivez le rapport par thème
Composez un Markdown avec thèmes, posts représentatifs, contexte, risques et points d’attention.
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);Archivez et comparez à la semaine précédente
Enregistrez le rapport et les sources dans le LiveDoc, puis consultez l’édition précédente la semaine suivante.
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));Exemple de sortie
[ { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 } ]
Ce qui est inclus
- Posts X datés de la semaine
- Contexte web sourcé
- Synthèse des discussions par thème
- Rapport hebdomadaire prêt à partager
- LiveDoc avec chaque édition
Ce qu'elle ne fait pas
- La couverture X est incomplète et ne représente pas tous les utilisateurs
- Pas de conclusions définitives sur le sentiment
- Ne publie pas et ne répond pas automatiquement
- Pas de messages privés ni de communautés privées
- Une exécution par semaine ; la planification revient à votre agent ou cron
Questions
Qu’est-ce qui compte comme source ?
Chaque post X garde lien, compte et date ; le contexte web vient de pages publiques Chat et Web Fetch. Les affirmations sans source ne sont pas incluses.
Puis-je suivre les concurrents ?
Oui. Cherchez marque et concurrents ensemble et regroupez dans le rapport.
Mesure-t-il le sentiment ?
Il résume thèmes et ton, mais le marque comme jugement éditorial et n’affirme pas un pourcentage exact.
Jusqu’où remonte-t-il ?
Par défaut les 7 derniers jours pour le rapport hebdomadaire ; pour une fenêtre plus large, modifiez `since_time`.
Puis-je l’exécuter chaque semaine ?
Oui. Placez le même prompt dans un cron ou un planificateur d’agent et écrivez dans le même LiveDoc.
Combien coûte un brief ?
Recherche X, Chat et extraction de pages sont facturés à l’usage ; les tarifs actuels sont sur la page des prix, et le prompt demande votre accord avant dépense.
Workflows liés
Transformez une question en brief de recherche sourcé
Interrogez le web, récupérez les pages derrière la réponse en Markdown, ajoutez ce que disent les praticiens sur X, puis conservez les preuves dans un LiveDoc que vous pourrez interroger plus tard.
Ouvrir le workflowRechercheConstruisez une analyse concurrentielle utilisable par votre équipe commerciale
Rassemblez les pages du concurrent, la couverture autour de lui et ce que disent les acheteurs sur X, puis composez une analyse où chaque affirmation porte une source, une date et un statut.
Ouvrir le workflowContenuPubliez un résumé quotidien d’actualité IA que votre équipe lit vraiment
Obtenez une synthèse sourcée, ajoutez ce que publient les praticiens sur X, récupérez une transcription vidéo, composez l’édition en Markdown et archivez-la dans un LiveDoc.
Ouvrir le workflowAdaptez-la
La même recette, adaptée à votre façon de livrer.
Un seul sujet
Restreignez à un lancement ou une polémique pour focaliser le brief.
Ajoutez les avis YouTube
Complétez avec une transcription vidéo, mais marquez comme expérience personnelle.
Transformez en rapport mensuel
Passez à une fréquence mensuelle pour la marque et les relations presse.
Aller plus loin
Les pages de référence derrière cette recette et la suite.