> ## Documentation Index
> Fetch the complete documentation index at: https://help.treble.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# fact_campaign_sends

> Cada mensaje outbound de campaña con su ciclo de vida de entrega completo.

# fact\_campaign\_sends

Cada fila es un mensaje outbound de una campaña a un destinatario, con su ciclo de vida de entrega completo: programado → enviado → entregado → respondido, o la razón exacta de la falla. Reemplaza a la tabla legacy `fact_deployment_status`.

## ¿Qué preguntas responde?

* ¿Cuál es la tasa de entrega y de respuesta de cada campaña?
* ¿Qué destinatarios específicos fallaron, y por qué?
* ¿Cuánto tarda el recorrido programado → entregado → respondido?
* ¿Qué envíos fueron reintentados?
* ¿Cuánto tráfico viene de cada canal — API, carga de archivos, integraciones de CRM (`origin`)?

## Columnas

| Columna             | Tipo       | Descripción                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `deployment_id`     | String     | Identificador único del envío (hex de 56 caracteres)                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `company_id`        | Int32      | Tu empresa (filtrado automáticamente)                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `batch_id`          | String     | El lote al que pertenece este envío (una ejecución de campaña)                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| `status`            | String     | Estado actual del ciclo de vida. Camino exitoso: `DELIVERED`, `SUCCESS` (enviado, entrega aún no confirmada). En curso: `RECEIVED`, `RECEIVED_BY_WORKER`, `RETRY`. Cancelado: `REVOKED`. Rechazado antes de enviar: `INVALID_PHONE`, `INVALID_POLL`, `MISSING_PARAMETER`, `PARAMETER_MISMATCH`, `VALIDATION_ERROR`. Fallido: `FAILURE` y la familia `FAILURE_BY_*` (`_UNABLE_TO_CONTACT`, `_DISABLED_HSM`, `_META_CHOSE_NOT_DELIVER`, `_HUMAN_HANDOVER`, `_OPTOUT_CONTACT`, `_RATE_LIMIT`, entre otros) |
| `retries`           | Int32      | Número de reintentos                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `poll_id`           | Int32      | Flujo que dispara la campaña                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| `poll_name`         | String     | Nombre del flujo                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `origin`            | String     | De dónde vino el envío: `API`, `CSV` (carga de archivo en la plataforma), `SIMPLE` (envío directo desde la plataforma), `APP_INTEGRATION`, `HELPDESK_INTEGRATION`                                                                                                                                                                                                                                                                                                                                       |
| `origin_id`         | Int32      | Identificador del origen: el usuario de la plataforma que lo lanzó (`CSV`/`SIMPLE`), la integración que lo disparó (`APP_INTEGRATION`/`HELPDESK_INTEGRATION`), o el id provisto por quien llamó la API; `0` cuando no está definido                                                                                                                                                                                                                                                                     |
| `scheduled_at`      | DateTime64 | Cuándo se programó el envío                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| `received_at`       | DateTime64 | Cuándo WhatsApp aceptó el mensaje; `NULL` si no ocurrió                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `delivered_at`      | DateTime64 | Cuándo llegó al teléfono del usuario; `NULL` si no ocurrió                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| `responded_at`      | DateTime64 | Cuándo respondió el usuario; `NULL` si no respondió                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `failed_at`         | DateTime64 | Cuándo falló; `NULL` si fue exitoso                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `succeeded_at`      | DateTime64 | Cuándo se confirmó como exitoso; `NULL` en caso contrario                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| `cellphone`         | String     | Número de teléfono del destinatario                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `country_code`      | String     | Código de país del destinatario                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `treble_id`         | String     | Identidad del contacto (código de país + celular)                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `business_scope_id` | String     | ID de usuario business-scoped de WhatsApp, cuando está disponible                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| `username`          | String     | Nombre de usuario de WhatsApp, para contactos sin número de teléfono                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| `scheduled`         | Bool       | `true` si el envío se programó para un momento futuro en lugar de enviarse de inmediato                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `synced_at`         | DateTime64 | Cuándo se escribió/corrigió por última vez esta fila                                                                                                                                                                                                                                                                                                                                                                                                                                                    |

<Note>
  Los estados siguen cambiando mientras una campaña está en curso. Según [el contrato de datos](/es/docs/data-warehouse-v2/welcome#el-contrato-de-datos), las cifras de un día se consolidan por completo dentro de 48 horas — el warehouse actualiza cada fila en su lugar a medida que su estado avanza.
</Note>

## Consultas de ejemplo

### Scorecard de campañas

```sql theme={null}
SELECT
    poll_name,
    count()                                   AS sends,
    countIf(delivered_at IS NOT NULL)         AS delivered,
    countIf(responded_at IS NOT NULL)         AS responded,
    round(100.0 * delivered / sends, 1)       AS delivery_pct,
    round(100.0 * responded / delivered, 1)   AS response_of_delivered_pct
FROM fact_campaign_sends
WHERE scheduled_at >= today() - 30
GROUP BY poll_name
ORDER BY sends DESC
```

### Destinatarios fallidos de un lote

```sql theme={null}
SELECT cellphone, status, retries, failed_at
FROM fact_campaign_sends
WHERE batch_id = '{your_batch_id}'
  AND failed_at IS NOT NULL
ORDER BY failed_at
```

### Tiempo hasta la respuesta

```sql theme={null}
SELECT
    poll_name,
    round(avg(dateDiff('minute', delivered_at, responded_at)), 1) AS avg_minutes_to_reply
FROM fact_campaign_sends
WHERE scheduled_at >= today() - 30
  AND delivered_at IS NOT NULL
  AND responded_at IS NOT NULL
GROUP BY poll_name
```
