Présentation
Bienvenue dans l'API Robonobo Planner ! Cette API vous est destinée si vous avez besoin de planifier et optimiser vos livraisons ou interventions clients. Elle s'utilise en complément de l'application Robonobo Planner pour automatiser la création des destinations (ordre de livraison, intervention chez vos clients...). Ainsi vous n'aurez plus besoin de saisir manuellement les informations de vos clients (nom, adresse...) Vous pourrez créer de nouvelles destinations qui pourront être transmise directement à vos livreurs ou techniciens sur l'application Robonobo Planner.
Si vous n'avez pas encore de compte ni d'identifiants API, il vous suffit de vous rendre sur https://robonoboplanner.fr pour créér un compte Robonobo Planner et ensuite aller dans les paramètres pour créer un compte API
Authentification
Exemple de requête :
curl "https://api.robonoboplanner.fr/api/getauthtoken" -H "Authorization: Basic $encodedCredentials"
Exemple de réponse :
{
"token": "eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA",
"ttl": 600
}
Exemple de requête avec ttl :
curl "https://api.robonoboplanner.fr/api/getauthtoken/72000" -H "Authorization: Basic $encodedCredentials"
Exemple de réponse avec ttl :
{
"token": "eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA",
"ttl": 72000
}
L'authentification se fait en deux temps.
- Il vous faudra d'abord récupérer un 'token' avec la requête https://api.robonoboplanner.fr/api/getauthtoken en fournissant comme en-tête
Authorization: Basic $encodedCredentials
(remplacer$encodedCredentials
par vos identifiants sous la forme id:pass encodé en base 64).
Attention : Ne pas confondre l'ID généré par l'application avec encodedCredentials.
Exemple : Avec ID =YXBpMDAwMDAwMDAwMDAwMTtDb21wYW55TmFtZTtDb21wYW55QWRkcmVzcw==
et pass =myPassword
, on obtient encodedCredential =WVhCcE1EQXdNREF3TURBd01EQXdNVHREYjIxd1lXNTVUbUZ0WlR0RGIyMXdZVzU1UVdSa2NtVnpjdz09Om15UGFzc3dvcmQ=
- Ensuite, il vous faudra envoyer le 'token' dans l'en-tête de toutes les requêtes :
Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA
Optionnellement, vous pouvez ajouter la durée de vie (ttl) du token dans la requête getauthtoken : https://api.robonoboplanner.fr/api/getauthtoken/{ttl} avec ttl qui est de type entier exprimé en secondes. Attention toutefois, pour des raisons de sécurité, il n'est pas recommandé de mettre un ttl trop grand.
API
Créer une destination
Exemple de requête :
curl --request POST --url 'https://api.robonoboplanner.fr/api/destination' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA' \
-H 'Content-Type: application/json' \
--data '
{
"name": "Elijah Bailey",
"address": "Pantin",
"latitude": "48.899408",
"longitude": "2.408941",
"customerReference" : "123456789",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3ème étage",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
}'
Exemple de requête avec ville et code postal :
curl --request POST --url 'https://api.robonoboplanner.fr/api/destination' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA' \
-H 'Content-Type: application/json' \
--data '
{
"name": "Elijah Bailey",
"address": "10 rue de la Paix",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.899408",
"longitude": "2.408941",
"customerReference" : "123456789",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3ème étage",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
}'
Exemple de réponse :
{
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "0",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3ème étage",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
}
Cette requête vous permet de créer une destination pour une livraison ou une intervention chez un client.
Requête
POST https://api.robonoboplanner.fr/api/destination
Paramètres
Description de l'objet Destination
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination (facultatif : un géocodage sera fait si le champ est vide) |
latitude | string | Latitude de la destination (facultatif : un géocodage sera fait si le champ est vide) |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination. Facultatif mais le géocodage sera plus rapide et plus précis |
postCode | string | Code postal de la destination. Facultatif mais le géocodage sera plus rapide et plus précis |
weight | numeric | Poids en kg de la marchandise le cas échéant (Facultatif) |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
Réponse
La réponse à une requête de création d'une destination correspond aux données envoyées lors de la création, augmentées des champs 'id' et 'status'
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
latitude | string | Latitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
id | string | Identifiant interne de la destination |
status | string | Statut de la destination.
|
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination |
postCode | string | Code postal de la destination |
weight | numeric | Poids en kg de la marchandise le cas échéant |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
signatureUrl | string | Url vers la signature faîte par le destinataire au moment de la livraison le cas échéant |
photoUrl | string | Url vers la photo prise par le livreur (ou technicien) au moment de la livraison le cas échéant |
trackingUrl | string | Lien vers la page de tracking permettant de suivre le livreur en temps réel |
labelUrl | string | Lien vers la page d'impression de l'étiquette du colis |
Créer plusieurs destinations
Exemple de requête :
curl --request POST --url 'https://api.robonoboplanner.fr/api/destination/bulk' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA' \
-H 'Content-Type: application/json' \
--data '
[
{
"name": "Elijah Bailey",
"address": "Pantin",
"latitude": "48.899408",
"longitude": "2.408941",
"customerReference" : "123456789",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3ème étage",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
},
{
"name": "Isaac Asimov",
"address": "22 rue de la Gare, 92300 Levallois-Perret, France",
"city": "Levallois-Perret",
"postCode": "92300",
"latitude": "48.898178",
"longitude": "2.295415",
"customerReference": "colis_123456",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor"
}
]'
Exemple de réponse :
Si la réponse est HTTP 201, toutes les destinations ont été ajoutées :
<Empty JSON content>
Si la réponse est HTTP 206, les destinations ont été ajoutées partiellement. :
[
{
"error": "-1 Duplicate(Elijah Bailey,Pantin,123456789)",
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "0",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3ème étage",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
}
]
Cette requête vous permet de créer plusieurs destinations d'un coup pour vos livraisons ou interventions chez vos clients. Le nombre de destinations est limité à 1000 par requête
Requête
POST https://api.robonoboplanner.fr/api/destination/bulk
Paramètres
La requête prend en entrée un tableau de destinations limité à une taille de 1000. Si vous souhaitez créer 5000 destinations, vous devrez faire 5 requêtes. Description de l'objet Destination
Réponse
Si la réponse est HTTP 201, toutes les destinations ont été ajoutées et la réponse est vide
Si la réponse est HTTP 206, les destinations ont été ajoutées partiellement et la réponse contiendra la liste des destinations qui n'ont pas été ajoutées. De plus ces destinations auront un champ 'error' contenant le message d'erreur associé
Nom | Type | Description |
---|---|---|
error | string | Message d'erreur expliquant pourquoi la destination n'a pas été ajoutée |
Créer des collectes/livraisons
Exemple de requête :
curl --request POST --url 'https://api.robonoboplanner.fr/api/destination/pickupDelivery' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA' \
-H 'Content-Type: application/json' \
--data '
[
{
"name": "Restaurant 1",
"address": "170 rue de rivoli",
"city": "Paris",
"postCode": "75001",
"customerReference" : "Commande1",
"phone" : "0122334455",
"note" : "3 Menus + 1 bouteille de soda",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
},
{
"name": "Isaac Asimov",
"address": "22 rue de la Gare, 92300 Levallois-Perret, France",
"customerReference": "Commande1",
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"startTime": "1649844732",
"endTime": "1649845812"
},
{
"name": "Restaurant 1",
"address": "170 rue de rivoli",
"city": "Paris",
"postCode": "75001",
"customerReference" : "Commande2",
"phone" : "0122334455",
"note" : "1 Menu B"
},
{
"name": "Elijah Bailey",
"address": "Pantin",
"customerReference": "Commande2",
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor"
}
]'
Exemple de réponse :
Si la réponse est HTTP 201, toutes les destinations ont été ajoutées :
<Empty JSON content>
Si la réponse est HTTP 206, les destinations ont été ajoutées partiellement. :
[
{
"error": "-1 Duplicate(Restaurant 1,170 rue de rivoli,Commande1)",
"name": "Restaurant 1",
"address": "170 rue de rivoli",
"city": "Paris",
"postCode": "75001",
"latitude": "48.862576",
"longitude": "2.335921",
"customerReference" : "Commande1",
"phone" : "0122334455",
"note" : "3 Menus + 1 bouteille de soda",
"weight" : "0.456",
"value" : "12.99",
"email" : "elijah.baley@fake-e-mail.fr",
"dynamicFields" : { "myCustomField1": "myCustomValue1", "myCustomField2": "myCustomValue2" },
"startTime": "1649839088",
"endTime": "1649841131"
},
{
"error": "-1 Duplicate(Isaac Asimov,22 rue de la Gare, 92300 Levallois-Perret, France,Commande1)",
"name": "Isaac Asimov",
"address": "22 rue de la Gare, 92300 Levallois-Perret, France",
"latitude": "48.898178",
"longitude": "2.295415",
"customerReference": "Commande1",
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"startTime": "1649844732",
"endTime": "1649845812"
}
]
Cette requête vous permet de créer des collectes/livraisons. Une collecte/livraison est composée de deux destinations liées entre elles par leur customerReference. Le livreur qui recevra la commande verra donc l'adresse de collecte pour récupérer la marchandise et l'adresse de livraison pour livrer la marchandise
Requête
POST https://api.robonoboplanner.fr/api/destination/pickupDelivery
Paramètres
La requête prend en entrée un tableau de destinations limité à une taille de 1000. Le nombre d'élément doit être pair car une collecte/destination est composée de deux destinations. Si la destination de collecte est en position N dans le tableau alors la destination associée pour la livraison DOIT être en position N+1 dans le tableau. Les deux destinations d'une collecte/livraison doivent avoir la même customerReference. Description de l'objet Destination
Réponse
Si la réponse est HTTP 201, toutes les destinations ont été ajoutées et la réponse est vide
Si la réponse est HTTP 206, les destinations ont été ajoutées partiellement et la réponse contiendra la liste des destinations qui n'ont pas été ajoutées. De plus ces destinations auront un champ 'error' contenant le message d'erreur associé
Nom | Type | Description |
---|---|---|
error | string | Message d'erreur expliquant pourquoi la destination n'a pas été ajoutée |
Voir une destination
Exemple de requête :
curl 'https://api.robonoboplanner.fr/api/destination/21908' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
curl 'https://api.robonoboplanner.fr/api/destination/byRef/123456789' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
Exemple de réponse :
{
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "1",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "01122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585041427,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585209637,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": "Déplacé du 26/03/2020 au 27/03/2020"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585251047,
"latitude": "48.89863586425779",
"longitude": "2.3684234619140616",
"historyCode": null,
"statusText": "Sous-traitant : responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585302621,
"latitude": "48.8604501",
"longitude": "2.3422448",
"historyCode": null,
"statusText": "Sous-traitant : Livreur3"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585306681,
"latitude": "48.8984216563859",
"longitude": "2.323795314880389",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585314230,
"latitude": "48.88111636683288",
"longitude": "2.295726233820467",
"historyCode": 0,
"statusText": "7m"
},
{
"statusCode": 4,
"deliveryReasonId": 1127,
"statusTimestamp": 1585314245,
"latitude": "48.88107090596834",
"longitude": "2.295777961788047",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 4,
"deliveryReasonId": 1133,
"statusTimestamp": 1585672954,
"latitude": null,
"longitude": null,
"historyCode": 1,
"statusText": "appel le 31/03/2020\nheure de l'appel 18h42\naction: j'ai laissé un message au répondeur"
},
{
"statusCode": 4,
"deliveryReasonId": 1133,
"statusTimestamp": 1585767323,
"latitude": null,
"longitude": null,
"historyCode": 1,
"statusText": "appel le 01/04/2020\nheure de l'appel 20h53\naction adresse ******, 75017 Paris, sonnez a la sonnerie avant de livrer ******"
},
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585767413,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": "Remise en livraison : Déplacé du 30/03/2020 au 02/04/2020"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585822526,
"latitude": "48.8972966",
"longitude": "2.3710932",
"historyCode": null,
"statusText": "Sous-traitant : Livreur1"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585825699,
"latitude": "48.870088",
"longitude": "2.356177",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585832659,
"latitude": "48.8812391",
"longitude": "2.2957204",
"historyCode": 0,
"statusText": "5m"
},
{
"statusCode": 3,
"deliveryReasonId": 1053,
"statusTimestamp": 1585832728,
"latitude": "48.8672035",
"longitude": "2.4041026",
"historyCode": null,
"statusText": ""
}
]
}
Ces requêtes vous permettent de voir le contenu d'une destination identifiée par son 'id' ou par son 'customerReference'.
Requête
GET https://api.robonoboplanner.fr/api/destination/{id}
GET https://api.robonoboplanner.fr/api/destination/byRef/{customerReference}
Paramètres
Nom | Type | Description |
---|---|---|
id | long | Identifiant interne de la destination |
Nom | Type | Description |
---|---|---|
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
Réponse
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
latitude | string | Latitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
id | string | Identifiant interne de la destination |
status | string | Statut de la destination.
|
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination |
postCode | string | Code postal de la destination |
weight | numeric | Poids en kg de la marchandise le cas échéant |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
signatureUrl | string | Url vers la signature faîte par le destinataire au moment de la livraison le cas échéant |
photoUrl | string | Url vers la photo prise par le livreur (ou technicien) au moment de la livraison le cas échéant |
trackingUrl | string | Lien vers la page de tracking permettant de suivre le livreur en temps réel |
labelUrl | string | Lien vers la page d'impression de l'étiquette du colis |
history | array<EventHistory> | Historique des évènements associés à la destination |
receptionContainer | numeric | Timestamp correspondant à la date de premier scan du conteneur. En nombre de secondes depuis l'EPOCH |
receptionParcel | numeric | Timestamp correspondant à la date de premier scan du colis associé à la destination. En nombre de secondes depuis l'EPOCH |
subcontractorName | string | Nom du sous-traitant à qui est attribué le colis |
driverName | string | Nom du livreur à qui est attribué le colis |
closestDriverPosition | string | Plus proche passage du livreur par rapport à l'adresse de destination. En nombre de mètres |
Description de l'objet EventHistory
Nom | Type | Description |
---|---|---|
statusCode | integer | Statut de la destination au moment de l'évènement. Voir correspondance des statuts |
deliveryReasonId | integer | Identifiant interne du motif de livraison. Voir motif de livraison |
statusTimestamp | integer | Timestamp de l'évènement |
latitude | string | Latitude associée à l'évènement |
longitude | string | Longitude associée à l'évènement |
historyCode | integer | Code spécial pour certains évènements.
|
statusText | string | Informations additionnelles de l'évènement |
Voir une collecte/livraison
Exemple de requête :
curl 'https://api.robonoboplanner.fr/api/destination/pickupDelivery/byRef/Commande1' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
Exemple de réponse :
[
{
"name": "Restaurant 1",
"address": "170 rue de rivoli",
"city": "Paris",
"postCode": "75001",
"latitude": "48.862576",
"longitude": "2.335921",
"id": "21908",
"customerReference": "Commande1",
"status": "1",
"processingDate": "1558173600",
"phone" : "0122334455",
"note" : "3 Menus + 1 bouteille de soda",
"weight" : "0.456",
"value" : "12.99",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585041427,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
}
],
"pickupOrDelivery": "pickup"
},
{
"name": "Isaac Asimov",
"address": "22 rue de la Gare, 92300 Levallois-Perret, France",
"latitude": "48.898178",
"longitude": "2.295415",
"id": "21909",
"customerReference": "Commande1",
"status": "0",
"processingDate": "1558173600",
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585041427,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
}
],
"pickupOrDelivery": "delivery"
}
]
Cette requête vous permet de voir le contenu d'une collecte/livraison identifiée par son 'customerReference'.
Requête
GET https://api.robonoboplanner.fr/api/destination/pickupDelivery/byRef/{customerReference}
Paramètres
Nom | Type | Description |
---|---|---|
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
Réponse
La réponse est un tableau de 2 destinations, une pour la collecte et une pour la livraison. L'objet destination est le même que décrit précédemment (voir ici) augmenté du champ 'pickupOrDelivery'
Nom | Type | Description |
---|---|---|
pickupOrDelivery | string | Ce champ n'appraît que dans le cas d'une collecte/livraison. Les deux valeurs possibles sont 'pickup' pour la destination de collecte et 'delivery' pour la destination de livraison |
Lister des destinations
Exemple de requête :
curl 'https://api.robonoboplanner.fr/api/destination/list/1558188000' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
or
curl --request POST --url 'https://api.robonoboplanner.fr/api/destination/byRefList' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA' \
-H 'Content-Type: application/json' \
--data '["colis_123456", "123456789"]'
Exemple de réponse :
[
{
"name": "Isaac Asimov",
"address": "92300 Levallois-Perret, France",
"city": "Levallois-Perret",
"postCode": "92300",
"latitude": "48.89321700000001",
"longitude": "2.287864",
"id": "21906",
"customerReference": "colis_123456",
"status": "0",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "01122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
},
{
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "1",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
}
]
Ces requêtes vous permet de voir la liste des destinations pour une date donnée ou à partir d'une liste de customerReference
Requête
GET https://api.robonoboplanner.fr/api/destination/list/{?timestampDate}
POST https://api.robonoboplanner.fr/api/destination/list/byRefList
Paramètres
Nom | Type | Description | Par défaut |
---|---|---|---|
timestampDate | long | Timestamp indiquant la date des destinations cherchées (en nombre de secondes depuis l'EPOCH). L'heure ne sera pas prise en compte, seuls le jour et l'année le seront | Facultatif : valeur par défaut = Aujourd'hui |
_ | _ |
---|---|
Paramètre pour la requête /byRefList | Un tableau de chaîne de caractères où chaque chaîne est une customerReference. Le tableau est limité à 1000 customerReference. Ex: ['ref1', 'ref2', 'ref3', 'ref4'] |
Réponse
La réponse est un tableau de destination
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
latitude | string | Latitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
id | string | Identifiant interne de la destination |
status | string | Statut de la destination.
|
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination |
postCode | string | Code postal de la destination |
weight | numeric | Poids en kg de la marchandise le cas échéant |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
signatureUrl | string | Url vers la signature faîte par le destinataire au moment de la livraison le cas échéant |
photoUrl | string | Url vers la photo prise par le livreur (ou technicien) au moment de la livraison le cas échéant |
trackingUrl | string | Lien vers la page de tracking permettant de suivre le livreur en temps réel |
labelUrl | string | Lien vers la page d'impression de l'étiquette du colis |
history | array<EventHistory> | Historique des évènements associés à la destination |
receptionContainer | numeric | Timestamp correspondant à la date de premier scan du conteneur. En nombre de secondes depuis l'EPOCH |
receptionParcel | numeric | Timestamp correspondant à la date de premier scan du colis associé à la destination. En nombre de secondes depuis l'EPOCH |
subcontractorName | string | Nom du sous-traitant à qui est attribué le colis |
driverName | string | Nom du livreur à qui est attribué le colis |
closestDriverPosition | string | Plus proche passage du livreur par rapport à l'adresse de destination. En nombre de mètres |
Supprimer une destination
Exemple de requête :
curl --request DELETE --url 'https://api.robonoboplanner.fr/api/destination/21908' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
Cette requête retourne un code HTTP 204
Cette requête vous permet de supprimer une destination identifiée par son 'id'.
Requête
DELETE https://api.robonoboplanner.fr/api/destination/{id}
Paramètres
Nom | Type | Description |
---|---|---|
id | long | Identifiant interne de la destination |
Réponse
Cette requête ne retourne aucun contenu et le code HTTP est 204
Lister les motifs de livraison
Exemple de requête :
curl 'https://api.robonoboplanner.fr/api/deliveryreason' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
Exemple de réponse :
[
{
"id": 1,
"reason": "Livré en personne",
"translations": {},
"type": 1,
"needAfterSale": 0
},
{
"id": 2,
"reason": "Livré en boite à lettre",
"translations": {},
"type": 1,
"needAfterSale": 0
},
{
"id": 3,
"reason": "Autre",
"translations": {},
"type": 1,
"needAfterSale": 0
},
{
"id": 4,
"reason": "Refusé",
"translations": {},
"type": 0,
"needAfterSale": 1
},
{
"id": 5,
"reason": "Mauvaise adresse",
"translations": {},
"type": 0,
"needAfterSale": 1
},
{
"id": 6,
"reason": "Absence",
"translations": {},
"type": 0,
"needAfterSale": 0
},
{
"id": 7,
"reason": "Digicode inconnu",
"translations": {},
"type": 0,
"needAfterSale": 1
},
{
"id": 8,
"reason": "Autre",
"translations": {},
"type": 0,
"needAfterSale": 0
}
]
Cette requête vous permet de voir la liste des motifs de livraison que vous pouvez configurer depuis l'interface d'administration de Robonobo Planner
Requête
GET https://api.robonoboplanner.fr/api/deliveryreason
Paramètres
Aucun paramètre
Réponse
La réponse est un tableau de motif de livraison
Nom | Type | Description |
---|---|---|
id | integer | Identifiant interne du motif de livraison |
reason | string | Description du motif de livraison |
translations | json | Uniquement si vous avez souscrit à l'option 'Portail de suivi' : Contient les textes à afficher sur le portail dans les différentes langues |
type | integer | Type de motif.
|
needAfterSale | integer | Indicateur pour les motifs nécéssitant une action de votre Service Après Vente (depuis le module S.A.V de l'application).
|
Notifications
Exemple de tableau de destination qui sera envoyé à votre URL :
[
{
"name": "Isaac Asimov",
"address": "92300 Levallois-Perret, France",
"city": "Levallois-Perret",
"postCode": "92300",
"latitude": "48.89321700000001",
"longitude": "2.287864",
"id": "21906",
"customerReference": "colis_123456",
"status": "0",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "01122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
},
{
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "1",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
}
]
Notre API peut envoyer des notifications à une URL que vous pouvez définir depuis les paramètres de votre compte Robonobo Planner.
À chaque mise à jour d'une destination, notre API enverra un POST à votre URL avec un tableau de Destination. Un en-tête 'Content-Type' sera ajouté avec la valeur 'application/json' et vous pourrez ajouter autant de headers que vous le souhaitez en plus.
Dans l'image ci-dessous, vous pouvez voir comment configurer votre URL avec une liste d'en-têtes et pour cet exemple, l'API enverra une requête POST https://my_custom_url
avec les en-têtes Authorization: Basic bXlsb2dpbjpteXBhc3N3b3Jk
, My_Custom_Header: My_Custom_Value
et Content-Type : application/json
ainsi qu'un tableau de destinations dans le corps de la requête

Description de l'objet Destination
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
latitude | string | Latitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
id | string | Identifiant interne de la destination |
status | string | Statut de la destination.
|
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination |
postCode | string | Code postal de la destination |
weight | numeric | Poids en kg de la marchandise le cas échéant |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
signatureUrl | string | Url vers la signature faîte par le destinataire au moment de la livraison le cas échéant |
photoUrl | string | Url vers la photo prise par le livreur (ou technicien) au moment de la livraison le cas échéant |
trackingUrl | string | Lien vers la page de tracking permettant de suivre le livreur en temps réel |
labelUrl | string | Lien vers la page d'impression de l'étiquette du colis |
history | array<EventHistory> | Historique des évènements associés à la destination |
receptionContainer | numeric | Timestamp correspondant à la date de premier scan du conteneur. En nombre de secondes depuis l'EPOCH |
receptionParcel | numeric | Timestamp correspondant à la date de premier scan du colis associé à la destination. En nombre de secondes depuis l'EPOCH |
subcontractorName | string | Nom du sous-traitant à qui est attribué le colis |
driverName | string | Nom du livreur à qui est attribué le colis |
closestDriverPosition | string | Plus proche passage du livreur par rapport à l'adresse de destination. En nombre de mètres |
Description de l'objet EventHistory
Nom | Type | Description |
---|---|---|
statusCode | integer | Statut de la destination au moment de l'évènement. Voir correspondance des statuts |
deliveryReasonId | integer | Identifiant interne du motif de livraison. Voir motif de livraison |
statusTimestamp | integer | Timestamp de l'évènement |
latitude | string | Latitude associée à l'évènement |
longitude | string | Longitude associée à l'évènement |
historyCode | integer | Code spécial pour certains évènements.
|
statusText | string | Informations additionnelles de l'évènement |
Voir destinations non envoyées
Exemple de requête :
curl 'https://api.robonoboplanner.fr/api/destination/webhookfailed' \
-H 'Authorization: Bearer eyJhbGciOiJkHbI1NiJ9.eyJzdWIiOiJwbXABCXkiLCJleHAiOjE1MzA2OTczMjR9.nCM1SdVS-gRcE35i8lBjKBf6PKC8rKbLqJp9QUI-bA'
Exemple de réponse :
[
{
"name": "Isaac Asimov",
"address": "92300 Levallois-Perret, France",
"city": "Levallois-Perret",
"postCode": "92300",
"latitude": "48.89321700000001",
"longitude": "2.287864",
"id": "21906",
"customerReference": "colis_123456",
"status": "0",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "01122334455",
"note" : "Digicode : AB123. 3rd Floor",
"weight" : "0.456",
"value" : "12.99",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
},
{
"name": "Elijah Bailey",
"address": "Pantin",
"city": "Pantin",
"postCode": "93500",
"latitude": "48.894533",
"longitude": "2.40963",
"id": "21908",
"customerReference": "123456789",
"status": "1",
"processingDate": "1558173600",
"multiLevelRef" : [ "OS19110102957", "695-21106105" ],
"phone" : "0122334455",
"note" : "Digicode : AB123. 3rd Floor",
"history": [
{
"statusCode": 0,
"deliveryReasonId": 0,
"statusTimestamp": 1585600545,
"latitude": "0",
"longitude": "0",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585676899,
"latitude": "48.90640160047106",
"longitude": "2.5846629976306597",
"historyCode": null,
"statusText": "Sous-traitant : Responsable"
},
{
"statusCode": 1,
"deliveryReasonId": 0,
"statusTimestamp": 1585742533,
"latitude": "48.93434169082478",
"longitude": "2.379078200583007",
"historyCode": null,
"statusText": "Sous-traitant : Livreur 2"
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585742555,
"latitude": "48.93429432450187",
"longitude": "2.3790913813682133",
"historyCode": null,
"statusText": ""
},
{
"statusCode": 2,
"deliveryReasonId": 0,
"statusTimestamp": 1585743116,
"latitude": "48.94839165197504",
"longitude": "2.336635465260584",
"historyCode": 0,
"statusText": "416m"
},
{
"statusCode": 3,
"deliveryReasonId": 1054,
"statusTimestamp": 1585754299,
"latitude": "48.9536275878301",
"longitude": "2.9028933393935135",
"historyCode": null,
"statusText": ""
}
]
}
]
L'API Robonobo Planner envoi des destinations vers votre webhook à chaque changement. Si l'envoi échoue (timeout, erreur http 500...), l'API gardera en mémoire la liste des destinations qui n'ont pas pu être envoyées vers votre webhook et tentera de les renvoyer 2 fois dans les 2 jours suivants avant de les marquer comme envoyées. La requête https://api.robonoboplanner.fr/api/destination/webhookfailed vous permet de récupérer la liste de ces destinations. Vous pouvez donc faire appel à cette requête tous les soirs pour être sûr de ne manquer aucune destination
Requête
GET https://api.robonoboplanner.fr/api/destination/webhookfailed
Réponse
La réponse est un tableau de destination
Nom | Type | Description |
---|---|---|
name | string | Nom associé à la destination (nom de la personne, nom du lieu...) |
address | string | Adresse complète de la destination. Peut contenir la ville et le code postal même s'ils sont déjà indiqués dans les champs 'city' et 'postCode' |
longitude | string | Longitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
latitude | string | Latitude de la destination. Contient 'Adresse non reconnue' si le géocodage à échoué |
customerReference | string | Votre identifiant UNIQUE vous permettant d'associer la destination à vos informations (client, facturation, code-barre...) |
processingDate | string | Timestamp indiquant la date de traitement de la destination en nombre de secondes depuis l'EPOCH. L'heure ne sera pas prise en compte, seuls le jour et l'année le seront. Facultatif : valeur par défaut : Aujourd'hui |
id | string | Identifiant interne de la destination |
status | string | Statut de la destination.
|
multiLevelRef | array<string> | Une liste d'identifiant sur plusieurs niveaux. Par exemple si vous regroupez les colis Co1, Co2 et Co3 dans une même palette OS19110102957 alors multiLevelRef = [ 'OS19110102957' ]. Si cette même palette est dans groupe de palettes ou une vague de colis 695-21106105 alors multiLevelRef = [ 'OS19110102957', '695-21106105' ]... (Facultatif) |
phone | string | Numéro de téléphone lié à la destination (Facultatif) |
note | string | Texte libre lié à la destination (description, commentaire, complément d'adresse...) (Facultatif) |
city | string | Ville de la destination |
postCode | string | Code postal de la destination |
weight | numeric | Poids en kg de la marchandise le cas échéant |
value | numeric | Valeur de la marchandise (Facultatif) |
string | Adresse e-mail du destinataire (Facultatif) | |
dynamicFields | json | Les champs dynamiques vous permettent d'ajouter des informations libre au format JSON (Facultatif) |
serviceDuration | numeric | Durée du service à chaque destination en secondes. Durée en dehors du temps de conduite (temps pour mettre le colis en boîte à lettre, pour installer du matériel...) (Facultatif) |
startTime | string | Timestamp correspondant à la date et heure de début du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
endTime | string | Timestamp correspondant à la date et heure de fin du créneau d'arrivée souhaité. En nombre de secondes depuis l'EPOCH (Facultatif) |
signatureUrl | string | Url vers la signature faîte par le destinataire au moment de la livraison le cas échéant |
photoUrl | string | Url vers la photo prise par le livreur (ou technicien) au moment de la livraison le cas échéant |
trackingUrl | string | Lien vers la page de tracking permettant de suivre le livreur en temps réel |
labelUrl | string | Lien vers la page d'impression de l'étiquette du colis |
history | array<EventHistory> | Historique des évènements associés à la destination |
receptionContainer | numeric | Timestamp correspondant à la date de premier scan du conteneur. En nombre de secondes depuis l'EPOCH |
receptionParcel | numeric | Timestamp correspondant à la date de premier scan du colis associé à la destination. En nombre de secondes depuis l'EPOCH |
subcontractorName | string | Nom du sous-traitant à qui est attribué le colis |
driverName | string | Nom du livreur à qui est attribué le colis |
closestDriverPosition | string | Plus proche passage du livreur par rapport à l'adresse de destination. En nombre de mètres |