Saltar al contenido principal

Recibe órdenes de DoorDash

Marketplace APIs are limited access

En este momento, el proceso de integración en Marketplace se encuentra al máximo de su capacidad. No estamos aceptando nuevos socios por ahora, ya que estamos desarrollando herramientas de autogestión para la incorporación de tiendas. Completa el formulario para interesados en la integración de Marketplace para ponerte en contacto con DoorDash antes de realizar tu integración.

La siguiente imagen muestra una descripción general de cómo funciona la API de órdenes.

Orden

Recibir órdenes de DoorDash

DoorDash también tiene un webhook que notifica las nuevas órdenes entrantes en vivo. Este webhook contendrá el mismo encabezado de autenticación que el webhook que se describe en la sección Recibir actualizaciones del estado del menú. La URL para recibir las órdenes puede ser la misma que la del menú o una diferente. Por el momento, es un proceso manual, de modo que debes ponerte en contacto con DoorDash para configurar la URL. Estas solicitudes contendrán cargas con el siguiente formato:

{
"event": {
"type": "OrderCreate",
"status": "NEW"
},
"order": "<Order json object>"
}

El objeto Order se detalla completamente en la documentación de Swagger, y también se incluye una instancia de ejemplo aquí. Este objeto contendrá un campo id que luego necesitarás para confirmar la orden con el punto de conexión del PATCH, por lo que conviene estar atento a él. Todas las órdenes entrantes tendrán el estado NUEVA.

Campos destacados

special_instructions (opcional): DoorDash puede permitir a los clientes ingresar instrucciones especiales para los artículos. Este es un ajuste que se realiza en la tienda y puede configurarse para bloquear el ingreso de instrucciones especiales o para permitirlas dentro de una duración máxima especificada.

is_tax_remitted_by_doordash: cuando una tienda se encuentra en un estado designado como facilitador de Marketplace, DoorDash es responsable de remitir los impuestos, por lo que enviará un indicador en la orden para señalar si se remitieron.

tax_amount_remitted_by_doordash: si is_tax_remitted_by_doordash es TRUE, este campo indica el importe del impuesto que se remitió.

estimated_pickup_time: esta es la hora estimada en la que el Dasher llegará a la tienda de acuerdo con un algoritmo interno de DoorDash. Se utilizará si el proveedor no envía el tiempo de preparación en el mensaje de confirmación de la orden (los detalles de este campo se encuentran más adelante en este documento).

delivery_short_code: este campo se puede utilizar para compartir un identificador de entrega único reducido que se puede pasar a la aplicación Dasher para el retiro de la orden.

fulfillment_type: este campo se puede utilizar para saber si la orden es para la entrega con Dasher, para la entrega de la tienda (entrega automática) o para que el cliente la retire. Los detalles de los valores esperados se pueden encontrar en el Modelo de orden.

experience: este campo se puede utilizar para saber si la orden se realizó en DoorDash, Caviar o Storefront. Los detalles de los valores esperados se pueden encontrar en el Modelo de orden.

merchant_tip_amount: es el importe de la propina que el usuario final deja al personal.

Confirmación de las órdenes

PATCH /api/v1/orders/{id}

Cuando recibas una orden, tendrás que avisar a DoorDash si puedes completarla. Escribe el id de la orden (que deberías haber recibido del webhook) en los parámetros de la URL. Los socios pueden utilizar métodos de confirmación de órdenes sincrónicas o asincrónicas.

Confirmación de órdenes sincrónicas

Confirma la orden con una llamada al webhook de orden de DoorDash. Se mostrará 200 para una orden exitosa; un valor que no sea 2xx se considerará como una falla en la orden. Las cargas de respuesta son las mismas que las cargas de confirmación de órdenes asincrónicas. El tiempo de espera HTTP actual es superior a un minuto, pero si prevés que las llamadas tardarán regularmente más de 20 segundos, es preferible que las confirmaciones sean asincrónicas.

Confirmación de órdenes asincrónicas

