Appels

Chaque interaction vocale sur Manivox.ai est un appel. Les appels sont soit entrants (un appelant compose votre numéro) soit sortants (la plateforme compose un contact). Chaque appel génère un enregistrement riche, transcription, variables collectées, événements de transition de nœuds, métriques de latence, et un enregistrement audio optionnel.

Types d'appels

TypeDéclencheurCas d'usage typiques
Entrant Un tiers externe appelle un numéro assigné à un agent Support client, prise de rendez-vous, remplacement SVI, couverture après les heures d'ouverture
Sortant, manuel Déclenché via le tableau de bord ou POST /api/calls Appels de suivi, rappels de paiement, notifications ponctuelles
Sortant, campagne (bientôt disponible) Le planificateur de campagne compose automatiquement une liste de contacts Prospection commerciale, sondages de satisfaction, confirmations de livraison à grande échelle

Le moteur de composition de campagnes est encore en développement. Consultez la page Campagnes pour le comportement prévu.

Liste des appels et détail d'un appel, mode clair Liste des appels et détail d'un appel, mode sombre

Cycle de vie d'un appel

Chaque appel passe par une séquence de statuts. Les appels sortants démarrent à QUEUED ; les appels entrants entrent à RINGING.

Les appels sortants démarrent à QUEUED ; les appels entrants entrent à RINGING. Depuis là, les appels passent à IN_PROGRESS lorsqu'ils sont décroché, et se terminent à COMPLETED ou dans l'un des statuts terminaux listés dans le tableau ci-dessous.

StatutDescriptionTerminal ?
QUEUEDEnregistrement d'appel créé, SIP INVITE en cours d'envoi vers l'opérateur (sortant uniquement)Non
RINGINGL'opérateur fait sonner la destinationNon
IN_PROGRESSAppel décroché, session de l'agent active et traitement de la parole en coursNon
COMPLETEDAppel terminé normalement, nœud Hangup exécuté ou l'une des parties a raccroché proprementOui
FAILEDErreur SIP, problème réseau, plantage de l'agent ou exception non géréeOui
NO_ANSWERL'appel sortant n'a pas été décroché dans le délai impartiOui
BUSYLa ligne de destination était occupée (SIP 486)Oui
CANCELEDL'appel a été annulé avant d'être décroché (SIP 487)Oui

L'enregistrement d'appel

Chaque appel génère un enregistrement persistant, une ligne dans la table calls plus des tables enfants dédiées aux tours de transcription et aux événements de flux. L'enregistrement est peuplé progressivement, les entrées de transcription sont écrites pendant l'appel, duration et le statut final sont définis à la fin.

ChampTypeDescription
idstringIdentifiant unique de l'appel (CUID2)
directionenumINBOUND ou OUTBOUND
statusenumStatut actuel, voir le cycle de vie ci-dessus
from_numberstringNuméro E.164 de l'appelant (ex. +33612345678)
to_numberstringNuméro E.164 appelé (votre numéro pour les entrants, la destination pour les sortants)
caller_idstring | nullIdentifiant d'appelant utilisé pour les appels sortants (le numéro affiché à la partie appelée)
durationinteger | nullDurée totale de l'appel en secondes (définie à la fin de l'appel)
queued_atdatetimeHorodatage de création de l'enregistrement d'appel
ringing_atdatetime | nullQuand l'opérateur a commencé à faire sonner la destination
answered_atdatetime | nullQuand l'appel a été décroché et la session de l'agent démarrée
ended_atdatetime | nullQuand l'appel s'est déconnecté
transcriptarrayTours de conversation ordonnés, chacun avec role, content, horodatage et métriques de latence (voir ci-dessous). Stocké dans la table enfant call_transcript_entries.
call_variablesobjectToutes les variables collectées et résolues pendant l'appel
tool_callsarrayAppels d'API externes et MCP effectués pendant l'appel, avec paramètres, réponse et horodatage
call_eventsarrayÉvénements de transition de nœuds, chemin emprunté dans le graphe conversationnel. Stocké dans la table enfant call_event_entries.
call_summaryobject | nullRésumé de l'appel généré par LLM (quand l'évaluation est configurée)
call_objectivesarray | nullObjectifs d'évaluation et leurs résultats (quand l'évaluation est configurée)
call_quality_scoreinteger | nullScore de qualité calculé par l'évaluation (0–100)
sip_headersobject | nullEn-têtes SIP reçus sur les appels entrants (métadonnées injectées par l'opérateur, X-headers)
recording_urlstring | nullChemin côté serveur vers l'enregistrement WAV (si recording_enabled est vrai sur l'agent)
agent_idstringL'agent qui a géré cet appel
agent_version_idstringLa version exacte de l'agent (snapshot) qui s'est exécutée, épinglée au démarrage de l'appel, immuable
campaign_idstring | nullLa campagne qui a déclenché cet appel (appels de campagne sortante uniquement)
Call transcript in the dashboard

Transcription et métriques de latence

Chaque entrée de transcription capture non seulement ce qui a été dit, mais aussi à quelle vitesse. Les tours de l'agent incluent la décomposition complète de la latence pour le tour : STT → premier token LLM → premier octet audio TTS.

// Tour utilisateur
{ "role": "user",  "content": "Je voudrais connaître mon solde.", "ts": 0.8 }

// Tour agent avec décomposition complète de la latence
{
  "role": "agent",
  "content": "Bien sûr. Votre solde est de 142,50 €.",
  "ts": 3.2,
  "stt_latency_ms": 210,
  "llm_latency_ms": 185,
  "tts_latency_ms": 92,
  "total_latency_ms": 487
}

