# Tạo bản trình bày Felo

POST /api/v1/data/ppts

Tạo một bản trình bày không đồng bộ, rồi xuất tệp PPTX. Giữ các bước tạo và xuất tách biệt: một tác vụ đã tạo chưa phải là một tệp hoàn chỉnh.

Tất cả ví dụ dùng `FELO_API_KEY` từ [tổng quan](https://openapi.felo.ai/vi/docs/data-api/guides/felo-overview.md). Các cuộc gọi sử dụng **số dư nền tảng**, không phải tín dụng Felo Pro. Các ví dụ phản hồi chỉ mang tính minh họa; nội dung thực tế và các trường tùy chọn sẽ thay đổi.





## 1. Tạo bản trình bày

`POST /api/v1/data/ppts`

| Trường | Kiểu | Bắt buộc | Ý nghĩa |
|---|---|---|---|
| `query` | string | Có | Hướng dẫn tạo, 1–25.000 ký tự |
| `stream_protocol` | string | Không | Mặc định `message_center_v1`; thông thường nên để nguyên |
| `ppt_config` | object | Không | Cấu hình tùy chọn; cách triển khai hiện tại đọc `ai_theme_id` |
| `livedoc_short_id` | string | Không | ID ngữ cảnh hiện có, tối đa 100 ký tự; phải vượt qua kiểm tra quyền sở hữu và hết hạn của API gốc |
| `resource_ids` | mảng chuỗi | Không | Tối đa 100 ID tài nguyên UUID; chịu cùng kiểm tra truy cập ngữ cảnh |

Đối với tích hợp đầu tiên, hãy bỏ qua các trường ngữ cảnh và cấu hình. Một ngữ cảnh được tạo qua `/v2` không tự động đủ điều kiện để tái sử dụng ở đây.

```bash
curl -sS --request POST "https://openapi.felo.ai/api/v1/data/ppts" \
  -H "Authorization: Bearer $FELO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"query":"Create a 5-slide introduction to retrieval augmented generation for software developers."}'
```

HTTP 200 trả về các định danh ở gốc:

```json
{
  "task_id":"example-task-id",
  "ppt_business_id":"example-ppt-id",
  "livedoc_short_id":"example-livedoc-id",
  "expires_at":"2026-11-13T00:00:00Z"
}
```

Các định danh bổ sung như `resource_id`, `stream_key` và `thread_short_id` có thể xuất hiện. Phản hồi tạo thành công có nghĩa là tác vụ đã được chấp nhận, không phải là việc tạo đã hoàn tất. Số lượng trang được yêu cầu chỉ là một chỉ dẫn; thanh toán dùng số trang thực tế được tạo.

```bash
TASK_ID="example-task-id"
PPT_ID="example-ppt-id"
```

### Đọc sự kiện tạo bằng SSE

Nếu việc tạo trả về `stream_key`, hãy kết nối ngay bằng API Key thuộc cùng tài khoản. Nếu không có stream key được trả về, hãy dùng các truy vấn trạng thái và kết quả bên dưới.

```bash
curl -N 'https://openapi.felo.ai/api/v1/data/conversations/stream/YOUR_STREAM_KEY?format=structured' \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Accept: text/event-stream'
```

| Tham số truy vấn | Ý nghĩa |
|---|---|
| `format` | `raw` (mặc định) giữ nguyên chuỗi `content`; `structured` giải mã JSON hợp lệ thành object hoặc array |
| `offset` | Vị trí tiếp tục upstream tùy chọn để kết nối lại; đừng suy ra từ số sự kiện cục bộ của bạn |

Đọc từng sự kiện SSE hoàn chỉnh, giải mã JSON bên ngoài của nó, rồi xử lý `content`. Một sự kiện ứng dụng `answer` mang văn bản trong `data.text`; `finished` báo hiệu hoàn tất tạo trong luồng. Cũng hãy xử lý các tín hiệu upstream `done`, `[DONE]`, và `error`. Nếu kết nối đóng mà không có tín hiệu hoàn tất, hãy truy vấn trạng thái tác vụ.

Dùng các quy tắc phân tích và ví dụ client trong [SuperAgent SSE](https://openapi.felo.ai/vi/docs/api-reference/superagent.md#2-ti-u-th-lu-ng-sse), với URL `/api/v1/data/conversations/stream/{stream_key}` của mục này. Đọc kết quả tác vụ sau khi luồng kết thúc; xuất PPTX vẫn là một bước riêng. Endpoint này không bật `stream: true` trên `/api/v1/data/chat`.



## Vòng đời, quyền sở hữu và thanh toán

- Bản trình bày hết hạn **bảy ngày sau khi tạo**. Các truy vấn và xuất không kéo dài khoảng thời gian này. `expires_at` của bản trình bày và `expires_at` của URL tải xuống có chữ ký mô tả các vòng đời khác nhau.
- Chỉ tài khoản API đã tạo mới có thể truy cập các tác vụ và bản trình bày của nó. Một tài nguyên bị thiếu hoặc không thể truy cập có thể trả về 404; một tài nguyên đã hết hạn hoặc đã bị xóa có thể trả về 410, hoặc 404 sau khi dọn dẹp.
- Việc tạo được tính phí theo từng trang được tạo (`ppt.generate`). Theo định giá theo trang, khi tạo sẽ giữ chỗ cho giá của mười trang, rồi quyết toán đầu ra thành công thực tế và giải phóng phần giữ chỗ chưa dùng. Tài khoản của bạn cần đủ số dư khả dụng cho khoản giữ chỗ ngay cả khi prompt yêu cầu ít trang hơn.
- Xuất có một mức giá yêu cầu riêng (`ppt.export`). Các truy vấn trạng thái, truy vấn kết quả, truy vấn trạng thái xuất và thao tác xóa không tạo ra phí mới.
- Sau khi timeout, hãy truy vấn tác vụ đã lưu thay vì tạo một bản trình bày khác. Xem [Thanh toán và Lỗi](https://openapi.felo.ai/vi/docs/data-api/guides/felo-billing.md).
