Skip to main content
POST
Crea una orden nueva asociada a un chat, la liga a una zona y sucursal (si aplica) y notifica el cambio en tiempo real.
Precondición para type: "wa": el chat debe tener status en "proceso" o "pendiente" (bot liberado a un agente o con ticket activo). Este endpoint no cambia ese status — lo valida contra el valor actual del chat en base de datos. Si el chat sigue en flujo de bot automático (status: "bot"), primero hay que escalarlo a un agente, por ejemplo con Crear Ticket como Business. Para type: "app", "web" o "call" no aplica esta validación.

Autenticación

Requiere el encabezado x-api-key con el App Key del negocio. Consulta Autenticación.

Body

number
required
ID del chat sobre el que se crea la orden.
number
required
ID del negocio dueño de la orden.
string
required
Canal/origen de la orden (wa, app, web, call, etc.). Determina reglas especiales de validación y el canal usado para notificar el cambio en tiempo real.
string
Método de entrega (delivery, pickup).
string
Método de pago.
string
Indicación adicional para la entrega.
string
Dirección de entrega, en texto libre. Se guarda como raw_adress.
number
ID de la zona de entrega. Requerido si type es "wa". Determina también la sucursal final de la orden.
number
Latitud de la ubicación de entrega.
number
Longitud de la ubicación de entrega.
number
ID del agente de soporte asignado a la orden (soporte_id).
number
ID de sucursal sugerido. Si se envía zoneId y la zona tiene una sucursal asociada, este valor es sobrescrito (ver advertencia abajo).
string
Fecha/hora programada para la orden. También se acepta como schedule_at; si se envían ambos, scheduleAt tiene prioridad.

Comportamiento

  • Busca el chat (chatId).
  • Si type === "wa":
    • Valida que chat.status sea "proceso" o "pendiente"; si no, responde 400 (“El chat tiene que tener el bot liberado o tener un ticket.”).
    • Exige zoneId; si falta, responde 400 (“Zona es requerida”).
  • Si se envía zoneId, busca la zona (con su sucursal) y registra el evento selected_zone en StatsWaEcommerce.
  • Crea la orden con status: 0, usando location_picked = nombre de la sucursal de la zona (si hay zona).
  • Espera ~1 segundo, vuelve a cargar la orden con su zona y sobrescribe sucursal_id con la sucursal de la zona (zona.sucursal_id).
  • Guarda la última ubicación del usuario (raw_address, lat, lng, zoneId) en chat.extraData.userLocation.
  • Registra el evento order_created en StatsWaEcommerce.
  • Si type !== "call", asocia la orden al chat (chat.orderId = orderCreated.id).
  • Emite un evento en tiempo real: canal Soketi/Pusher si type es app/web, canal estándar para el resto.
  • Si type === "call", además crea un registro de auditoría en LogsInvoices (call_center_order_created).
El sucursalId que envíes en el body puede ser sobrescrito silenciosamente: si la orden queda asociada a una zoneId con sucursal configurada, la sucursal final de la orden es la de esa zona, no la que enviaste en sucursalId.

Respuesta

object
La orden recién creada (sin relaciones cargadas).