# Implémenter les webhooks Jobpass pour une actualisation des données candidats en temps réel
Les webhooks vous permettront de recevoir des mises à jour en temps réel des profils de vos candidats.
# Signature des Webhooks
Jobpass signe tous les événements de Webhook qu'il envoie à vos endpoints en incluant un header Jobpass-Signature dans l'en-tête HTTP de chaque événement. Cela vous permet de vérifier que les événements ont été envoyés par Jobpass et non par un tiers.
Avant de pouvoir vérifier les signatures, vous devez récupérer la clé secrète de votre endpoint dans les paramètres Webhooks de votre Dashboard. Pour ce faire, suivez ces étapes :
- Rendez-vous sur votre dashboard d'administration et cliquez sur l'onglet "API".
- Cherchez le formulaire des Webhooks, où vous serez invité à saisir l'URL sur laquelle vous souhaitez recevoir nos événements.
- Après avoir enregistré votre URL, une clé secrète sera générée et vous sera transmise. Note : Si vous mettez à jour votre URL, une nouvelle clé sera générée.
# Vérification de la signature
Pour vérifier que la signature est correcte, suivez ces étapes :
- Récupérez la valeur de l'en-tête HTTP Jobpass-Signature de l'événement reçu.
- Encryptez le payload reçu via l'algorithme HMAC en utilisant la fonction de hachage SHA-512 en mode binaire et non en mode hexadécimal, avec comme clé secrète la clé générée au moment du Webhook.
- Ensuite, encodez le résultat obtenu en base64 sans padding.
- Comparez le résultat obtenu avec la valeur de l'en-tête Jobpass-Signature.
Si les deux valeurs correspondent, cela signifie que l'événement a été envoyé par Jobpass et n'a pas été altéré en transit, ce qui garantit l'authenticité et l'intégrité des données.
# Exemple de payload de requête
Voici un exemple de payload de requête que vous recevrez lorsque vous implémenterez nos webhooks :
{
"meta": {
"version": "1.0.0",
"action": "update",
"object": "jobprofile",
"timestamp": "2023-07-10T08:45:53.832324718Z",
"webhook_id": "xxxxxxxxxxxxxxxxxx"
},
"data": {
"Id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"WorkAvailability": false,
"WorkSearchingStatus": "UNAVAILABLE",
"JobProfileId": null
}
}
Le champ meta
reste constant et fournit des informations sur les données contenues dans le champ data
.
Le champ meta.object
spécifie le type d'objet concerné par le webhook courant.
Le champ meta.action
indique l'action effectuée, qui peut être "add" (ajout), "update" (mise à jour) ou "delete" (suppression). Selon l'action, le contenu du payload peut varier. Dans cet exemple, nous avons une action "update" avec des informations sur le JobProfile.
# Objets de l'API
# User
L'objet User
représente l'utilisateur du service.
# Propriétés de l'objet User
Id
(string): L'identifiant unique de l'utilisateur.WorkAvailability
(bool): Disponibilité de l'utilisateur pour travailler (optionnel).WorkSearchingStatus
(WorkSearchingStatus): Statut de recherche d'emploi de l'utilisateur (optionnel).WorkSearchingJobs
([]*OccupationMapper): Liste des emplois recherchés par l'utilisateur (optionnelle).WorkSearchingContracts
([]*ContractType): Liste des types de contrat recherchés par l'utilisateur (optionnelle).WorkLocalityPreferences
([]*Address): Liste des préférences de localité de travail de l'utilisateur (optionnelle).RemotePreference
(*WorkingRemotePreference): Préférence de travail à distance de l'utilisateur (optionnelle).JobProfileId
(*string): L'identifiant du JobProfile associé à l'utilisateur (optionnel).
# JobProfile
L'objet JobProfile
représente le CV connecté de l'utilisateur.
# Propriétés de l'objet JobProfile
Id
(string): L'identifiant unique du JobProfile.OrganisationName
(string): Le nom de l'organisation associée au JobProfile.Name
(string): Le nom du JobProfile.Description
(*string): La description du JobProfile (optionnelle).Address
(Address): L'adresse associée au JobProfile (optionnelle).Delivered
(time.Time): La date de création ou de mise à jour du JobProfile.UserId
(string): L'identifiant de l'utilisateur associé au JobProfile.JobProfileId
(string): L'identifiant du JobProfile.
# Experience
L'objet Experience
représente l'expérience professionnelle d'un utilisateur.
# Propriétés de l'objet Experience
Id
(string): L'identifiant unique de l'expérience.JobName
(string): Le nom du poste (optionnel).OrganisationName
(string): Le nom de l'organisation associée à l'expérience (optionnel).Description
(*string): La description de l'expérience (optionnelle).Address
(Address): L'adresse associée à l'expérience (optionnelle).ContractType
(ContractType): Le type de contrat (optionnel).Start
(time.Time): La date de début de l'expérience (optionnelle).End
(*time.Time): La date de fin de l'expérience (optionnelle).UserId
(string): L'identifiant de l'utilisateur associé à l'expérience (optionnel).JobProfileId
(string): L'identifiant du JobProfile associé à l'expérience (optionnel).
# Formation
L'objet Formation
représente la formation d'un utilisateur.
# Propriétés de l'objet Formation
Id
(string): L'identifiant unique de la formation.OrganisationName
(string): Le nom de l'organisation associée à la formation.Name
(string): Le nom de la formation.Description
(*string): La description de la formation (optionnelle).Address
(Address): L'adresse associée à la formation (optionnelle).Delivered
(time.Time): La date de délivrance de la formation.UserId
(string): L'identifiant de l'utilisateur associé à la formation.JobProfileId
(string): L'identifiant du JobProfile associé à la formation.
# ContractType
LIBERAL
: Contrat libéral.PERMANENT_CONTRACT
: Contrat à durée indéterminée.FIXED_TERM_CONTRACT
: Contrat à durée déterminée.TEMPORARY_WORK
: Travail temporaire.APPRENTICESHIP
: Apprentissage.INTERNSHIP
: Stage.EDUCATION
: Formation.VOLUNTARY
: Volontariat.
# OccupationMapper
Le type OccupationMapper
est utilisé pour mapper une occupation à un référentiel spécifique.
# Propriétés de l'objet OccupationMapper
Rome
(*OccupationDirectory): Représente une correspondance avec le Répertoire opérationnel des métiers et des emplois (ROME).Name
(*string): Utilisé lorsque l'utilisateur a saisi une occupation qui n'a pas pu être mappée à un référentiel existant. Dans ce cas, seul le champName
sera rempli.
# OccupationDirectory
Le type OccupationDirectory
représente une correspondance avec un répertoire d'occupations spécifique.
# Propriétés de l'objet OccupationDirectory
RomeCode
(string): Code français standardisant les emplois, basé sur le Répertoire opérationnel des métiers et des emplois (ROME). En savoir plus (opens new window)RomeName
(string): Nom officiel français de l'emploi basé sur le Répertoire opérationnel des métiers et des emplois (ROME).IscoCode
(string): Code européen standardisant les emplois, basé sur la Classification internationale type des professions (CITP). En savoir plus (opens new window)IscoName
(string): Nom officiel européen de l'emploi basé sur la Classification internationale type des professions (CITP).
# Address
Le type Address
représente une adresse.
# Propriétés de l'objet Address
Address
(string): L'adresse complète.Road
(string): La rue (optionnelle).Country
(string): Le pays (optionnel).City
(string): La ville (optionnelle).PostalCode
(string): Le code postal (optionnel).
# WorkingRemotePreference
Le type WorkingRemotePreference
représente la préférence de travail à distance de l'utilisateur.
# Valeurs possibles de WorkingRemotePreference
WorkingRemotePreferenceFullRemote
: Travail à distance à temps plein.WorkingRemotePreferencePartialRemote
: Travail à distance à temps partiel.WorkingRemotePreferenceNoRemote
: Aucun travail à distance.WorkingRemotePreferenceAny
: N'importe quelle préférence de travail à distance.
# WorkSearchingStatus
Le type WorkSearchingStatus
représente le statut de recherche d'emploi de l'utilisateur.
# Valeurs possibles de WorkSearchingStatus
WorkSearchingStatusActivelySearching
: Recherche active d'emploi.WorkSearchingStatusListeningToOpportunities
: Écoute des opportunités.WorkSearchingStatusUnavailable
: Indisponible pour la recherche d'emploi.
Veuillez noter que lorsque les champs sont marqués comme optionnels, cela signifie qu'ils peuvent être vides lors de l'envoi.