Un webhook permet à une application d’envoyer automatiquement des informations à une autre lorsqu’un événement se produit.
Avec Kavkom, les événements téléphoniques que vous sélectionnez sont transmis vers l’URL de votre choix à l’aide de requêtes HTTP POST. Le format du corps dépend de l’événement : le POST de transcription est notamment envoyé en application/x-www-form-urlencoded, avec une valeur contenant du JSON.
Vous pouvez notamment recevoir des informations :
- pendant un appel entrant ;
- pendant un appel sortant ;
- après la fin d’un appel grâce au CDR (Call Detail Record).
Exemples d’utilisation
Activités d’appels
Transmettez les informations relatives aux appels entrants, sortants ou terminés vers votre CRM ou votre application métier.
Suivi d’un appel en direct
Recevez les changements d’état d’un appel pendant son déroulement et utilisez-les dans vos interfaces ou automatisations.
Appels non aboutis
Exploitez le résultat final d’un appel pour créer une tâche, générer une alerte ou déclencher une relance dans un outil externe.
Enregistrements d’appels
Lorsqu’un enregistrement est disponible, son URL peut être transmise dans le CDR à l’aide du champ recording_url.
Transcriptions d’appels
Lorsqu’une transcription est disponible, recevez son texte dans un POST distinct et associez-le à l’appel grâce à l’identifiant du CDR.
Statistiques et reporting
Envoyez les données des appels terminés vers vos outils d’analyse, vos tableaux de bord ou vos solutions de Business Intelligence.
Automatisations métiers
Déclenchez vos propres workflows à partir des événements et données d’appels reçus depuis Kavkom.
Configurer un webhook Kavkom
Avant de commencer, assurez-vous de disposer d’un endpoint capable :
- de recevoir des requêtes HTTP POST ;
- de traiter le contenu selon son
Content-Type, notamment les données JSON lorsqu’elles sont envoyées sous ce format et le formulaire application/x-www-form-urlencoded pour la transcription ; - de retourner une réponse HTTP.
Connectez-vous à Kavkom avec un compte disposant des autorisations nécessaires, puis rendez-vous dans :
La fenêtre de configuration regroupe les six zones présentées ci-dessous.
1. Indiquer l’Endpoint
Dans le champ Endpoint, saisissez l’URL vers laquelle Kavkom doit envoyer les requêtes.
https://example.com/webhooks/kavkom
Tester l’Endpoint
Après avoir renseigné l’adresse, cliquez sur le bouton Test.
Kavkom envoie alors une requête vide vers l’endpoint et attend une réponse du serveur destinataire.
Il permet de vérifier que le serveur destinataire est joignable avant d’activer l’envoi des événements téléphoniques.
2. Configurer les Headers
La section Headers permet d’ajouter des informations aux en-têtes HTTP envoyés avec les requêtes.
Chaque header est constitué d’une paire Key / Value. Ils peuvent notamment servir à transmettre les informations nécessaires à l’authentification de votre endpoint.
Key: Authorization
Value: Bearer votre_token
3. Ajouter des Variables
La section Variables permet d’ajouter des paramètres personnalisés sous forme de paires Key / Value.
Ces variables peuvent servir à transmettre des informations complémentaires propres à votre intégration, par exemple un identifiant d’environnement, de compte ou de traitement.
4. Choisir les appels à transmettre
Dans la section What calls should be pushed?, sélectionnez les catégories d’événements que Kavkom doit envoyer vers votre endpoint.
Vous pouvez activer plusieurs catégories simultanément.
5. Configurer le mapping des données
Kavkom propose deux mappings indépendants :
- Mapping for life calls pour les appels en direct ;
- Mapping for CDR pour les appels terminés.
Si vous configurez un mapping, vous pouvez associer une clé de votre choix au champ Kavkom attendu par votre application.
Mapping for life calls
Ce mapping concerne les événements des appels entrants et sortants en direct.
Mapping for CDR
Ce mapping concerne les données finales envoyées après la fin de l’appel.
Données disponibles pour les appels en direct
| Champ | Description |
|---|---|
domain_uuid | Identifiant du domaine Kavkom. |
callId | Identifiant de l’appel en cours. |
number | Numéro associé à l’événement d’appel. |
extension | Extension concernée par l’appel. |
direction | Direction de l’appel. |
state | État de l’appel au moment où l’événement est envoyé. |
À quoi sert le champ state ?
Le champ state permet à votre application de suivre l’évolution d’un appel et d’adapter son traitement selon les événements reçus.
Données disponibles pour les appels terminés
Le Mapping for CDR permet d’exploiter les informations disponibles après la fin d’un appel.
| Champ | Description |
|---|---|
xml_cdr_uuid | Identifiant unique du CDR. |
domain_name | Domaine associé à l’appel. |
direction | Direction de l’appel. |
status | Statut final de l’appel. |
duration | Durée totale de l’appel. |
billsec | Durée de communication comptabilisée. |
outside_number | Numéro externe associé à l’appel. |
destination_number | Numéro de destination. |
referenced_did | DID référencé pour l’appel. |
referenced_extension | Extension référencée pour l’appel. |
caller_id_number | Numéro utilisé comme identifiant de l’appelant. |
caller_destination | Destination associée à l’appel. |
start_epoch | Heure de début au format Epoch. |
start_stamp | Date et heure de début. |
end_epoch | Heure de fin au format Epoch. |
end_stamp | Date et heure de fin. |
answer_stamp | Date et heure de réponse. |
answer_epoch | Heure de réponse au format Epoch. |
recording_url | URL de l’enregistrement lorsque celui-ci est disponible. |
Recevoir la transcription d’un appel
Lorsqu’une transcription est disponible, Kavkom peut envoyer le texte de l’appel dans une requête HTTP POST distincte de celle du CDR. Cette requête contient deux paramètres principaux : cdr_uuid et transcription_data.
Content-Type: application/x-www-form-urlencoded. Le corps de la requête n’est pas un objet JSON brut : il contient des paramètres de formulaire encodés dans l’URL, dont une valeur renferme du JSON.
Structure du corps HTTP
Voici un exemple simplifié de requête, avec un identifiant et une transcription fictifs :
POST /votre-endpoint HTTP/1.1
Content-Type: application/x-www-form-urlencoded
cdr_uuid=927ec63d-1fa1-4b83-a548-907d612b5842&transcription_data=%5B%7B%22transcript%22%3A%22Bonjour%2C+je+souhaite+une+information.%22%7D%5D
| Élément | Description |
|---|---|
cdr_uuid | Identifiant du CDR associé à l’appel. Sa valeur correspond à celle de xml_cdr_uuid dans le POST du CDR. |
transcription_data | Paramètre de formulaire contenant une chaîne JSON encodée, qui représente un tableau d’objets de transcription. |
transcript | Propriété présente dans un objet du tableau transcription_data ; sa valeur contient le texte transcrit. |
& | Sépare les paramètres du formulaire dans le corps HTTP. |
%5B, %7B, %22 | Exemples de caractères encodés : [, { et les guillemets ". |
+ | Représente un espace dans une valeur de formulaire encodée. |
Comment interpréter les données reçues ?
- Lire le corps comme un formulaire
application/x-www-form-urlencodedpour retrouver les valeurs decdr_uuidettranscription_data. - Décoder la valeur de
transcription_data(son encodage de formulaire, puis le JSON qu’elle contient) afin d’obtenir un tableau d’objets. - Lire la propriété
transcriptdes objets de ce tableau pour accéder au texte de transcription. - Rapprocher la valeur de
cdr_uuidavecxml_cdr_uuidpour associer la transcription au bon appel.
Après décodage, les mêmes données peuvent être représentées ainsi dans votre application. Ce bloc est une représentation logique ; il ne correspond pas au corps HTTP brut envoyé par Kavkom :
{
"cdr_uuid": "927ec63d-1fa1-4b83-a548-907d612b5842",
"transcription_data": [
{
"transcript": "Bonjour, je souhaite une information."
}
]
}
\u00e9. Elles deviennent des caractères lisibles (ici é) après l’analyse du JSON. Le décodage du formulaire seul ne suffit pas pour exploiter directement cette valeur structurée.
Associer la transcription au CDR
Deux noms de champs différents désignent ici le même identifiant d’appel :
xml_cdr_uuidcdr_uuidcdr_uuid reçue avec la transcription correspond à la valeur de xml_cdr_uuid reçue avec le CDR. Votre application peut ainsi rattacher la transcription à la bonne fiche d’appel ou activité CRM.Exemple de traitement en JavaScript
Une fois le corps HTTP brut récupéré par votre serveur, vous pouvez le décoder comme suit :
// rawBody : contenu brut de la requête HTTP POST
const params = new URLSearchParams(rawBody);
const cdrUuid = params.get("cdr_uuid");
const transcription = JSON.parse(params.get("transcription_data") || "[]");
// Chaque élément peut contenir une propriété "transcript".
const textes = transcription.map(item => item.transcript);
// Rattacher l'ensemble à un CDR dont xml_cdr_uuid === cdrUuid.
Le décodage d’un formulaire est généralement effectué par le framework backend ; dans ce cas, analysez directement la chaîne reçue dans le paramètre transcription_data comme du JSON, sans la décoder deux fois.
Une transcription peut contenir des informations confidentielles ou personnelles. Protégez l’accès à ces données et appliquez les règles de conservation et d’accès adaptées.
Enregistrement d’appel
Lorsqu’un appel a été enregistré et qu’une URL est disponible, elle peut être transmise à votre application dans le champ :
recording_url
Kavkom transmet uniquement l’URL de l’enregistrement.
Votre application peut ensuite décider comment exploiter cette URL : l’associer à une activité CRM, l’utiliser dans une application métier, déclencher un traitement externe ou l’intégrer à votre propre processus d’archivage.
Appels en direct et CDR : quelle différence ?
| Appels en direct | CDR |
|---|---|
| Envoyés pendant le déroulement de l’appel. | Envoyé après la fin de l’appel. |
| Décrivent l’état courant de l’appel. | Contient les informations finales disponibles. |
| Permettent de suivre l’évolution de l’appel. | Permet d’exploiter le résultat de l’appel. |
callId, extension, direction, state… | status, duration, billsec, horodatages, recording_url… |
Exemple d’utilisation avec un CRM
- Un appel entrant est reçu sur Kavkom.
- Kavkom envoie un événement vers votre endpoint.
- Votre application récupère le numéro et les informations disponibles.
- Le CRM peut rechercher le contact correspondant et créer ou mettre à jour une activité.
- Les événements suivants permettent de suivre l’évolution de l’appel.
- Lorsque l’appel se termine, Kavkom envoie le CDR.
- Votre application peut enregistrer le statut, la durée et les autres informations finales disponibles.
- Si un enregistrement existe, son URL peut être associée à l’activité.
- Lorsqu’une transcription est reçue, le CRM peut la rattacher à cette même activité grâce à
cdr_uuidetxml_cdr_uuid.
Bonnes pratiques
Utilisez HTTPS
Utilisez de préférence un endpoint HTTPS pour sécuriser les échanges entre Kavkom et votre serveur.
Authentifiez votre endpoint
Utilisez les headers pour transmettre les informations nécessaires à l’authentification.
Validez les données reçues
Vérifiez les valeurs reçues avant de les transmettre à vos systèmes métiers.
Prévoyez les champs vides
Certaines informations peuvent ne pas être renseignées selon le scénario d’appel.
Conservez les identifiants
Les identifiants d’appels facilitent la corrélation des événements et les diagnostics.
Répondez rapidement
Votre serveur doit retourner une réponse HTTP lorsque le webhook a correctement été reçu.
À retenir
Les webhooks Kavkom permettent de connecter les événements de votre téléphonie à vos applications externes sans avoir à interroger continuellement le système.
- événements des appels entrants en direct ;
- événements des appels sortants en direct ;
- CDR des appels terminés ;
- URL d’un enregistrement lorsqu’elle est disponible.
- le texte de la transcription lorsqu’il est disponible, avec un identifiant permettant de le rapprocher du CDR.
Le mapping permet ensuite de sélectionner et d’adapter les données transmises aux besoins de votre CRM, de votre logiciel métier ou de votre application.