Webhook CRM

Connecte ton CRM maison ou ton outil métier à Jay via un endpoint HTTPS. Jay envoie un événement signé à chaque action vocale validée.

Utilisation

Tout ce que tu peux demander à Jay pour Webhook CRM.

Événements contacts

Jay envoie creer_contact, modifier_contact ou supprimer_contact dès qu'une action vocale touche un contact. Le payload contient les champs renseignés (prénom, nom, email, téléphone, poste, société).

Crée le contact Jean Dupont, email jean.dupont@orange.fr
15:18
Mets à jour le poste de Sarah, elle est Head of Sales
15:18
Ajoute le numéro 06 12 34 56 78 au contact Michel
15:18

Header X-Jay-Event: creer_contact. Le body inclut action.fields avec prenom, nom, email, telephone, fonction, societe_nom. Tu décides quoi en faire côté serveur (création, dedup, log).

Événements opportunités

Jay envoie creer_opportunite, modifier_opportunite, deplacer_deal, gagner_deal, perdre_deal selon ce qui est dit. Tu reçois le contact lié, le montant et le stage cible.

Crée une opportunité 12 000 euros pour Acme, stage négociation
15:18
Passe le deal Orange en gagné
15:18
Le deal Total passe en proposition envoyée
15:18

Headers X-Jay-Event: creer_opportunite, deplacer_deal, gagner_deal, perdre_deal. Le payload route les transitions de pipeline pour que ton CRM applique sa propre logique de stage.

Événements notes

À chaque note vocale, Jay envoie ajouter_note (générique), ajouter_note_contact ou ajouter_note_opportunite avec le résumé structuré (contexte, points-clés, prochaines étapes).

Note pour le contact Jean Dupont : il veut un devis avant vendredi
15:18
Note sur le deal Acme : ils valident le budget la semaine prochaine
15:18

Le champ action.fields.contenu contient la note formatée (HTML allégé). Le voice_note_id permet de regrouper plusieurs événements d'une même note vocale côté webhook.

Événements tâches

Jay envoie creer_tache, modifier_tache, terminer_tache ou supprimer_tache pour les actions concrètes (rappel, follow-up explicite, deadline).

Crée une tâche relancer Pierre vendredi 14h
15:18
Marque la tâche envoyer la proposition Total comme terminée
15:18

Jay filtre les tâches génériques (Follow up sans contexte) pour éviter le bruit. Le payload inclut date_echeance, contact_lie et priorite quand ils sont mentionnés.

Événements rendez-vous

Jay envoie creer_rdv, modifier_rdv ou supprimer_rdv avec la date, l'heure, la durée et les participants détectés.

Programme un rendez-vous avec Sophie demain à 10h, durée 1 heure
15:18
Annule le RDV de jeudi avec Pierre
15:18

Le payload contient date_debut (ISO 8601), duree_minutes et participants. Jay ne crée pas l'événement dans Google Calendar si le webhook est ta seule intégration.

Signature HMAC

Chaque requête est signée avec un secret partagé (HMAC-SHA256 du body JSON). Vérifie le header X-Jay-Signature côté serveur pour refuser tout payload non authentifié.

Headers : X-Jay-Signature, X-Jay-Event, X-Jay-Delivery-Id
15:18
Compare HMAC_SHA256(secret, body) === X-Jay-Signature
15:18

Le secret est affiché une seule fois à la création du webhook. Stocke-le côté serveur. En cas de perte, régénère-le depuis l'interface de configuration.

Retries automatiques

Jay réessaie 3 fois en cas d'échec (timeout 10 s, 5xx, 429) avec un back-off 0/1/5 secondes. Les erreurs 4xx (sauf 429) ne sont pas retentées.

Réponse 200/201/2xx : succès, pas de retry
15:18
Réponse 5xx ou timeout : 2 retries supplémentaires
15:18
Réponse 4xx (sauf 429) : abandon immédiat
15:18

Renvoie un statut 2xx dès la réception (sans attendre le traitement) si tu veux éviter les retries inutiles. Utilise le X-Jay-Delivery-Id pour dédupliquer côté serveur.

Logs de livraison

Chaque tentative est enregistrée (statut HTTP, body reçu, numéro de tentative). Tu peux les consulter depuis l'interface de configuration du webhook.

200 OK livré du premier coup
15:18
503 Service Unavailable retenté 2 fois
15:18
Timeout après 10 s : marqué en échec
15:18

Les 20 dernières livraisons sont visibles dans le dialog 'Webhook CRM'. Garde ton endpoint sous 10 s pour éviter les timeouts.

Aide

Quel format de payload Jay envoie ?

Body JSON avec event (type d'action), timestamp ISO, voice_note_id, client (infos contact si pertinent), action.type, action.external_id (ID renvoyé par ton serveur à la création) et action.fields (les champs métier). Le payload est documenté dans le dialog de configuration.

Comment vérifier la signature côté serveur ?

Calcule HMAC-SHA256 du body brut (string JSON) avec ton secret, en hex. Compare avec X-Jay-Signature. Refuse si différent. Important : utilise le body brut, pas le JSON.parse, sinon la signature ne matche pas.

Que faire avec X-Jay-Delivery-Id ?

Stocke-le et déduplique. En cas de retry réseau, Jay peut renvoyer le même événement (même delivery_id). Garder un cache des delivery_id récents évite les doublons côté ton CRM.

Jay attend-il une réponse de mon endpoint ?

Jay attend un statut HTTP 2xx pour valider la livraison. Tu peux renvoyer un JSON avec un external_id pour que Jay le mémorise (ex: l'ID interne du contact créé). Cet external_id sera renvoyé dans les événements suivants liés à la même entité.

Le webhook fonctionne avec un CRM existant (HubSpot, Pipedrive...) ?

Le Webhook CRM est destiné aux CRM maison ou outils sans intégration native. Si tu connectes aussi HubSpot ou Pipedrive, Jay envoie les actions aux deux. Pour éviter les doublons, désactive l'intégration native ou filtre côté webhook.

Comment Jay gère les erreurs si mon serveur tombe ?

3 tentatives avec back-off 0/1/5 s. Après 3 échecs (timeout, 5xx, 429), l'événement est marqué en échec et loggé. Tu peux le rejouer en demandant à Jay 'rejoue la dernière note' ou en interrogeant les logs de livraison.