Bifurque su flujo
No todos los flujos son una línea recta. La API de Flujos Condicionales permite que el resultado de una tarea decida qué sigue: enviar el contenido marcado por un camino y el contenido limpio por otro, sin que tenga que programar un enrutador if/else entre dos llamadas separadas.
El if/else que su flujo realmente necesita
Suponga que ejecuta moderación de contenido sobre un archivo subido: si queda marcado, necesita pasar a una cola de revisión humana; si está limpio, solo necesita publicarse. Hacer esto con dos llamadas simples significa que su propio código debe quedar en medio, revisar el primer resultado y decidir cuál segunda llamada hacer, y esa lógica de decisión tiende a crecer sin control en cuanto hay más de una condición que revisar. POST /flow/conditional permite expresar esa bifurcación de forma declarativa: la condición y los dos posibles pasos siguientes viajan juntos en una sola solicitud, y la decisión misma pasa a ser parte de la definición de la tarea en vez de código que mantiene usted.
Cómo se evalúa la bifurcación
Define una condición que lee un campo del resultado del paso anterior —un estado, una puntuación, un booleano— y dos (o más) pasos posibles ligados a distintos resultados de esa condición. La plataforma evalúa la condición automáticamente en cuanto termina el paso previo y solo ejecuta la rama que coincide, nunca ambas, así no se desperdicia trabajo calculando un resultado que de todos modos iba a descartar.
Qué recibe de vuelta
Sigue recibiendo un único task_id para todo el flujo condicional. El resultado indica cuál rama se ejecutó realmente, junto con su salida, entregado mediante un webhook firmado o un enlace firmado válido por 24 horas, de modo que los sistemas posteriores conocen no solo el resultado, sino el camino que se tomó para llegar a él, algo útil en cuanto alguien pregunta por qué un ítem terminó donde terminó.
Fallos y honestidad sobre el costo
Solo la rama que realmente se ejecuta puede fallar o tener éxito; la rama no elegida nunca se invoca ni se cobra. Una rama que falla recibe tres reintentos antes de devolver un error claro y específico, igual que cualquier otra tarea del KIT, y los intentos fallidos nunca se cobran, así una condición que enruta correctamente un ítem hacia una rama que luego se topa con una entrada mala le sigue diciendo con exactitud dónde estuvo el problema.
Dónde encajan los condicionales
Esta tarea existe para los puntos de decisión que antes le obligaban a orquestación personalizada: flujos de aprobar-o-rechazar, enrutamiento según idioma, umbrales de calidad. Al ser una tarea asíncrona normal, un paso condicional se anida sin problema dentro de una cadena o corre según un cron, así la lógica de decisión no tiene que vivir en un servicio aparte que usted mismo mantenga.
Qué puede hacer con ella
Enrutamiento de moderación de contenido
Envíe los archivos marcados a una rama de revisión y los limpios directo a una rama de publicación, según la puntuación de moderación del paso anterior.
Filtro de traducción según idioma
Active la traducción solo cuando el idioma detectado difiere del idioma de destino, saltando el paso por completo cuando ya coinciden.
Escalamiento por umbral de calidad
Enrute una transcripción con puntuación de confianza baja a una rama de reprocesamiento, y una de confianza alta directo a la entrega.
Respuesta escalonada al cliente
Bifurque un mensaje de soporte hacia una respuesta automática cuando el sentimiento es neutro, o hacia una cola prioritaria cuando el sentimiento resulta negativo.
Preguntas frecuentes
¿Cómo defino la condición para bifurcar?
Referencia un campo del resultado del paso anterior —como un estado o una puntuación— en la solicitud a POST /flow/conditional, junto con el paso a ejecutar para cada resultado posible.
¿La API de Flujos Condicionales es gratis?
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.
¿Se ejecutan las dos ramas o solo la que coincide?
Solo se ejecuta la rama que coincide con la condición; la otra nunca se invoca ni se cobra.
¿Puedo tener más de dos ramas posibles?
Sí, puede definir múltiples condiciones mapeadas a múltiples pasos siguientes, no solo una división simple de verdadero o falso.
¿Cómo sé cuál rama se ejecutó?
El resultado final indica explícitamente qué rama corrió junto con su salida, para que los sistemas posteriores reaccionen tanto al resultado como al camino tomado.
¿Qué pasa si la rama que se ejecuta falla?
Se reintenta automáticamente hasta tres veces; si sigue fallando, recibe un error específico y no se cobra ningún intento fallido.
¿Un paso condicional puede formar parte de una cadena más larga?
Sí, los condicionales son tareas asíncronas estándar, así que se anidan dentro de una cadena o corren como parte de un flujo programado igual que cualquier otro paso.
¿El enrutamiento condicional es lo mismo que la lógica de reintentos?
No, los reintentos manejan automáticamente los fallos de una sola tarea; el enrutamiento condicional decide cuál tarea distinta ejecutar a continuación según un resultado exitoso.
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/conditional \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/flow/conditional", {
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/conditional",
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/conditional", 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/conditional", 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.conditional",
"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. |