Encadenar tareas
La mayoría de los trabajos reales no son una tarea, son cuatro o cinco que dependen del resultado anterior. La API de encadenamiento le permite definir esa secuencia una sola vez y lanzarla con una sola solicitud, rastreada bajo un único task_id de principio a fin.
Por qué existen las cadenas
Un mensaje de voz se convierte en un ticket de soporte solo después de transcribirse, resumirse, traducirse al idioma del agente y enviarse a una mesa de ayuda. Armar eso a mano implica cuatro llamadas separadas, cuatro task_ids que vigilar, código propio para pasar el resultado de un paso al siguiente y manejo de errores en cada tramo de ese relevo. POST /flow/chain reemplaza todo eso con una lista ordenada de pasos, donde el resultado de cada uno se convierte automáticamente en la entrada del siguiente, así la dependencia vive en el cuerpo de la solicitud y no en su propio código.
Qué ocurre internamente
Envía un arreglo de tipos de tarea en orden, junto con los parámetros que cada uno necesita, y la cadena los ejecuta de forma secuencial en nuestra red perimetral global. Si el paso dos depende de un campo que produjo el paso uno, lo referencia directamente en la definición de la cadena en vez de escribir un enrutador o un consumidor de colas por su cuenta. Toda la cadena se factura y se rastrea como un solo trabajo asíncrono, un único lugar donde revisar todo cuando algo necesita auditarse.
Qué recibe de vuelta
Recibe un task_id de inmediato y la cadena se ejecuta en segundo plano igual que cualquier otra tarea del KIT. El resultado final —y, si lo pide, el de cada paso intermedio— llega mediante un webhook firmado, o queda disponible en un enlace firmado válido por 24 horas si prefiere consultarlo usted mismo. Esa visibilidad intermedia importa en la práctica: si una traducción se lee extraña, puede revisar la transcripción que la alimentó sin volver a correr toda la cadena.
Manejo de fallos, sin rodeos
Si un paso falla, la cadena lo reintenta hasta tres veces antes de devolver un error claro que indica exactamente cuál paso falló y por qué. Nunca se cobra una tarea fallida, así que una cadena que se cae en el paso tres no le factura en silencio como si los pasos uno a tres hubieran salido bien; paga solo por el trabajo que realmente se completó.
Dónde encaja
El encadenamiento es la columna vertebral de flujos que de otro modo construiría con un motor de workflows: localización de contenido, ingesta de documentos, procesamiento de medios, en cualquier caso donde un conjunto de pasos bien definidos siempre corre en el mismo orden. Como es una tarea asíncrona normal del KIT, también puede anidar una cadena como un solo paso dentro de un flujo programado o condicional más grande, así un cron nocturno puede disparar una cadena, o una rama condicional puede decidir si esa cadena se ejecuta.
Qué puede hacer con ella
Bandeja de soporte multilingüe
Encadene transcripción, resumen y traducción en cada mensaje de voz entrante para que los agentes vean un resumen corto en su idioma sin importar el del cliente.
De podcast a artículo de blog
Entregue un archivo de audio y obtenga un artículo traducido y listo para publicar, sin unir usted mismo tres servicios distintos.
Recepción de documentos de cumplimiento
Encadene OCR, traducción y resumen para que el equipo legal reciba un resumen revisable de contratos en otro idioma dentro de un solo trabajo rastreado.
Localización de marketing
Resuma un comunicado largo en inglés, traduzca el resumen a cinco mercados y publique cada variante, todo bajo un único task_id para auditoría.
Preguntas frecuentes
¿Cómo defino el orden de los pasos en una cadena?
Envía un arreglo ordenado a POST /flow/chain, y cada elemento puede referenciar campos del resultado de cualquier paso anterior como su propia entrada.
¿La API de encadenamiento de tareas es gratis para probar?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Recibo el resultado de cada paso o solo el último?
Por defecto recibe el resultado final, pero puede pedir los resultados intermedios de cada paso de la cadena en la misma respuesta.
¿Qué pasa si un paso intermedio falla?
Ese paso se reintenta automáticamente hasta tres veces; si sigue fallando, la cadena se detiene y devuelve un error específico que identifica el paso fallido, sin cobro por el fallo.
¿Cómo obtengo el resultado, por webhook o consultando?
Cualquiera de las dos: registre un webhook firmado para que le avisen apenas termine la cadena, o consulte el resultado en un enlace firmado que permanece válido durante 24 horas.
¿Una cadena puede llamar a cualquier tipo de tarea del KIT?
Sí, un paso de la cadena puede referenciar cualquier tarea disponible en la plataforma, así que puede combinar transcripción, traducción, OCR, resumen y otras familias de tareas libremente.
¿Hay un límite de pasos por cadena?
Las cadenas están pensadas para flujos típicos de pocos pasos; las secuencias muy largas es mejor dividirlas en cadenas anidadas o en un flujo programado para mayor claridad y facilidad de depuración.
¿En qué se diferencia encadenar de llamar las tareas una por una?
Llamar las tareas por separado implica manejar varios task_ids, escribir el código que pasa resultados entre ellas y consultar cada una; el encadenamiento hace todo eso del lado del servidor bajo un único task_id.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/flow/chain \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/flow/chain", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/flow/chain",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/flow/chain", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/flow/chain", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"input": "…"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "flow.chain",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |