Felo API PlatformFelo API Platform

Văn phòng

Biến trang nghiên cứu thành bài thuyết trình

Trích xuất trang, lưu làm bối cảnh LiveDoc, để PPT Task API dựng deck và hỏi cho đến khi có liên kết hoàn chỉnh.

Thời gian15 phútMứcCơ bảnCập nhật2026-10-29
Dành cho aiTư vấnBán hàng & marketingCông cụ nội bộ

Sao chép prompt

Thay các trường trong ngoặc vuông rồi dán vào Claude Code, Codex hoặc AI có quyền truy cập terminal. Nó cài skill Felo, hỏi trước khi dùng credit và chạy quy trình.

Chuyển nguồn này thành bộ slide: [URL công khai hoặc đường dẫn PDF].

Độc giả: [ai xem]. Số slide: [6–10]. Ngôn ngữ: [ngôn ngữ]. Chủ đề: [tên chủ đề hoặc “default”].

Dùng Web Fetch trên trang công khai (hoặc tệp đã tải lên), lưu nguồn làm ngữ cảnh LiveDoc, tạo tác vụ PPT và poll đến khi bộ slide sẵn sàng.

Tạo:
1. Dàn ý một dòng mỗi slide.
2. Liên kết bộ slide đã tạo.
3. Liên kết LiveDoc dùng làm ngữ cảnh.

Quy tắc:
- Không bịa sự thật không có trong nguồn. Chỗ thiếu ghi “Không có trong nguồn”.
- Tác vụ PPT tiêu tín dụng; hỏi trước khi gửi.
- Giữ URL nguồn, dàn ý và liên kết slide cùng nhau.
- Không công bố hay chia sẻ bộ slide ngoài workspace.
- Ghi dàn ý vào ./deck-outline.md và tóm tắt trong chat.

Bản sao cũng gồm các bước cài đặt và quy tắc an toàn.

Bạn nhận được gì

Kết quả mẫu của một lần chạy. Không phải tạo trực tiếp.

Ví dụ dàn ý slide (trích)

Nguồn -> dàn ý slide

  1. Vì sao báo cáo này quan trọng
  2. Quý này thay đổi gì
  3. Ba phân khúc khách hàng
  4. Nơi bằng chứng mỏng
  5. Tiếp theo nên thử gì

Slide: https://felo.ai/slides/... Ngữ cảnh: https://felo.ai/livedoc/...

Các lệnh gọi chính xác

Dành cho lập trình viên: cùng quy trình dưới dạng mã, theo thứ tự chạy.

Hiện lệnh gọi API thật
  1. Trích trang nguồn

    Dùng Web Fetch chuyển trang công khai thành Markdown, giữ tiêu đề và nội dung.

    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. Lưu làm bối cảnh LiveDoc

    Tạo LiveDoc, thêm nguồn làm tài liệu và lấy 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. Gửi tác vụ slide

    Gọi PPT Task API với nội dung và LiveDoc short_id để nhận 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);

    Kết quả mẫu

    {
      "data": {
        "livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
        "ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
        "task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
      }
    }
  4. Hỏi đến khi xong

    Kiểm tra trạng thái đến hoàn tất và đọc liên kết slide.

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

    Kết quả mẫu

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

Bao gồm

  • Trích trang sạch thành Markdown
  • LiveDoc làm bối cảnh tái sử dụng
  • Tác vụ PPT bất đồng bộ và liên kết cuối
  • Dàn ý slide để duyệt trước khi chia sẻ

Không làm gì

  • Chỉ trang công khai hoặc tệp tải lên; trang đăng nhập có thể lỗi
  • Slide theo nguồn và không phủ toàn bộ hệ thống thương hiệu
  • Một deck mỗi lần chạy; nhiều deck cần vòng lặp
  • Không sửa deck có sẵn và không bảo đảm khớp hình ảnh
  • Không xuất bản hay chia sẻ deck

Câu hỏi

Có dùng PDF thay URL không?

Có. Gửi tác vụ PPT dạng multipart form data với tệp; nền tảng lưu làm tài nguyên LiveDoc và tạo deck.

Có chọn theme không?

Có. Liệt kê theme rồi truyền id khi tạo tác vụ.

Một deck mất bao lâu?

Là tác vụ bất đồng bộ. Hỏi lịch sử đến khi xong; deck dài lâu hơn.

Có sửa deck hiện có không?

Không. Nó tạo deck mới từ nguồn; sửa deck có sẵn là quy trình khác.

Một deck tốn bao nhiêu?

Tạo slide tính theo mức dùng; giá hiện tại ở trang giá và prompt hỏi duyệt trước khi chi.

Có dùng lại nguồn không?

Có. LiveDoc giữ nguồn; deck hoặc mindmap sau dùng lại short_id.

Quy trình liên quan

Tùy biến

Cùng công thức, điều chỉnh theo cách bạn thực sự triển khai.

Nguồn PDF

Tải PDF qua multipart; nền tảng lưu trước làm tài nguyên LiveDoc.

Đặt theme

Liệt kê theme có sẵn và truyền id khi tạo tác vụ.

Dùng lại cho deck sau

Tạo tác vụ PPT mới với cùng LiveDoc short_id.

Các trang tham chiếu đằng sau công thức và nơi đi tiếp.