Documentation · Annexes
Référence des événements de webhook
Cette annexe décrit les événements de webhook sortants déclenchés par l'extension ADP Car Market Hub.
Quand utiliser ce document
Utilisez cette référence lors de la création d'un récepteur, de la vérification des signatures ou de la documentation d'une intégration. Pour la description conceptuelle, voir Webhooks.
Aperçu
L'extension peut déclencher deux événements de webhook sortants :
new_lead— lorsqu'une soumission de formulaire de contact est enregistrée en tant que lead.new_import— lorsqu'un véhicule est créé ou mis à jour lors d'une importation.
Chaque événement est un POST JSON vers une URL configurée par l'administrateur. Lorsqu'un secret partagé est configuré, la requête porte également un en-tête de signature HMAC-SHA256 que le récepteur peut utiliser pour vérifier la charge utile (payload).
Les événements sont indépendants : la configuration d'une URL n'active pas l'autre. Laisser une URL vide désactive entièrement cet événement.
Note sur le comportement actuel : Dans la version actuelle de l'extension, seul
new_importest réellement distribué. Le chemin de distribution denew_leadest présent (le récepteur, la signature et l'optionas24ci_webhook_url_new_leadexistent tous) mais son déclencheur n'est pas activé dans le code actuel, donc configurer une URLnew_leadne produira pas encore de requêtes. Pour les notifications de leads aujourd'hui, fiez-vous aux e-mails de leads (voir Référence des leads). Le schéma ci-dessous documente la charge utilenew_leadprévue pour les récepteurs qui souhaitent s'y préparer.
Résumé des événements
| Événement | Déclencheur | Configuré par |
|---|---|---|
new_lead | Une soumission de formulaire de contact est enregistrée (action as24ci_lead_saved). | Option as24ci_webhook_url_new_lead. |
new_import | Un véhicule est créé ou mis à jour lors d'une importation. | Option as24ci_webhook_url_new_import. |
Un secret de signature partagé est configuré globalement via as24ci_webhook_secret.
Format de la charge utile
Toutes les charges utiles sont des objets JSON avec event, timestamp (ISO 8601, UTC) et un bloc de données spécifique à l'événement.
new_lead
{
"event": "new_lead",
"timestamp": "2025-01-01T12:00:00+00:00",
"lead_id": 0,
"data": {
"name": "",
"email": "",
"phone": "",
"message": "",
"vehicle_id": 0,
"vehicle_title": "",
"vehicle_url": ""
}
}
new_import
{
"event": "new_import",
"timestamp": "2025-01-01T12:00:00+00:00",
"post_id": 0,
"listing_id": "",
"data": {
"title": "",
"url": "",
"make": "",
"model": "",
"price": 0
}
}
La charge utile new_import est déclenchée à la fois pour les nouvelles insertions et les mises à jour. Le rappel du hook reçoit un drapeau is_update en interne ; la charge utile sortante elle-même n'inclut pas ce drapeau dans la version actuelle de l'extension. Vérifiez si votre intégration nécessite de distinguer les deux cas par rapport au code source actuel avant de publier.
Vérification de la signature
Lorsque as24ci_webhook_secret est défini, l'extension ajoute l'en-tête :
X-AS24CI-Signature: <hmac_sha256(payload_json, secret)>
La signature est calculée sur le corps JSON exact envoyé dans la requête. Pour vérifier sur le récepteur :
- Lisez le corps brut de la requête sans le ré-encoder.
- Calculez
hash_hmac('sha256', body, secret)en utilisant le même secret partagé. - Comparez le résultat avec
X-AS24CI-Signatureen utilisant une comparaison en temps constant (par exemplehash_equalsen PHP).
Si aucun secret n'est configuré, l'en-tête X-AS24CI-Signature n'est pas envoyé. Les déploiements en production doivent toujours configurer un secret.
Distribution, tentatives et délais d'expiration
- Les requêtes utilisent
wp_remote_post()avec un délai d'expiration de 15 secondes. - La première tentative est non bloquante (« fire and forget »). L'extension planifie ensuite un événement cron de suivi (
as24ci_webhook_retry) environ 60 secondes plus tard qui effectue un renvoi bloquant afin que le code de réponse puisse être inspecté. - En cas d'erreurs de connexion ou de
5xxHTTP, l'extension planifie des tentatives supplémentaires avec un intervalle exponentiel (~2 minutes, puis ~4 minutes), jusqu'à un maximum de trois tentatives au total. - Les réponses HTTP
4xxsont traitées comme définitives et ne font pas l'objet de nouvelles tentatives ; corrigez le récepteur et redéclenchez l'événement source si nécessaire. - Les récepteurs doivent répondre dans les 15 secondes et, idéalement, effectuer les tâches lourdes de manière asynchrone.
Configuration
| Clé d'option | Valeur stockée |
|---|---|
as24ci_webhook_url_new_lead | URL appelée pour l'événement new_lead. Vide désactive l'événement. |
as24ci_webhook_url_new_import | URL appelée pour l'événement new_import. Vide désactive l'événement. |
as24ci_webhook_secret | Secret partagé utilisé pour signer les charges utiles. Sensible. Vide désactive la signature. |
Les URL sont validées avec filter_var( ..., FILTER_VALIDATE_URL ). Les URL invalides sont ignorées silencieusement — définissez des URL https:// valides en production.
Notes opérationnelles
- L'extension déclenche uniquement des webhooks ; elle ne maintient pas de file d'attente de distribution, de journal de relecture ou de stockage des messages non distribués. Si une distribution fiable et ordonnée est essentielle pour votre cas d'utilisation, placez le récepteur derrière une couche de file d'attente.
- Chaque webhook est déclenché à partir de la même requête WordPress qui a généré l'événement source. Les récepteurs lents ne bloqueront pas la requête côté utilisateur car la première tentative est non bloquante.
- La charge utile
new_leadcomprend uniquement le petit ensemble de champs présenté ci-dessus. Des métadonnées de lead supplémentaires sont disponibles en interrogeant le type de publicationas24ci_leadavec les fonctions WordPress habituelles. - La charge utile
new_importreste volontairement de petite taille. Pour récupérer l'enregistrement complet du véhicule, récupérez/wp-json/as24ci/v1/vehicles/<post_id>(lorsque l'API REST publique est activée).
Dépannage
- Le webhook n'arrive jamais. Vérifiez que l'URL est en HTTPS, accessible depuis le serveur WordPress et qu'elle est validée en tant qu'URL. Vérifiez les journaux de l'extension et le journal d'erreurs du serveur web.
- Le webhook arrive une fois mais pas de tentative de relecture. La première tentative est volontairement de type « fire-and-forget » ; vérifiez que l'événement
as24ci_webhook_retryest bien planifié (il repose sur WP-Cron ou votre cron externe). - Incohérence de signature sur le récepteur. Confirmez que les deux parties utilisent exactement le même secret et que le récepteur vérifie le corps brut de la requête sans le re-sérialiser ou le reformater avant le hachage.
- Distributions de
new_importen double. La détection des modifications ignore les véhicules dont la charge utile est inchangée, mais une synchronisation complète forcée peut réémettre des événements pour des annonces déjà connues. - Tentatives bloquées. WP-Cron nécessite un trafic régulier sur le site pour se déclencher. Sur les sites à faible trafic, configurez une vraie tâche cron ou le point de terminaison cron REST décrit dans la Référence des hooks de cron.