Skip to main content
Esta guía explica cómo un pedido pasa de tu app o web a Fire spark y luego a cocina.

El recorrido en términos simples

  1. Explorar — El cliente elige tienda, canal y fulfillment_id, y carga el menú compuesto.
  2. Personalizar — Usa @fire-spark/storefront (createSession / toOrderLines) para convertir un producto personalizado en filas OrderLine con precios.
  3. Abrir carrito — Llama a Crear pedido con el alcance (y normalmente lines vacías). 201 es un carrito nuevo; 202 es el OPEN que ya existe para ese alcance — usa el id de la respuesta.
  4. Sincronizar carrito — Aplica debounce a los cambios locales y Actualizar pedido con lines + totals.
  5. Validar — Antes del checkout, llama a Validar pedido (o order.validateOrder() en @fire-spark/storefront) para comprobar precios y disponibilidad contra un menú fresco.
  6. Pagar y colocar — Guarda los tenders con Guardar intent de pago (order.setTenders) o pasa un solo método al colocar. Luego llama a Colocar pedido (order.placeOrder()). Pasa intent_id para bloquear ese borrador. Omítelo para armar un tender real desde payment.type más un tender REDEMPTION por cada payment_id de canje. No hay efectivo por defecto: sin intent_id ni payment.type, place falla con PAYMENT_REQUIRED salvo que los canjes cubran el total (entonces solo tenders REDEMPTION). El carrito pasa a CLOSED y arranca fulfillment.
  7. Seguimiento — Suscríbete con realtime.listenOrder({ orderId }) (ver Emitir token realtime) o consulta Obtener fulfillment para checkout_state, estados visitados y current_node_ids. En el historial usa Listar fulfillments en vez de un GET por pedido. Obtener pedido sigue exponiendo fulfillment_status. Cómo espera el overlay se configura en el workflow de fulfillment.

Requisitos previos

Paso 1 — Generar líneas con precio desde la personalización

Paso 2 — Asignar ids antes de crear

Genera el id del pedido en tu servidor antes del POST. Así los reintentos son seguros si se pierde la conectividad.

Paso 3 — Crear y luego actualizar el pedido

Después haz PATCH de lines y totals cuando cambie el carrito. La clase headless Order de @fire-spark/storefront aplica debounce a esas actualizaciones por ti.

Paso 4 — Validar antes del checkout

En un 422, usa details.issues y details.lines para actualizar la UI del carrito. Ver Validar pedido para cada código de error.

Paso 5 — Colocar el pedido

placeOrder() sin intent_id guarda el borrador y coloca con él. placeOrder({ payment }) es el atajo de un solo método. Una sincronización del carrito rechazada sale como OrderSyncRejectedError y no se coloca nada; sin un tender real lanza OrderPaymentRequiredError. 201 inicia fulfillment. 202 significa que ya hay un place en curso. 409 significa que el pedido ya fue colocado.

Paso 6 — Mostrar el estado al cliente

Consulta Obtener fulfillment para estados visitados (entered_at), current_node_ids y milestones. En un listado de pedidos cerrados, llama Listar fulfillments una vez. Obtener pedido sigue exponiendo fulfillment_status. Cocina y POS avanzan el walker con Actualizar estado.

Paso 7 — Cancelar o reembolsar

Si el cliente cancela antes del fulfillment, llama a Cancelar pedido. Eso interrumpe un workflow de fulfillment en curso. En un kiosco, Cancelar durante la espera de liberación del checkout llama a Reabrir pedido: se anulan los tenders sin cobrar y vuelve un pedido OPEN nuevo. order_id es opcional y puede ser cualquier id de genId (genOrderId es una opción y sigue devolviendo ord-<tienda>-<hash>); omítelo para conservar el id generado. genId().hash(length, format) usa un hash de al menos 8 caracteres (por defecto 12; alphanumeric, numeric o alphabetic). genId().literal("BB21921").hash(8, "numeric").build() produce un id como BB2192100000001. Después de fulfilled, Reembolsar pedido está disponible durante 24 horas. Un tender se reembolsa con Reembolsar tender.

Enlaces relacionados

Crear pedido

Abrir un pedido con alcance

Actualizar pedido

Sincronizar líneas y totales

Validar pedido

Comprobar líneas contra un menú fresco

Colocar pedido

Cerrar el carrito e iniciar fulfillment

Guardar intent de pago

Tenders antes de colocar

Reabrir pedido

Anular tenders sin cobrar y abrir un carrito nuevo

Cancelar pedido

Detener fulfillment antes de que el pedido se cumpla

Reordenar

Clonar un pedido fulfilled en un carrito OPEN

Reembolsar pedido

Reembolsar un pedido fulfilled dentro de 24 horas

Obtener fulfillment

Estados visitados y milestones

Listar fulfillments

Historial sin N+1 peticiones

Listar pedidos

Historial de pedidos

Concepto: pedidos

Visión comercial