Intégrations
Les intégrations envoient automatiquement les clients de votre organisation vers un autre outil. Chaque client créé, ou dont l’email ou le nom change, est envoyé. Les clients sans email ne sont jamais envoyés.
Tout se trouve dans Règles et réglages dans la barre latérale, puis l’onglet Intégrations, visible du propriétaire et des administrateurs de l’organisation. Les intégrations sont incluses dans l’offre Pro : avec une autre offre, l’écran affiche Plan Pro requis et rien n’est envoyé.
Le consentement relève de l’outil vers lequel vous envoyez. VillaSlot envoie le contact ; votre outil d’emailing gère l’inscription et les désinscriptions.
AgentsMail
Ajoute chaque client à une liste AgentsMail.
- Connecter → collez votre clé API AgentsMail → Vérifier la clé.
- Choisissez la liste cible.
- Enregistrez.
La clé est vérifiée auprès d’AgentsMail, puis stockée chiffrée. Elle n’est plus jamais affichée ; laissez le champ vide lors d’une modification pour conserver la clé enregistrée. Un contact est créé ou mis à jour avec l’email, le prénom et le nom.
Supprimer l’intégration arrête l’envoi ; les contacts déjà dans la liste y restent.
Webhook
Envoie chaque événement en POST JSON vers une URL à vous.
- L’URL doit être en
https://et joignable publiquement — les réseaux privés etlocalhostsont refusés. Les redirections ne sont pas suivies. - Répondez avec n’importe quel
2xxen moins de 10 secondes. Toute autre réponse compte comme un échec et la livraison est retentée quelques fois. - Le secret de signature est affiché une seule fois, à la création du webhook. Conservez-le.
Événements
| Événement | Envoyé quand |
|---|---|
customer.created | un client avec un email est créé |
customer.updated | l’email ou le nom d’un client change |
{
"event": "customer.created",
"id": "5d27589a-…",
"email": "elena@marchetti.studio",
"firstName": "Elena",
"lastName": "Marchetti",
"fullName": "Elena Marchetti",
"organizationId": "8b1f…",
"occurredAt": "2026-10-01T06:12:44.000Z"
}Le premier mot du nom devient firstName, le reste lastName. Une synchronisation groupée ajoute
"source": "bulk_sync".
Vérifier la signature
Deux en-têtes accompagnent chaque appel :
X-VillaSlot-Event— le nom de l’événementX-VillaSlot-Signature—t=<unix timestamp>,v1=<signature>
v1 est le HMAC-SHA256 en hexadécimal de <t>.<raw body>, avec votre secret de signature pour clé. Calculez-le sur le
corps brut, avant d’analyser le JSON, et rejetez les horodatages anciens :
import {createHmac, timingSafeEqual} from 'node:crypto'
export const isValidVillaSlotSignature = (
rawBody: string,
header: string,
secret: string
) => {
const parts = Object.fromEntries(
header.split(',').map((part) => part.split('=') as [string, string])
)
const timestamp = Number(parts.t)
if (!timestamp || Math.abs(Date.now() / 1000 - timestamp) > 300) {
return false
}
const expected = createHmac('sha256', secret)
.update(`${parts.t}.${rawBody}`)
.digest('hex')
return (
expected.length === parts.v1?.length &&
timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1))
)
}Synchronisation groupée
Les clients nouveaux et modifiés sont envoyés en continu. Pour envoyer les clients que vous aviez déjà, utilisez Synchroniser tous les clients sur une intégration. Elle tourne en arrière-plan ; la carte indique combien ont été envoyés, ignorés (sans email) et en échec.
État
Chaque carte d’intégration indique si elle est active, désactivée ou en échec, le dernier envoi réussi et la dernière erreur. Une intégration désactivée n’envoie rien tant qu’elle n’est pas réactivée.