Felo API PlatformFelo API Platform

辦公

把研究頁面變成一套簡報檔

擷取頁面,存成 LiveDoc 上下文,然後交給 PPT Task API 生成 deck,輪詢拿到完成的連結。

建置時間15 分鐘難度入門更新於2026-10-29
適合誰顧問業務與行銷內部工具

複製 prompt

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

把這個來源變成一套簡報:[公開 URL 或 PDF 路徑]。

受眾:[誰來看]。頁數:[6–10 頁]。語言:[語言]。主題:[主題名或「default」]。

對公開頁面(或上傳檔案)使用 Web Fetch,把來源存成 LiveDoc 脈絡,建立 PPT 任務,並輪詢直到簡報完成。

輸出:
1. 每頁一行的簡報大綱。
2. 生成簡報的連結。
3. 作為脈絡使用的 LiveDoc 連結。

規則:
- 不要編造來源中沒有的事實。缺口標示為「來源未提及」。
- PPT 任務會消耗額度,提交前先詢問。
- 保留來源 URL、大綱和簡報連結。
- 不要在工作區外發布或分享簡報。
- 將大綱寫入 ./deck-outline.md,並在對話中總結。

複製的內容也包含安裝步驟和安全規則。

你會得到什麼

一次執行的範例輸出,不是即時生成。

投影片大綱範例(節錄)

來源 -> 投影片大綱

  1. 這份報告為什麼重要
  2. 本季發生了什麼變化
  3. 三類客戶細分
  4. 證據薄弱的地方
  5. 接下來測試什麼

投影片:https://felo.ai/slides/... 脈絡:https://felo.ai/livedoc/...

實際呼叫

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

展開實際 API 呼叫
  1. 擷取來源頁面

    用 Web Fetch 把公開頁面抓成 Markdown,保留標題和正文。

    deck.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 ExtractData = { data: { content: string } };
    
    const page = await felo<ExtractData>("/v2/web/extract", {
      url: "https://example.com/research",
      output_format: "markdown",
      with_readability: true,
    });
  2. 保存為 LiveDoc 上下文

    建立 LiveDoc,把來源作為文件資源加進去,拿到 short_id。

    deck.ts
    type LiveDocData = { data: { short_id: string } };
    type ResourceData = { data: { id: string } };
    
    const doc = await felo<LiveDocData>("/v2/livedocs", {
      name: "Quarterly research deck",
      description: "Source material for the next deck",
    });
    
    const resource = await felo<ResourceData>(
      `/v2/livedocs/${doc.data.short_id}/resources/doc`,
      {
        title: "Source page",
        content: page.data.content,
      },
    );
  3. 提交簡報任務

    呼叫 PPT Task API,傳入頁面內容和 LiveDoc short_id,拿到 task_id。

    deck.ts
    type PptTaskData = {
      data: { task_id: string; livedoc_short_id: string };
    };
    
    const task = await felo<PptTaskData>("/v2/ppts", {
      query: "Six slides for a product review: findings, evidence, next steps",
      livedoc_short_id: doc.data.short_id,
    });
    
    console.log(task.data.task_id);

    範例輸出

    {
      "data": {
        "livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
        "ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
        "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
      }
    }
  4. 輪詢直到完成

    查詢任務狀態,直到完成並讀取簡報連結。

    deck.ts
    type TaskState = {
      data: { task_status: string; ppt_url?: string; live_doc_url?: string };
    };
    
    async function waitForDeck(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;
        if (["FAILED", "EXPIRED", "CANCELED"].includes(state.data.task_status)) {
          throw new Error(`Deck task ${state.data.task_status}`);
        }
        await new Promise((resolve) => setTimeout(resolve, 3000));
      }
      throw new Error("Deck task timed out");
    }
    
    const result = await waitForDeck(task.data.task_id);
    console.log(result.ppt_url);

    範例輸出

    {
      "task_status": "COMPLETED",
      "ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
      "live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
    }

包含什麼

  • 來源頁面的乾淨 Markdown 擷取
  • 保存為可重複使用上下文的 LiveDoc
  • 回傳完成連結的非同步 PPT 任務
  • 分享前可以 review 的簡報大綱

不做什麼

  • 來源必須是公開頁面或已上傳檔案;僅登入頁面可能失敗
  • 生成的簡報依來源走,不涵蓋完整品牌系統
  • 一次執行生成一套 deck;批量需要迴圈
  • 不編輯既有 deck,也不保證視覺完全符合
  • 不替你發佈或分享 deck

常見問題

可以用 PDF 而不是 URL 嗎?

可以。把 PPT 任務改成 multipart form data,上傳檔案;平台會把檔案存成 LiveDoc 資源並建立 deck。

可以選擇主題嗎?

可以。先列出主題,再在建立任務時傳主題 id。

一套 deck 要多久?

這是非同步任務。輪詢任務歷史直到完成;長 deck 會比短 deck 慢。

會編輯我既有的 deck 嗎?

不會。它從來源建立新 deck;編輯既有 deck 是另一套工作流程。

一套 deck 要花多少?

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

來源可以重複使用嗎?

可以。LiveDoc 保存來源,後續 deck 或 mindmap 可以重複使用它的 short_id。

相關工作流程

改成你的版本

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

換成 PDF 來源

用 multipart 上傳 PDF,平台會先存成 LiveDoc 資源。

指定主題

先列出可用主題,再在建立任務時傳主題 id。

重複使用到下一套 deck

用同一個 LiveDoc short_id 建立新的 PPT 任務。

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