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

# Analyse post-appel

> Évaluez automatiquement le sentiment et la réussite de chaque appel, et extrayez-en des données structurées

Une fois l'appel terminé, un **juge LLM** lit la transcription et l'évalue selon la configuration d'analyse de l'assistant. Il peut évaluer le sentiment de l'appelant, déterminer si l'appel remplit un critère de réussite, et extraire des champs structurés (un numéro de rappel, un identifiant de commande, une réponse oui/non). Le résultat est enregistré sur l'appel et disponible dans les filtres de l'historique, l'API publique et MCP.

## Ce que produit l'analyse

Pour chaque appel analysé, le juge rédige un résultat comprenant :

* **Sentiment** — `positive`, `neutral` ou `negative` (sentiment général de l'appelant).
* **Réussite** — `true` / `false` (ou `null` si l'évaluation de la réussite est désactivée), accompagné d'une courte **raison** expliquant le verdict.
* **Données** — une table associant chaque champ structuré défini à sa valeur, indexée par nom de champ.
* **Modèle** et **analyzed\_at** — quel modèle juge a été utilisé, et à quel moment.

Le sentiment et la réussite sont également stockés sous forme de **colonnes dénormalisées** sur l'appel, ce qui permet de filtrer rapidement de longues listes d'appels (dans la vue Historique et via `GET /calls?sentiment=&success=`).

<Note>
  L'analyse s'exécute **après** l'appel et n'a aucun impact sur la conversation en direct. Si le juge échoue ou renvoie un résultat inexploitable, l'appel reste intact : un événement d'appel `analysis_failed` est enregistré et rien n'est écrit dans l'analyse de l'appel.
</Note>

## Configurer un assistant

Ouvrez la carte **Analyse** de l'assistant et activez les éléments dont vous avez besoin. Tout est facultatif : une configuration vide signifie qu'aucune analyse n'est exécutée.

<Steps>
  <Step title="Sentiment">
    Activé par défaut. Désactivez-le si vous n'avez pas besoin du sentiment par appel.
  </Step>

  <Step title="Critère de réussite">
    Activez **Réussite** et décrivez, en langage simple, à quoi ressemble un appel réussi — par exemple *« L'appelant a pris rendez-vous »* ou *« L'appelant a confirmé son adresse de livraison »*. Le juge renvoie un booléen accompagné d'une raison.
  </Step>

  <Step title="Champs structurés">
    Ajoutez les champs à extraire. Chaque champ comprend un `name` (snake\_case, unique), un `type` (`string`, `number`, `boolean` ou `enum`), une `description` indiquant au juge quoi extraire (500 caractères max.), un indicateur `required` facultatif et, pour `enum`, une liste de `choices`.
  </Step>
</Steps>

### Exemple de configuration

```json theme={null}
{
  "sentiment": true,
  "success": {
    "enabled": true,
    "criteria": "The caller booked an appointment"
  },
  "fields": [
    { "name": "callback_number", "type": "string", "description": "Phone number the caller wants a callback on" },
    { "name": "appointment_day", "type": "enum", "description": "Requested weekday", "choices": ["mon", "tue", "wed", "thu", "fri"] },
    { "name": "is_existing_customer", "type": "boolean", "description": "Whether the caller is already a customer", "required": true }
  ]
}
```

Voici à quoi ressemble le `calls.analysis` obtenu :

```json theme={null}
{
  "sentiment": "positive",
  "success": true,
  "success_reason": "Caller agreed to a Tuesday appointment and gave a callback number.",
  "data": {
    "callback_number": "+493012345678",
    "appointment_day": "tue",
    "is_existing_customer": false
  },
  "model": "gpt-...",
  "analyzed_at": "2026-07-05T09:12:44Z"
}
```

## Exploiter les résultats

* **Filtres de l'historique** — filtrez la liste des appels par sentiment et réussite pour retrouver, par exemple, tous les appels négatifs qui n'ont *pas* abouti.
* **API publique** — chaque appel renvoyé par `GET /calls` et `GET /calls/{id}` inclut `analysis`, `sentiment` et `success`. Filtrez la liste avec `?sentiment=negative` et `?success=false`.
* **MCP** — ces mêmes champs d'appel sont exposés via les outils MCP `list_calls` / `get_call`.

## Configuration via l'API

`analysis_config` est un champ modifiable de l'assistant : vous pouvez donc le gérer par programmation :

```bash theme={null}
curl -X PATCH https://app.famulor.io/api/v1/assistants/{id} \
  -H "Authorization: Bearer fam_..." \
  -H "Content-Type: application/json" \
  -d '{
    "analysis_config": {
      "sentiment": true,
      "success": { "enabled": true, "criteria": "The caller booked an appointment" },
      "fields": [
        { "name": "callback_number", "type": "string", "description": "Callback number" }
      ]
    }
  }'
```

Consultez la [référence API](/api-reference/introduction) (`PATCH /assistants/{id}` et le schéma `AnalysisConfig`) pour le contrat de champs complet.
