---
title: Campaign and channel events
slug: data-platform/connect-platform/ocpcoreconcepts-campaign-channel-events
createdAt: 2026-08-05T20:06:36.783Z
---

You must specify all delivery, engagement, attributable, disengagement, and reachability events that a channel app sends into Optimizely Data Platform (ODP) in the `channel/metrics` section of the [`` `app.yml file` ``](docId\:M8TiC_ggD3UbZu73jyhGi).

For more information about events in ODP, see [Events](docId\:w0DeSMy7YSyAm7PnwzGqq).

## `app.yml` configuration for events

The following is a full list of events that a channel app can send into ODP:

```yaml
metrics:
  delivery:
    - sent
    - delivery
    - delivery_unknown
  engagement:
    - open
    - click
    - engage
  disengagement:
    - disengage
    - list_unsubscribe
    - opt-out
    - spam_report
  reachability:
    - hard_bounce
    - soft_bounce
  attributable:
    - open
    - click
    - delivery
    - engage
```

The channel app sends `delivery`, `engagement`, `disengagement`, and `reachability` events to ODP to inform about delivery and message engagement. The actual implementation depends on the third-party service that your app integrates with. Your app does not have to send all these event types if the third-party service does not support them, but more events helps ODP provide richer user profiles and more accurate campaign reports.

`attributable` events define which event types to use in Optimizely's attribution model to determine which campaigns get credit for a conversion. These often, but not always, mirror engagement actions.

ODP uses the above configuration to process campaigns and display relevant reports in the user interface (UI).

Send events using the [Connect Platform Node SDK](docId\:gxEU_0AA37IEZJK-uoVcT).
For examples on how to send events, see [ODP Web SDK Events](docId:91viwYgeD4R4zyCrvpvVP).

### Delivery events

Delivery events record events along the delivery pipeline. Minimally, these consist of sent events. The event type (`type`) for these events is the `channel.type` specified in the [`` `app.yml file` ``](docId\:M8TiC_ggD3UbZu73jyhGi).

| Event `action`    | Description                                                                                                                                         |
| ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| sent              | records that a send occurred; this is an Optimizely-generated event                                                                                 |
| delivery          | records that a successful message delivery occurred; you must send this from your channel app (the logic depends on the external service)           |
| delivery\_unknown | records that it was unknown whether a message delivery was successful or unsuccessful; typically only used when `delivery` events are also possible |

### Engagement events

Engagement events record when a message recipient has a positive interaction with the message. The event type (`type`) for these events is the `channel.type` specified in the [`` `app.yml file` ``](docId\:M8TiC_ggD3UbZu73jyhGi).

| Event `action` | Description                                                                                                                                  |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| open           | records that a recipient opened a message                                                                                                    |
| click          | records that a recipient clicked a message                                                                                                   |
| engage         | records that a recipient generically engaged with a message; used when the engagement action does not cleanly fit into another action option |

### Disengagement events

Disengagement events are recorded when a message recipient has a negative interaction with the message.

| Event Type `type` | Event `action` | `reachability_update_type` | `list_id`   |
| ----------------- | -------------- | -------------------------- | ----------- |
| content           | opt-out        |                            |             |
| reachability      | unreachable    | spam\_report               |             |
| list              | unsubscribe    |                            | \[list\_id] |
| \[channel.type]   | disengage      |                            |             |

### Reachability events

Reachability events are recorded when a message cannot be delivered.

| Event `type`    | Event `action` | `reachability_update_type` | Description                                                                                                      |
| --------------- | -------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| reachability    | unreachable    | hard\_bounce               | records that a message could not be delivered for a permanent reason (for example, email address does not exist) |
| \[channel.type] | soft\_bounce   |                            | records that a message could not be delivered for an impermanent reason (for example, mailbox is full)           |

:::hint{type="info"}
**Note**
You can only retrieve reachability events for messaging identifiers. For more information about identifiers in ODP, see the [ODP developer documentation](docId\:zofYSXRfkDa-2L5Umjfmy).
:::
