Felo API PlatformFelo API Platform

内容

把产品简报变成落地页

研究受众,把简报存进 LiveDoc,然后基于这份上下文创建 Landing Page 任务,轮询直到托管页面生成完成。

构建时间30 分钟难度进阶更新于2026-10-30
适合谁创始人产品市场增长团队

复制 prompt

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

为[产品]制作一个面向[受众]的落地页。

目标:[注册 / 演示 / 等候名单]。语气:[语气]。语言:[语言]。
素材:[产品简报 URL,或粘贴简报]。必须包含:[证明点、定价、CTA]。

用 Chat 和 Web Fetch 调研受众和两三个竞品页面。把简报和调研存入 LiveDoc,然后用该 LiveDoc 作为上下文创建 Landing Page 任务。轮询直到完成,并返回托管页面链接。

输出:
1. 页面大纲:首屏、证明、功能、异议、CTA。
2. 托管页面链接。
3. 作为上下文使用的 LiveDoc 链接。
4. 需要核实的说法清单。

规则:
- 不要编造指标、客户、证言、价格或合规声明。
- 每个说法都要能追溯到简报或已抓取的页面。
- 在消耗额度做调研或生成页面前先询问。
- 不要发布或绑定域名;返回托管链接供审阅。
- 将大纲写入 ./landing-page-outline.md,并在对话中总结。

复制的内容也包含安装步骤和安全规则。

你会得到什么

一次运行的示例输出,不是实时生成。

落地页大纲示例(节选)

落地页大纲

首屏:“不用开三十个标签页就能调研市场。” 副标题: 一次运行拿到来源和简报草稿。 证明: 每份简报节省的时间;每个主张都链接到来源。 功能: 搜索、页面抽取、X 信号、LiveDoc 证据。 异议:“会编数字吗?”不会:数据缺失就写“暂无数据”。 CTA: 从一个问题开始。

页面:https://felo.ai/ai-page/... 上下文:https://felo.ai/livedoc/...

实际调用

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

展开实际 API 调用
  1. 研究受众和替代方案

    用 Chat 问受众是谁、需要什么,用 Web Fetch 读两三个竞品页面。

    landing.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 ChatData = {
      data: { answer: string; resources: { link: string; title: string }[] };
    };
    type ExtractData = { data: { content: string } };
    
    const research = await felo<ChatData>("/v2/chat", {
      query: "Who is [audience] and what do they need from [product]?",
    });
    
    const pages = await Promise.all(
      research.data.resources.slice(0, 2).map((source) =>
        felo<ExtractData>("/v2/web/extract", {
          url: source.link,
          output_format: "markdown",
          with_readability: true,
        }).then((page) => ({ ...source, content: page.data.content })),
      ),
    );

    示例输出

    { "answer": "…", "resources": [{ "link": "https://example.com", "title": "…" }] }
  2. 把简报存进 LiveDoc

    创建 LiveDoc,把产品简报作为文档资源加进去,并附上抓取的竞品页面。

    landing.ts
    type LiveDocData = { data: { short_id: string } };
    
    const doc = await felo<LiveDocData>("/v2/livedocs", {
      name: "Landing page: [product]",
      description: "Product brief, audience research and competitor notes",
    });
    
    await felo(`/v2/livedocs/${doc.data.short_id}/resources/doc`, {
      title: "Product brief",
      content: "[paste the brief: audience, problem, proof, pricing, CTA]",
    });
    
    await felo(`/v2/livedocs/${doc.data.short_id}/resources/urls`, {
      urls: pages.map((page) => ({ url: page.link, title: page.title })),
    });
    
    console.log(doc.data.short_id); // page context
  3. 创建落地页任务

    用 /v2/landing_page 发送页面 prompt 和 LiveDoc short_id,拿到 task_id。

    landing.ts
    type LandingTaskData = { data: { task_id: string } };
    
    const task = await felo<LandingTaskData>("/v2/landing_page", {
      query:
        "Create a landing page for [product] for [audience]. Goal: [signup]. " +
        "Use the product brief and research in the LiveDoc. Return a hero, proof, " +
        "features, objections and one CTA. Do not invent claims.",
      livedoc_short_id: doc.data.short_id,
    });
    
    console.log(task.data.task_id);

    示例输出

    { "data": { "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9" } }
  4. 轮询直到完成

    查询任务历史,直到状态为 COMPLETED,读取 ai_page_html。

    landing.ts
    type TaskState = {
      data: { task_status: string; ai_page_html?: string; ppt_url?: string };
    };
    
    async function waitForPage(taskId: string) {
      for (let attempt = 0; attempt < 40; attempt++) {
        const state = await felo<TaskState>(`/v2/tasks/${taskId}/historical`);
        if (state.data.task_status === "COMPLETED") {
          return state.data.ai_page_html ?? state.data.ppt_url;
        }
        if (["FAILED", "EXPIRED", "CANCELED"].includes(state.data.task_status)) {
          throw new Error(`Landing page task ${state.data.task_status}`);
        }
        await new Promise((resolve) => setTimeout(resolve, 3000));
      }
      throw new Error("Landing page task timed out");
    }
    
    const pageUrl = await waitForPage(task.data.task_id);
    console.log(pageUrl);

    示例输出

    {
      "task_status": "COMPLETED",
      "ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ",
      "ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ"
    }
  5. 分享前 review

    逐条核对 claim、价格、法务措辞和 CTA 链接,再分享链接。

包含什么

  • 基于公开页面的受众和竞品研究
  • 产品简报和研究存进 LiveDoc
  • 从这份上下文生成的托管落地页
  • 分享前的 claim、链接和 CTA review 清单

不做什么

  • 只生成托管页面,不发布网站,也不接自有域名
  • 生成的文案需要人工 review 后才能分享
  • 不做 A/B 测试,也不接 analytics
  • 无法验证简报和页面里没有的 claim
  • 不生成 logo、品牌系统或定制插画

常见问题

它会生成什么?

一份基于产品简报和研究、托管在 Felo 的落地页。你拿到的是链接,不是已部署的站点。

可以用我自己的域名吗?

这套 workflow 不接自有域名。它返回托管页面供 review,绑定域名和发布是单独的步骤。

会编造客户评价或指标吗?

不会。prompt 禁止编造 claim,并要求每条主张都能追溯到简报或抓取页面。没有依据的内容会被标出。

可以反复迭代吗?

可以。修改 LiveDoc 里的简报,再用新上下文创建一个新的 Landing Page 任务。

会设计定制图片吗?

它负责页面结构和文案;定制插画和品牌素材不在这套 workflow 里。

一个页面要花多少?

研究和页面生成按用量计费;当前费率在价格页面,prompt 会先请求确认。

相关 workflow

改成你的版本

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

从 PDF 简报开始

用 multipart 上传 PDF,平台会把它存成 LiveDoc 资源再传给页面任务。

生成两个定位版本

用同一个 LiveDoc 创建两个不同角度的任务,对比后再选一个打磨。

复用到幻灯片

同一份 LiveDoc 还可以喂给 PPT 任务,让页面和 deck 讲同一个故事。

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