Skip to main content

Webhooks

Les webhooks sont là pour informer votre système des événements qui surviennent lors de la livraison. Ils vous permettent de les exploiter, par exemple pour informer votre acheteur et/ou votre vendeur de l'avancée de la livraison.

Définir des webhooks

info

Les webhooks se définissent dans votre compte client > Webhook

Webhooks disponibles

concernant les annonces

EvénementParamètresCorrespondanceCommentaire
ride_publishedvoir détailsAnnonce crééeCocolis publie l’annonce. Les transporteurs sont informés.
ride_availabilities_pendingvoir détailsAnnonce en attente de confirmation de disponibilitésUn transporteur s'est proposé sur un créneau de livraison. Il nous manque la confirmation de disponibilité de l'expéditeur et du destinataire.
ride_startedvoir détailsAnnonce en cours de livraisonUn transporteur est prêt à effectué la livraison.
ride_expiredvoir détailsAnnonce expiréeL'annonce n'a pas trouvé de transporteur. Se rapprocher de notre support.
ride_completedvoir détailsAnnonce complétéeL'objet de l'annonce a été remis à son destinataire
ride_moderatedvoir détailsAnnonce modéréeL'annonce a été modéré par notre équipe car ne respectant pas nos conditions. Se rapprocher de notre support.
ride_removedvoir détailsAnnonce suppriméeL'annonce a été supprimée.

concernant les offres

EvénementParamètresCorrespondanceCommentaire
offer_acceptedvoir détailsUn porteur a été sélectionné pour réaliser la livraisonLe transporteur livrera aux créneaux qu'il a proposé et que l'expéditeur et le destinataire ont confirmé. Cocolis affiche les coordonnées du transporteur sur les pages de tracking de l'annonce. Cocolis transmet les informations de livraison au transporteur.
offer_cancelledvoir détailsLa livraison a été annuléeLa livraison est annulée par le transporteur. L'expéditeur et le destinataire sont informés, leur page de tracking est mise à jour. L’annonce passe de nouveau dans le statut ride_published.
offer_completedvoir détailsLivraison effectuéeVous pouvez indiquer à l'expéditeur que la livraison a été effectuée.
offer_rejectedvoir détailsLa livraison a été annuléeL'expéditeur ou le destinataire a rejeté une proposition de créneau de passage d'un potentiel transporteur, leur page de tracking est mise à jour. L’annonce passe de nouveau dans le statut published. Le payload contient le nombre de refus déjà enregistrés et le nombre maximum avant suppression de l'annonce pour déterminer si le prochain refus donnera lieu à une suppression de l'annonce.

concernant la livraison

EvénementParamètresCorrespondanceCommentaire
delivery_picked_upvoir détailsLe colis a été enlevéLe transporteur a récupéré le colis chez l'expéditeur.
delivery_to_delivervoir détailsLe colis va être livré dans la journéeLe transporteur est en route. La livraison est prête à être effectuée dans la journée.
delivery_cancelledvoir détailsLa livraison a été annulée
delivery_completedvoir détailsLa livraison a été effectuéeLe colis a été livré au destinataire.

concernant les disponibilités

EvénementParamètresCorrespondanceCommentaire
pickup_slot_accepted_by_sendervoir détailsL'expéditeur a confirmé sa disponibilité pour le créneau de collecte.il nous manque maintenant celle du destinataire
deposit_slot_accepted_by_recipientvoir détailsLe destinataire a confirmé sa disponibilité pour le créneau de livraisonla livraison est prête à démarrer

Fonctionnement

A chaque évènement, nous effectuons une requête POST sur l'url que vous avez spécifiée avec les paramètres en body comme spécifié ci-dessus. Cela vous permet de suivre la livraison.

  • Vous devez avoir un certificat SSL valide
  • La réponse doit être un 200 en moins de 2 secondes
  • Après la réception d'un événement, nous vous conseillons de faire la requête GET de la ressource (Offer ou Ride) afin de récupérer ses dernières informations
danger

Nos webhooks ont un timeout de 2 secondes. Donc vous ne devez pas faire de traitement synchrone sur nos webhooks, vous devez mettre en place un traitement asynchrone ou bien un traitement court.

