Integraciones
Conectar tu tienda
Azter atiende mejor cuando conoce el catálogo, los pedidos y lo que cada visitante hace en tu sitio. Esta guía explica qué enviar y cómo, con WooCommerce o con un desarrollo propio.
Dos caminos
- Tienda WooCommerce: conecta la tienda desde el panel (Canales → WooCommerce). El catálogo, los pedidos y los compradores llegan solos. Solo necesitas enviar los eventos del sitio.
- Tienda WooCommerce con frontend propio (headless): igual que la anterior. Los datos salen de WooCommerce; tu frontend envía los eventos del sitio y, si quieres, recibe el carrito conversacional.
- Desarrollo propio sin plataforma conocida: envía todo por el conector — eventos, pedidos, clientes y catálogo.
Qué recibe el agente
El conector y la firma
Un conector identifica a tu tienda y trae un secreto. Se crea desde el panel (Integraciones → Integración personalizada). Todas las llamadas de esta guía van al mismo endpoint, con la misma firma, y siempre desde tu servidor: el secreto nunca llega al navegador.
1POST https://jvmpkvslwwnrijdnuxxq.supabase.co/functions/v1/commerce-intake2Content-Type: application/json3X-Azter-Connector-Id: <id del conector>4X-Azter-Timestamp: <hora Unix en milisegundos>5X-Azter-Signature: hex(HMAC_SHA256(secreto, timestamp + "." + cuerpo_crudo))- La firma se calcula sobre el cuerpo exacto que envías, no sobre un JSON reserializado.
- El timestamp se acepta con cinco minutos de diferencia.
- La empresa a la que pertenecen los datos sale del conector, nunca del cuerpo.
Eventos del sitio
Avisa lo que hace cada visitante. Los eventos son product_viewed, add_to_cart, checkout_started, checkout_abandoned y cart_abandoned.
1{2 "event": "checkout_started",3 "event_id": "c7b0e2c4-1f0a-4d7e-9a53-2b6f0c1d8e44",4 "occurred_at": "2026-10-07T15:30:00-03:00",5 "visitor_id": "0f9d1c7e-5a53-4c0e-9d61-3b1c2a7f8e10",6 "contact": {7 "email": "cliente@ejemplo.cl",8 "phone_e164": "+56912345678",9 "name": "Nombre Apellido"10 },11 "cart": {12 "cart_id": "9a3e6d52-77c1-4b8e-b0a4-5d2f1e3c6a90",13 "currency": "CLP",14 "total": 25980,15 "items": [16 {17 "product_id": "123",18 "sku": "PK-01",19 "name": "Producto",20 "qty": 2,21 "price": 1299022 }23 ],24 "recovery_url": "https://shop.example/carrito?recover=9a3e6d52"25 }26}Cuatro reglas para que sirvan
- visitor_id en todos los eventos: un identificador anónimo y estable por navegador (cookie propia, por ejemplo un UUID). Nunca un dato personal.
- Un solo cart_id por carrito, desde el primer producto agregado hasta el checkout o el abandono.
- Envía contact (email o teléfono en formato +569…) apenas el visitante lo escriba. Con un evento identificado, Azter une a ese contacto la navegación anterior de ese navegador y la siguiente.
- Avisa un abandono solo si el pedido sigue sin pago después de una espera real. Sugerimos 60 minutos desde la última actividad.
event_id identifica cada evento: reenviar el mismo no duplica. Si el visitante autorizó mensajes, envía whatsapp_consent con granted, timestamp y source.
Pedidos
Solo para desarrollos propios
1{2 "resource": "order",3 "customer": {4 "email": "cliente@ejemplo.cl",5 "phone_e164": "+56912345678",6 "name": "Nombre Apellido"7 },8 "order": {9 "id": "A-100",10 "number": "100",11 "status": "paid",12 "status_label": "En preparación",13 "created_at": "2026-10-07T10:00:00-03:00",14 "currency": "CLP",15 "total": 25980,16 "shipping_method": "Despacho a domicilio",17 "tracking": [18 {19 "carrier": "Starken",20 "number": "TRK-1"21 }22 ],23 "items": [24 {25 "name": "Polera Rosa",26 "quantity": 2,27 "sku": "POL-R",28 "variant": "4T / Rosa"29 }30 ]31 }32}- Obligatorios: order.id, order.status, order.total y customer.email o customer.phone_e164.
- status: pending, paid, fulfilled, cancelled o refunded. status_label es el texto propio de tu tienda que verá el agente.
- Envía el pedido al crearlo y en cada cambio de estado. Es un reemplazo por order.id: repetirlo no duplica.
- Un pedido de los últimos siete días avisa a las automatizaciones; uno más antiguo se guarda sin avisar. Así puedes cargar tu historial.
- No envíes dirección, documentos de identidad ni datos de pago.
Clientes
1{2 "resource": "customer",3 "customer": {4 "email": "cliente@ejemplo.cl",5 "phone_e164": "+56912345678",6 "name": "Nombre Apellido"7 }8}Crea el contacto o completa lo que falta, sin reemplazar datos que ya existen. Tener un contacto no autoriza a escribirle: el consentimiento se registra aparte.
Catálogo
1{2 "resource": "product",3 "product": {4 "id": "P-1",5 "name": "Polera Rosa",6 "sku": "POL",7 "description": "Algodón",8 "status": "active",9 "url": "https://shop.example/p/polera",10 "images": [11 "https://shop.example/a.jpg"12 ],13 "category": "Poleras",14 "currency": "CLP",15 "variants": [16 {17 "id": "V-1",18 "sku": "POL-4T",19 "price": 12990,20 "compare_at_price": 15990,21 "stock": 3,22 "options": {23 "Talla": "4T",24 "Color": "Rosa"25 }26 }27 ]28 }29}- Obligatorios: product.id, product.name y el precio (en cada variante, o en el producto si no tiene variantes).
- stock: null significa stock no gestionado; 0 significa sin stock.
- Envía el producto completo en cada cambio: las variantes que ya no vengan se eliminan.
- Para retirarlo: { "resource": "product", "deleted": true, "product": { "id": "P-1" } }.
- El SKU es único por empresa; uno repetido se rechaza con un error claro.
Carrito conversacional
El agente puede armar una selección en el chat y entregarla a tu checkout con un enlace firmado. Tu tienda verifica la firma, carga el carrito y continúa con su flujo de compra habitual. El contrato está en la guía de Carritos y checkout (/docs/checkout), publicada como preview: esa capacidad todavía no está activa.
Respuestas y reintentos
1200 aceptado — el cuerpo indica qué se creó o actualizó2400 cuerpo inválido — el campo error explica el motivo3401 firma, timestamp o conector inválidos4403 conector deshabilitado5500 error de Azter — reintenta con el mismo cuerpoTodo es idempotente: ante una duda, reenvía. Los eventos se deduplican por event_id; los pedidos, clientes y productos por su identificador en tu tienda.