Felo API PlatformFelo API Platform

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.

Tiempo25 minutosNivelIntermedioActualizado2026-10-30
Para quiénMarca y comunicaciónMarketing de productoGestión de comunidad

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.

Ejemplo de informe (extracto)

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

  1. 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)
  2. 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
  1. 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/..."
      }
    ] } }
  2. 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": "…" }
      ]
    }
  3. 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…"
  4. 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);
  5. 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

Hazlo 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.

Las páginas de referencia detrás de esta receta y los siguientes pasos.