Felo API PlatformFelo API Platform

内容

把社媒讨论变成一份每周倾听简报

搜索过去一周品牌和竞品相关的 X 帖子,补充有来源的网页背景,读页面背后的内容,再把每期简报归档,让下周从已知开始。

构建时间25 分钟难度进阶更新于2026-10-30
适合谁品牌与传播产品市场社区管理

复制 prompt

把方括号里的字段替换掉,然后粘贴到 Claude Code、Codex 或任何能访问终端的 AI。它会安装 Felo skill、在花额度前询问,并执行这套 workflow。

为[品牌、产品或品类]执行一份社媒聆听简报。

监控词:[品牌]、[产品名]、[竞品名]、[品类关键词]。
时间范围:过去 [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

实际调用

给开发者:同一套 workflow 的可复制代码,按执行顺序排列。

展开实际 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 读取最相关的两三页,补充事实背景和链接。

    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`。

可以每周自动跑吗?

可以。把同一套 prompt 放进 cron 或 agent 调度,每周写入同一份 LiveDoc。

一份简报要花多少?

X 搜索、Chat 和页面抽取都按用量计费;当前费率在价格页面,prompt 会先请求确认。

相关 workflow

改成你的版本

同一套配方,按你实际的交付方式调整。

只看一个话题

把搜索范围缩到一个产品发布或争议,简报会更聚焦。

加入 YouTube 观点

用视频转录补充创作者观点,但明确标为个人经验。

做成月报

把频率改成每月,适合品牌和公关团队。

这套配方背后的参考页面,以及下一步可以看什么。