> ## Documentation Index
> Fetch the complete documentation index at: https://docs.famulor.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Webhooks post-appel

> Recevez la transcription, la durée, les variables d'entrée et l'analyse post-appel par webhook après chaque appel.

Configurez une **URL de webhook au niveau de l'assistant** sur chaque assistant (**Settings → Automations → Call completed**). Après chaque appel, Famulor envoie une requête POST `call.completed` contenant :

* La transcription
* La durée
* Les variables d'entrée résolues
* L'analyse post-appel (et l'[AI QA scorecard](/fr/assistants/analysis#grilles-dévaluation-ai-qa) si activée)
* Des indications en cas d'échec, lorsqu'un appel sortant n'a pas abouti

L'objet facultatif `failure` explique ce qui s'est passé, si une nouvelle tentative pourrait aider, et quelle action entreprendre. Les mêmes indications destinées au client sont disponibles via les lectures d'appel REST et MCP.

## Paramètres du webhook

| Paramètre            | Plage     | Par défaut | Signification                                     |
| -------------------- | --------- | ---------- | ------------------------------------------------- |
| URL du webhook       | URL HTTPS | —          | Destination d'envoi pour cet assistant            |
| Délai d'expiration   | 1 à 30 s  | 5 s        | Temps d'attente maximal pour une réponse          |
| Nombre de tentatives | 0 à 5     | 2          | Tentatives supplémentaires après le premier échec |

Utilisez **Test** dans l'éditeur pour envoyer un exemple de payload vers une URL enregistrée ou non (cela respecte le curseur du délai d'expiration).

Cette URL n'est pas signée et reste propre à cet assistant. Famulor ne propose pas d'abonnement webhook à l'échelle de l'espace de travail — les résultats d'appel sont toujours livrés assistant par assistant.

## Exemple de payload webhook

Une livraison `call.completed` se présente ainsi :

```json theme={null}
{
  "event": "call.completed",
  "timestamp": "2026-08-26T14:32:07.000Z",
  "data": {
    "call_id": "c1b2c3d4-0000-4000-8000-000000000010",
    "tenant_id": "9f86d081-0000-4000-8000-000000000020",
    "assistant_id": "1b2c3d4e-0000-4000-8000-000000000030",
    "direction": "outbound",
    "status": "completed",
    "duration_sec": 132,
    "transcript": {
      "items": [
        { "type": "message", "role": "assistant", "content": ["Hi, this is Alex from Riverside Dental."] },
        { "type": "message", "role": "user", "content": ["Hi, yes, I have a moment."] }
      ]
    },
    "collected": { "appointment_time": "2026-09-02T10:00:00Z" },
    "variables": { "lead_quality": "high" },
    "input_variables": { "customer_name": "Max Mustermann" },
    "analysis": {
      "summary": "Customer confirmed interest and booked a demo.",
      "sentiment": "positive",
      "success": true,
      "success_reason": "Appointment booked"
    },
    "qa_scorecard": null
  }
}
```

`variables` et `input_variables` suivent les mêmes [variables d'appel](/fr/assistants/variables) utilisées ailleurs sur l'assistant. `analysis` et [`qa_scorecard`](/fr/assistants/analysis#grilles-dévaluation-ai-qa) ne sont renseignés qu'une fois le traitement post-appel terminé. Lorsqu'un appel sortant n'a pas abouti, un objet `failure` est ajouté à côté du résultat — voir ci-dessus.

## API et MCP

Utilisez `PATCH /api/v1/assistants/{id}` ou l'outil MCP `update_assistant`. La livraison peut être désactivée, passer par l'URL du webhook de l'assistant, ou par une [automatisation liée](/fr/automations/overview). Consultez le schéma de l'API pour le contrat de champs actuel.
