Felo APIs
PPT Task API
สร้างงานสร้าง PPT แสดงธีม และสอบถาม endpoint งานที่ใช้ร่วมกัน
/v2/pptsการยืนยันตัวตน
Bearer API key
ประเภทเนื้อหา
application/json
หมายเหตุเรื่องข้อจำกัด
อาจมีข้อจำกัดเฉพาะของ endpoint
PPT Task API มอบความสามารถในการสร้าง PPT แบบอะซิงโครนัส คุณสามารถสร้างงานแล้วโพลสถานะงานด้วย task_id ได้ คุณยังเรียกดูธีม PPT ที่มีให้ใช้และนำไปใช้เมื่อสร้างงานได้ด้วย
นี่คือ API แบบอะซิงโครนัส สำหรับรูปแบบการส่งงาน โพล และดึงผลลัพธ์ที่ใช้ร่วมกัน โปรดดู งานอะซิงโครนัส
การรับรองความถูกต้อง
ทุกคำขอต้องมีคีย์ API ใน header Authorization:
Authorization: Bearer YOUR_API_KEYใช้กับ AI Agent
หากต้องการสร้างสไลด์จาก Agent ให้ติดตั้งแพ็กเกจ felo-ai ที่ครบถ้วน แทนชุดย่อยของ Skill แบบตายตัว ตัวติดตั้งจะค้นหาไดเรกทอรีแพ็กเกจทุกไดเรกทอรีที่มี SKILL.md แบบไดนามิก รวมถึง PPT Skill และส่วนเพิ่มเติมในอนาคต ให้ติดตั้ง Skill ทั้งหมดที่ค้นพบในไดเรกทอรีดั้งเดิมสำหรับ Agent ของคุณ: Codex ~/.codex/skills, Claude Code ~/.claude/skills, OpenClaw ~/.agents/skills หรือ Hermes Agent ~/.hermes/skills ปฏิบัติตามคู่มือการตั้งค่า AI Agent ด้วยตนเองสำหรับการกำหนดค่าคีย์ API และการตรวจสอบเฉพาะแพลตฟอร์ม
1. แสดงรายการธีม PPT
สอบถามธีม PPT ที่มีให้ใช้พร้อมการแบ่งหน้า การค้นหาด้วยคำค้น และการกรองตามภาษาและประเภท
Endpoint
GET https://openapi.felo.ai/v2/ppt-themesพารามิเตอร์คิวรี
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
lang | string | ไม่ | รหัสภาษาสำหรับเนื้อหาที่แปลแล้ว (เช่น en, zh-Hans) ค่าเริ่มต้น: en |
type | string | ไม่ | กรองตามประเภทธีม (เช่น default, custom) |
keyword | string | ไม่ | คำค้นสำหรับค้นหา ตรงกับชื่อธีม |
page | integer | ไม่ | หมายเลขหน้า เริ่มจาก 1 ค่าเริ่มต้น: 1 |
size | integer | ไม่ | ขนาดหน้า สูงสุด 100 ค่าเริ่มต้น: 20 |
ตัวอย่าง
curl -X GET 'https://openapi.felo.ai/v2/ppt-themes?lang=en&page=1&size=10' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'การตอบกลับที่สำเร็จ (200)
{
"status": "ok",
"message": null,
"data": {
"total": 8,
"page": 1,
"size": 10,
"items": [
{
"id": "43122897-0d3c-4c9e-ae19-20527ad36c04",
"title": "Inspiration Themes",
"subtitle": "AI-tailored visual solutions",
"description": "Style and layout, both crafted by AI from your content in real time"
}
]
}
}ฟิลด์ของการตอบกลับธีม
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
total | integer | จำนวนธีมทั้งหมดที่ตรงกับตัวกรอง |
page | integer | หมายเลขหน้าปัจจุบัน |
size | integer | ขนาดหน้า |
items | array | รายการออบเจกต์ธีม |
items[].id | string | ID ธีม ใช้เป็น ai_theme_id เมื่อสร้าง PPT |
items[].title | string | ชื่อธีม (แปลแล้ว) |
items[].subtitle | string | คำอธิบายย่อยของธีม (แปลแล้ว) |
items[].description | string | คำอธิบายธีม (แปลแล้ว) |
2. สร้างงาน PPT
Endpoint
POST https://openapi.felo.ai/v2/pptsHeader ของคำขอ
| Header | จำเป็น | คำอธิบาย |
|---|---|---|
Authorization | ใช่ | คีย์ API ของคุณในรูปแบบ Bearer YOUR_API_KEY |
Content-Type | ใช่ | application/json หรือ multipart/form-data |
เนื้อหาคำขอ
| พารามิเตอร์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
query | string | ใช่ | พรอมต์คำขอสร้าง PPT |
livedoc_short_id | string | ไม่ | ID ย่อของ LiveDoc ที่มีอยู่เพื่อเชื่อมกับเซสชัน PPT หากละเว้น ระบบจะสร้าง LiveDoc ใหม่โดยอัตโนมัติ |
resource_ids | array of strings | ไม่ | รายการ ID ทรัพยากรของ LiveDoc เพื่อใช้เป็นบริบทสำหรับการสร้าง PPT |
ppt_config | object | ไม่ | ตัวเลือกการกำหนดค่า PPT |
ppt_config.ai_theme_id | string | ไม่ | ID ธีมจาก endpoint แสดงรายการธีม PPT |
ตัวอย่าง
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"query": "Felo, 2 pages",
"ppt_config": {
"ai_theme_id": "02968979-a69f-42c4-b136-de02c40ab2d7"
}
}'สร้างจากไฟล์ที่อัปโหลด
ใช้ multipart/form-data เพื่ออัปโหลดไฟล์หนึ่งไฟล์และสร้างงาน PPT ในคำขอเดียว แพลตฟอร์มจะอัปโหลดไฟล์เป็นทรัพยากร LiveDoc ก่อน จากนั้นส่ง ID ทรัพยากรไปยังงาน PPT
| ส่วน | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
query | string | ใช่ | พรอมต์คำขอสร้าง PPT |
file | file | ใช่ | ไฟล์ต้นฉบับที่ใช้เป็นบริบทของ PPT |
stream_protocol | string | ไม่ | โปรโตคอลสตรีม ค่าเริ่มต้น: message_center_v1 |
livedoc_short_id | string | ไม่ | LiveDoc ที่มีอยู่เพื่อรับไฟล์ ระบบจะสร้าง LiveDoc ใหม่เมื่อละเว้น |
ppt_config | JSON | ไม่ | การกำหนดค่า PPT ที่มีโครงสร้างเดียวกับเนื้อหาคำขอแบบ JSON ส่งส่วนนี้เป็น application/json |
curl -X POST 'https://openapi.felo.ai/v2/ppts' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-F 'query=Create a 10-page presentation based on this report' \
-F 'ppt_config={"ai_theme_id":"02968979-a69f-42c4-b136-de02c40ab2d7"};type=application/json' \
-F '[email protected]'การตอบกลับใช้สคีมาเดียวกับคำขอแบบ JSON livedoc_short_id ที่ส่งกลับระบุ LiveDoc ที่มีทรัพยากรที่อัปโหลด
การตอบกลับที่สำเร็จ (200)
{
"status": "ok",
"message": null,
"data": {
"livedoc_short_id": "PvyKouzJirXjFdst4uKRK3",
"ppt_business_id": "BfLPuQKmChk9SPmyQawxgr",
"task_id": "019cad6d-e874-55ef-d577-686344b5a7e9"
}
}3. สอบถามสถานะงาน
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/statusตัวอย่าง
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cad6d-e874-55ef-d577-686344b5a7e9/status' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'การตอบกลับที่สำเร็จ (200)
{
"status": "ok",
"message": null,
"data": {
"status": "RUNNING"
}
}4. สอบถามข้อมูลย้อนหลังของงาน
Endpoint
GET https://openapi.felo.ai/v2/tasks/{task_id}/historicalตัวอย่าง
curl -X GET 'https://openapi.felo.ai/v2/tasks/019cb17e-9e23-3d40-4447-48a651249460/historical' \
-H 'accept: application/json' \
-H 'Authorization: Bearer YOUR_API_KEY'การตอบกลับ RUNNING
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "RUNNING",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx"
}
}การตอบกลับ COMPLETED
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "COMPLETED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}การตอบกลับ COMPLETED (AI_PAGE)
{
"status": "ok",
"message": null,
"data": {
"task_id": "019d7a4d-6ab5-a96d-0f98-43ca434ab621",
"task_status": "COMPLETED",
"ppt_biz_id": "9qiLTmT77fA3aVurrMHvRJ",
"ppt_url": "https://felo.ai/slides/9qiLTmT77fA3aVurrMHvRJ",
"ai_page_html": "https://felo.ai/ai-page/9qiLTmT77fA3aVurrMHvRJ"
}
}การตอบกลับ FAILED / PENDING / EXPIRED / CANCELED
{
"status": "ok",
"message": null,
"data": {
"task_id": "019cb17e-9e23-3d40-4447-48a651249460",
"task_status": "FAILED",
"ppt_biz_id": "oM8A9iJHg8dT4ZKgHThQTx",
"ppt_url": "https://felo.ai/slides/oM8A9iJHg8dT4ZKgHThQTx",
"error_message": "PPT generation failed",
"live_doc_short_id": "oM8A9iJHg8dT4ZKgHThQTx",
"live_doc_url": "https://felo.ai/livedoc/oM8A9iJHg8dT4ZKgHThQTx"
}
}ฟิลด์ของการตอบกลับย้อนหลัง
| ฟิลด์ | ชนิด | คำอธิบาย |
|---|---|---|
task_id | string | ID งาน |
task_status | string | สถานะงานปัจจุบัน |
ppt_biz_id | string | ID ธุรกิจของ PPT (แมปจาก thread_short_id ของแบ็กเอนด์) |
ppt_url | string | URL ของ PPT รูปแบบ: https://felo.ai/slides/{ppt_biz_id} |
error_message | string | มีสำหรับ FAILED / PENDING / EXPIRED / CANCELED เป็นสตริงว่าง "" เมื่อปลายทางไม่ได้ให้รายละเอียดข้อผิดพลาด |
ai_page_html | string | มีเมื่องานทำงานในโหมด AI_PAGE และข้อมูลย้อนหลังปลายทางส่ง URL ผลลัพธ์แบบ HTML |
live_doc_short_id | string | ID ย่อของ LiveDoc สำหรับ COMPLETED จะมาจาก live_doc_short_id ของปลายทาง สำหรับสถานะล้มเหลวสิ้นสุดจะส่งกลับเมื่อมี |
live_doc_url | string | URL ของ LiveDoc ที่ตรงกับ live_doc_short_id |
ส่งออก PPTX
หลังจากงานสร้าง PPT ถึง COMPLETED ให้ส่งคำขอส่งออกแบบอะซิงโครนัสโดยใช้ ppt_business_id จากการตอบกลับเมื่อสร้าง (หรือ ppt_biz_id จากการตอบกลับย้อนหลัง):
curl -X POST 'https://openapi.felo.ai/v2/ppts/YOUR_PPT_BUSINESS_ID/export' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{}'โพล GET https://openapi.felo.ai/v2/ppts/{ppt_business_id}/export ด้วยคีย์ API แบบ Bearer เดียวกันทุก 2–5 วินาที เจ้าของคีย์ API ต้องเป็นเจ้าของ PPT endpoint ทั้งสองส่ง data.status: NOT_STARTED, PROCESSING, COMPLETED หรือ FAILED เฉพาะ COMPLETED เท่านั้นที่รวม download_url และ expires_at
URL ดาวน์โหลดที่ลงนามแล้วจะหมดอายุ 30 นาทีหลังออก ให้เรียก endpoint GET อีกครั้งเพื่อรับ URL ใหม่ ซึ่งจะไม่สร้าง PPTX ใหม่ POST ใช้ application/json และยอมรับ {} การส่ง POST ซ้ำขณะกำลังส่งออกจะไม่เริ่มงานใหม่ การเรียกหลังเสร็จสมบูรณ์จะสร้าง PPTX ใหม่และมีค่าใช้จ่ายเครดิตการส่งออก PPT ตามเดิม เครดิตไม่เพียงพอจะได้ HTTP 402 ขีดจำกัดอัตราเฉพาะ endpoint อาจมีผล ให้ลองใหม่ภายหลังเมื่อได้ HTTP 429 การส่งออกที่ล้มเหลวสามารถส่งได้อีกครั้ง
{
"status": "ok",
"message": null,
"data": {
"status": "COMPLETED",
"download_url": "https://example.com/presentation.pptx?signature=...",
"expires_at": "2026-09-29T10:30:00Z"
}
}คำแนะนำการโพล
ใช้ task_id จากการตอบกลับเมื่อสร้างและโพลสถานะทุก 2-5 วินาทีจนกว่าสถานะจะเป็นสถานะสิ้นสุด
ตัวอย่างสถานะที่พบบ่อย:
RUNNING: งานยังคงประมวลผลCOMPLETED: งานเสร็จสมบูรณ์FAILED/PENDING/EXPIRED/CANCELED: งานถึงสถานะสิ้นสุดพร้อมerror_messageและlive_doc_urlจะถูกส่งกลับเมื่อมี
ค่าสถานะที่ไม่รู้จักอาจปรากฏขึ้นเมื่อแบ็กเอนด์พัฒนาต่อ ให้ถือว่าค่าเหล่านั้นยังไม่สิ้นสุด เว้นแต่เอกสารจะระบุไว้เป็นอย่างอื่น
รหัสข้อผิดพลาด
| รหัส | สถานะ HTTP | คำอธิบาย |
|---|---|---|
UNAUTHORIZED | 401 | คีย์ API ไม่ถูกต้องหรือถูกเพิกถอน |
PPT_TASK_CREATE_FAILED | 502 | การเรียกปลายทางเพื่อสร้างงานล้มเหลว |
PPT_TASK_QUERY_FAILED | 502 | การเรียกปลายทางเพื่อสอบถามสถานะงานล้มเหลว |