← Volver al blog
Plugins #streamflow

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.

4 min de lectura
Read in English

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_key esté seteada y que estés bajo ai_budget_monthly_usd; pasado el presupuesto falla cerrada hasta el mes siguiente.
  • Triggers descartados — una ráfaga por encima de max_runs_per_min se 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.mqtt aparte para eso); los cuatro canales de aviso son callback, email, Discord y Telegram.
  • El delay se ignora pasado un minutologic.delay está 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.