Si recibiste la orden, pero quieres actualizar el estado más tarde, indícalo con el código de estado 202. Sigue utilizando el punto de conexión de confirmación de órdenes para confirmar el estado como exitoso o fallido con un motivo de falla asociado. Si no confirmas la orden dentro de 3 a 8 minutos, DoorDash considerará la orden como fallida debido a que se agotó el tiempo de espera de la confirmación de la orden. El SLA de 3 a 8 minutos variará según el momento en que se haya creado la orden y el momento en que un programador se ejecute del lado de DoorDash para marcar las órdenes como vencidas. Asegúrate de que los sistemas son capaces de cumplir dicho SLA de 3 a 8 minutos o verás un alto número de cancelaciones de órdenes.

Para la confirmación de las órdenes asincrónicas, DoorDash responderá lo siguiente:

Código de estadoMensaje de respuestaSignificado
202AceptarSe acepta la confirmación de la orden.
400Formato de solicitud incorrecto; la orden ya se confirmó anteriormente; tiempo de espera de la confirmación de la orden.
404La orden con el ID proporcionado no existeDoorDash no puede encontrar el registro de la orden con el ID de la orden especificado.
500Error al procesar la confirmación de la orden de la tiendaError interno del servidor.

Campos destacados

prep_time (opcional): la hora del retiro del conductor la determina un algoritmo interno de DoorDash de forma predeterminada y se envía en el parámetro estimated_pickup_time. Además, hay un parámetro prep_time disponible dentro de la carga de confirmación de la orden que es un objeto Datetime. Esto se puede utilizar para determinar el parámetro prep_time como entrada al algoritmo interno de DoorDash. Este campo es opcional y solo debe utilizarse si existe una lógica independiente que indique un tiempo de preparación distinto. No se debe replicar el parámetro estimated_pickup_time de DoorDash en este campo, ya que es posterior a la lógica de tiempo de preparación de DoorDash y generará estimaciones de tiempo de preparación excesivas.

Nota: La hora debe estar en UTC.

Nota: La lógica de asignación de DoorDash Dasher no utiliza los tiempos de preparación para las órdenes programadas. Siempre se tratará de retirar la orden 10 minutos antes del comienzo del periodo de entrega al cliente.

Opción 1: utilizar los tiempos de preparación del modelo de DoorDash (recomendado).

La carga debe tener el siguiente formato, y también se detalla en la sección Punto de conexión de la orden:

{
"merchant_supplied_id": merchant provided order id,
"order_status": "success" or "fail",
"failure_reason": string detailing reason for failure
}

Opción 2: utilizar los tiempos de preparación calculados por el proveedor o la tienda.

Si hay una lógica independiente para indicar los tiempos de preparación por parte del proveedor o de la tienda, entonces puedes pasar la siguiente carga que incluye un tiempo de preparación calculado automáticamente.

{
"merchant_supplied_id": merchant provided order id,
"order_status": "success" or "fail",
"prep_time": a datetime object with the time you expect the order to be prepared by in UTC,
"failure_reason": string detailing reason for failure
}

Liberación automática de órdenes (AOR)

La liberación automática de órdenes (AOR) es una función de DoorDash que las tiendas pueden utilizar para aumentar la calidad de la comida y reducir los tiempos de espera del Dasher. Para ello, se retiene una orden en la etapa de preparación hasta que un Dasher llega a la proximidad designada del restaurante (es decir, 500 metros). Una vez que el Dasher llega a esa proximidad, DoorDash enviará un evento de liberación al sistema POS para la preparación de la comida. La sincronización de la llegada del Dasher con el momento en que la comida está lista para retirarse debería ser más precisa con la liberación automática de órdenes, y resulta conveniente sobre todo para los restaurantes de servicio rápido.

Una nueva llamada se dirigirá a un punto de conexión configurado y proporcionado por la tienda cuando el Dasher esté cerca de ella. Cuando la tienda confirma la orden, puede pasar el ID de la orden interna en el campo merchant_supplied_id y DoorDash guardará este valor como client_order_id. Esto se enviará como parte de la carga de lanzamiento. También incluirá la información del vehículo del Dasher para facilitar el retiro en las tiendas que admiten la entrega junto a la acera. Se puede encontrar un ejemplo en la sección Referencia.

