Lectura de campañas desde GET
Esta guía forma parte de la integración Coupon Server del motor nuevo. Úsala cuando el TPV, e-commerce o middleware debe leer campañas de descuento en GET /discounts e interpretar los campos antes de aplicar la promoción en local.
Alcance: campañas de descuento evaluadas sobre carritos en modo Coupon Server (
apply_discounts: false). Eventos personalizados, triggers y challenges pertenecen a puntos, juegos o challenges. Modelo de runtime: Coupon Server.
Esta guía está orientada al equipo de integraciones que interpreta campañas de descuentos ya creadas al consultar listados desde GET /discounts (equivalente interno: GET /discounts) y las alinea con el carrito enviado a la Streaming API.
Alcance: solo campañas de descuentos con evento carrito (
when: after_create_activity). Evento personalizado, trigger y challenge aplican a puntos, no a esta guía.
Índice
- Contenido de la guía
- Modelo canónico
- Cómo leer una campaña paso a paso
- Checklist para integraciones
- Páginas relacionadas
Contenido de la guía
| Página | Qué cubre |
|---|---|
| Respuesta GET | Query params, metadatos, coupon_info, campos TPV, parseo JSON |
| Condiciones | rule_conditions: AND/OR, catálogos cliente/carrito/líneas/tienda |
| Aplicación | rule_application: alcance del efecto en líneas |
| Efectos | rule_effects: tipos, distribución, bundle (rule_group) |
Modelo canónico
| Campo | Qué representa |
|---|---|
rule_conditions | Condiciones de victoria: ¿cuándo puede aplicar o no la campaña? |
rule_application | Aplicación: ¿sobre qué líneas se aplica el efecto? |
rule_effects | Efecto: qué descuento y cómo se distribuye |
Usa siempre rule_conditions, rule_application, rule_effects (no rules_* ni alias legacy como victory_conditions). rule_application no es distribución; la distribución va en rule_effects.distribution.
Cómo leer una campaña paso a paso
- Metadatos y vigencia —
id,name,active,available_from/available_to,category,currency. Ver Respuesta de GET /discounts. - Evento y audiencia —
whendebe serafter_create_activity.select_customers:all_customers,loyalty,targeted. Sicoupon_required: true, leercoupon_info. Si ademásselect_customers: targeted, leercoupon_info.voucher_info. - Modo Company — Si
configurations.default_apply_discounts = false, comprobarproduct_ids_rule_*ylocations_*(rellenos solo con taxonomía interna en categorías). Ver Campos para TPV. rule_conditions— Parsea el string JSON. Interior:conditions.and[]/or[]. Ver Condiciones.rule_application— Tras parsear, raízapplication.and[]. Vacío = todas las líneas. Ver Aplicación.rule_effects—type,value,distribution,limits,rule_group. Ver Efectos.- Apilamiento y límites —
stackability_properties,priority,once,once_limit,budget_*,maximum_discount_transaction(distinto delimitsdel efecto).
Checklist para integraciones
GET /discountscon filtros correctos (customer_id,countries,location_id,campaign_audience, …).- Paginación: usar
next_token_starts_after→starting_afterhasta agotardata[]. - Vigencia:
active,available_from/available_to,recurrence_type/recurrence_days. category,stackability_properties,priority— coherente con Apilamiento.when: after_create_activityyselect_customers; sicoupon_required: true:coupon_info; sitargeted: tambiéncoupon_info.voucher_info(voucher_code,selected, redenciones, ventanas).configurations.default_apply_discountsde la Company: sifalse, usar arrays TPV solo si vienen rellenos (taxonomía interna); si no, parsearrule_*.- Parsear
rule_conditions,rule_application,rule_effectssi vienen como string JSON. - Recorrer
conditions.and(dentro derule_conditions) y subgrupos; ninguna cláusula debe fallar en AND raíz. - Cláusulas por
**field** (+array_field); validar contra customer + ticket. - Totales:
total/original_total/total_cart_without_additional_costs. rule_application: vacío = todas las líneas; subcondiciones soloquantity.- Separar victoria (
rule_conditions) vs aplicación (rule_application) vs efecto (rule_effects). - Límites de victoria:
once,once_limit; presupuestobudget_*;maximum_discount_transaction. - Efecto:
type,distribution,limits,rule_group(bundle). formula:promoPrice(o acordado) en líneas del carrito.- Respuesta de compra:
effects[]del carrito vsrule_effectsdel GET si el descuento no coincide.
Páginas relacionadas
- Detalles operativos — secciones de campaña en Owner App
- Apilamiento — categorías y prioridad
- API de campañas — creación con formato plano