Événements (Relay)
Réagissez dans le navigateur lorsque vos clients interagissent avec le devis.
La passerelle de messages
L’iframe de Cord Elements est conçue pour ne jamais isoler votre site web de ce qui se passe à l’intérieur. Grâce à une passerelle bidirectionnelle via window.postMessage, Cord relaie (« relay ») les événements de la carte directement vers votre environnement window parent.
C’est particulièrement utile pour déclencher des pixels d’analyse (comme Meta Pixel ou Google Analytics), lancer une animation de confettis lorsqu’une proposition est approuvée, ou rediriger l’utilisateur vers une page de remerciement après un paiement réussi.
Écouter les événements
Vous pouvez écouter les événements de façon native en attachant un addEventListener au nœud DOM de l’élément intégré :
const container = document.querySelector('[data-cord-token]');
container.addEventListener('cord:approved', (event) => {
console.log('The quote was approved!');
console.log('Approved by:', event.detail.signed_by);
});
Dictionnaire des événements
Tous les événements portent le préfixe cord: pour éviter les collisions de noms avec d’autres bibliothèques. Le detail de chaque événement inclut toujours token (le jeton public du devis) et folio (par ex. "COT-0148"), en plus des champs propres à chaque événement listés ci-dessous.
Cycle de vie du composant
cord:ready: déclenché à l’instant précis où le SDK termine le rendu du contenu, le calcul de la hauteur finale et le chargement des polices.cord:resize: émis en continu chaque fois que la hauteur de l’iframe change (utile uniquement si vous écrivez votre propre conteneur et n’utilisez pasembed.js).cord:viewed: déclenché en même temps quecord:ready, dès que le devis termine son rendu dans l’iframe — c’est le signal que le contenu est désormais visible pour votre page hôte. L’enregistrement officiel en base de données indiquant que le client a consulté le devis passe par un mécanisme interne distinct, qui exige que l’onglet soit réellement visible (afin de ne pas compter comme « consultation » l’aperçu du commercial sur son propre lien) ; ne supposez pas que les deux se produisent au même instant.
Interaction commerciale
cord:approved: émis à l’instant où l’utilisateur approuve les conditions de la proposition commerciale. Renvoie dans ledetaildes données utiles comme le hash de validation et le signataire (signed_by).cord:signed: déclenché au MÊME instant quecord:approved, avec le mêmedetail(signed_by,hash) — dans Cord, approuver et signer sont une seule et même action du client, et non deux étapes distinctes dans le temps. Écoutez celui qui est le plus clair sémantiquement pour votre code ; n’attendez pas que l’un arrive « après » l’autre.cord:pay: émis lorsque l’utilisateur clique sur le bouton qui lance son parcours de paiement en ligne (carte, virement bancaire ou les autres moyens de paiement activés par l’entreprise). Ledetailcontient l’urlabsolue de la page de paiement. Cord l’ouvre déjà dans sa propre fenêtre (le paiement ne s’exécute jamais dans l’iframe) : ne faites pas naviguer votre page vers cette URL, utilisez-la uniquement pour votre analyse.cord:rejected: déclenché si le client marque explicitement la proposition comme déclinée. Ledetailinclut lecomentarioqu’il a laissé, le cas échéant.cord:message: se déclenche chaque fois que le client laisse un commentaire général ou une contre-proposition dans la discussion du devis.cord:item_comment: déclenché lorsque l’utilisateur laisse un commentaire sur une ligne précise (ligne de produit) du devis, avec l’item_idcorrespondant dans ledetail.
État
cord:updated: le devis a changé alors qu’il était ouvert (le commercial a modifié des lignes, des montants ou des conditions). Le devis s’est déjà redessiné de lui-même ; utilisez cet événement pour actualiser ce que votre page affiche autour.cord:status_changed: le statut a changé (sent,viewed,approved,rejected,paid,expired…). Ledetailcontient le nouveaustatus(etsaldopour la facture).cord:paid: uniquement sur<cord-invoice>: la facture a été soldée. Ledetailcontientfolio,monedaetsaldo.
cord:ready contient aussi status, moneda et total, pour que votre page puisse dessiner son propre récapitulatif sans autre appel.
Mode lecture seule
Si votre organisation n’a aucun domaine autorisé dans Paramètres › Générateur de devis intégrable, ou si la page hôte ne figure pas dans cette liste, le devis s’affiche en lecture seule : il ne propose ni d’approuver, ni de signer, ni de payer, ni d’écrire, et son bouton ouvre le lien public du devis dans un nouvel onglet. Dans ce mode, les événements arrivent sans detail : une page qui ne figure pas dans votre liste ne reçoit ni le signataire, ni les montants, ni l’URL de paiement.
Barre de débogage
Avec debug activé, Elements dessine sur votre site un panneau avec les événements de l’iframe, chaque requête à l’API avec son request_id et les avertissements de configuration (par exemple, les valeurs d’appearance que Cord a écartées).
<cord-quote token="a1b2c3d4e5f60718" debug></cord-quote>
<!-- ou avec embed.js -->
<div data-cord-token="a1b2c3d4e5f60718" data-cord-debug></div>
En React, <CordProvider debug>. Le panneau n’apparaît qu’avec une clé pk_test_ ; avec pk_live_, il se limite à un avertissement dans la console. Sans clé (Web Component ou embed.js), il n’apparaît que sur localhost ou si l’URL contient ?cord_debug=1, afin qu’un attribut oublié ne l’affiche jamais à vos clients.