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

# Pujas y optimización para agencias

> Cómo usar los eventos del widget de Restoo para medir el embudo de reserva y elegir las conversiones de optimización adecuadas en Google Ads, Meta, TikTok y ChatGPT Ads.

Esta guía está pensada para agencias y equipos de marketing que llevan campañas de pago de un negocio que usa el widget de Restoo. Explica qué eventos del widget conviene **medir** y cuáles entregar a los algoritmos de puja como **conversiones**, para que las campañas optimicen hacia reservas reales y no hacia pasos intermedios.

Parte de [Restoo Connect](/es/widget/connect), que reenvía los eventos del widget a tus plataformas de analítica y publicidad sin nada de código a medida. Antes de seguir, activa en tu cuenta los destinos que uses:

<CardGroup cols={2}>
  <Card title="Configurar tus integraciones" icon="sliders" href="/es/widget/integrations">
    Activa GA4, Google Ads, Meta, TikTok, ChatGPT Ads o GTM en tu cuenta de Restoo.
  </Card>

  <Card title="Mapeo de eventos" icon="table" href="/es/widget/connect-mappings">
    A qué corresponde cada evento de Restoo en cada plataforma.
  </Card>
</CardGroup>

Las integraciones avanzadas que prefieran gestionar los eventos por su cuenta pueden montar una integración a medida a partir de la referencia de [eventos del widget de Restoo](/es/widget/events) en lugar de usar Restoo Connect. La mayoría de las campañas no lo necesitan.

<Note>
  Las recomendaciones que siguen son valores por defecto razonables, no reglas
  absolutas. Cuando una pauta depende del volumen de la cuenta o de los
  objetivos de la campaña, se indica así. Valídalas siempre contra los datos de
  la propia cuenta.
</Note>

## Eventos de diagnóstico y conversiones de optimización

No todos los eventos deberían convertirse en una conversión. Sepáralos en dos grupos.

**Los eventos de diagnóstico** te dicen *dónde* abandona la gente. Úsalos para informes, embudos y audiencias, pero **no** dejes que una estrategia de puja optimice hacia ellos. Optimizar hacia un paso temprano enseña al algoritmo a encontrar gente que completa ese paso, no gente que reserva.

