Felo API PlatformFelo API Platform

Conteúdo

Transforme conversas sociais em um briefing semanal de escuta

Pesquise os posts do X da última semana sobre sua marca e concorrentes, adicione contexto web com fontes, leia as páginas por trás e arquive cada edição para a próxima semana começar do que já se sabe.

Tempo25 minutosNívelIntermediárioAtualizado2026-10-30
Para quemMarca e comunicaçãoMarketing de produtoGestão de comunidade

Copiar o prompt

Substitua os campos entre colchetes e cole no Claude Code, Codex ou qualquer IA com acesso ao terminal. Ela instala a skill da Felo, pergunta antes de gastar créditos e executa o fluxo.

Execute um briefing de social listening para [marca, produto ou categoria].

Termos monitorados: [marca], [nome do produto], [nomes de concorrentes], [palavras-chave da categoria].
Janela: últimos [7 / 14] dias. Fuso: [fuso]. Público: [equipe].
Fontes permitidas: apenas posts públicos do X e páginas web públicas.

Produza:
1. Um resumo de cinco linhas do que mudou na conversa.
2. Temas, cada um com o que as pessoas dizem, os posts que sustentam e o intervalo de datas coberto.
3. Menções a concorrentes: quem está sendo recomendado e em qual contexto.
4. Riscos: reclamações, quedas, perguntas repetidas ou reação negativa.
5. Próximos passos, divididos em “responder agora”, “observar” e “levar para produto”.
6. Uma lista de fontes com cada post e página, URL e data.

Regras:
- Relate apenas posts e páginas que a API retorna. Nunca invente pontuação de sentimento, números de engajamento, citações ou fontes.
- Trate o X como sinal, não como pesquisa representativa. Diga quando a amostra é pequena demais para concluir.
- Separe as palavras do cliente do seu resumo e cite brevemente com link.
- Transforme a janela em datas explícitas de início e fim e informe o fuso.
- Antes de gastar créditos, mostre as buscas e extrações planejadas e aguarde minha aprovação.
- Não responda, publique, siga nem mande mensagem para ninguém. Este briefing é somente leitura.
- Grave o resultado em ./social-listening.md e resuma no chat.

A cópia também inclui os passos de instalação e as regras de segurança.

O que você recebe

Saída de exemplo de uma execução. Não é geração ao vivo.

Exemplo de briefing (trecho)

Briefing de social listening — 2026-10-30

O que mudou

  • Reclamações sobre o fluxo de exportação são agora o tema principal.
  • Um rival mais barato está sendo recomendado em threads de preço.
  • A queda de 2026-10-27 não é mais mencionada.

Temas

  1. Exportações lentas desde a atualização — @example_dev: “O botão de exportar agora leva minutos para um documento de 40 páginas.” (2026-10-28); @example_ops: “Alguém mais vendo exportações na fila no fim do mês?” (2026-10-29)
  2. Uma alternativa mais barata está sendo recomendada — Example Rival aparece em threads em que pedem preço menor

Concorrentes

Example Rival é recomendado quando pedem alternativa mais barata; a recomendação é sobre preço, não recursos.

Riscos

A reclamação de exportação aparece em threads próximas do suporte, então pode chegar a conversas de cancelamento.

Próximo

  • Responder agora: a thread de exportação de 2026-10-28.
  • Observar: se a reclamação se espalha para o público de API.
  • Levar ao produto: latência de exportação no fim do mês.

Fontes

  • https://x.com/example_dev/status/... — 2026-10-28
  • https://example.com/export-thread — 2026-10-29

As chamadas exatas

Para desenvolvedores: o mesmo fluxo em código, na ordem de execução.

Mostrar as chamadas reais da API
  1. Pesquise os posts da semana

    Use o X Search para marca e concorrentes nos últimos 7 dias, guardando perfis e datas.

    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;

    Saída de exemplo

    { "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. Adicione contexto web com fontes

    Pergunte ao Chat o contexto das discussões e obtenha a lista de páginas com fontes.

    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);

    Saída de exemplo

    {
      "answer": "The main threads are …",
      "sources": [
        { "link": "https://example.com/thread", "title": "…", "snippet": "…" }
      ]
    }
  3. Leia as páginas por trás

    Com Web Fetch, leia as duas ou três páginas mais relevantes e acrescente fatos e links.

    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 })),
      ),
    );

    Saída de exemplo

    // pages[0].content
    "# Example thread summary\n\nExtracted page content…"
  4. Escreva o relatório por tema

    Monte um Markdown com temas, posts representativos, contexto, riscos e pontos de atenção.

    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. Arquive e compare com a semana anterior

    Salve o relatório e as fontes no LiveDoc e, na semana seguinte, consulte a edição anterior para comparar.

    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));

    Saída de exemplo

    [
      { "title": "Social listening — 2026-10-23", "content": "…", "score": 0.88 }
    ]

O que está incluído

  • Posts do X da semana com datas
  • Contexto web com fontes
  • Resumo das discussões por tema
  • Relatório semanal pronto para compartilhar
  • LiveDoc com cada edição

O que não faz

  • A cobertura do X é incompleta e não representa todos os usuários
  • Não dá conclusões definitivas de sentimento
  • Não publica nem responde automaticamente
  • Não inclui mensagens diretas nem comunidades privadas
  • Uma execução por semana; o agendamento fica com seu agent ou cron

Perguntas

O que conta como fonte no briefing?

Cada post do X mantém link, perfil e data; o contexto web vem de páginas públicas do Chat e do Web Fetch. Afirmações sem fonte não entram.

Posso acompanhar concorrentes?

Sim. Pesquise marca e concorrentes juntos e agrupe no relatório.

Ele mede sentimento?

Ele resume temas e tom, mas marca como julgamento editorial e não afirma um percentual exato de sentimento.

Até onde ele olha?

Por padrão, os últimos 7 dias para o relatório semanal; para uma janela maior, altere `since_time`.

Posso rodar toda semana?

Sim. Coloque o mesmo prompt em um cron ou agendador de agent e escreva no mesmo LiveDoc.

Quanto custa um briefing?

Busca no X, Chat e extração de páginas são cobrados por uso; as tarifas atuais estão na página de preços, e o prompt pede aprovação antes de gastar.

Fluxos relacionados

Faça do seu jeito

A mesma receita, adaptada ao seu processo real.

Só um assunto

Restrinja a um lançamento ou polêmica para focar o briefing.

Adicione opiniões do YouTube

Complemente com a transcrição de um vídeo, mas marque como experiência pessoal.

Vire relatório mensal

Mude a frequência para mensal e atenda marca e relações públicas.

As páginas de referência por trás desta receita e para onde ir depois.