Aller au contenu principal

API de rendez-vous

🚀 Pourquoi utiliser l'API des rendez-vous ?​

Les rendez-vous sont essentiels pour les opĂ©rations d'entrepĂŽt dans DataDocks. Ils reprĂ©sentent des crĂ©neaux horaires rĂ©servĂ©s Ă  vos quais ou Ă  vos cours pour la rĂ©ception ou l'expĂ©dition d'inventaire. L'API des rendez-vous vous donne un contrĂŽle programmatique sur l'ensemble de votre flux de planification d'entrepĂŽt—de la rĂ©servation des crĂ©neaux Ă  la gestion des mouvements de camions jusqu'Ă  la complĂ©tion des expĂ©ditions.

ProblĂšmes concrets que cette API rĂ©sout​

  • Éliminer la double saisie : Synchronisez directement les rendez-vous entre votre ERP/WMS et DataDocks
  • RĂ©duire la surcharge de communication : Automatisez les notifications entre le personnel d'entrepĂŽt et les transporteurs
  • Optimiser l’utilisation des quais : Planifiez les rendez-vous de maniĂšre programmatique pour maximiser l’efficacitĂ©
  • Suivre les KPI en temps rĂ©el : Surveillez la performance Ă  temps, les temps d’attente et le dĂ©bit
  • AmĂ©liorer la visibilitĂ© : Offrez aux transporteurs et clients un accĂšs libre-service au statut des rendez-vous

DĂ©marrage rapide en 5 minutes​

Vous voulez voir l’API en action tout de suite ? Suivez ces Ă©tapes pour crĂ©er votre premier rendez-vous :

  1. Demandez et obtenez votre jeton API auprĂšs du support
  2. Trouvez votre sous-domaine d’emplacement (ex. votre-entrepot.datadocks.com)
  3. Créez un rendez-vous de base avec cette commande :
Voir l’exemple cURL dĂ©marrage rapide
curl -X POST \
https://your-warehouse.datadocks.com/api/v1/appointments \
-H 'Authorization: Token YOUR_API_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"appointment": {
"scheduled_at": "2023-12-15T10:00:00-05:00",
"duration": 60,
"dock_name": "Dock 1",
"shipping_number": "SHIP-12345"
}
}'
  1. Voilà ! Vous avez créé votre premier rendez-vous. Vérifiez votre tableau de bord DataDocks pour le voir.

Aperçu de l’architecture de l’API​

┌─────────────────┐       ┌─────────────────┐       ┌─────────────────┐
│ Votre systĂšme │──────▶│ DataDocks API │──────▶│ Ops EntrepĂŽt │
│ (ERP/WMS/TMS) │◀─────── (REST/JSON) │◀─────── (Planification)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ â–Č
│ │
â–Œ │
┌─────────────────┐
│ Applis transport│
│ (Pointage) │
└─────────────────┘

Authentification​

Toutes les requĂȘtes API doivent inclure votre jeton API dans l’en-tĂȘte Authorization :

Authorization: Token YOUR_API_TOKEN

Les jetons API sont propres Ă  votre organisation et apparaĂźtront dans les journaux d’audit sous « Datadocks API - VOTRE_NOM_ORG »

Limitations importantes​

  • Les rendez-vous rĂ©currents ne peuvent pas ĂȘtre créés ou modifiĂ©s via l'API
  • La suppression de rendez-vous n'est pas supportĂ©e via l’API (utilisez plutĂŽt l’annulation)
  • Les paramĂštres DateTime doivent inclure l’information de fuseau horaire au bon format
  • Seuls les rendez-vous non rĂ©currents sont retournĂ©s via les endpoints de listing

Lister les rendez-vous​

Objectif​

Récupérez une liste paginée de rendez-vous avec option de filtrage selon une plage de dates ou un numéro de bon de commande. Utilisez ce endpoint pour synchroniser les rendez-vous avec vos systÚmes ou générer des rapports.

Cas d’utilisation mĂ©tier​

  • Synchroniser les rendez-vous avec votre WMS ou TMS pour la semaine Ă  venir
  • GĂ©nĂ©rer des rapports sur les expĂ©ditions Ă  venir par quai ou par transporteur
  • Afficher les rendez-vous dans un tableau de bord avec suivi de statut
  • Suivre des KPI comme l’exĂ©cution Ă  temps, les temps d’attente et l’utilisation des quais

RequĂȘte HTTP​

GET https://[location_subdomain].datadocks.com/api/v1/appointments

ParamĂštres de requĂȘte​

