Felo API PlatformFelo API Platform

Контент

Превратите обсуждения в еженедельный бриф социального слушания

Ищите посты X о бренде и конкурентах за неделю, добавьте веб-контекст с источниками, прочитайте страницы за ним и сохраняйте каждый выпуск, чтобы следующая неделя начиналась с известного.

Время25 минутУровеньСреднийОбновлено2026-10-30
Для когоБренд и коммуникацииПродуктовый маркетингУправление сообществом

Скопировать промпт

Замените поля в квадратных скобках и вставьте в Claude Code, Codex или любой AI с доступом к терминалу. Он установит навык Felo, спросит перед списанием кредитов и выполнит процесс.

Проведи бриф социального слушания по [бренд, продукт или категория].

Отслеживаемые слова: [бренд], [название продукта], [названия конкурентов], [ключевые слова категории].
Период: последние [7 / 14] дней. Часовой пояс: [часовой пояс]. Аудитория: [команда].
Разрешённые источники: только публичные посты X и публичные веб-страницы.

Подготовь:
1. Резюме в пять строк о том, что изменилось в разговоре.
2. Темы: что говорят люди, какие посты это подтверждают и какой период они охватывают.
3. Упоминания конкурентов: кого рекомендуют и в каком контексте.
4. Риски: жалобы, сбои, повторяющиеся вопросы и негативная реакция.
5. Следующие шаги: «ответить сейчас», «наблюдать», «передать продукту».
6. Список источников с URL и датой каждого поста и страницы.

Правила:
- Сообщай только посты и страницы, которые возвращает API. Никогда не выдумывай оценки тональности, метрики вовлечённости, цитаты и источники.
- Относись к X как к сигналу, а не репрезентативному опросу. Говори, когда выборки слишком мало для вывода.
- Отделяй слова клиента от своего резюме и цитируй кратко со ссылкой.
- Преврати период в явные даты начала и конца и укажи часовой пояс.
- Перед расходом кредитов покажи планируемые поиски и извлечения и дождись моего одобрения.
- Не отвечай, не публикуй, не подписывайся и никому не пиши. Этот бриф только для чтения.
- Запиши результат в ./social-listening.md и кратко изложи его в чате.

В копию также входят шаги установки и правила безопасности.

Что получится

Пример вывода одного запуска. Не живая генерация.

Пример брифа (фрагмент)

Бриф соцслушания — 2026-10-30

Что изменилось

  • Жалобы на экспорт стали главной темой.
  • В темах о ценах рекомендуют более дешёвого конкурента.
  • Сбой 2026-10-27 больше не упоминается.

Темы

  1. Экспорт медленный после обновления — @example_dev: «Кнопка экспорта теперь тратит минуты на документ в 40 страниц» (2026-10-28); @example_ops: «У кого-то ещё экспорт в очереди в конце месяца?» (2026-10-29)
  2. Рекомендуют более дешёвую альтернативу — Example Rival появляется в темах, где просят цену ниже

Конкуренты

Example Rival рекомендуют, когда просят более дешёвую альтернативу; рекомендация о цене, а не о функциях.

Риски

Жалоба на экспорт появляется в темах рядом с поддержкой и может дойти до разговоров об оттоке.

Далее

  • Ответить сейчас: тема экспорта от 2026-10-28.
  • Наблюдать: распространится ли жалоба на аудиторию API.
  • Передать продукту: задержка экспорта в конце месяца.

Источники

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

Реальные вызовы

Для разработчиков: тот же процесс в виде кода в порядке выполнения.

Показать реальные вызовы API
  1. Ищите посты за неделю

    Через X Search ищите бренд и конкурентов за последние 7 дней, сохраняя аккаунты и даты.

    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;

    Пример вывода

    { "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. Добавьте веб-контекст с источниками

    Спросите Chat о контексте обсуждений и получите список страниц с источниками.

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

    Пример вывода

    {
      "answer": "The main threads are …",
      "sources": [
        { "link": "https://example.com/thread", "title": "…", "snippet": "…" }
      ]
    }
  3. Прочитайте страницы за обсуждением

    Через Web Fetch прочитайте 2–3 самые релевантные страницы и добавьте факты и ссылки.

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

    Пример вывода

    // pages[0].content
    "# Example thread summary\n\nExtracted page content…"
  4. Напишите недельный отчёт по темам

    Соберите Markdown по темам, репрезентативным постам, контексту, рискам и точкам внимания.

    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. Сохраните и сравните с прошлой неделей

    Сохраните отчёт и источники в LiveDoc, а на следующей неделе найдите прошлый выпуск для сравнения.

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

    Пример вывода

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

Что входит

  • Датированные посты X за неделю
  • Веб-контекст с источниками
  • Сводка обсуждений по темам
  • Готовый к публикации недельный отчёт
  • LiveDoc с каждым выпуском

Чего не делает

  • Покрытие X неполное и не представляет всех пользователей
  • Не даёт однозначных выводов о настроении
  • Не публикует и не отвечает автоматически
  • Не включает личные сообщения и приватные сообщества
  • Один запуск в неделю; расписание — на agent или cron

Вопросы

Что считается источником в брифе?

У каждого поста X есть ссылка, аккаунт и дата; веб-контекст — публичные страницы Chat и Web Fetch. Утверждения без источника не включаются.

Можно отслеживать конкурентов?

Да. Ищите бренд и конкурентов вместе и группируйте в отчёте.

Он измеряет настроение?

Он обобщает темы и тон, но помечает это как редакционное суждение и не заявляет точный процент настроения.

Насколько глубоко смотрит?

По умолчанию последние 7 дней для недельного отчёта; для большего окна измените `since_time`.

Можно запускать каждую неделю?

Да. Поставьте тот же промпт в cron или планировщик agent и пишите в тот же LiveDoc.

Сколько стоит бриф?

Поиск в X, Chat и извлечение страниц оплачиваются по факту использования; актуальные тарифы на странице цен, промпт просит одобрение до трат.

Связанные процессы

Адаптируйте под себя

Тот же рецепт, подстроенный под ваш реальный процесс.

Только одна тема

Сузьте до одного запуска или спора, чтобы бриф был сфокусированным.

Добавьте мнения из YouTube

Дополните транскриптом видео, но пометьте его как личный опыт.

Сделайте месячный отчёт

Смените частоту на раз в месяц для бренда и PR.

Справочные страницы этого рецепта и куда двигаться дальше.