Felo API PlatformFelo API Platform

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.

Temps25 minutesNiveauIntermédiaireMis à jour2026-10-30
Pour quiMarque et communicationMarketing produitGestion de communauté

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.

Exemple de brief (extrait)

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

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

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

Les pages de référence derrière cette recette et la suite.