Actualizaciones en los eventos de órdenes

Antes, DoorDash no podía saber cuándo estaba lista la comida para ser retirada y, por lo tanto, no podía pasar esta información a los Dashers. Esto provocaba una experiencia de retiro estresante tanto para los Dashers como para las tiendas, ya que todos los Dashers se aglomeraban fuera de las tiendas a la espera de su próxima orden.

Para solucionarlo, ahora las tiendas tienen la posibilidad de compartir el evento. Una vez que la orden está lista para retirarla, las tiendas pueden avisar a DoorDash para que se informe a los Dasher de la entrega. Las tiendas incluirán el “ID” de la orden (que deberían haber recibido del webhook de creación de órdenes) en los parámetros de la URL. Consulta más detalles en la sección “Eventos PATCH de la orden” en Puntos de conexión de órdenes.

Fallas en las órdenes: motivos de falla deseados

Cuando una orden falla, es importante incluir el parámetro failure_reason. Esto es vital para ayudar a rastrear las fallas y solucionar los problemas del sistema. A continuación, se muestran algunos ejemplos detallados de los errores de failure_reason y una descripción de los casos en los que DoorDash podría recibir cada uno de ellos. Ten en cuenta que puedes proporcionar cualquier motivo personalizado en el parámetro failure_reason que sea relevante para las causas específicas de las fallas en las órdenes. No es necesario que el parámetro failure_reason obtenido coincida con uno de los ejemplos que aparecen a continuación.

Motivos de fallaDescripción
Tienda no disponible: problema de conectividadLa orden se recibió mientras la tienda tenía problemas de conectividad/red en el POS (temporal).
Tienda no disponible: horarios no sincronizadosLa orden se recibió mientras la tienda estaba cerrada (horario incorrecto).
Tienda no disponible: cerrada o en remodelaciónLa orden se recibió mientras la tienda estaba cerrada (de forma permanente, como cierres de tiendas, remodelación de la tienda, etc.).
Artículo no disponible: [Nombre del artículo] - [ID del artículo] - AgotadoLos artículos u opciones de artículos de la orden ya no están disponibles. Señala el artículo que provocó el error.
Artículos no disponibles: [Nombre del artículo] - [ID del artículo] - No se vende en esta tiendaLos artículos u opciones de artículos de la orden no se venden en la tienda y no deberían estar en el menú. Señala el artículo que provocó el error.
La orden no pasó la validación del negocioLa orden no pudo realizarse debido a las normas comerciales de la tienda (opciones obligatorias sin marcar, cantidad máxima excedida, problema de dirección, etc.). Separa los fallos preferentemente por validación comercial.
Error de tiempo de espera: 504Tiempo de espera de la puerta de enlace debido a problemas de conectividad (error 504).
Puerta de enlace incorrecta: 502Se recibe una respuesta no válida (error 502).
Otro: 500Otros problemas (errores 500)

Para los motivos de fallo por “artículo agotado”, se recomienda a los socios que incluyan el parámetro merchant_supplied_id del artículo o modificador junto con el nombre del artículo/modificador que provoca el fallo de la orden, de modo que los sistemas internos de DoorDash puedan tomar medidas correctivas automáticas para resolver el problema y evitar posteriores fallos en las órdenes de esa tienda.

Actualizaciones en la confirmación posterior a la orden

DoorDash agregó una función nueva a OpenAPI para que las tiendas puedan cancelar las órdenes aceptadas previamente. Muchas de las tiendas integradas con POS tienen configurado el sistema para aceptar y confirmar las órdenes automáticamente, siempre y cuando estas pasen una serie de validaciones. Algunas veces, las órdenes se confirman inicialmente de forma automática, pero luego es necesario cancelarlas debido a diversos motivos. En este caso, la tienda debe llamar al servicio de asistencia de DoorDash para iniciar la cancelación, lo que puede suponer un proceso largo para ambas partes. Con esta función, las tiendas podrán cancelar las órdenes gracias a la integración del POS.