Le système Coremetrix peut notifier votre backend lors de certains événements, en utilisant des webhooks. Vous pouvez vous abonner aux événements en temps réel via les webhooks Coremetrix. Les webhooks peuvent être gérés via l'API des abonnements.
Cette API peut être utilisée pour vous abonner à divers événements du cycle de vie du quiz.
Comment cela fonctionne :
Actuellement, nous prenons en charge les abonnements aux événements suivants:
event_name | description |
---|---|
quiz_consent | Déclenché lorsque l'utilisateur a accepté le traitement de ses données personnelles le concernant |
quiz_consent_withdrawal | Déclenché lorsque l'utilisateur a retiré son consentement au traitement de ses données personnelles le concernant |
landing_load | Déclenché lorsqu'un utilisateur charge la page de destination d'un quiz (si une page de destination est configurée) |
quiz_load | Déclenché lorsque l'utilisateur charge la première page du quiz |
quiz_start | Déclenché lorsque l'utilisateur a commencé le quiz (la première question du quiz a été soumise) |
quiz_complete | Déclenché lorsque l'utilisateur a terminé le quiz (la dernière question du quiz a été soumise) |
attempt_scored | Déclenché lorsqu'une tentative a été notée (ou signalée) |
attempt_profiled | Déclenché lorsqu'une tentative a été profilée (ou signalée) |
Remarque : La liste complète des événements auxquels vous pouvez vous abonner peut être trouvée en appelant l'endpoint/subscriptions/events
endpoint:
Lors de la création d'un abonnement via l'API des abonnements, vous devez fournir une URL. Lorsque l'un des événements décrits ci-dessus se produit, Coremetrix POSTera les données correspondantes à l'URL fournie. Votre API doit être capable de consommer la charge utile suivante :
{
}
"event": "quiz_consent", "consentTime": "2020-01-31T13:14:35.208Z", "lastUpdated": "2020-01-31T13:14:35.208Z", "slug": "sandbox", "puid": "a_puid", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "consent": true
Remarque : les lastUpdated et consentTime sont au format ISO8601
{
}
"event": "quiz_consent_withdrawal", "withdrawalTime": "2020-01-31T13:25:02.786Z", "lastUpdated": "2020-01-31T13:25:02.786Z", "slug": "sandbox", "puid": "a_puid", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "consent": false
Remarque : les lastUpdated et consentTime sont au format ISO8601
{
}
"attemptId": "0012ba6f-f8a2-493a-b32d-7cda370af477", "event": "landing_load", "puid": "test-70b8f195-8d75-4177-b094-4e0ac7472e", "quizId": "511c77c5-f6a3-48fd-a136-93f18d47116a", "timestamp": 1727174639100
Remarque : le puid est facultatif et le timestamp est en millisecondes Epoch
{
}
"event": "quiz_load", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "timestamp": 1562161162000
Remarque : le puid est facultatif et le timestamp est en millisecondes Epoch
{
}
"event": "quiz_start", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "timestamp": 1562161162000
Remarque : le puid est facultatif et le timestamp est en millisecondes Epoch
{
}
"event": "quiz_complete", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "timestamp": 1562161162000
Remarque : le puid est facultatif et le timestamp est en millisecondes Epoch
{
}
"event": "attempt_scored", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "age": "age", "gender": "gender", "maritalStatus": "maritalStatus", "occupation": "occupation", "accommodation": "accommodation", "education": "education", "scores": [],
{}
"value": 203.04200292294007, "model": "generic_model" "flags": [ ], "status": "COMPLETED_SCORED"
- le puid est facultatif
- l' age, gender, maritalStatus, occupation,
accommodation et education sont également facultatifs car certains questionnaires peuvent ne pas comporter de questions démographiques
status | description |
---|---|
COMPLETED_SCORED | Le quiz a été complété, attendez les profils présents. |
COMPLETED_PARTIALLY_SCORED | Le quiz a été complété, attendez les profils et les drapeaux présents. |
COMPLETED_NOT_SCORED | Impossible de noter le quiz, raisons possibles : le quiz a été répondu trop rapidement (aucun profil ne sera généré et un drapeau FAST_CLICK sera présent à la place), aucun modèle de profil n'a été configuré / activé. |
{
}
"event": "attempt_profiled", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "age": "age", "gender": "gender", "maritalStatus": "maritalStatus", "occupation": "occupation", "accommodation": "accommodation", "education": "education", "profiles": {},
"basic_profile": {}
"value": "HIGH", "scale": []
"LOW", "MEDIUM", "HIGH" "profileFlags": { }, "status": "COMPLETED_SCORED"
{
}
"event": "attempt_profiled", "attemptId": "4d1c90d4-f1fe-4303-ad83-535d99a61cf5", "quizId": "481ac0fe-ac33-402a-9367-2aaa7a98b49d", "puid": "a_puid", "age": "age", "gender": "gender", "maritalStatus": "maritalStatus", "occupation": "occupation", "accommodation": "accommodation", "education": "education", "profiles": { }, "profileFlags": {},
"basic_profile": {}
"flag": []
"FAST_CLICK" "status": "COMPLETED_NOT_SCORED"
- le puid est facultatif
- l' age, gender, maritalStatus, occupation,
accommodation et education sont également facultatifs car certains questionnaires peuvent ne pas comporter de questions démographiques
status | description |
---|---|
COMPLETED_SCORED | Le quiz a été complété, attendez les profils présents. |
COMPLETED_PARTIALLY_SCORED | Le quiz a été complété, attendez les profils et les drapeaux présents. |
COMPLETED_NOT_SCORED | Impossible de noter le quiz, raisons possibles : le quiz a été répondu trop rapidement (aucun profil ne sera généré et un drapeau FAST_CLICK sera présent à la place), aucun modèle de profil n'a été configuré / activé. |
Coremetrix utilise le chiffrement pour toutes les transmissions de données. L'API des abonnements n'acceptera que le protocole https. Cela est destiné à protéger la communication entre le système Coremetrix et votre backend. Vous devrez activer TLS sur votre serveur et configurer l'URL d'abonnement pour utiliser https.
Coremetrix prend en charge l'authentification http de base afin de permettre à votre backend de sécuriser l'URL du souscripteur. Cela garantira que seul Coremetrix pourra poster des données sur votre serveur.
L'API des abonnements vous permettra de créer une URL de souscripteur selon le format suivant : https://username:password@my_server.com/my_secure_path
Remarque : username and password should not contain any :
or @
symbols.
OAuth 2.0 est une norme ouverte pour l'autorisation sur Internet. Coremetrix prend en charge l'autorisation OAuth 2.0 afin de permettre à notre backend d'avoir un accès limité à votre point de terminaison webhook.
OAuth 2.0 nécessite un jeton d'authentification, qui est émis par un serveur d'autorisation.
Pour accorder à Coremetrix l'accès pour poster des données à votre point de terminaison webhook, vous devez d'abord configurer vos abonnements en utilisant l'API des abonnements.
Pour chaque abonnement, vous devez également fournir la configuration suivante :
Champ | Requis | Description |
---|---|---|
Token URL | Yes | L'URL de point de terminaison API pour demander un jeton d'accès (seulement https est autorisé). Remarque : Conformément à RFC 6749, l'URL du jeton doit accepter un type de contenu de x-www-form-urlencoded. |
Client id | Yes | L'identifiant client de l'application Web. |
Client secret | Yes | Le secret client de l'application Web. |
Scope | No | Portée des autorisations à demander. |
Audience | No | L'audience est le destinataire prévu du jeton. L'URI de l'audience DOIT être un URI absolu tel que défini par la Section 4.3 de [RFC3986] |
Grant type | No | Type de subvention. |
Remarque : Ces paramètres seront ajoutés en utilisant le format application/x-www-form-urlencoded avec un encodage de caractères UTF-8 dans le corps de la requête HTTP.
Vous pouvez trouver tous les détails ici.
Ces paramètres seront ajoutés en utilisant le format application/x-www-form-urlencoded avec un encodage de caractères UTF-8 dans le corps de la requête HTTP.
Vous pouvez trouver tous les détails ici.
Comment cela fonctionne :
OAuth 2.0 spécifie plusieurs flux pour obtenir et valider les jetons. Coremetrix prend en charge le flux des crédits client, où la communication est strictement de serveur à serveur. Aucun jeton de rafraîchissement n'est émis dans ce flux, car le client peut récupérer un nouveau jeton d'accès en utilisant ses informations d'identification de toute façon.
Lorsqu'un événement se produit, si OAuth 2.0 est configuré :
Jetons Web JSON vous permettent de vérifier que les données envoyées à votre serveur n'ont pas été altérées et qu'elles proviennent réellement de Coremetrix.
Comment cela fonctionne :
jti
réclamation), l'heure de création (iat
réclamation) et une heure d'expiration (exp
réclamation) dans la charge utile du JWT. L'heure d'expiration est actuellement définie à 60 secondes.X-Coremetrix-Signature
lors de l'envoi de données à votre serveur.Validation du JWT :
Vous devrez valider le JWT pour vérifier son authenticité. Vous pouvez le faire en vérifiant sa signature numérique et ses revendications. Il existe diverses bibliothèques pour vous aider à le faire. Par exemple, vous pouvez utiliser la jjwt pour Java.
Coremetrix retentera l'envoi des événements en cas d'erreur. En plus des nouvelles tentatives, Coremetrix met en œuvre l'algorithme d'atténuation exponentielle pour obtenir un meilleur contrôle du flux. En cas d'erreur renvoyée par votre serveur lors de la tentative de livraison des événements, le système Coremetrix retentera après un certain temps. Le temps d'attente augmentera de manière incrémentielle entre chaque demande de nouvelle tentative après chaque échec. Cela donnera à votre service suffisamment de temps pour récupérer
Cependant, dans certains scénarios, comme une interruption prolongée du côté de Coremetrix ou du côté de l'abonné, les événements peuvent ne pas être transmis via des webhooks via le mécanisme de nouvelle tentative. Pour résoudre ce problème, Coremetrix fournit un mécanisme de relecture d'événements qui vous permet de demander manuellement la relecture d'événements passés. Cela garantit qu'aucune donnée critique n'est perdue en raison de pannes temporaires. Vous trouverez plus d'informations sur l'utilisation de cette fonctionnalité dans le API de relecture.
Veuillez noter que pour protéger nos systèmes et garantir une utilisation équitable, ce point de terminaison de relecture est limité. Si trop de demandes de relecture sont effectuées sur une courte période, les demandes peuvent être retardées ou rejetées. Nous vous recommandons d'utiliser cette fonctionnalité judicieusement et d'implémenter votre propre logique de nouvelle tentative lorsque cela est possible.