**Las conversiones de optimización** son el pequeño conjunto de eventos que entregas deliberadamente al Smart Bidding, a la optimización de Meta, al objetivo de optimización de TikTok o al evento de conversión de una campaña de ChatGPT Ads. Restoo modela una reserva como un *lead*, no como una compra de ecommerce (consulta [Modelo de captación](/es/widget/connect-mappings#modelo-de-captación)), así que estos eventos **no llevan `value` ni `currency`**: optimiza por *volumen* de conversiones, no por valor ni ROAS.

La tabla relaciona cada etapa del embudo con el evento que Restoo Connect envía a cada plataforma. Un guion significa que esa etapa no se envía a esa plataforma.

| Etapa del embudo (evento de Restoo)                                                         | Papel          | GA4                                     | Google Ads             | Meta                                | TikTok                              | ChatGPT Ads                             |
| ------------------------------------------------------------------------------------------- | -------------- | --------------------------------------- | ---------------------- | ----------------------------------- | ----------------------------------- | --------------------------------------- |
| Inicio de reserva visto (`booking_start_viewed`)                                            | Diagnóstico    | `restoo_booking_start_viewed`           | —                      | `RestooBookingStartViewed`          | `RestooBookingStartViewed`          | `restoo_booking_start_viewed`           |
| Búsqueda de disponibilidad (`booking_start_submitted`)                                      | Diagnóstico    | `search`                                | —                      | `Search`                            | `Search`                            | `restoo_booking_start_submitted`        |
| Sin disponibilidad (`booking_no_availability_viewed`)                                       | Diagnóstico    | `restoo_booking_no_availability_viewed` | —                      | `RestooBookingNoAvailabilityViewed` | `RestooBookingNoAvailabilityViewed` | `restoo_booking_no_availability_viewed` |
| Listado visto (`booking_item_list_viewed`)                                                  | Diagnóstico    | `view_item_list`                        | —                      | `RestooBookingItemListViewed`       | `RestooBookingItemListViewed`       | `contents_viewed`                       |
| Detalle de un elemento visto (`booking_item_detail_viewed`)                                 | Diagnóstico    | `view_item`                             | —                      | `ViewContent`                       | `ViewContent`                       | `contents_viewed`                       |
| Elemento seleccionado (`booking_item_selected`)                                             | Diagnóstico    | `select_item`                           | —                      | `RestooBookingItemSelected`         | `RestooBookingItemSelected`         | `items_added`                           |
| Formulario de datos visto (`booking_details_form_viewed`)                                   | Diagnóstico    | `restoo_booking_details_form_viewed`    | —                      | `ViewContent`                       | `ViewContent`                       | `restoo_booking_details_form_viewed`    |
| Formulario de datos iniciado (`booking_details_form_started`)                               | Diagnóstico    | `form_start`                            | —                      | `RestooBookingDetailsFormStarted`   | `RestooBookingDetailsFormStarted`   | `restoo_booking_details_form_started`   |
| Formulario de datos enviado (`booking_details_form_submitted`)                              | Diagnóstico    | `form_submit`                           | —                      | `RestooBookingDetailsFormSubmitted` | `RestooBookingDetailsFormSubmitted` | `restoo_booking_details_form_submitted` |
| Condiciones vistas (`booking_conditions_viewed`)                                            | Diagnóstico    | `restoo_booking_conditions_viewed`      | —                      | `RestooBookingConditionsViewed`     | `RestooBookingConditionsViewed`     | `restoo_booking_conditions_viewed`      |
| Condiciones aceptadas (`booking_conditions_accepted`)                                       | Diagnóstico    | `restoo_booking_conditions_accepted`    | —                      | `RestooBookingConditionsAccepted`   | `RestooBookingConditionsAccepted`   | `restoo_booking_conditions_accepted`    |
| Política de cancelación mostrada (`booking_cp_viewed`)                                      | Diagnóstico    | `restoo_booking_cp_viewed`              | —                      | `RestooBookingCpViewed`             | `RestooBookingCpViewed`             | `restoo_booking_cp_viewed`              |
| Política de cancelación leída (`booking_cp_acknowledged`)                                   | Diagnóstico    | `restoo_booking_cp_acknowledged`        | —                      | `RestooBookingCpAcknowledged`       | `RestooBookingCpAcknowledged`       | `restoo_booking_cp_acknowledged`        |
| Política de cancelación firmada (`booking_cp_accepted`)                                     | Diagnóstico    | `restoo_booking_cp_accepted`            | —                      | `RestooBookingCpAccepted`           | `RestooBookingCpAccepted`           | `restoo_booking_cp_accepted`            |
| **Reserva confirmada (`booking_created`, estado `CONFIRMED`)**                              | **Reserva**    | `qualify_lead`                          | `booking_confirmed`    | `Schedule`                          | `Schedule`                          | `appointment_scheduled`                 |
| **Reserva pendiente (`booking_created`, estado `REQUESTED` o `PENDING_WAIT_LIST_BOOKING`)** | **Lead**       | `generate_lead`                         | `booking_lead`         | `Lead`                              | `SubmitForm`                        | `lead_created`                          |
| Reserva modificada (`booking_updated`)                                                      | Diagnóstico    | `restoo_booking_updated`                | —                      | —                                   | —                                   | —                                       |
| **Contacto (`action_taken`, canal concreto)**                                               | **Contacto**   | `select_content`                        | `contact`              | `Contact`                           | `Contact`                           | `contact` (personalizado)               |
| Cliente identificado (`customer_identified`)                                                | Datos de cruce | `login`                                 | Conversiones mejoradas | Advanced Matching                   | `identify`                          | `init` con `user`                       |

<Info>
  El destino de Google Ads envía solo tres acciones de conversión
  —`booking_lead`, `booking_confirmed` y `contact`—, que son exactamente [las
  tres conversiones de optimización](#las-tres-conversiones-de-optimización). Nunca envía eventos de
  diagnóstico a Google Ads. GA4, Meta y TikTok reciben el conjunto amplio para
  medición y audiencias; ChatGPT Ads, para medición.
</Info>

## Las tres conversiones de optimización

Todo aquello hacia lo que optimizas sale de solo tres eventos:

<CardGroup cols={3}>
  <Card title="Reserva" icon="calendar-check">
    `booking_created` con estado `CONFIRMED`.
  </Card>

  <Card title="Lead" icon="user-pen">
    `booking_created` pendiente de confirmación o en lista de espera.
  </Card>

  <Card title="Contacto" icon="phone">
    `action_taken` con un canal concreto (teléfono, correo, WhatsApp…).
  </Card>
</CardGroup>

## Recomendación: la reserva como conversión principal

**Como valor por defecto general, haz de la reserva tu conversión de optimización principal y la métrica hacia la que pujan las campañas.** Es la señal más cercana a los ingresos y es el único resultado que de verdad le importa al negocio.

Cuál de las dos conversiones de reserva es esa principal depende de cómo trabaje el local:

| Cómo trabaja el local                                  | Conversión principal                       |
| ------------------------------------------------------ | ------------------------------------------ |
| Confirma al instante                                   | Reserva confirmada                         |
| Trabaja con solicitud de reserva o con lista de espera | Lead                                       |
| Las dos cosas, según el horario o el aforo             | Las dos, las dos marcadas como principales |

En el tercer caso, marcar las dos no cuenta nada dos veces: son excluyentes, y sumadas son exactamente las reservas creadas. Sigue las confirmaciones por separado como métrica de informe si te interesa la proporción entre unas y otras.

<Note>
  Cuando un visitante modifica una reserva que ya existe, Restoo Connect suprime
  los eventos de embudo y de conversión, así que las modificaciones nunca inflan
  tu recuento de reservas ni de leads.
</Note>

## Recomendación: contacto como conversión secundaria

Usa **Contacto** como conversión **secundaria**: se reporta e informa a la puja sin convertirse en el objetivo. Captura la demanda que nunca entra en el embudo online, la de los clientes que llaman o escriben en lugar de reservar, y eso importa en locales que reciben muchas reservas por teléfono.

Mantenerla como secundaria significa que el algoritmo sigue aprendiendo de ella, pero no persigue clics en el botón de llamar a costa de las reservas.

Deja como secundaria también la conversión de reserva que tu local casi no produce —el **Lead** si confirmas al instante, o la **reserva confirmada** si trabajas por solicitud—, para que se mida sin distorsionar la puja con un puñado de casos.

## Cuentas de bajo volumen

La puja automática necesita un flujo constante del evento hacia el que optimiza. Como regla aproximada, no como norma estricta:

* El **Smart Bidding de Google Ads** funciona mejor con unas **15-30 conversiones en los últimos 30 días** en la acción de optimización. Las estrategias de CPA o ROAS objetivo necesitan más que Maximizar conversiones.
* Los conjuntos de anuncios de **Meta** salen de la *fase de aprendizaje* en torno a los **50 eventos de optimización por semana** por conjunto.
* **TikTok** se estabiliza igualmente sobre las **50 conversiones en 7 días** del evento de optimización elegido.

Por debajo de esos niveles la reserva es demasiado infrecuente para que el algoritmo aprenda de ella, y tiene sentido mover **temporalmente** el objetivo de optimización un paso más atrás en el embudo.

**Ese paso anterior no es el Lead.** Las dos conversiones de reserva están a la misma altura del embudo —las dos exigen que la reserva exista—, así que cambiar de una a la otra no da más volumen, solo mide otra cosa. Los pasos que de verdad van antes son los de diagnóstico, y lo que puedes elegir como objetivo depende de la plataforma:

| Plataforma  | Señal anterior utilizable                                                         |
| ----------- | --------------------------------------------------------------------------------- |
| Meta        | `ViewContent` (detalle de una experiencia o formulario de datos visto) o `Search` |
| TikTok      | `ViewContent` o `Search`                                                          |
| ChatGPT Ads | `contents_viewed` (listado o detalle de un elemento) o `items_added`              |
| GA4 y GTM   | `form_submit`, `form_start` o `search`, importados como eventos clave             |
| Google Ads  | Ninguna: el widget solo le envía las tres acciones de conversión                  |

Los eventos personalizados de Restoo no sirven para esto: ni Meta, ni TikTok ni ChatGPT Ads los admiten como objetivo de optimización, por muy tarde que caiga su etapa en el embudo. Y en Google Ads, si el volumen de reservas no llega al umbral, el único margen está en lo que acompaña al cambio:

1. **Consolida** campañas y conjuntos de anuncios para que las conversiones no se repartan entre muchos grupos pequeños.
2. **Amplía** la segmentación y usa concordancia amplia o audiencias Advantage+ para darle margen al algoritmo.
3. **Activa las conversiones mejoradas, el Advanced Matching, el `identify` y el `user` del OpenAI Pixel** (vía `customer_identified`) para que cada conversión se cruce con más clics; esto recupera señal que se perdería de otro modo.

Es un paso temporal, no el objetivo final: en cuanto el volumen de reservas supere los umbrales, devuelve el objetivo de optimización a la reserva confirmada.

<Warning>
  **No dejes al algoritmo optimizando hacia eventos de diagnóstico o hacia el
  contacto.** Si optimizas hacia `ViewContent` o `Contact` de forma permanente,
  le enseñas a encontrar gente que *mira páginas* o que *pulsa botones de
  llamada*, no gente que *reserva*. Verás «conversiones» baratas y reservas
  planas. Cualquier objetivo más arriba del embudo es un paso temporal hacia
  la conversión de reserva.
</Warning>

## Google Ads: conversiones principales y secundarias

Google Ads permite marcar cada acción de conversión como **principal** (se usa para pujar) o **secundaria** (solo se observa).

<Steps>
  <Step title="Crea las tres acciones de conversión">
    Crea `booking_lead`, `booking_confirmed` y `contact` en Google Ads y pega el
    ID de conversión de la cuenta, más la etiqueta de cada acción, [en tu cuenta
    de Restoo](/es/widget/integrations#google-ads). El paso a paso está en
    [configurar los destinos de
    conversión](/es/widget/connect-mappings#configurar-los-destinos-de-conversión).
  </Step>

  <Step title="Marca como principal la conversión de reserva de tu local">
    Define `booking_confirmed` como acción **principal** si el local confirma al
    instante, `booking_lead` si trabaja por solicitud o con lista de espera, o
    las dos si hace las dos cosas. Son excluyentes, así que marcar las dos no
    cuenta ninguna reserva dos veces.
  </Step>

  <Step title="Marca contact como secundaria">
    Define `contact` como **secundaria**, de modo que se reporte y pueda
    informar a la puja sin convertirse en el objetivo. Deja también como
    secundaria la conversión de reserva que tu local apenas produzca.
  </Step>

  <Step title="Usa objetivos de conversión">
    Agrupa la acción principal en el objetivo de conversión de la campaña.
    Mantén alineados los objetivos por defecto de la cuenta para que las
    campañas no pujen en silencio por la acción equivocada.
  </Step>
</Steps>

<Info>
  Como las conversiones de Restoo no llevan `value`, usa **Maximizar
  conversiones** (opcionalmente con un CPA objetivo) en lugar de las estrategias
  basadas en valor, Maximizar el valor de la conversión o ROAS objetivo.
</Info>

## Meta, TikTok y ChatGPT Ads: una estrategia equivalente

Meta, TikTok y ChatGPT Ads no tienen etiqueta de principal o secundaria, pero se consigue el mismo efecto eligiendo el **evento u objetivo de optimización** de cada campaña, mientras el resto de eventos siguen llegando para medición.

<Tabs>
  <Tab title="Meta">
    * **Evento de optimización por defecto:** `Schedule` (reserva confirmada), o `Lead` si el local trabaja por solicitud o con lista de espera. Son excluyentes: cada reserva dispara uno de los dos.
    * **Arranque o bajo volumen:** optimiza por `ViewContent` o `Search` y vuelve después a `Schedule`. Cambiar de `Schedule` a `Lead` no aporta volumen, son el mismo paso del embudo.
    * **Locales con mucho teléfono:** una campaña específica que optimice por `Contact`.
    * **No envíes además estos eventos desde tu servidor.** La deduplicación de Meta se basa en un ID de evento, y Restoo Connect no envía ninguno, así que la misma reserva reportada por la [Conversions API](https://www.facebook.com/business/help/AboutConversionsAPI) se cuenta por segunda vez. Envía cada conversión desde **una sola** fuente: consulta [Evitar conversiones duplicadas](#evitar-conversiones-duplicadas-entre-ga4-google-ads-y-gtm).
    * **El Advanced Matching está siempre activo**: el ID del pixel que guarda tu cuenta de Restoo es obligatorio para poder activar Meta, así que las tasas de cruce y la atribución vienen ya configuradas.
  </Tab>

  <Tab title="TikTok">
    * **Evento de optimización por defecto:** `Schedule` (reserva confirmada), o `SubmitForm` si el local trabaja por solicitud o con lista de espera. Son excluyentes: cada reserva dispara uno de los dos. TikTok muestra `SubmitForm` como `Lead` en informes y optimización.
    * **Arranque o bajo volumen:** optimiza por `ViewContent` o `Search` y vuelve después a `Schedule`. Consulta las recomendaciones de TikTok sobre [optimización en la parte baja del embudo](https://ads.tiktok.com/help/article/tips-for-deep-funnel-optimization) y [marketing de embudo completo](https://ads.tiktok.com/help/article/full-funnel-marketing-tiktok).
    * Usa `Search` y `ViewContent` para las campañas de la parte alta del embudo y para los grupos de retargeting.
    * `ttq.identify` aporta el cruce de datos del cliente.
    * **No envíes además estos eventos desde tu servidor.** Igual que con Meta, Restoo Connect no envía ID de evento, así que la misma reserva reportada por la Events API se cuenta por segunda vez. Envía cada conversión desde **una sola** fuente: consulta [Evitar conversiones duplicadas](#evitar-conversiones-duplicadas-entre-ga4-google-ads-y-gtm).
  </Tab>

  <Tab title="ChatGPT Ads">
    * **Antes de nada, el evento de conversión:** en la pestaña de conversiones del Ads Manager, crea un evento de conversión sobre tu pixel con el nombre estándar que vayas a usar. Sin él, los eventos se reciben pero no cuentan como conversión.
    * **Evento de conversión de la campaña:** `appointment_scheduled` (reserva confirmada), o `lead_created` si el local trabaja por solicitud o con lista de espera. Son excluyentes: cada reserva dispara uno de los dos. Cada campaña optimiza hacia **un único evento estándar**, que se fija al crearla y no se puede cambiar después; para optimizar hacia el otro hace falta otra campaña.
    * **La optimización a conversiones está en beta**: si al crear la campaña no aparece ese objetivo, la cuenta no la tiene habilitada y hay que pedírsela a OpenAI. Mientras tanto la campaña puja por clics o por impresiones y las conversiones se siguen midiendo. Consulta [las campañas optimizadas a conversiones](https://developers.openai.com/ads/conversion-optimized-campaigns).
    * **Arranque o bajo volumen:** optimiza por `contents_viewed` o `items_added` y vuelve después a la conversión de reserva. Como Meta y TikTok, ChatGPT Ads no admite eventos personalizados como objetivo, así que los `restoo_*` quedan para medición.
    * **Contacto:** `contact` es un evento personalizado, así que se mide pero no puede ser el objetivo de una campaña.
    * **No envíes además estos eventos desde tu servidor.** Igual que con Meta, Restoo Connect no envía ID de evento, así que la misma reserva reportada por la [Conversions API](https://developers.openai.com/ads/conversions-api) de OpenAI se cuenta por segunda vez. Envía cada conversión desde **una sola** fuente: consulta [Evitar conversiones duplicadas](#evitar-conversiones-duplicadas-entre-ga4-google-ads-y-gtm).
    * **El cruce de datos** viene del `user` que Restoo Connect fija al identificarse el cliente y del *advanced matching* automático del propio pixel.
  </Tab>
</Tabs>

## Audiencias de abandono y remarketing

Las audiencias se construyen con los eventos de **diagnóstico**, que marcan la etapa a la que llegó cada visitante, y excluyen a quienes ya han convertido. Qué evento marca cada etapa en cada plataforma, cómo montar la audiencia en GA4 y Google Ads, en GTM, en Meta y en TikTok, y qué tiene de particular la política de cancelación está en [Remarketing a clientes que no completaron la reserva](/es/widget/abandoned-booking-remarketing). Allí van también la supresión de quienes ya han reservado, los públicos similares y el remarketing por experiencia. ChatGPT Ads no construye audiencias a partir de los eventos del pixel —las suyas son listas que se suben—, así que ahí no aplica.

## Ejemplos prácticos

<AccordionGroup>
  <Accordion title="Local independiente" icon="utensils">
    Volumen constante pero modesto, con parte de las reservas por teléfono.

    * **Principal:** `booking_confirmed` (reserva confirmada).
    * **Secundarias:** `contact`, porque muchos clientes siguen llamando, y
      `booking_lead` para los horarios que se cubren y pasan a lista de espera.
    * Un único montaje consolidado de Search + Performance Max / Advantage+ para
      mantener juntas las conversiones.
    * Remarketing a los que «empezaron pero no reservaron»; suprime a quienes ya
      han confirmado.
  </Accordion>

  <Accordion title="Grupo de locales" icon="building">
    Varios locales bajo una o varias cuentas de Restoo.

    * Optimiza cada campaña hacia el `booking_confirmed` de su local; usa
      `source.account_id` / `booking_account_id` para mantener los locales
      separados en informes y audiencias.
    * Junta los locales de poco volumen en una campaña compartida que optimice por
      `booking_confirmed` de todo el grupo hasta que cada uno supere el umbral de
      volumen, y sepáralos entonces.
    * Usa el recurso `search_alternative_venues` (`action_taken`) para derivar
      demanda de un local lleno a otro local hermano.
  </Accordion>

  <Accordion title="Local con experiencias" icon="champagne-glasses">
    Menús degustación, eventos, complementos.

    * **Principal:** `booking_confirmed`. Mantenlo agnóstico respecto a la
      experiencia para no dejar sin datos a la puja.
    * Usa `view_item_list`, `view_item` y `select_item` (con `item_category` =
      `experience` / `add_on`) para construir audiencias por experiencia e
      informar de qué experiencias convierten. Los elementos se identifican por
      ID, no por nombre —`best_burger:experience:7` en lugar de «Menú
      degustación»—, así que mantén una tabla de equivalencias si tus informes
      necesitan etiquetas legibles.
    * Restoo omite esos nombres a propósito: el nombre libre de una experiencia
      puede revelar por inferencia datos de categorías especiales, que las propias
      condiciones de las plataformas de publicidad prohíben recibir. Consulta [Qué
      omite Restoo
      deliberadamente](/es/widget/connect-mappings#qué-omite-restoo-deliberadamente)
      para más información.
    * Vuelve a impactar a los clientes que vieron una experiencia con buen margen
      pero no la seleccionaron.
    * Ojo: los eventos de elemento y de reserva llevan `price`, pero las
      conversiones siguen sin enviar `value`; optimiza por volumen y analiza el
      valor en GA4.
  </Accordion>

  <Accordion title="Local con política de cancelación" icon="credit-card">
    Hace falta firmar la política de cancelación, con una garantía con tarjeta o un
    anticipo, para confirmar la reserva.

    * **Principal:** `booking_confirmed`. Solo se dispara cuando la tarjeta se ha
      validado, así que ya excluye a quien abandonó en el pago.
    * La política de cancelación se desglosa en tres eventos que, juntos, muestran
      exactamente dónde abandona la gente: `booking_cp_viewed` (vio las condiciones)
      → `booking_cp_acknowledged` (marcó «he leído y acepto») →
      `booking_cp_accepted` (la tarjeta se validó).
    * Una diferencia grande entre *leída* y *firmada* apunta al paso del pago en
      sí, no a las condiciones; merece la pena comentarlo con el negocio antes de
      gastar más en tráfico.
    * Vuelve a impactar a los clientes que marcaron la casilla pero nunca
      confirmaron. El paso a paso en cada plataforma está en [Remarketing a
      clientes que no completaron la
      reserva](/es/widget/abandoned-booking-remarketing).
    * **Aquí no hay conversión antes de la tarjeta.** El envío del formulario no
      convierte, y la reserva no existe hasta que la firma se completa, así que
      quien abandona en el pago no cuenta como ninguna de las dos conversiones. Lo
      que ese cliente deja son los eventos de diagnóstico de arriba.
  </Accordion>

  <Accordion title="Campaña de una sola fecha (San Valentín, Nochevieja…)" icon="calendar-day">
    Empujón corto para una fecha o un fin de semana.

    * Hay demasiado poco tiempo para acumular reservas confirmadas, así que
      **optimiza hacia `ViewContent` o `Search`** durante casi toda la campaña y
      vigila `booking_confirmed` como métrica de éxito. El `Lead` no sirve
      para esto: exige que la reserva exista, igual que la conversión de reserva
      confirmada.
    * Construye la audiencia a partir de `booking_start_submitted` y
      `booking_no_availability_viewed` de esa fecha (el `booking_date` o el
      `search_term` = `pax_..._day_..._shift_...` identifican la fecha objetivo).
    * Vuelve a impactar a los visitantes que no encontraron disponibilidad con el
      siguiente hueco libre.
    * Devuelve el objetivo a `booking_confirmed` si el volumen lo permite antes de
      la fecha.
  </Accordion>
</AccordionGroup>

## Evitar conversiones duplicadas entre GA4, Google Ads y GTM

Contar dos veces es el error de configuración más habitual. Infla las conversiones y desorienta a la puja. Elige **un solo** camino hacia cada destino.

<Warning>
  Nunca envíes el mismo evento al mismo destino dos veces. Si GTM ya reenvía los
  eventos de Restoo a una propiedad de GA4, **no** actives además el destino
  directo `ga4` para esa propiedad, ni al contrario.
</Warning>

**Reglas prácticas:**

1. **Elige un modelo de enrutamiento.** O activas los **destinos directos**
   (`ga4`, `googleAds`, `metaPixel`, `tiktokPixel`, `openaiPixel`) *o* envías todo a través de
   **GTM** (el destino `gtm`) y montas ahí las etiquetas. No hagas las dos cosas para
   el mismo destino.

2. **Google Ads: una única fuente de verdad.** Envía la conversión de reserva a
   Google Ads por **exactamente uno** de estos caminos:

   * el destino directo `googleAds`,
   * una etiqueta de conversión de Google Ads en GTM,
   * o un evento clave de GA4 **importado** a Google Ads.

   Activar dos de ellos para la misma acción duplica cada reserva.

3. **Navegador o servidor (CAPI, Events API y Conversions API).** Restoo Connect **no envía ID de
   evento**, que es en lo que se basa la deduplicación de la CAPI de Meta, de la
   Events API de TikTok y de la Conversions API de OpenAI. Una reserva reportada desde el navegador y otra vez desde
   tu servidor se cuenta dos veces, así que envía cada conversión desde **una
   sola** fuente. El identificador que las relacionaría es la propia referencia de
   la reserva, y esa referencia da acceso a los datos personales del cliente, así
   que nunca sale del widget.

4. **Las conversiones mejoradas no son una conversión.** `gtag("set", "user_data",
   …)`, `fbq("init", …)`, `ttq.identify(…)` y el `user` de `oaiq("init", …)` solo enriquecen el cruce de datos.
   Nunca disparan una conversión, así que no pueden duplicar nada.

## Cómo afecta el consentimiento a tus números

Restoo Connect no reenvía nada hasta conocer el consentimiento del visitante, y cada destino exige sus propias señales: consulta [Consentimiento](/es/widget/consent#requisitos-de-cada-destino). Hay dos consecuencias que marcan lo que vas a ver en las plataformas.

**Tus destinos de publicidad no cuadrarán con GA4.** Google Ads, Meta Pixel, TikTok Pixel y OpenAI Pixel exigen cada uno las tres señales de publicidad —`ad_storage`, `ad_user_data` y `ad_personalization`— para cualquier evento. GA4 solo exige `analytics_storage`. Un visitante que acepta la analítica pero rechaza la publicidad se mide en GA4 y es invisible para los otros cuatro.

Ese desfase es **estructural, no un error de configuración**, y se manifiesta en que las plataformas de publicidad reportan siempre por debajo de GA4.

La excepción es una propiedad de GA4 que alimenta publicidad ella misma: señales de Google, vínculo con Google Ads o audiencias exportadas a Ads. Cuál es la tuya [lo declara tu cuenta](/es/widget/integrations#google-analytics-4), y declarar que sí lo hace obliga a GA4 a exigir también las señales de publicidad. Eso cierra el desfase bajando GA4 al mismo volumen, no subiendo el de los demás.

**Los datos de cruce necesitan su propio permiso.** Las conversiones mejoradas, el Advanced Matching, `ttq.identify` y el `user` del OpenAI Pixel dependen todos de `customer_identified`, que el widget solo emite cuando el visitante concede `ad_user_data`. En tus destinos de publicidad ese requisito es el mismo que para cualquier otro evento, así que la identidad llega siempre que llegan las conversiones.

En GA4 es un requisito más alto que el de los propios eventos: un visitante puede medirse ahí sin llegar a cruzarse nunca.

Si las cifras no cuadran y quieres ir del síntoma a la causa, la tabla está en [Diagnóstico](/es/widget/diagnostics#síntomas-y-causas-probables).

<Note>
  Montar el consentimiento es cosa del negocio, no tuya, pero marca el límite de
  lo que puedes medir y de aquello hacia lo que puedes optimizar. Confírmalo
  antes de concluir que una campaña rinde por debajo de lo esperado.
</Note>

## Lista de comprobación para producción

<Steps>
  <Step title="Consentimiento">
    El consentimiento llega de verdad al widget: hay una
    [`cmp`](/es/widget/advanced-installation#param-cmp) declarada, o la web
    llama a
    [`setConsent()`](/es/widget/advanced-installation#setconsent-signals) desde
    su aviso de cookies. Sin eso no se reenvía nada a ningún destino: consulta
    [cómo afecta el consentimiento a tus
    números](#cómo-afecta-el-consentimiento-a-tus-números).
  </Step>

  <Step title="Orden de carga">
    Las librerías de las plataformas (`gtag.js`, `fbq`, `ttq`, `oaiq`, GTM) se cargan
    **antes** del widget de Restoo, para no perder los primeros eventos.
  </Step>

  <Step title="Un solo modelo de enrutamiento">
    Destinos directos *o* GTM para cada destino, no los dos. Ningún destino
    recibe el mismo evento dos veces.
  </Step>

  <Step title="Acciones de Google Ads">
    `booking_lead`, `booking_confirmed` y `contact` creadas y asignadas, con la
    conversión de reserva que produce el local marcada como **principal** y
    `contact` como **secundaria**.
  </Step>

  <Step title="Evento de conversión de ChatGPT Ads">
    `appointment_scheduled` o `lead_created` creado como evento de conversión
    sobre el pixel de la cuenta en el Ads Manager, y elegido como evento de la
    campaña si la optimización a conversiones está habilitada.
  </Step>

  <Step title="Conversión principal verificada">
    Comprobado que una reserva real confirmada dispara `booking_confirmed` /
    `Schedule` / `qualify_lead` / `appointment_scheduled` **una sola vez**, y que
    no dispara además la conversión de lead. En cuentas con solicitud de reserva
    o lista de espera, comprobado lo mismo con `booking_lead` / `Lead` /
    `generate_lead` / `lead_created`.
  </Step>

  <Step title="Deduplicación">
    Cada conversión llega a cada plataforma desde exactamente una fuente.
    Comprobado que ninguna CAPI ni Events API de servidor está reportando las
    mismas reservas que Restoo Connect, que no puede deduplicar contra ella.
    Google Ads tiene una única fuente de verdad.
  </Step>

  <Step title="Datos de cruce">
    Las conversiones mejoradas (Google), el Advanced Matching (`pixelId`
    definido para Meta), el `identify` de TikTok y el `user` del OpenAI Pixel
    están activados. La recogida
    de datos proporcionados por el usuario de GA4, activada si se usa.
  </Step>

  <Step title="Transferencia de atribución">
    [Restoo Attribution Transfer](/es/widget/attribution-transfer) instalado como dice su guía, en
    todas las páginas.
  </Step>

  <Step title="Audiencias">
    Audiencias de abandono y remarketing construidas [como dice su
    guía](/es/widget/abandoned-booking-remarketing); quienes ya han confirmado
    reserva, excluidos de la captación.
  </Step>

  <Step title="Revisión de la puja">
    Las campañas pujan hacia la reserva confirmada (o hacia el evento intermedio
    temporal), no hacia formularios ni contactos. El volumen supera los umbrales
    de aprendizaje.
  </Step>
</Steps>

## Referencias oficiales

**Google Ads**

* [Acciones de conversión principales y secundarias](https://support.google.com/google-ads/answer/11461796)
* [Información sobre las acciones de conversión](https://support.google.com/google-ads/answer/3419678)
* [Información sobre Smart Bidding](https://support.google.com/google-ads/answer/6259715)
* [Conversiones mejoradas](https://support.google.com/google-ads/answer/13258081)

**Meta**

* [Información sobre la Conversions API](https://www.facebook.com/business/help/AboutConversionsAPI)
* [Referencia de eventos del Meta Pixel](https://developers.facebook.com/docs/meta-pixel/reference)

**TikTok**

* [Consejos para la optimización en la parte baja del embudo](https://ads.tiktok.com/help/article/tips-for-deep-funnel-optimization)
* [Marketing de embudo completo en TikTok](https://ads.tiktok.com/help/article/full-funnel-marketing-tiktok)

**ChatGPT Ads**

* [Campañas optimizadas a conversiones](https://developers.openai.com/ads/conversion-optimized-campaigns)
* [Eventos admitidos](https://developers.openai.com/ads/supported-events)
* [Measurement Pixel](https://developers.openai.com/ads/measurement-pixel)

**GA4**

* [Eventos recomendados](https://developers.google.com/analytics/devguides/collection/ga4/reference/events)
* [Recogida de datos proporcionados por el usuario](https://support.google.com/analytics/answer/14077171)

## Siguientes pasos

<CardGroup cols={2}>
  <Card title="Restoo Connect" icon="sliders" href="/es/widget/connect">
    Qué envía a cada plataforma y qué necesita para recibirlo.
  </Card>

  <Card title="Mapeo de eventos" icon="table" href="/es/widget/connect-mappings">
    El payload exacto que se envía a cada plataforma.
  </Card>
</CardGroup>