Un total_latency_ms régulièrement supérieur à 800 ms indique un problème de fournisseur ou de réseau qui mérite investigation. Vérifiez les champs llm_latency_ms et tts_latency_ms pour identifier le goulot d'étranglement.

Tours interrompus (barge-in)

Quand l'appelant coupe la parole à l'agent en plein milieu d'une phrase, la transcription affiche exactement ce que l'appelant a réellement entendu en texte normal, avec le reste coupé ajouté en orange, de sorte que ce que vous lisez correspond à l'enregistrement plutôt qu'à la phrase complète que l'agent avait générée. Sur la rare paire adjacente où la ligne agent interrompue s'afficherait autrement sous la coupure de l'appelant (la ligne agent n'est finalisée qu'au moment où le barge-in la coupe), la vue de détail d'appel réordonne la paire pour que la ligne agent apparaisse toujours au-dessus de l'interruption qui l'a coupée.

Détail par tour : RAG, outils & cache

Activez Show metrics sur la page de détail d'appel pour révéler des informations supplémentaires attachées à chaque tour :

  • Extraits RAG récupérés : un tour ayant lancé une recherche dans une base de connaissances affiche un badge RAG, dépliez-le pour voir chaque extrait récupéré avec son score de pertinence, triés du plus élevé au plus faible.
  • Détail des appels outils / API : un tour ayant invoqué une action Web Service ou Composio affiche un compteur d'appels d'outils, dépliez-le pour voir la méthode, le statut, la durée et les corps de requête et de réponse de chaque appel (rédigés côté serveur, la même rédaction que celle appliquée par l'API).
  • Appels d'outils supprimés : si le modèle a demandé un outil sur un tour dont la course de routage a été remportée par une exit route avant que l'outil n'ait pu s'exécuter, une note ambrée, « An action was not run », le signale et explique que l'action a été sautée car l'appel était déjà passé à l'étape suivante ; utilisez une exit route basée sur une règle sur cette étape si vous avez besoin que l'action s'exécute systématiquement.
  • Compteurs de tokens en cache : pour les tours utilisant un fournisseur LLM compatible avec la mise en cache des prompts, un pourcentage de cache-hit s'affiche à côté des compteurs de tokens, avec les nombres exacts de tokens en cache / total disponibles dans le panneau de détail LLM déplié du tour.
Transcription avec appels d'outils et extraits RAG en ligne

Séparateurs de transition de nœud

Lorsque vous ouvrez le détail d'un appel, la transcription est affichée sous forme de conversation. Chaque fois que le flux passe d'un nœud au suivant, une pastille de séparation est insérée entre les tours, une pastille indigo ornée d'une flèche, libellée Acheminé vers {nom du nœud}. Elle marque l'instant précis de la conversation où l'agent a changé de nœud de flux, ce qui permet de voir d'un coup d'œil quelle partie de la conversation chaque nœud a traitée.

Enregistrement audio

Un enregistrement n'existe que si l'agent avait l'enregistrement activé (recording_enabled). Le cas échéant, l'audio de l'appel est capturé et sauvegardé sous forme de fichier WAV sur le serveur. La plupart des utilisateurs l'écoutent directement depuis le tableau de bord.

Écouter depuis le tableau de bord

Sur la page de détail d'un appel, l'enregistrement est présenté sous forme d'un lecteur audio à forme d'onde interactif. L'audio est tracé en une forme d'onde intégrée avec une règle de temps en dessous, et chaque tour de parole est mis en évidence sous forme de région colorée sur la frise (bleu pour l'appelant, vert pour l'agent), ce qui permet de voir d'un coup d'œil qui a parlé et quand. Le lecteur propose lecture/pause, retour et avance rapides, et un affichage du temps courant. Cliquer sur un tour de la transcription positionne la lecture à cet instant, et la position du curseur met en surbrillance le tour correspondant dans la transcription au fil de la lecture.

Un bouton Télécharger dans le lecteur enregistre l'enregistrement sous forme de fichier .wav sur votre ordinateur.

Dans la liste des appels, toute ligne dont l'appel possède un enregistrement affiche un petit bouton de lecture/arrêt intégré, ce qui permet d'écouter un appel sans l'ouvrir.

Accès programmatique (API)

Vous pouvez aussi récupérer l'enregistrement directement via l'API (authentification requise) :

# Diffusion en ligne dans le navigateur (Content-Disposition: inline)
GET /api/calls/{call_id}/recording

# Téléchargement en tant que fichier (Content-Disposition: attachment)
GET /api/calls/{call_id}/recording?download

Les deux réponses retournent Content-Type: audio/wav avec le support Accept-Ranges: bytes. Un 404 est retourné si l'enregistrement n'existe pas ou si le fichier a été supprimé du disque.

Liste des appels (tableau de bord)

La page Tableau de bord → Voir les appels affiche tous les appels de votre organisation, avec une colonne Compte à côté de l'agent pour voir en un coup d'œil à quel client final chaque appel appartient, et une durée affichée dans un format lisible (ex. 1m 31s plutôt qu'un nombre de secondes brut). Depuis la liste, vous pouvez :

  • Filtrer par plage de dates, agent, statut, direction ou compte
  • Ouvrir le détail d'un appel en cliquant sur une ligne, affiche la transcription complète, les variables collectées, les événements de flux et les métriques de latence
  • Lire l'enregistrement directement dans le navigateur (si l'enregistrement était activé)
  • Exporter les données d'appels du filtre actuel en CSV