Contenido
Convierte las conversaciones sociales en un brief semanal de escucha
Busca los posts de X de la última semana sobre tu marca y competidores, añade contexto web con fuentes, lee las páginas detrás y archiva cada edición para que la siguiente semana empiece por lo conocido.
Copiar el prompt
Sustituye los campos entre corchetes y pégalo en Claude Code, Codex o cualquier IA con acceso a terminal. Instala el skill de Felo, pregunta antes de gastar créditos y ejecuta el flujo.
Ejecuta un brief de escucha social para [marca, producto o categoría]. Términos vigilados: [marca], [nombre del producto], [nombres de competidores], [palabras clave de categoría]. Ventana: últimos [7 / 14] días. Zona horaria: [zona]. Audiencia: [equipo]. Fuentes permitidas: solo publicaciones públicas de X y páginas web públicas. Genera: 1. Un resumen de cinco líneas de lo que cambió en la conversación. 2. Temas, cada uno con lo que dice la gente, las publicaciones que lo apoyan y el rango de fechas que cubren. 3. Menciones de competidores: a quién se recomienda y en qué contexto. 4. Riesgos: quejas, caídas, preguntas repetidas o reacciones negativas. 5. Próximos pasos, divididos en «responder ahora», «vigilar» y «pasar a producto». 6. Una lista de fuentes con cada publicación y página, URL y fecha. Reglas: - Reporta solo publicaciones y páginas que devuelve la API. Nunca inventes puntuaciones de sentimiento, cifras de interacción, citas ni fuentes. - Trata X como señal, no como encuesta representativa. Dilo cuando la muestra sea demasiado pequeña para concluir. - Separa las palabras del cliente de tu resumen y cita brevemente con enlace. - Convierte la ventana en fechas explícitas de inicio y fin e indica la zona horaria. - Antes de gastar créditos, muestra las búsquedas y extracciones previstas y espera mi aprobación. - No respondas, publiques, sigas ni escribas a nadie. Este brief es de solo lectura. - Escribe el resultado en ./social-listening.md y resúmelo en el chat.
La copia también incluye los pasos de instalación y las reglas de seguridad.
Lo que obtienes
Salida de ejemplo de una ejecución. No es generación en vivo.
Informe de escucha social — 2026-10-30
Qué cambió
- Las quejas sobre el flujo de exportación son ahora el tema principal.
- En hilos de precios se recomienda un rival más barato.
- La caída del 2026-10-27 ya no se menciona.
Temas
- Las exportaciones van lentas desde la actualización — @example_dev: «El botón de exportar ahora tarda minutos para un documento de 40 páginas.» (2026-10-28); @example_ops: «¿Alguien más ve exportaciones en cola a fin de mes?» (2026-10-29)
- Se recomienda una alternativa más barata — Example Rival aparece en hilos donde se pide un precio más bajo
Competidores
Example Rival se recomienda cuando se pide una alternativa más barata; la recomendación va de precio, no de funciones.
Riesgos
La queja de exportación aparece en hilos cercanos a soporte, así que puede llegar a conversaciones de abandono.
Siguiente
- Responder ahora: el hilo de exportación del 2026-10-28.
- Vigilar: si la queja se extiende al público de API.
- Pasar a producto: latencia de exportación a fin de mes.
Fuentes
- https://x.com/example_dev/status/... — 2026-10-28
- https://example.com/export-thread — 2026-10-29
Las llamadas exactas
Para desarrolladores: el mismo flujo como código, en orden de ejecución.
Mostrar las llamadas reales a la API
Busca los posts de la semana
Usa X Search para marca y competidores en los últimos 7 días, guardando cuentas y fechas.
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;Salida de ejemplo
{ "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/..." } ] } }Añade contexto web con fuentes
Pregunta a Chat por el contexto de las discusiones y obtén una lista de páginas con fuentes.
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);Salida de ejemplo
{ "answer": "The main threads are …", "sources": [ { "link": "https://example.com/thread", "title": "…", "snippet": "…" } ] }Lee las páginas detrás
Con Web Fetch, lee las dos o tres páginas más relevantes y añade hechos y enlaces.
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 })), ), );Salida de ejemplo
// pages[0].content "# Example thread summary\n\nExtracted page content…"
Escribe el informe por tema
Compón un Markdown con temas, posts representativos, contexto, riesgos y focos.
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);Archiva y compara con la semana anterior
Guarda el informe y las fuentes en el LiveDoc y consulta la edición anterior la semana siguiente.
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));Salida de ejemplo
[ { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 } ]
Qué incluye
- Posts de X de la semana con fechas
- Contexto web con fuentes
- Resumen de discusiones por tema
- Informe semanal listo para compartir
- LiveDoc con cada edición
Qué no hace
- La cobertura de X es incompleta y no representa a todos los usuarios
- Sin conclusiones definitivas de sentimiento
- No publica ni responde automáticamente
- Sin mensajes privados ni comunidades privadas
- Una ejecución por semana; la programación es de tu agent o cron
Preguntas
¿Qué cuenta como fuente?
Cada post de X conserva enlace, cuenta y fecha; el contexto web viene de páginas públicas de Chat y Web Fetch. Las afirmaciones sin fuente no entran.
¿Puedo seguir competidores?
Sí. Busca marca y competidores juntos y agrúpalos en el informe.
¿Mide sentimiento?
Resume temas y tono, pero lo marca como juicio editorial y no afirma un porcentaje exacto.
¿Hasta dónde mira?
Por defecto los últimos 7 días para el informe semanal; para una ventana mayor cambia `since_time`.
¿Puedo ejecutarlo cada semana?
Sí. Pon el mismo prompt en cron o un planificador de agent y escribe en el mismo LiveDoc.
¿Cuánto cuesta un brief?
X Search, Chat y extracción se facturan por uso; las tarifas están en la página de precios y el prompt pide aprobación antes de gastar.
Flujos relacionados
Convierte una pregunta en un brief de investigación con fuentes
Pregunta a la web, guarda las páginas detrás de la respuesta como Markdown, añade lo que dicen los profesionales en X y conserva las evidencias en un LiveDoc que puedes consultar después.
Abrir el flujo de trabajoInvestigaciónCrea un análisis de competencia que tu equipo de ventas pueda usar
Reúne las páginas del competidor, la cobertura a su alrededor y lo que dicen los compradores en X, y monta un análisis donde cada afirmación lleva fuente, fecha y estado.
Abrir el flujo de trabajoContenidoPublica un resumen diario de IA que tu equipo realmente lea
Obtén un resumen con fuentes, añade lo que publican los profesionales en X, consigue una transcripción de vídeo, compón la edición en Markdown y archívala en un LiveDoc.
Abrir el flujo de trabajoHazlo tuyo
La misma receta, adaptada a cómo entregas de verdad.
Solo un tema
Restringe a un lanzamiento o polémica para enfocar el brief.
Añade opiniones de YouTube
Complementa con una transcripción de vídeo, pero marca como experiencia personal.
Conviértelo en mensual
Pasa a frecuencia mensual para marca y relaciones públicas.
Seguir
Las páginas de referencia detrás de esta receta y los siguientes pasos.