Receta: automatizaciones sin código con Streamflow
Conectá un evento de intrusión con una captura, una verificación por IA y una alerta de Telegram — como un flujo visual de cajas, sin código. Triggers, acciones, lógica, y un mapa honesto de qué hace cada caja.
Por qué automatizar sin código
Los eventos de detección solo sirven si después pasa algo. Streamflow es ese "después": un motor de flujos visual y en-core que reacciona a los eventos de StreamHub y encadena cajas — capturar una foto, pedirle a una IA que la confirme, ramificar según la respuesta, avisar a una persona. Sin worker que desplegar, sin servicio de pegamento, sin código.
La arquitectura en palabras
Streamflow es una Studio App respaldada por un motor en-core que se engancha al mismo embudo de eventos que alimenta los callbacks firmados. Un flujo es un DAG de cajas en tres familias: triggers (qué inicia una corrida), acciones (qué hace) y lógica (cómo ramifica). Persiste cada corrida y cada paso por caja en un streamflow.db por app, y tiene límite de ritmo y tope de presupuesto para que una cámara descontrolada no dispare una factura de IA.
El flujo canónico
La automatización de seguridad clásica son cinco cajas:
trigger.event (intrusión de perímetro)
→ action.snapshot
→ action.ai ("¿es una intrusión real?")
→ logic.condition (confianza > 0.7)
→ action.notify
Dispara una intrusión; se captura una foto a tu S3; un modelo de IA la mira y devuelve una confianza; si supera el umbral, una persona recibe el aviso — y los falsos positivos se filtran antes de despertar a nadie.
1. Instalar y fijar el presupuesto de IA
export BASE="https://your-server.example.com/api/v1"
export TOKEN="sk_...."
curl -X POST $BASE/apps/security/plugins/streamflow/install -H "Authorization: Bearer $TOKEN"
curl -X PATCH $BASE/apps/security/plugins/streamflow -H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"enabled": true, "config": {"ai_provider": "openai", "ai_model": "gpt-4o-mini", "ai_api_key": "sk-...", "ai_budget_monthly_usd": 20, "max_runs_per_min": 60}}'
ai_budget_monthly_usd es un tope duro — la caja action.ai falla cerrada cuando se alcanza, así una cámara trabada no te funde.
2. Conocé las cajas que podés cablear
Triggers: trigger.event (cualquier evento de StreamHub, nombre exacto o un comodín plate.*, filtrable por sala/tags/predicado), trigger.schedule (cron o intervalo), trigger.mqtt (un tema MQTT/IoT entrante), trigger.manual (el botón Run).
Acciones: action.snapshot (capturar una sala a S3), action.s3, action.http (POST a cualquier lado, con guarda SSRF), action.ai (promptear OpenAI/DeepSeek, opcionalmente con una imagen, con tope de presupuesto), action.emit, action.mqtt (publicar a un tema), action.notify (repartir por el notificador), action.plugin (postear un evento a otro plugin).
Lógica: logic.condition (comparación tipada, puertos true/false), logic.delay (esperar, con tope de 60s), logic.setvar, logic.switch.
El notificador alcanza cuatro canales: callback, email, Discord y Telegram.
3. Armar y correr el flujo
Usá el editor visual en la pestaña de la app, o la API. El catálogo de cajas está en GET /apps/security/plugins/streamflow/boxes; los flujos viven bajo .../workflows; habilitá uno con POST .../workflows/:id/enable; probalo a mano con:
curl -s -X POST $BASE/apps/security/plugins/streamflow/workflows/<id>/run \
-H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"payload":{}}'
Revisá el historial en .../runs y entrá al detalle de los pasos por caja de una corrida en .../runs/:id.
Qué deberías ver
Con el flujo habilitado, una intrusión de perímetro real dispara una corrida: runs muestra la captura tomada, el veredicto de la IA, la rama de condición tomada, y — para las que superan 0.7 — un mensaje de Telegram entregado. Las corridas que no pasan la condición se detienen en silencio.
Resolución de problemas
- La caja de IA no hace nada — verificá que
ai_api_keyesté seteada y que estés bajoai_budget_monthly_usd; pasado el presupuesto falla cerrada hasta el mes siguiente. - Triggers descartados — una ráfaga por encima de
max_runs_per_minse descarta (y se loguea); subilo si esperás picos. - El aviso nunca llega — MQTT no es uno de los canales del notificador (usá la caja
action.mqttaparte para eso); los cuatro canales de aviso son callback, email, Discord y Telegram. - El delay se ignora pasado un minuto —
logic.delayestá acotado a 60 segundos por diseño.
Cierre
Streamflow convierte tus plugins de detección en automatizaciones sin una línea de código, todo dentro del servidor que ya corrés. Si querés cajas a medida, un flujo multi-rama complejo, o integración con tu sistema de tickets o SOC, nuestro equipo las construye sobre el motor open source.