N8n | Skills Pool
N8n Design and debug n8n workflows using nodes, expressions, credentials, and the Code node (JavaScript/Python) for self-hosted or cloud automation pipelines. Use when "create n8n workflow", "n8n webhook", "n8n expression", "n8n node", "automate with n8n", "n8n http request", "n8n schedule", "n8n code node", "n8n credential", "n8n self-hosted", "trigger n8n flow", "n8n error handling".
Umbral-Bot 0 Sterne 23.03.2026 n8n Skill
Rick puede asistir en el diseño, depuración y mantenimiento de workflows n8n — tanto en instancia self-hosted como en n8n Cloud.
Documentación oficial: https://docs.n8n.io/
Tasks del Worker cubiertas por esta skill
n8n.list_workflows
n8n.get_workflow
n8n.create_workflow
n8n.update_workflow
n8n.post_webhook
Conceptos fundamentales
Concepto Descripción Workflow Conjunto de nodos conectados que procesan datos
npx skills add Umbral-Bot/umbral-agent-stack
Sterne 0
Aktualisiert 23.03.2026
Beruf Bloque de acción o disparador. Produce ítems de salida
Item Unidad de dato que fluye entre nodos (objeto JSON)
Trigger node Nodo que inicia el workflow (webhook, cron, evento)
Regular node Nodo de procesamiento/acción invocado después del trigger
Expression Valor dinámico calculado con {{ }} en parámetros
Credential Autenticación almacenada de forma segura para servicios externos
Execution Una corrida del workflow (manual, trigger, programada)
Expresiones n8n
Nodos core más usados
Triggers Nodo Cuándo usar Webhook Recibir llamadas HTTP POST/GET desde sistemas externos Schedule Trigger Ejecutar según cron (ej: 0 8 * * 1-5 = lun-vie 8:00) Manual Trigger Ejecución manual durante desarrollo/testing Email Trigger (IMAP) Trigger cuando llega un email RSS Read Monitorear feeds RSS
Procesamiento y lógica Nodo Uso HTTP Request Llamar cualquier API REST/HTTP Code Ejecutar JavaScript o Python personalizado Set Crear/modificar campos en los ítems If Bifurcación condicional (true/false) Switch Múltiples ramas según valor Merge Combinar datos de múltiples ramas Split In Batches Procesar ítems en grupos (evitar rate limits) Filter Filtrar ítems que cumplan condición Aggregate Agrupar múltiples ítems en uno Loop Over Items Iterar sobre un array dentro de un ítem Wait Pausar ejecución por tiempo o hasta evento Edit Fields (Set) Mapear y transformar campos
Integraciones comunes Nodo Servicio OpenAI GPT-4, embeddings, Assistants Slack Mensajes, canales, usuarios Gmail Leer, enviar, etiquetar emails Google Sheets Leer, escribir, actualizar hojas Notion Crear páginas, actualizar propiedades Airtable CRUD en bases Airtable GitHub Issues, PRs, repositorios Telegram Enviar mensajes, bots MySQL / PostgreSQL Queries SQL Redis Get, Set, Push en Redis HTTP Request Cualquier API personalizada
Expresiones (Expressions) Las expresiones se escriben entre {{ }} en cualquier campo de parámetro:
Acceder a datos de nodos anteriores
Acceder a datos del nodo anterior // Dato del nodo anterior (output[0])
{{ $json.nombre }}
{{ $json.email }}
{{ $json["campo con espacio"] }}
// Nodo específico por nombre
{{ $node["HTTP Request"].json.data.id }}
{{ $node["Webhook"].json.body.payload }}
// Primer ítem de un nodo
{{ $node["Google Sheets"].json[0].Title }}
// Input del trigger
{{ $input.first().json.event_type }}
{{ $input.all() }} // todos los ítems como array
Variables de entorno y workflow {{ $env.MI_API_KEY }} // variable de entorno
{{ $workflow.id }} // ID del workflow
{{ $workflow.name }} // nombre del workflow
{{ $execution.id }} // ID de la ejecución actual
{{ $now }} // DateTime actual (objeto Luxon)
{{ $today }} // fecha de hoy (objeto Luxon)
Luxon — Fechas y tiempo {{ $now.toISO() }} // "2026-03-04T10:30:00.000-06:00"
{{ $now.toFormat('dd/MM/yyyy') }} // "04/03/2026"
{{ $now.plus({days: 7}).toISO() }} // +7 días
{{ $now.minus({hours: 2}).toISO() }} // -2 horas
{{ $now.startOf('month').toISO() }} // primer día del mes
{{ $now.toUTC().toISO() }} // convertir a UTC
{{ DateTime.fromISO($json.fecha).toFormat('yyyy') }} // año de una fecha
Transformaciones de texto {{ $json.nombre.toUpperCase() }}
{{ $json.email.toLowerCase() }}
{{ $json.texto.replace(/\n/g, ' ') }}
{{ $json.nombre.split(' ')[0] }} // primer nombre
{{ `Hola, ${$json.nombre}!` }} // template literal
JMESPath — Consultas en JSON {{ $jmespath($json, "items[?status=='active'].name") }}
{{ $jmespath($json, "orders | length(@)") }}
Nodo Code (JavaScript/Python)
JavaScript — Run Once for All Items // items = array de todos los ítems de entrada
const results = [];
for (const item of items) {
const data = item.json;
results.push({
json: {
id: data.id,
nombre: data.nombre.trim().toUpperCase(),
total: data.precio * data.cantidad,
timestamp: new Date().toISOString()
}
});
}
return results;
JavaScript — Run Once for Each Item // item = ítem actual (acceder con $input.item.json)
const data = $input.item.json;
return {
json: {
procesado: true,
valor_doble: data.valor * 2,
categoria: data.valor > 1000 ? 'alto' : 'bajo'
}
};
Python (Code node) results = []
for item in _input.all():
data = item.json
results.append({
"json": {
"nombre": data.get("nombre", "").upper(),
"total": data.get("precio", 0) * data.get("cantidad", 0)
}
})
return results
Nodos principales
Webhook — Configuración // Nodo Webhook: método POST, authentication: Header Auth
// Headers requeridos: X-API-Key: <valor>
// URL del webhook (self-hosted):
// https://tu-n8n.dominio.com/webhook/abc123-uuid
// URL test (solo disponible con workflow activo en modo test):
// https://tu-n8n.dominio.com/webhook-test/abc123-uuid
Responder al webhook desde n8n:
// Nodo "Respond to Webhook" con status 200
{
"status": "ok",
"message": "Procesado exitosamente",
"execution_id": "{{ $execution.id }}"
}
Credenciales — Configuración
Header Auth : Name: Authorization, Value: Bearer <token>
Basic Auth : usuario + contraseña
OAuth2 : flujo OAuth estándar con callback a n8n
API Key : clave en header o query param
Crear credencial: Configuración → Credenciales → + Nueva credencial
Usar en expresiones: {{ $credentials.MiCredencial.apiKey }} (solo en Code node)
docker-compose.yml mínimo 02
Tasks del Worker cubiertas por esta skill