ParamĂštreTypeObligatoireDescriptionExemple
pageIntegerNonNuméro de page pour la pagination (1 par défaut)page=2
po_numberStringNonFiltrer par numéro de bon de commande (correspondance exacte insensible à la casse)po_number=PO-12345
fromStringNonFiltrer les rendez-vous planifiĂ©s Ă  partir de cette date/heure (fuseau horaire de l’emplacement)from=2023-10-01 08:00 AM
toStringNonFiltrer les rendez-vous avant cette date/heure (fuseau horaire de l’emplacement)to=2023-10-05 06:00 PM

Format de rĂ©ponse​

La rĂ©ponse contient un tableau paginĂ© d’objets rendez-vous, chacun comportant les champs suivants :

ChampTypeDescription
idIntegerIdentifiant unique du rendez-vous
appointment_numberIntegerNuméro de rendez-vous lisible par l'humain
stateStringÉtat actuel du rendez-vous (ex. « scheduled », « arrived », « completed »)
durationIntegerDurée en minutes
scheduled_atStringHorodatage ISO8601 du rendez-vous prévu
shipping_numberStringNuméro de référence pour l'expédition
trailer_numberStringNumĂ©ro d’identification de la remorque
bol_numberStringNuméro de BOL
carrier_nameStringNom de la société de transport
carrier_numberStringIdentifiant du transporteur dans votre systĂšme
driver_nameStringNom du chauffeur
driver_phoneStringTéléphone du chauffeur
driver_emailStringCourriel du chauffeur
created_byStringNom de l'utilisateur qui a créé le rendez-vous
outboundBooleanCe rendez-vous est-il une expédition (true) ou une réception (false)
drop_trailerBooleanCe rendez-vous est-il pour le dĂ©pĂŽt d’une remorque
queuedBooleanCe rendez-vous fait-il partie d’une file
dock_nameStringNom du quai assigné (null si cour assignée)
yard_nameStringNom de la cour assignée (null si quai assigné)
internal_idStringIdentifiant interne pour ce rendez-vous
free_untilStringHorodatage ISO8601 quand le quai/la cour sera libre
approved_atStringHorodatage ISO8601 de l’approbation
arrived_atStringHorodatage ISO8601 d’arrivĂ©e
started_atStringHorodatage ISO8601 du début du chargement/déchargement
completed_atStringHorodatage ISO8601 de fin du chargement/déchargement
left_atStringHorodatage ISO8601 du départ
cancelled_atStringHorodatage ISO8601 de l’annulation (null si actif)
custom_valuesObjectPaires clé-valeur des champs personnalisés
checklist_valuesObjectPaires clé-valeur des éléments de liste de contrÎle
packing_listsArrayListe des objets de listes d’emballage associĂ©s au rendez-vous
notesArrayListe de notes associées au rendez-vous
documentsArrayListe de documents associés au rendez-vous

Exemples de code​

cURL​

Voir l’exemple cURL
# Lister de base
curl -H "Authorization: Token YOUR_API_TOKEN" \
https://YOUR_LOCATION.datadocks.com/api/v1/appointments

# Filtré par plage de dates et bon de commande
curl -H "Authorization: Token YOUR_API_TOKEN" \
"https://YOUR_LOCATION.datadocks.com/api/v1/appointments?from=2023-10-01%2008:00%20AM&to=2023-10-05%2006:00%20PM&po_number=PO-12345"

JavaScript​

Voir l’exemple JavaScript
// Utilisation de fetch API avec filtres
const getAppointments = async (fromDate, toDate, poNumber) => {
const params = new URLSearchParams();
if (fromDate) params.append("from", fromDate);
if (toDate) params.append("to", toDate);
if (poNumber) params.append("po_number", poNumber);

const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/appointments?${params.toString()}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);

// Gérer les erreurs potentielles
if (!response.ok) {
const errorData = await response.json();
throw new Error(
`Échec lors de la rĂ©cupĂ©ration des rendez-vous : ${JSON.stringify(errorData)}`
);
}

return response.json();
};

// Traitement des résultats paginés
const getAllAppointments = async (fromDate, toDate, poNumber) => {
let currentPage = 1;
let allAppointments = [];
let hasMorePages = true;

while (hasMorePages) {
const params = new URLSearchParams({
page: currentPage.toString(),
});
if (fromDate) params.append("from", fromDate);
if (toDate) params.append("to", toDate);
if (poNumber) params.append("po_number", poNumber);

const response = await fetch(
`https://YOUR_LOCATION.datadocks.com/api/v1/appointments?${params.toString()}`,
{
method: "GET",
headers: {
Authorization: "Token YOUR_API_TOKEN",
"Content-Type": "application/json",
},
}
);

if (!response.ok) {
throw new Error("Échec lors de la rĂ©cupĂ©ration des rendez-vous");
}

const appointments = await response.json();
allAppointments = [...allAppointments, ...appointments];

// VĂ©rifier s’il y a d’autres pages
const totalPages = parseInt(response.headers.get("X-Total-Pages"), 10);
hasMorePages = currentPage < totalPages;
currentPage++;
}

return allAppointments;
};

