Notificaciones Push
Contenidos
Cuando suceda un evento para un contenedor o envío (ingreso a un centro logístico, retenido, dañado, etc.), el servicio del correo deberá informar mediante una notificación push.
Formato Request
Se enviará un mensaje con la siguiente estructura:
POST https://api.mercadolibre.com/tracking/{id}/notifications \ --header 'x-access-token':{accessToken}Los atributos del body se explican en la siguiente tabla:
| Nombre | Tipo de dato | Descripción | Tipo |
|---|---|---|---|
| code | String | Código del evento. | Mandatorio |
| carrier_code | String | Código del evento interno del carrier. | Mandatorio |
| type | String | Tipo de contenedor de la novedad. Si se trata de un pallet, el valor debe ser "handling_unit", si es un envío individual el valor esperado es “shipment” | Mandatorio |
| payload | Node | Contiene información relevante a un evento en particular | |
| payload.flight.number | String | Número de vuelo del contenedor. | Mandatorio |
| payload.flight.awb | String | Número de Air Waybill. | Opcional |
| payload.flight.estimated_departure_time | Date | Fecha estimada/programada de despegue del vuelo. | Mandatorio |
| payload.flight.estimated_arrival_time | Date | Fecha estimada/programada de aterrizaje del vuelo. | Opcional |
| payload.flight.operator | String | Nombre del operador que genera la novedad. | Opcional |
| payload.flight.origin | String | Aeropuerto origen de donde despega el vuelo, según denominacion IATA. Puede buscar la misma en el siguiente link oficial | Mandatorio |
| payload.flight.destination | String | Aeropuerto destino de aterrizaje, según denominacion IATA. Puede buscar la misma en el siguiente link oficial | Mandatorio |
| payload.flight.pilot | String | Nombre y apellido del piloto. | Opcional |
| payload.reprogrammed_flight.number | String | Número de vuelo reprogramado del contenedor. | Mandatorio |
| payload.reprogrammed_flight.awb | String | Número de Air Waybill. | Opcional |
| payload.reprogrammed_flight.estimated_departure_time | Date | Fecha estimada/programada de despegue del vuelo reprogramado. | Mandatorio |
| payload.reprogrammed_flight.estimated_arrival_time | Date | Fecha estimada/programada de aterrizaje del vuelo reprogramado. | Opcional |
| payload.reprogrammed_flight.operator | String | Nombre del operador que genera la novedad. | Opcional |
| payload.reprogrammed_flight.origin | String | Aeropuerto origen de donde despega el vuelo reprogramado, según denominacion IATA. Puede buscar la misma en el siguiente link oficial | Mandatorio |
| payload.reprogrammed_flight.destination | String | Aeropuerto destino de aterrizaje del vuelo reprogramado, según denominacion IATA. Puede buscar la misma en el siguiente link oficial | Mandatorio |
| payload.reprogrammed_flight.pilot | String | Nombre y apellido del piloto. | Opcional |
| payload.date | Date (ISO8601) | Fecha de ocurrencia del evento. Valores válidos: en UTC 2001-07-04T12:08:56.235Z o en hora local relativa 2001-07-04T12:08:56.235-07:00. | Mandatorio |
| payload.comment | String | Comentario adicional al código de estado. | Opcional |
| payload.location | Node | Contiene información relevante a la localización donde ocurrió el evento. | |
| payload.location.zip_code | String | Zipcode donde ocurrió el evento. | Opcional |
| payload.location.state_name | String | Nombre del estado/provincia donde ocurrió el evento. | Opcional |
| payload.location.city_name | String | Nombre de la ciudad donde ocurrió el evento. | Opcional |
| payload.location.neighborhood_name | String | Nombre del barrio donde ocurrió el evento. | Opcional |
| payload.location.country_id | String | Identificador de país donde ocurrió el evento. Debe enviarse el campo "id" del siguiente recurso. | Opcional |
| payload.location.facility | String | Identificador del Centro Logístico donde ocurrió el evento, según denominacion IATA. Puede buscar la misma en el siguiente link oficial | Mandatorio para notificaciones AP/AL |
| payload.location.geolocation | Node | Geolocalización del lugar donde ocurrió el evento. | Opcional |
| payload.location.geolocation.geolocation_type | String | Precisión de la geolocalización brindanda. Puede contener alguno de los siguientes valores:
| Opcional |
| payload.location.geolocation.latitude | BigDecimal | Latitud de la geolocalización. | Opcional |
| payload.location.geolocation.longitude | BigDecimal | Longitud de la geolocalización. | Opcional |
{
"code": string,
"carrier_code": string,
"type": string,
"payload": {
"flight": {
"number": string,
"awb": string,
"estimated_departure_time": date,
"estimated_arrival_time": date,
"operator": string,
"origin": string,
"destination": string,
"pilot": string,
},
"reprogrammed_flight": {
"number": string,
"estimated_departure_time": date,
"estimated_arrival_time": date,
"operator": string,
"origin": string,
"destination": string,
"pilot": string,
},
"date": date,
"comment": string,
"location": {
"zip_code": string,
"country_id": string,
"state_name": string,
"city_name": string,
"neighborhood_name": string,
"facility": string,
"geolocation": {
"geolocation_type": string,
"latitude": bigdecimal,
"longitude": bigdecimal
}
},
}
}Formato Response
Si la notificación fue recibida correctamente, el POST devuelve status OK.
Ejemplos
Request:
{
"type": "handling_unit",
"code": "AP-0401",
"carrier_code": "123",
"payload": {
"flight": {
"number": "456",
"estimated_departure_time": "2021-01-27T16:12:28.397843Z",
"origin": "GRU",
"destination": "GIG"
},
"date": "2021-01-27T16:12:28.397843Z",
"comment": "Entregado a aerolinea",
"location": {
"facility": "GRU",
"state_name": "São Poulo",
"city_name": "Guarulhos",
"geolocation": {
"geolocation_type": "ROOFTOP",
"latitude": -23,5000,
"longitude": -46,6166
}
}
}
}Response:
Satisfactioria
{
"status": OK
}Errores
Si ocurre algún error, la API devuelve HTTP status distinto de OK (200) . Si el código de error HTTP es del tipo 4XX no se debe reintentar (ya que hay algún problema con el request). Si por el contrario, es 5XX, se debe reintentar utilizando algún mecanismo de backoff con al menos tres reintentos.
Failed (400 FAILED)
{
"message": "User must have a valid scope",
"error": "invalid_scopes",
"status": 403,
"cause": null,
"internal_cause": [ ]
}Error (500 ERROR)
{
"message": "Internal error server",
"error": "internal_error_server",
"status": 500,
"cause": null,
"internal_cause": []
}