Configurez les deux services et démarrez le receiver
Créez deux services compatibles avec les mêmes filtres : un service live de typeclassified, avec onlyNew=false, et un service d’export de type classifieds. Le
service d’export est indispensable au baseline complet comme à la réconciliation delta.
Les deux services peuvent viser le même receiver HTTPS, mais restent deux services distincts.
Rendez ce receiver opérationnel avant de demander ou planifier le premier export. Si votre
receiver limite les IP sources, autorisez les IP d’egress Immoteur avant tout test.
Gardez le handler HTTP minimal : persistez ou mettez la requête en queue, renvoyez 2xx, puis traitez-la dans votre propre worker. Consultez Livraison, tentatives et idempotence des webhooks pour le contrat du receiver, des timeouts, des en-têtes et des réessais.
Établissez le premier snapshot avec un export complet
Déclenchez un Export complet depuis le serviceclassifieds pour établir le baseline. Il livre toutes les annonces qui correspondent actuellement aux filtres du service et qui sont publiquement exportables, dans un ou plusieurs chunks. Chaque élément est un snapshot public complet de Classified.
Chaque payload de cet export contient le champ obligatoire exportType. Il indique le type effectivement livré pour l’ensemble de l’export et conserve la même valeur dans chaque chunk de données comme dans le message final. Pour un Export complet, sa valeur est full.
exportType et contient un tableau items vide :
exportType et isComplete, mais ne constituent pas le schéma complet : chaque message contient aussi les champs obligatoires batchId, itemCount et batchCount (batchId vaut null dans le message final). Consultez la référence API générée pour leur contrat exact.
Traitez les notifications d’annonces en direct
Utilisez le service de typeclassified, configuré avec onlyNew=false, pour les notifications en direct. Elles donnent à votre copie locale des mises à jour rapides lorsqu’une annonce est créée ou lorsqu’un champ normalisé éligible change.
Persistez un registre de livraison incluant X-Immoteur-Service-Id et
X-Immoteur-Event-Id avant d’accuser réception d’une notification en direct. Utilisez les
event IDs reçus avec l’identifiant de service pour dédupliquer les notifications
classified : cet event ID est conservé entre leurs réessais. Cette stabilité ne s’applique
pas aux chunks d’export classifieds. X-Immoteur-Delivery-Id identifie une tentative
HTTP : conservez-le pour le diagnostic, mais ne le prenez pas seul pour clé d’idempotence.
Un revisit ne modifiant que meta.lastSeenAt est enregistré pour la réconciliation par export et ne produit pas de notification directe. Utilisez meta.lastModifiedAt pour les changements normalisés de la source et meta.lastSeenAt pour conserver le dernier revisit observé.
Réconciliez avec les exports delta
- Export complet
- Export delta
Un Export complet livre toutes les annonces qui correspondent actuellement
aux filtres du service et qui sont publiquement exportables. Dans son
payload,
exportType vaut full.exportType vaut full dans les chunks de données et dans le message final. Le payload envoyé au receiver n’expose ni le mode demandé ni la raison du repli. La modification de la seule URL de destination du webhook ne remet pas en cause la compatibilité du baseline pour un Export delta. Configurez les jours d’export dans le dashboard selon la cadence de réconciliation de votre intégration.
Rendez les écritures locales sûres face aux doublons et retards
Stockez chaque snapshot source par identifiant d’annonce, conservez le payload brut et gardez vos propres enrichissements dans des champs ou tables séparés. Ne laissez ni l’ordre d’arrivée, ni la position dans un chunk, ni le delivery ID, ni le nombre de réessais déterminer quel snapshot source prévaut. Lors de l’application d’un snapshot, privilégiez lemeta.lastModifiedAt le plus récent. Lorsque le timestamp de modification est identique, vous pouvez conserver le meta.lastSeenAt le plus récent sans écraser des données normalisées plus récentes. status.current est un champ de cycle de vie ; ne déduisez pas une suppression du seul fait qu’un élément manque dans un export ultérieur. Un filtre modifié crée un nouveau périmètre de sélection et n’ordonne pas automatiquement de supprimer des données de votre base.
Utilisez la copie locale pour l’analyse et l’enrichissement
Une fois les snapshots source stockés, exécutez vos propres analyses, jointures, scores, synchronisations CRM ou enrichissements dans votre base de données. Gardez ces valeurs dérivées séparées du snapshot Immoteur afin qu’une mise à jour source entrante reste un simple upsert et ne crée pas de conflit avec votre travail local.Questions fréquentes des développeurs
Cette synchronisation copie-t-elle toutes les données Immoteur ?
Non. Elle copie les données d’annonces publiquement exportables qui correspondent actuellement aux filtres configurés pour votre service. Utilisez la référence API et la configuration du service pour comprendre le payload et la sélection exacts.Puis-je compter sur l’ordre d’arrivée ou recevoir chaque événement une seule fois ?
Non. Les livraisons de webhook peuvent être réessayées et les exports peuvent utiliser plusieurs chunks. Persistez un registre d’idempotence pour les notifications en direct et faites les upserts des snapshots par identifiant d’annonce.Quand choisir un export complet ou delta ?
Commencez par un export complet du serviceclassifieds. Gardez le service classified actif, avec onlyNew=false, pour les mises à jour rapides, puis utilisez les exports delta du service d’export pour une réconciliation régulière. Un delta bascule automatiquement vers un export complet sans baseline récent compatible.
Dois-je supprimer un enregistrement local absent d’un export ultérieur ?
Pas automatiquement. Un export reflète son périmètre de filtre courant. Gardez les décisions de cycle de vie explicites et utilisez le snapshot d’annonce, notammentstatus.current, plutôt que d’interpréter une absence comme une instruction de suppression.