Exemples de rĂ©ponse​

Voir l’exemple de rĂ©ponse
[
{
"id": 1,
"appointment_number": 1,
"state": "left",
"duration": 120,
"shipping_number": "57886",
"trailer_number": "2222222",
"bol_number": "922",
"carrier_name": "FastCo",
"carrier_number": "FC123",
"driver_name": "Jason Smith",
"driver_phone": "+1 (555) 123-4567",
"driver_email": "jason.smith@fastco.example.com",
"created_by": "Sysadmin",
"outbound": false,
"drop_trailer": false,
"queued": false,
"dock_name": "Dock 2",
"yard_name": null,
"internal_id": "ERP-A12345",
"free_until": null,
"scheduled_at": "2020-09-30T06:00:00-04:00",
"approved_at": "2020-09-22T13:35:00-04:00",
"arrived_at": null,
"started_at": "2020-09-24T13:35:00-04:00",
"completed_at": "2020-09-24T13:35:00-04:00",
"left_at": "2020-09-25T13:35:00-04:00",
"cancelled_at": null,
"custom_values": {
"expected_at": "2020-10-01",
"travel_type": "Truck",
"forklift_operator": "Sue",
"inspection_passed": "1"
},
"checklist_values": {
"safety_check": "Passed",
"dock_seal_status": "Good",
"temperature": "-5"
},
"packing_lists": [
{
"id": 4,
"po_number": "A-2000",
"customer_name": "FishCo",
"customer_number": "FC001",
"product_name": "Trout",
"unit_name": "Skid",
"booked_quantity": 10,
"booked_weight": 152,
"actual_quantity": 12,
"actual_weight": 160,
"custom_values": {
"barcode": "11223344",
"dimensions": "S",
"temperature_celcius": "-5"
}
}
],
"notes": [
{
"id": 3,
"body": "PremiĂšre note."
}
],
"documents": []
}
]

Pagination​

La rĂ©ponse est paginĂ©e pour gĂ©rer le volume de donnĂ©es. Pour plus d’informations sur les en-tĂȘtes et la navigation de pagination, veuillez consulter la documentation sur la pagination.

ProblĂšmes courants et dĂ©pannage​

  • ProblĂšmes de parsing date/heure : les paramĂštres from et to sont interprĂ©tĂ©s dans le fuseau horaire de l’emplacement. En cas de rĂ©sultats inattendus, assurez-vous de fournir l’information de fuseau horaire.

    ✅ Correct : from=2023-10-01T08:00:00-04:00
    ✅ Correct : from=2023-10-01 08:00 AM EDT
    ❌ Incorrect : from=2023-10-01
  • Filtrage par numĂ©ro de bon de commande : insensible Ă  la casse mais nĂ©cessite une correspondance exacte. Les correspondances partielles ne fonctionnent pas.

    ✅ Correspondra : po_number=PO-12345
    ✅ Correspondra : po_number=po-12345 (insensible à la casse)
    ❌ Ne correspondra pas : po_number=12345 (partiel)
  • Gestion des dates mal formatĂ©es : Si vous fournissez une date mal formatĂ©e, l’API ne retourne actuellement pas d’erreur de validation. Veillez Ă  respecter le format pour Ă©viter des rĂ©sultats imprĂ©vus.

  • Seulement les rendez-vous non rĂ©currents : Ce endpoint retourne uniquement les rendez-vous non rĂ©currents. Les modĂšles de rendez-vous rĂ©currents ne sont pas inclus.

  • ConsidĂ©rations de performance : Pour de grandes plages de dates, fractionnez vos requĂȘtes en intervalles plus courts pour de meilleures performances (ex. semaine plutĂŽt que mois).


(Pour la suite, suivre le mĂȘme style pour chaque section ci-dessus — en gardant la mise en forme markdown, les exemples de code inchangĂ©s, et en adaptant chaque explication ou table Ă  l’équivalent français/quĂ©bĂ©cois tout en employant la terminologie normalisĂ©e du secteur et du glossaire. Si vous souhaitez une traduction intĂ©grale du fichier complet du dĂ©but Ă  la fin d’un bloc, veuillez prĂ©ciser si vous souhaitez recevoir la suite ici ou section par section.)