# Pasos de las automatizaciones

> Referencia de todos los pasos de las automatizaciones, desde enviar un email, esperar y las condiciones hasta los pasos de listas, contactos y direcciones bloqueadas, además de las ramas y los fallos de los pasos.

Los pasos son lo que hace una ejecución después de que se active su disparador. Esta página lista todos los pasos por contexto con sus ajustes y reglas, explica cómo se conectan los pasos en ramas y muestra qué ocurre cuando falla un paso.

## Añadir y configurar pasos

En la pestaña **Editor** de la automatización (disponible mientras está en borrador o en pausa):

- **Añadir un paso:** selecciona el botón de suma debajo del último paso, o debajo de **Yes** o **No** en una condición. Busca en el selector o elige en **Actions**.
- **Configurar un paso:** selecciónalo en el lienzo. Sus ajustes se abren en un panel lateral. Cuando el paso ya se ha ejecutado, aparece una pestaña **Stats** junto a **Configure**.
- **Quitar un paso:** selecciónalo y selecciona **Delete step** en el panel lateral.
- **Guardar:** selecciona **Save**. Los pasos con problemas se resaltan con un recuento de errores.

## Pasos por contexto

| Paso | Clave en la API | Contact | Email | Event (API) |
| --- | --- | --- | --- | --- |
| [Send email](#send-email) | `send_email` | Sí | Sí | Sí |
| [Wait / Delay](#wait--delay) | `wait` | Sí | Sí | Sí |
| [Condition (If/Else)](#condition-ifelse) | `condition` | Sí | Sí | Sí |
| [Add to audience](#add-to-audience) | `add_to_audience` | Sí | | |
| [Remove from audience](#remove-from-audience) | `remove_from_audience` | Sí | | |
| [Edit contact](#edit-contact) | `edit_contact` | Sí | | |
| [Forward email](#forward-email) | `forward_email` | | Sí | Sí |
| [Add to suppressions](#add-to-suppressions) | `add_to_suppressions` | | Sí | Sí |
| [Remove from suppressions](#remove-from-suppressions) | `remove_from_suppressions` | | Sí | Sí |
| [Create contact](#create-contact) | `create_contact` | | Sí | Sí |
| [Pasos solo para la API](#api-only-steps) | `call_webhook`, `run_automation`, `experiment`, `end` | API | API | API |

Los ajustes de los pasos pueden incluir marcadores como `{{contact.first_name}}` o `{{payload.object.to}}`, que se rellenan en cada ejecución. Consulta [Datos disponibles para los pasos](/es/docs/automations/triggers/#data-available-to-steps).

## Send email

Envía un email creado a partir de una de tus [plantillas](/es/docs/templates/).

| Ajuste | Obligatorio | Notas |
| --- | --- | --- |
| **Email template** | Sí | La plantilla que se envía. Con la API, `template_id` admite un ID `tem_` o un alias, que usa la versión publicada. |
| **To (recipient)** | Contextos Email y Event | La dirección a la que se envía. Las automatizaciones de tipo Contact siempre envían al contacto de la ejecución. |
| **Subject** | No | Sustituye al asunto de la plantilla. |
| **From** | No | Sustituye al remitente de la plantilla, por ejemplo `"Acme" <hello@acme.com>`. |
| **Reply to** | No | Sustituye a la dirección de respuesta de la plantilla. |

Reglas:

- **La plantilla se renderiza con [Temple](/es/docs/templates/temple/).** En las automatizaciones de tipo Contact, los campos del contacto están disponibles directamente, así que `{{first_name}}`, `{{email}}` y `{{custom_fields.plan}}` funcionan. Todos los contextos tienen también `{{contact.*}}`, `{{payload.*}}` y `{{meta.*}}`. Las etiquetas de combinación de las campañas, como `{{cf.plan}}` y `{{unsubscribe_url}}`, no se rellenan.
- **El remitente debe estar en un dominio verificado.** El **From** personalizado o el remitente de la plantilla debe usar un dominio verificado en el espacio de trabajo. **Save** comprueba los valores personalizados, y el paso falla durante la ejecución si el dominio no está verificado.
- **Hacen falta un asunto y un contenido**, de la plantilla o de los valores personalizados.
- **Cada email cuesta 1 crédito**, además de los 3 créditos de la ejecución.
- **No comprueba las suscripciones.** El email se envía aunque el contacto se haya dado de baja de tus listas. Las direcciones bloqueadas se siguen bloqueando en la entrega, y los espacios de trabajo en modo sandbox solo pueden enviar a las direcciones de cuenta de los miembros.
- **Sin enlace de baja ni seguimiento de cargas y clics.** Los emails de las automatizaciones no llevan cabeceras `List-Unsubscribe`, y no se hace seguimiento de sus cargas ni de sus clics.

Las **Stats** del paso siguen cada email que ha enviado por **Accepted** y **Delivered**, y cuentan los rebotes, los fallos y las quejas.

## Wait / Delay

Pausa la ejecución antes del paso siguiente.

| Ajuste | Notas |
| --- | --- |
| **Duration** y **Unit** | **Minutes**, **Hours** o **Days**. La espera más larga es de 30 días. Con la API, define `seconds`, hasta `2592000`. |

Mientras una ejecución espera, sigue en **Running** y el paso de espera aparece como en espera. Pausar la automatización no interrumpe las ejecuciones que están esperando.

## Condition (If/Else)

Envía la ejecución por la rama **Yes** cuando se cumplen las reglas, o por la rama **No** cuando no se cumplen.

- **Reglas:** un campo, un operador y un valor, combinados con **All rules match** o **Any rule matches**. Los operadores son los mismos que en los [filtros de los disparadores](/es/docs/automations/triggers/#filters).
- **Campos:** en las automatizaciones de tipo Contact, **Email**, **First name**, **Last name** y tus campos personalizados. En las de tipo Email, los campos del evento del disparador. Con la API, `field` puede ser cualquier ruta, con los prefijos `contact.`, `email.`, `payload.` y `meta.`.
- **Ramas:** añade el paso siguiente bajo **Yes**, **No** o ambas. Una rama sin pasos termina ahí la ejecución.

## Add to audience

Contexto Contact. Suscribe al contacto de la ejecución a la **Audience** que elijas. Si el contacto se había dado de baja de ella, se vuelve a suscribir. El paso falla si la lista ha alcanzado su [límite de suscriptores](/es/docs/audiences/#limits). No inicia automatizaciones **Added to audience**.

## Remove from audience

Contexto Contact. Desactiva la suscripción del contacto a la **Audience**. El contacto sigue en la lista como suscriptor dado de baja, a diferencia de **Remove from audience** en el panel, que elimina la pertenencia a la lista.

## Edit contact

Contexto Contact. Establece uno o varios campos del contacto de la ejecución. Añade una fila por campo, con un **Field name** y un **Value**:

| Nombre del campo | Efecto |
| --- | --- |
| `first_name`, `last_name`, `email` | Actualiza ese campo. |
| `unsubscribed` | Establece el estado de marketing del contacto. Usa `true` para dar de baja al contacto de todas las campañas. Cualquier valor no vacío cuenta como `true`. |
| Cualquier otro nombre | Guarda el valor en el campo personalizado con esa clave y conserva los demás campos personalizados. |

Los valores pueden usar marcadores, por ejemplo `{{payload.object.audience.name}}`. El cambio no envía un evento `contact.updated`, así que no inicia automatizaciones **Contact updated** ni webhooks.

## Forward email

Contextos Email y Event. Envía una copia del email de la ejecución, con su contenido y sus adjuntos originales, a la dirección de **Forward to**. El asunto pasa a ser «Fwd: » seguido del asunto original. El email debe proceder de un dominio de envío verificado en el espacio de trabajo, y cada reenvío cuesta 1 crédito. Consulta [Reenviar con automatizaciones](/es/docs/inbound/forward-with-automations/).

## Add to suppressions

Contextos Email y Event. Añade una dirección a tu [lista de direcciones bloqueadas](/es/docs/suppressions/) con el tipo `recipient`, que bloquea todos los envíos a ella, y con el **Reason** que introduzcas (por defecto, `automation`). En las automatizaciones de tipo Email, la dirección es el destinatario del email. En las de tipo Event, define `email` con la API, por ejemplo `{{payload.email}}`. El paso envía un evento `suppression.created`.

## Remove from suppressions

Contextos Email y Event. Quita la dirección de la lista de direcciones bloqueadas: el destinatario del email en las automatizaciones de tipo Email, o el `email` definido con la API en las de tipo Event.

## Create contact

Contextos Email y Event. Crea un contacto y, si eliges una **Audience (optional)**, lo suscribe a ella.

- En las automatizaciones de tipo Email, el contacto es la dirección del destinatario del email. En los emails recibidos, es la dirección a la que se envió el email. Para crear en su lugar un contacto para el remitente, define `email` como `{{email.mail_from}}` con la API.
- En las automatizaciones de tipo Event, define `email` y, opcionalmente, `first_name` con la API.
- Si el contacto ya existe, se mantiene tal cual y solo se suscribe a la lista.
- El paso no inicia automatizaciones **Added to audience**.

## Pasos solo para la API

Estos pasos se pueden añadir con la API, pero todavía no en el editor del panel. Funcionan en todos los contextos.

| Paso | Clave en la API | Configuración | Qué hace |
| --- | --- | --- | --- |
| Call webhook | `call_webhook` | `url` (obligatorio), `method` (por defecto, `POST`), `headers`, `body` | Envía una petición HTTP con tipo de contenido JSON y registra la respuesta. Una respuesta que no es 2xx o un tiempo de espera agotado se registra como resultado del paso (`2xx`, `4xx`, `5xx`, `timeout` o `network_error`) y no hace fallar la ejecución. |
| Run automation | `run_automation` | `automation_id` (obligatorio) | Inicia una ejecución de otra automatización en marcha con el mismo payload y después continúa. La otra ejecución cuesta sus propios 3 créditos. Se omite si esa automatización no está en marcha. |
| Random split | `experiment` | `variants`: lista de `{ "key", "weight" }`, `control` opcional | Envía cada ejecución por una rama al azar, en proporción a los pesos. La rama de cada variante se llama como su `key`. Cuando termina la rama de una variante, la ejecución continúa por la rama `default` del paso. |
| End | `end` | Ninguna | Marca el final de una rama. |

```json
{
  "key": "notify-crm",
  "type": "action",
  "action": "call_webhook",
  "config": {
    "url": "https://crm.acme.com/hooks/new-subscriber",
    "method": "POST",
    "headers": { "Authorization": "Bearer crm_token" },
    "body": { "email": "{{contact.email}}", "source": "emailit" }
  }
}
```

## Ramas y conexiones

Con la API, una automatización es una lista de `steps`, cada uno con una `key` única, y una lista de `connections` de una clave de paso a la siguiente:

```json
{
  "steps": [
    { "key": "trigger-1", "type": "trigger", "trigger": "contact.added_to_audience", "config": {} },
    { "key": "is-pro", "type": "action", "action": "condition", "config": {
      "filter": { "match": "all", "rules": [{ "field": "custom_fields.plan", "operator": "equals", "value": "pro" }] }
    } },
    { "key": "send-pro", "type": "action", "action": "send_email", "config": { "type": "template", "template_id": "welcome-pro" } },
    { "key": "send-free", "type": "action", "action": "send_email", "config": { "type": "template", "template_id": "welcome-free" } }
  ],
  "connections": [
    { "from": "trigger-1", "to": "is-pro", "branch": "default" },
    { "from": "is-pro", "to": "send-pro", "branch": "yes" },
    { "from": "is-pro", "to": "send-free", "branch": "no" }
  ]
}
```

- **`branch`** es `default` para un paso siguiente normal, `yes` o `no` después de una condición, y una clave de variante después de un paso Random split.
- **Una condición solo sigue la rama que ha elegido.** Una conexión `default` que sale de una condición nunca se sigue.
- **Un paso con varias conexiones salientes en la misma rama** las inicia todas, y las ramas se ejecutan en paralelo.
- **Todos los pasos deben poder alcanzarse desde un disparador.** En las automatizaciones de tipo Contact y Email con varios disparadores, todos los disparadores deben conectarse al mismo primer paso.
- **Envía `steps` y `connections` juntos** cuando actualices una automatización. Los pasos cuyas claves no cambian conservan su historial y sus estadísticas.

## Cuando falla un paso

Por defecto, un paso fallido hace fallar toda la ejecución, y los pasos restantes no se ejecutan. El error se guarda en el paso y puedes leerlo en los detalles de la ejecución, en la pestaña **Runs**. Si prefieres que las ejecuciones continúen después de los pasos fallidos, pon `on_step_failure` en `skip` en los `settings` de la automatización con la API.

| Error | Causa |
| --- | --- |
| `send_email: Template '…' not found or not published` | La plantilla se ha eliminado, o el alias no tiene ninguna versión publicada. |
| `send_email: Sending domain is not verified or not found` | El dominio del remitente no está verificado en el espacio de trabajo. |
| `send_email: Unable to determine recipient address` | **To (recipient)** está vacío, o el contacto ya no existe. |
| `send_email: Insufficient credits (…)` | El espacio de trabajo se ha quedado sin créditos. |
| `Pro includes 50,000 subscribers per audience.` (o el límite de tu plan) | Un paso **Add to audience** o **Create contact** ha encontrado una lista llena. |
| `forward_email: Source email has no raw content to forward` | El contenido del email ya se ha eliminado según tu configuración de [retención de datos](/es/docs/data-retention/). |

Para saber cómo encontrar y corregir las ejecuciones fallidas, consulta [Ejecuciones y estadísticas](/es/docs/automations/runs/#debug-a-failed-run).

## Ver también

  - [Disparadores](/es/docs/automations/triggers/): Qué inicia una ejecución.
  - [Recetas](/es/docs/automations/recipes/): Automatizaciones ya preparadas para empezar.

---
Fuente: https://emailit.com/es/docs/automations/steps/
