Recevoir les résultats
Omogen appelle votre URL de réception (réglée dans la section Webhooks de l'intégration) avec ces événements. Répondez un statut 2xx : le corps de votre réponse est ignoré.
| Événement | Quand | Actif |
|---|---|---|
report_generated | Fin du processus d'entretien | Toujours |
process_rejected | Candidature écartée avant tout entretien | Toujours |
call_booked | Le candidat réserve un créneau | Option Notifier les prises de rendez-vous |
test | Vous cliquez sur Envoyer un webhook de test | À la demande |
report_generated
Les champs qui comptent
| Champ | Valeurs | À quoi il sert |
|---|---|---|
external_application_id | votre ID | Retrouver la candidature chez vous |
process.status | completed, incomplete, failed, expired, canceled | Savoir si l'entretien a eu lieu |
reports.interview_report.status | match, no_match, na | La décision |
reports.interview_report.overall_score | de 0 à 1 | Le score (0.83 = 83 %) |
report_url | URL | Ouvrir le rapport complet dans Omogen |
Ne décidez jamais sur summary
summary est une synthèse rédigée pour un humain : sa formulation change sans préavis. Seuls status et overall_score ont un contrat stable.
Quand il est envoyé
process.status | Rapport d'entretien | Cas |
|---|---|---|
completed | complet | Entretien mené, tous les critères évalués |
incomplete | partiel | Entretien mené, certains critères manquent |
failed | null | Candidat injoignable, raccroché trop tôt, erreur technique |
expired | null | Délai dépassé sans entretien |
canceled | null | Processus annulé dans Omogen |
Si le CV ne correspond pas (cv_report.match_result: "no_match"), le processus s'arrête en completed sans entretien. Un candidat peut aussi rappeler après un état final : un nouveau report_generated suit. Gardez toujours le dernier reçu pour un process.id.
Exemple complet
{
"event_type": "report_generated",
"timestamp": "2026-08-27T10:15:00Z",
"process": {
"id": "9b6e81e0-5736-4106-ba8b-86df6a43b663",
"status": "completed",
"failure_reason": null, // { "code", "message" } si failed
"use_case": "prequalification",
"created_at": "2026-08-27T09:00:00Z"
},
"external_application_id": "APP-456",
"external_candidate_id": "CAND-789",
"external_job_id": null,
"job_title": "Aide-soignant(e) de nuit",
"reports": {
"interview_report": {
"status": "match",
"overall_score": 0.83,
"report_status": "completed",
"is_complete": true,
"summary": "Texte libre, pour lecture humaine",
"evaluations": [
{ "criteria_name": "Expérience en EHPAD", "value": "5 ans",
"is_mentioned": true, "is_satisfied": true, "is_knockout": false }
],
"data_points": [
{ "criteria_name": "Disponibilité", "value": "immédiate", "is_mentioned": true }
]
},
"cv_report": { "status": "completed", "match_result": "match", "overall_score": 0.71 }
},
"appointment": null,
"tags": [],
"consent": { "status": "valid" },
"report_url": "https://app.omogen.ai/report/9b6e81e0-5736-4106-ba8b-86df6a43b663",
"calls": null
}Le schéma complet est dans la Référence.
tags, failure_reason, consent
tags | Signification |
|---|---|
early_hang_up | Raccroché avant toute information utile |
prefers_recruiter | Demande à parler à un recruteur |
not_interested | Pas intéressé par le poste |
not_available | Pas disponible pour l'appel |
to_review | Conversation incohérente, à vérifier |
failure_reason.code | Signification |
|---|---|
all_attempts_failed | Aucune tentative d'appel n'a abouti |
early_hang_up | Raccroché trop tôt |
cv_required | CV requis mais absent |
cv_screening_failed | Échec technique du screening CV |
cv_requirements_not_configured | Aucun critère CV sur l'offre |
technical_error | Erreur technique interne |
consent.status : valid (accepté), invalid (refusé), not_collected (pas de réponse explicite). consent vaut null sans étape de consentement.
Transcription et enregistrement
Avec l'option Joindre transcription et enregistrement, calls liste chaque appel du processus :
| Champ | Contenu |
|---|---|
started_at | Début de l'appel, null s'il n'a jamais démarré |
status | completed, failed… |
duration_ms | Durée en millisecondes |
transcript | Une ligne par tour de parole : AI: pour l'agent, User: pour le candidat |
recording_url | Lien de l'enregistrement audio, ou null |
Option désactivée : calls vaut null.
process_rejected
La candidature est écartée avant tout entretien (candidat déjà en cours, triage sans offre correspondante…). Même enveloppe que report_generated, avec process.status: "rejected" et un champ rejection_reason.
call_booked
Le candidat a réservé un créneau depuis son invitation. Envoyé à l'URL des rendez-vous si elle est renseignée, sinon à l'URL de réception.
Livraison
| Règle | Valeur |
|---|---|
| Méthode | PUT par défaut, POST au choix |
| Délai de réponse | 30 secondes |
Échec (pas de 2xx) | 3 nouvelles tentatives, à 20 minutes d'intervalle |
| URL injoignable | Les adresses de Alerter en cas d'échec d'envoi sont prévenues |
Authentification
Par défaut, Omogen ajoute à chaque appel les en-têtes HTTP réglés dans l'intégration, typiquement votre x-api-key.
Votre URL exige OAuth 2.0
Choisissez l'authentification OAuth 2.0 (client credentials), puis renseignez l'URL du jeton, le client ID et le secret (scope et audience si votre fournisseur les exige).
Omogen demande un jeton à votre URL de jeton :
httpPOST <URL du jeton> Content-Type: application/x-www-form-urlencoded grant_type=client_credentials&client_id=…&client_secret=…Il l'envoie en
Authorization: Bearer <jeton>sur chaque appel, en plus de vos en-têtes.Il le garde jusqu'à une minute avant son expiration (
expires_in).Sur un
401ou403, il redemande un jeton et réessaie une fois.
Si votre URL filtre les adresses IP, demandez au support la liste des IP d'Omogen.