Guide
Attività asincrone
Invia attività di lunga durata, monitora lo stato, gestisci gli stati finali e recupera i risultati.
Alcune operazioni Felo restituiscono subito un task_id e terminano in background. Lo schema è lo stesso ovunque: invia, interroga, poi recupera il risultato.
Due famiglie di attività
| Famiglia | Invio | Interrogazione |
|---|---|---|
| Workflow Felo | POST /v2/ppts, POST /v2/landing_page, POST /v2/mindmap | GET /v2/tasks/{task_id}/status |
| Generazione di modelli | POST /api/v1/videos/generations, POST /api/v1/images/generations | GET /api/v1/videos/generations/{task_id}, GET /api/v1/images/generations/{task_id} |
L'export PPTX è un'operazione asincrona separata: POST /v2/ppts/{ppt_business_id}/export, poi GET /v2/ppts/{ppt_business_id}/export.
SuperAgent non è un'API di polling. Restituisce una stream_key e usa SSE; vedi il riferimento SuperAgent.
Ciclo di vita
- Invia. Invia i parametri del modello o del workflow. Un invio riuscito restituisce
task_ide uno stato iniziale. - Interroga. Leggi l'endpoint dell'attività a intervalli regolari. Mantieni nel codice l'intervallo e un tempo massimo di attesa.
- Concludi. In caso di successo, leggi gli URL dei risultati o i campi di output. In caso di errore, leggi l'errore e decidi se inviare di nuovo.
Valori di stato
Le attività dei workflow Felo usano valori in maiuscolo:
| Stato | Significato |
|---|---|
RUNNING | Ancora in elaborazione |
COMPLETED | Completata con successo |
FAILED | Errore terminale; leggi error_message |
PENDING | Terminale nella risposta storica; leggi error_message |
EXPIRED | Terminale; l'attività non è più disponibile |
CANCELED | Terminale; l'attività è stata annullata |
Le attività di generazione dei modelli usano valori in minuscolo: queued, running, succeeded, failed e interrupted. Un'attività non riuscita può includere un oggetto error con message e type.
Con l'evoluzione del backend possono comparire valori di stato sconosciuti. Tratta un valore sconosciuto come non terminale, salvo diversa indicazione nella documentazione.
Polling
- Attività dei workflow Felo: interroga ogni 2–5 secondi.
- Generazione di video: interroga ogni 5–10 secondi.
- Generazione di immagini: parti da 2–5 secondi e aumenta l'intervallo per le attività lunghe.
- Fermati su uno stato terminale, al timeout che hai scelto o dopo un numero massimo di tentativi.
- Aggiungi jitter quando molti client interrogano contemporaneamente.
Un semplice ciclo in Node.js:
async function pollStatus(taskId, { timeoutMs = 10 * 60 * 1000 } = {}) {
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
const response = await fetch(`https://openapi.felo.ai/v2/tasks/${taskId}/status`, {
headers: { Authorization: `Bearer ${process.env.FELO_API_KEY}` },
});
if (!response.ok) throw new Error(`status ${response.status}`);
const payload = await response.json();
const status = payload.data?.status;
if (status === "COMPLETED") return payload.data;
if (["FAILED", "PENDING", "EXPIRED", "CANCELED"].includes(status)) {
throw new Error(payload.data?.error_message || status);
}
await new Promise((resolve) => setTimeout(resolve, 3000));
}
throw new Error("task timed out");
}Recuperare i risultati
| Attività | Risultato |
|---|---|
| PPT | GET /v2/tasks/{task_id}/historical restituisce ppt_url, ppt_biz_id e live_doc_url quando disponibili |
| Landing page | La risposta storica restituisce l'output della pagina e live_doc_url quando disponibile |
| Video / immagine | La risposta di polling restituisce outputs; quando l'attività è riuscita, le voci sono URL firmati dei contenuti multimediali scaricabili in modo anonimo. Vedi Generazione di immagini per scadenza e download |
| Export PPTX | La risposta di polling restituisce download_url e expires_at solo quando status è COMPLETED |
L'URL di download firmato del PPTX scade 30 minuti dopo l'emissione. Chiama di nuovo l'endpoint GET per ottenere un URL aggiornato; questo non rigenera il file.
Gestione degli errori
- Leggi il campo di errore dell'attività prima di riprovare. Alcuni errori dipendono dalla richiesta e si ripeteranno.
- Non inviare di nuovo alla cieca a ogni timeout; controlla prima se l'attività è ancora
RUNNING. 402significa crediti insufficienti.429significa rate limit. Riprova solo dopo che la condizione è risolta.- I campi di callback nella generazione di video e immagini al momento sono ignorati. Interroga l'endpoint dell'attività invece di attendere un webhook.