Notificaciones de estado de pedido
curl --request POST \
--url https://your-app-domain.com/notifications/notify \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalUserId": "user_12345",
"status": "pending",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": false
}
'import requests
url = "https://your-app-domain.com/notifications/notify"
payload = {
"externalUserId": "user_12345",
"status": "pending",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalUserId: 'user_12345',
status: 'pending',
orderId: 'order_xyz789',
websiteId: 'website_abc123',
requiresDeliveryVerificationCode: false
})
};
fetch('https://your-app-domain.com/notifications/notify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://your-app-domain.com/notifications/notify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalUserId' => 'user_12345',
'status' => 'pending',
'orderId' => 'order_xyz789',
'websiteId' => 'website_abc123',
'requiresDeliveryVerificationCode' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-app-domain.com/notifications/notify"
payload := strings.NewReader("{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://your-app-domain.com/notifications/notify")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-app-domain.com/notifications/notify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}"
response = http.request(request)
puts response.read_body{
"received": true,
"message": "Notificación procesada exitosamente"
}Notificaciones
Notificaciones de estado de pedido
Webhook que Justo envía para notificar cambios en el estado de los pedidos
POST
/
notifications
/
notify
Notificaciones de estado de pedido
curl --request POST \
--url https://your-app-domain.com/notifications/notify \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"externalUserId": "user_12345",
"status": "pending",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": false
}
'import requests
url = "https://your-app-domain.com/notifications/notify"
payload = {
"externalUserId": "user_12345",
"status": "pending",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": False
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
externalUserId: 'user_12345',
status: 'pending',
orderId: 'order_xyz789',
websiteId: 'website_abc123',
requiresDeliveryVerificationCode: false
})
};
fetch('https://your-app-domain.com/notifications/notify', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://your-app-domain.com/notifications/notify",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'externalUserId' => 'user_12345',
'status' => 'pending',
'orderId' => 'order_xyz789',
'websiteId' => 'website_abc123',
'requiresDeliveryVerificationCode' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://your-app-domain.com/notifications/notify"
payload := strings.NewReader("{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://your-app-domain.com/notifications/notify")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://your-app-domain.com/notifications/notify")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"externalUserId\": \"user_12345\",\n \"status\": \"pending\",\n \"orderId\": \"order_xyz789\",\n \"websiteId\": \"website_abc123\",\n \"requiresDeliveryVerificationCode\": false\n}"
response = http.request(request)
puts response.read_body{
"received": true,
"message": "Notificación procesada exitosamente"
}Este endpoint es un webhook que Justo llamará para informar a la aplicación contenedora sobre cambios en el estado de los pedidos. La aplicación contenedora debe implementar este endpoint para recibir estas notificaciones y determinar cómo mostrarlas al usuario (por ejemplo, una notificación push o una alerta en la aplicación).
Pedido aceptado por la tienda
El pedido ha sido aceptado por la tienda y está siendo preparado.
Tu pedido va en camino
El pedido ha sido preparado y está en camino hacia el destino.
Tu pedido está llegando a destino
El conductor está a menos de 300 metros del punto de entrega. Esta notificación puede enviarse múltiples veces.
Pedido entregado
El pedido ha sido entregado exitosamente al usuario.
Pedido cancelado
El pedido ha sido cancelado. Puede ser cancelado por la tienda, el usuario, o por problemas en el proceso.
Cuerpo de la solicitud
Estados del pedido
Los diferentes estados que Justo puede enviar y su significado:pending
Pedido aceptado por la tienda
El pedido ha sido aceptado por la tienda y está siendo preparado.
delivering
Tu pedido va en camino
El pedido ha sido preparado y está en camino hacia el destino.
nearToFinish
Tu pedido está llegando a destino
El conductor está a menos de 300 metros del punto de entrega. Esta notificación puede enviarse múltiples veces.
La notificación con el estado
nearToFinish puede enviarse varias veces, ya que el conductor puede cumplir repetidamente con la condición de estar a menos de 300 metros del punto de entrega. Para evitar efectos no deseados o duplicaciones en el sistema, es necesario que la contraparte implemente esta notificación de manera idempotente, garantizando que las múltiples recepciones de este estado no afecten el flujo ni el estado del pedido.done
Pedido entregado
El pedido ha sido entregado exitosamente al usuario.
cancelled
Pedido cancelado
El pedido ha sido cancelado. Puede ser cancelado por la tienda, el usuario, o por problemas en el proceso.
Ejemplo de solicitud - Pedido aceptado
{
"externalUserId": "user_12345",
"status": "pending",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": false
}
Ejemplo de solicitud - Pedido en camino
{
"externalUserId": "user_12345",
"status": "delivering",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": true
}
Ejemplo de solicitud - Pedido llegando a destino
{
"externalUserId": "user_12345",
"status": "nearToFinish",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": true
}
Ejemplo de solicitud - Pedido entregado
{
"externalUserId": "user_12345",
"status": "done",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": false
}
Ejemplo de solicitud - Pedido cancelado
{
"externalUserId": "user_12345",
"status": "cancelled",
"orderId": "order_xyz789",
"websiteId": "website_abc123",
"requiresDeliveryVerificationCode": false
}
Respuesta esperada
La aplicación contenedora debe responder con un código de estado HTTP 200 para indicar que la notificación fue recibida correctamente.Respuesta exitosa
{
"received": true,
"message": "Notificación procesada exitosamente"
}
Códigos de estado
Notas importantes
Este endpoint debe implementarse con un mecanismo de autorización seguro (token de acceso) que valide que la solicitud proviene de Justo. El mecanismo específico debe coordinarse entre ambos equipos técnicos.
Es crítico que este endpoint sea idempotente, especialmente para el estado
nearToFinish que puede enviarse múltiples veces. La aplicación debe poder procesar la misma notificación varias veces sin efectos secundarios.La aplicación contenedora debe determinar cómo mostrar estas notificaciones al usuario. Algunas opciones incluyen:
- Notificaciones push
- Alertas en la aplicación
- Actualización del estado del pedido en la UI
- Sonidos o vibraciones
Si la aplicación contenedora no responde con un código 200, Justo puede reintentar el envío de la notificación. Se recomienda implementar un mecanismo de procesamiento asíncrono para evitar timeouts.
Flujo de notificaciones
El flujo típico de notificaciones para un pedido exitoso sería:pending- Pedido aceptadodelivering- Pedido en caminonearToFinish- Pedido llegando (puede repetirse)done- Pedido entregado
cancelled- Pedido cancelado
Authorizations
Propuesta de esquema de autenticación. Token de autenticación que debe ser coordinado entre Justo y la aplicación contenedora. El mecanismo específico debe acordarse entre ambos equipos técnicos.
Body
application/json
Propuesta de esquema de webhook. Estructura propuesta que Justo enviará a la aplicación contenedora para notificar cambios en el estado de los pedidos.
Identificador del usuario en la aplicación contenedora
Example:
"user_12345"
Estado actual del pedido
Available options:
pending, delivering, done, cancelled, nearToFinish Example:
"pending"
Identificador único del pedido en Justo
Example:
"order_xyz789"
Identificador del sitio web o tienda donde se realizó el pedido
Example:
"website_abc123"
Indica si el pedido requiere un código de verificación para la entrega
Example:
false