Utilisation

A chaque webhook, nous vous renvoyons la valeur du external_id que vous avez spécifié quand vous avez créé votre ride afin que vous puissiez retrouver la commande associée. A partir de là, vous pouvez :

  • Changer le status d'une commande
  • Envoyer un email d'information à vos clients
  • etc...

Détails des paramètres

Voici pour chaque événement le détail des informations envoyées à l'URL de webhook.

ride_published

{
event: 'ride_published',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_availabilities_pending

{
event: 'ride_availabilities_pending',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_started

{
event: 'ride_started',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_expired

{
event: 'ride_expired',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_completed

{
event: 'ride_completed',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_moderated

{
event: 'ride_moderated',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

ride_removed

{
event: 'ride_removed',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

offer_accepted

{
event: 'offer_accepted',
created_at: DateTime,
resource_id: offer_id,
resource_type: 'offer',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id,
pickup_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
},
deposit_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
}
}

offer_cancelled

{
event: 'offer_cancelled',
created_at: DateTime,
resource_id: offer_id,
resource_type: 'offer',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id,
pickup_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
},
deposit_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
}
}

offer_completed

{
event: 'offer_completed',
created_at: DateTime,
resource_id: offer_id,
resource_type: 'offer',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id,
pickup_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
},
deposit_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
}
}

offer_rejected

{
event: 'offer_rejected',
created_at: DateTime,
resource_id: offer_id,
resource_type: 'offer',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id,
pickup_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
},
deposit_slot: {
date: Date,
slot: Slot (morning|afternoon|evening) # deprecated,
start_time: DateTime,
end_time: DateTime
},
reject_reason: (pickup_slot_refused|pickup_slot_answer_timeout|deposit_slot_refused|deposit_slot_answer_timeout),
ride: {
id: Integer,
external_id: String,
external_description: Text,
pickup_slot_rejection_count: Integer,
deposit_slot_rejection_count: Integer,
max_pickup_slot_rejection: Integer,
max_deposit_slot_rejection: Integer,
}
}

delivery_to_deliver

{
event: 'delivery_to_deliver',
created_at: DateTime,
resource_id: delivery_id,
resource_type: 'delivery',
ride_id: ride_id,
data: {
offer_id: offer_id,
state: String (picked_up | to_deliver | completed | cancelled),
to_deliver_at: DateTime | nil,
picked_up_at: DateTime | nil,
pick_up_date: Date,
delivery_date: Date
}
}

delivery_picked_up

{
event: 'delivery_picked_up',
created_at: DateTime,
resource_id: delivery_id,
resource_type: 'delivery',
ride_id: ride_id,
data: {
offer_id: offer_id,
state: String (picked_up | to_deliver | completed | cancelled),
to_deliver_at: DateTime | nil,
picked_up_at: DateTime | nil,
pick_up_date: Date,
delivery_date: Date
}
}

delivery_cancelled

{
event: 'delivery_cancelled',
created_at: DateTime,
resource_id: delivery_id,
resource_type: 'delivery',
ride_id: ride_id,
data: {
offer_id: offer_id,
state: String (picked_up | to_deliver | completed | cancelled),
to_deliver_at: DateTime | nil,
picked_up_at: DateTime | nil,
pick_up_date: Date,
delivery_date: Date
}
}

delivery_completed

{
event: 'delivery_completed',
created_at: DateTime,
resource_id: delivery_id,
resource_type: 'delivery',
ride_id: ride_id,
data: {
offer_id: offer_id,
state: String (picked_up | to_deliver | completed | cancelled),
to_deliver_at: DateTime | nil,
picked_up_at: DateTime | nil,
pick_up_date: Date,
delivery_date: Date
}
}

pickup_slot_accepted_by_sender

{
event: 'pickup_slot_accepted_by_sender',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}

deposit_slot_accepted_by_recipient

{
event: 'deposit_slot_accepted_by_recipient',
created_at: DateTime,
resource_id: ride_id,
resource_type: 'ride',
external_id: ride_external_id,
external_description: Text,
ride_id: ride_id
}