Felo API PlatformFelo API Platform

內容

把產品簡報變成登陸頁

研究受眾,把簡報存進 LiveDoc,然後基於這份上下文建立 Landing Page 任務,輪詢直到託管頁面生成完成。

建置時間30 分鐘難度進階更新於2026-10-30
適合誰創辦人產品行銷成長團隊

複製 prompt

把方括號裡的欄位替換掉,然後貼到 Claude Code、Codex 或任何能存取終端機的 AI。它會安裝 Felo skill、在花額度前詢問,並執行這套工作流程。

為[產品]製作一個面向[受眾]的著陸頁。

目標:[註冊 / 示範 / 等候名單]。語氣:[語氣]。語言:[語言]。
素材:[產品簡報 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/...

實際呼叫

給開發者:同一套工作流程的可複製程式碼,依執行順序排列。

展開實際 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 的登陸頁。你拿到的是連結,不是已部署的網站。

可以用我自己的網域嗎?

這套工作流程不接自有網域。它回傳託管頁面供 review,綁定網域和發佈是另一個步驟。

會編造客戶評價或指標嗎?

不會。prompt 禁止編造 claim,並要求每條主張都能追溯到簡報或抓取頁面。沒有依據的內容會被標出。

可以反覆迭代嗎?

可以。修改 LiveDoc 裡的簡報,再用新上下文建立一個新的 Landing Page 任務。

會設計客製圖片嗎?

它負責頁面結構和文案;客製插畫和品牌素材不在这套工作流程裡。

一個頁面要花多少?

研究和頁面生成按用量計費;目前費率在價格頁面,prompt 會先請求確認。

相關工作流程

改成你的版本

同一套配方,依你實際的交付方式調整。

從 PDF 簡報開始

用 multipart 上傳 PDF,平台會把它存成 LiveDoc 資源再傳給頁面任務。

生成兩個定位版本

用同一個 LiveDoc 建立兩個不同角度的任務,對比後再選一個打磨。

重複使用到簡報檔

同一份 LiveDoc 還可以餵給 PPT 任務,讓頁面和 deck 講同一個故事。

這套配方背後的參考頁面,以及下一步可以看什麼。