# สร้างงานนำเสนอด้วย Felo

POST /api/v1/data/ppts

สร้างงานนำเสนอแบบอะซิงโครนัส แล้วจึงส่งออกเป็นไฟล์ PPTX แยกขั้นตอนการสร้างและการส่งออกออกจากกัน: task ที่สร้างแล้วไม่ใช่ไฟล์ที่เสร็จสมบูรณ์

ตัวอย่างทั้งหมดใช้ `FELO_API_KEY` จาก [ภาพรวม](https://openapi.felo.ai/th/docs/data-api/guides/felo-overview.md) การเรียกใช้ใช้ **ยอดคงเหลือบนแพลตฟอร์ม** ไม่ใช่ Felo Pro credits ตัวอย่างการตอบกลับมีไว้เพื่อประกอบการอธิบาย; เนื้อหาจริงและฟิลด์เสริมอาจแตกต่างกัน





## 1. สร้างงานนำเสนอ

`POST /api/v1/data/ppts`

| ฟิลด์ | ประเภท | จำเป็น | ความหมาย |
|---|---|---|---|
| `query` | string | ใช่ | คำสั่งสำหรับการสร้าง, 1–25,000 อักขระ |
| `stream_protocol` | string | ไม่ | ค่าเริ่มต้น `message_center_v1`; โดยปกติให้คงไว้ไม่ต้องเปลี่ยน |
| `ppt_config` | object | ไม่ | การกำหนดค่าตัวเลือก; การใช้งานปัจจุบันอ่าน `ai_theme_id` |
| `livedoc_short_id` | string | ไม่ | ID ของบริบทที่มีอยู่, ยาวได้ถึง 100 อักขระ; ต้องผ่านการตรวจสอบความเป็นเจ้าของและการหมดอายุตาม native API |
| `resource_ids` | string array | ไม่ | UUID resource IDs สูงสุด 100 รายการ; อยู่ภายใต้การตรวจสอบการเข้าถึงบริบทแบบเดียวกัน |

สำหรับการผสานรวมครั้งแรก ให้ละเว้นฟิลด์บริบทและการกำหนดค่า บริบทที่สร้างผ่าน `/v2` ไม่ได้มีสิทธิ์นำกลับมาใช้ซ้ำที่นี่โดยอัตโนมัติ

```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 ส่งคืนตัวระบุที่ราก:

```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"
}
```

ตัวระบุเพิ่มเติม เช่น `resource_id`, `stream_key` และ `thread_short_id` อาจมีอยู่ การตอบกลับ create ที่สำเร็จหมายถึง task ได้รับการยอมรับแล้ว ไม่ได้หมายความว่าการสร้างเสร็จสิ้น จำนวนสไลด์ที่ร้องขอเป็นเพียงคำสั่ง; การเรียกเก็บเงินใช้จำนวนหน้าที่สร้างจริง

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

### อ่านเหตุการณ์การสร้างด้วย SSE

หากการสร้างส่งคืน `stream_key` ให้เชื่อมต่อทันทีด้วย API Key ที่เป็นของบัญชีเดียวกัน หากไม่ได้ส่งคืน stream key ให้ใช้คำขอสถานะและผลลัพธ์ด้านล่าง

```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'
```

| พารามิเตอร์ query | ความหมาย |
|---|---|
| `format` | `raw` (ค่าเริ่มต้น) คงสตริง `content` ไว้; `structured` ถอดรหัส JSON ที่ถูกต้องเป็น object หรือ array |
| `offset` | ตำแหน่ง resume ของ upstream ที่ใช้เมื่อเชื่อมต่อใหม่; อย่าสรุปจากจำนวน event ในเครื่องของคุณ |

อ่าน SSE event ให้ครบแต่ละรายการ ถอดรหัส JSON ด้านนอก แล้วจึงประมวลผล `content` event ของแอปพลิเคชัน `answer` จะมีข้อความใน `data.text`; `finished` บ่งชี้การเสร็จสิ้นของการสร้างในสตรีม จัดการสัญญาณ upstream `done`, `[DONE]` และ `error` ด้วย หากการเชื่อมต่อปิดลงโดยไม่มีสัญญาณเสร็จสิ้น ให้โพลสถานะ task

ใช้กฎการแยกวิเคราะห์และตัวอย่าง client ใน [SuperAgent SSE](https://openapi.felo.ai/th/docs/api-reference/superagent.md#2-sse-stream) กับ URL `/api/v1/data/conversations/stream/{stream_key}` ของส่วนนี้ อ่านผลลัพธ์ task หลังสตรีมจบ; การส่งออก PPTX ยังคงเป็นขั้นตอนแยกต่างหาก เอนด์พอยต์นี้ไม่ได้เปิด `stream: true` บน `/api/v1/data/chat`



## อายุการใช้งาน ความเป็นเจ้าของ และการเรียกเก็บเงิน

- งานนำเสนอหมดอายุ **เจ็ดวันหลังการสร้าง** คำถามและการส่งออกไม่ได้ขยายช่วงเวลานี้ `expires_at` ของงานนำเสนอและ `expires_at` ของ signed download URL เป็นอายุการใช้งานคนละแบบกัน
- มีเพียงบัญชี API ที่สร้างเท่านั้นที่เข้าถึง tasks และงานนำเสนอของมันได้ ทรัพยากรที่หายไปหรือเข้าถึงไม่ได้อาจส่งกลับ 404; ทรัพยากรที่หมดอายุหรือลบแล้วอาจส่งกลับ 410 หรือ 404 หลังการล้างข้อมูล
- การสร้างคิดค่าบริการต่อหน้าที่สร้าง (`ppt.generate`) ภายใต้การคิดค่าบริการตามหน้า การสร้างจะกันวงเงินเท่ากับราคาของสิบหน้า จากนั้นชำระตามผลลัพธ์ที่สร้างจริงและปล่อยวงเงินที่กันไว้แต่ไม่ได้ใช้ บัญชีของคุณต้องมีวงเงินที่พร้อมใช้เพียงพอสำหรับการกันวงเงิน แม้ prompt จะขอหน้าจำนวนน้อยกว่าก็ตาม
- การส่งออกมีราคาคำขอแยกต่างหาก (`ppt.export`) คำขอสถานะ คำขอผลลัพธ์ คำขอสถานะการส่งออก และการลบ ไม่สร้างการคิดค่าบริการใหม่
- หลัง timeout ให้โพล task ที่บันทึกไว้แทนการสร้างงานนำเสนออีกอัน ดู [Billing and Errors](https://openapi.felo.ai/th/docs/data-api/guides/felo-billing.md)
