Si aún no lo ha hecho, revise Cómo funciona Maple para conocer el modelo de objetos, y siga el Inicio rápido para obtener una clave y conectar un local de prueba.
Paso 1 — Conecte un local
Los pedidos llegan a usted solo cuando su app es el receptor conectado de un local:409. GET y DELETE en la misma ruta consultan y eliminan su conexión.
Paso 2 — Suscríbase a los webhooks
Registre un endpoint HTTPS y los tipos de evento que desea. El catálogo completo está enGET /v1/webhook_event_types; para el ciclo de pedidos normalmente querrá estos:
mwhsec_…). Guárdelo; no se vuelve a mostrar. La URL debe ser HTTPS pública: se rechazan las direcciones privadas e internas.
Estos son los eventos de pedidos. El catálogo también incluye
order.created, order.paid, store.provisioned,
store.deprovisioned, store.status.changed y los eventos de sincronización de menú. Suscríbase solo a lo que vaya a
procesar. Consulte la lista completa y los payloads en Webhooks.Paso 3 — Verifique cada entrega
Cada entrega es un sobre al estilo de Stripe:maple-webhook-id (el id del evento) y maple-webhook-signature con el formato t=<unix_seconds>,v1=<hex_hmac>. La cadena firmada es {timestamp}.{subscription_id}.{notification_url}.{raw_body}. Verifíquela contra el cuerpo sin procesar, sin analizar:
id del sobre: la entrega es al menos una vez. El contrato de confiabilidad completo, con el calendario de reintentos y el libro de eventos, está en Webhooks.
Ponerse al día tras una caída
Cuando su receptor no estuvo disponible (el software local estaba apagado o la red cayó), reconcilie así:- Llame a
GET /v1/orders?since=<timestamp>&limit=100con su último punto de control exitoso (exclusivo, ISO 8601 UTC). Consince, los resultados vienen del más antiguo al más reciente yhas_moreindica que hay otra página. - Mientras
has_moresea true, repita la solicitud constarting_afterigual al último id de pedido de la página anterior. Continúe hasta vaciar el rezago y luego avance su punto de control. - Llame a
POST /v1/orders/{orderId}/resendcuando necesite que Maple publique unorder.notificationnuevo para un pedido activo que no recibió su webhook. Requiere el alcance (scope)webhooks:write, crea una entrega nueva, firmada y con reintentos, y no cambia el estado del pedido. Los pedidos en estado terminal (REJECTED,CUSTOMER_CANCELLEDoSTORE_CANCELLED) no se pueden reenviar ni reactivar y devuelven400; reconcílielos conGET /v1/orders?since=...yGET /v1/orders/{orderId}. - Use el registro de eventos en lugar de
resendcuando importe conservar la identidad original del evento.
Paso 4 — Lea el pedido
Eldata del payload de order.notification es el contenido del pedido: sus IDs, cliente, artículos y totales, de modo que puede empezar a prepararlo directamente desde el webhook sin otra llamada. Sigue la forma de GET /v1/orders/{orderId}, pero omite el status y el payment en vivo. Consulte el recurso del pedido en cualquier momento para obtener el estado actual y autorizado, incluidos status y payment:
- El dinero está en centavos de USD enteros.
450son $4.50. Nunca lo analice como número decimal. Todos los montos entotalsy en los artículos siguen esta convención. - Los totales vienen precalculados.
totals.totales el valor autorizado. No debe recalcular ningún precio. - Los artículos hacen referencia a su menú mediante
menu_entity_id, cuyo valor es elexternalIdque usted publicó para ese artículo. Publique primero un menú y estos coincidirán con su propio catálogo. (Los payloads de menú usan camelCase; los de pedidos y webhooks usan snake_case; consulte Convenciones.) - Los modificadores son las opciones de primer nivel seleccionadas directamente. Las selecciones de modificadores anidados más profundas no se expanden en el recurso del pedido en v1.
- Los datos del cliente son intencionalmente mínimos. Recibe el nombre y el número de teléfono del cliente (
phoneen formato E.164, másphone_last_fourpara mostrar). Los pedidos a domicilio también incluyendelivery_addresscon la calle, la unidad, la ciudad, el estado, el código postal y las instrucciones de entrega; esnullen pedidos para recoger o cuando Maple no tiene una dirección guardada. Las seis claves de la dirección están presentes siempre que el bloque tenga datos. - Revise
scheduled_forantes de enviar la comanda. Esnullen pedidos para ahora. Cuando tiene valor (ISO 8601, UTC), el cliente eligió esa hora de recogida o entrega; usted recibe el pedido de inmediato, así que programe la preparación parascheduled_for, no para el momento de recibirlo.
Paso 5 — Decida e informe el avance
Responda mediante los endpoints de decisión a medida que avanza el pedido. Ninguno recibe cuerpo, salvo donde se indica:Response
POST /v1/orders/{orderId}/status recibe una transición explícita:
ACCEPTED, READY, IN_DELIVERY, FULFILLED, REJECTED, STORE_CANCELLED. Para saber qué significa cada estado y las transiciones permitidas entre ellos, consulte el Ciclo de vida del pedido.
Las llamadas de decisión son seguras ante repeticiones. Repetir una devuelve
{ "status": "received" } sin efectos
secundarios dobles, por lo que reintentar ante una falla de red siempre es seguro. Consulte Idempotencia y
seguridad ante repeticiones.Opcional — Prevalide los pedidos
La prevalidación es opcional y se activa suscribiéndose aorder.validation_requested:
- Si no se suscribe, no hay paso de validación. Maple envía
order.notificationdirectamente y su accept/deny es la única barrera. - Si se suscribe, Maple le pide confirmar que cada pedido se puede preparar (disponibilidad de artículos, viabilidad de precios, posibilidad de inyección en el POS) antes de enviar la notificación, y espera su respuesta. Por lo tanto, activarla es un compromiso: un pedido que no valide a tiempo se rechaza (vea abajo).
order.validation_requested con un resultado:
valid permite que el pedido pase a la notificación; invalid lo bloquea antes de que se cobre al cliente. Tiene unos 5 minutos para responder antes de que la solicitud venza (el recurso incluye expires_at, a ~300 segundos). Si vence, Maple solicita la validación una vez más; si esa segunda solicitud tampoco se responde, el pedido se rechaza sin notificación, así que suscríbase solo cuando su manejador responda de forma confiable y a tiempo. Es la misma verificación de disponibilidad que haría al aceptar, solo que antes, para que los clientes no paguen por algo que usted no puede preparar.
Cómo se ve “terminado”
Un webhook y un puñado de llamadas de decisión. Los pagos y los precios quedan de nuestro lado, y el equipo de Maple está disponible durante toda su integración.
Siguiente
Publique un menú
Haga que
menu_entity_id en cada artículo corresponda a su propio catálogo.Webhooks a fondo
Garantías de entrega, reintentos, el registro de eventos y la repetición.