Skip to content

Appels

Gestion des appels vidéo. Comprend le listage, les détails, l'attribution, le démarrage, la finalisation et le téléversement de fichiers.

Endpoints

MéthodeEndpointDescriptionRôle Minimum
GET/api/v1/callsLister les appelsattendant
GET/api/v1/calls/:idDétails de l'appelattendant
POST/api/v1/calls/:id/assignAttribuer un appel à un agentattendant
POST/api/v1/calls/:id/startDémarrer l'appelattendant
POST/api/v1/calls/:id/completeFinaliser l'appelattendant
POST/api/v1/calls/:call_id/uploadTéléverser un fichier dans l'appelattendant
GET/api/v1/calls/:call_id/tagsTags de l'appelattendant
POST/api/v1/calls/:call_id/tagsAjouter un tagattendant
DELETE/api/v1/calls/:call_id/tags/:tag_idRetirer un tagattendant
GET/api/v1/calls/:call_id/transcriptTranscription de l'appelattendant
GET/api/v1/calls/:call_id/summaryRésumé IA de l'appelattendant
POST/api/v1/calls/:id/manager-notesAjouter une note de gestionsupervisor

Lister les Appels

Retourne la liste paginée des appels du tenant.

GET /api/v1/calls

Query Parameters

ParamètreTypeDéfautDescription
pageinteger1Numéro de page
page_sizeinteger20Éléments par page
sort_bystringinserted_atChamp de tri
sort_orderstringdescDirection du tri
statusstring-Filtre par statut : queued, active, completed, missed, cancelled
department_iduuid-Filtre par département
user_iduuid-Filtre par agent
date_fromstring-Date de début (ISO 8601)
date_tostring-Date de fin (ISO 8601)
searchstring-Recherche par nom/email du client

Exemple de Requête

bash
curl -X GET "https://voki.avanter.com.br/api/v1/calls?page=1&page_size=10&status=completed&date_from=2026-02-01" \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Réponse de Succès (200)

json
{
  "data": [
    {
      "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
      "status": "completed",
      "department_id": "e5f6a7b8-c9d0-1234-efgh-567890123456",
      "department_name": "Suporte Técnico",
      "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "user_name": "João Silva",
      "customer_name": "Carlos Ferreira",
      "customer_email": "carlos@email.com",
      "customer_phone": "+5511999998888",
      "duration": 345,
      "wait_time": 12,
      "rating": 5,
      "notes": "Cliente precisava de ajuda com configuração",
      "has_recording": true,
      "started_at": "2026-02-15T14:30:00Z",
      "completed_at": "2026-02-15T14:35:45Z",
      "inserted_at": "2026-02-15T14:29:48Z"
    }
  ],
  "meta": {
    "current_page": 1,
    "page_size": 10,
    "total_pages": 15,
    "total_count": 142
  }
}

Détails de l'Appel

GET /api/v1/calls/:id

Exemple de Requête

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Réponse de Succès (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "completed",
    "department_id": "e5f6a7b8-c9d0-1234-efgh-567890123456",
    "department_name": "Suporte Técnico",
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "user_name": "João Silva",
    "customer_name": "Carlos Ferreira",
    "customer_email": "carlos@email.com",
    "customer_phone": "+5511999998888",
    "duration": 345,
    "wait_time": 12,
    "rating": 5,
    "notes": "Cliente precisava de ajuda com configuração",
    "has_recording": true,
    "recording_url": "/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/recording",
    "tags": [
      {
        "id": "t1a2b3c4-d5e6-7890-abcd-ef1234567890",
        "name": "Suporte",
        "color": "#3b82f6"
      }
    ],
    "started_at": "2026-02-15T14:30:00Z",
    "completed_at": "2026-02-15T14:35:45Z",
    "inserted_at": "2026-02-15T14:29:48Z"
  }
}

Attribuer un Appel

Attribue un appel de la file d'attente à un agent.

POST /api/v1/calls/:id/assign

Request Body (optionnel)

ChampTypeObligatoireDescription
user_iduuidNonID de l'agent (défaut : utilisateur authentifié)

Exemple de Requête

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/assign \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json"

Réponse de Succès (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "assigned",
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "user_name": "João Silva"
  }
}

Démarrer l'Appel

Marque le début effectif de l'appel vidéo.

POST /api/v1/calls/:id/start

Exemple de Requête

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/start \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Réponse de Succès (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "active",
    "started_at": "2026-02-18T14:30:00Z"
  }
}

Finaliser l'Appel

Marque l'appel comme terminé.

POST /api/v1/calls/:id/complete

Request Body (optionnel)

ChampTypeObligatoireDescription
notesstringNonNotes de l'agent sur l'appel

Exemple de Requête

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/complete \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "notes": "Problème résolu. Client satisfait."
  }'

Réponse de Succès (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "status": "completed",
    "completed_at": "2026-02-18T14:45:00Z"
  }
}

Téléversement de Fichier

Téléverse un fichier associé à un appel (ex : documents partagés).

POST /api/v1/calls/:call_id/upload

Requête

Envoyez en multipart/form-data.

ChampTypeObligatoireDescription
filefileOuiFichier à envoyer

Exemple de Requête

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/upload \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -F "file=@documento.pdf"

Réponse de Succès (201)

json
{
  "data": {
    "id": "f1a2b3c4-d5e6-7890-abcd-ef1234567890",
    "filename": "documento.pdf",
    "content_type": "application/pdf",
    "size": 245678,
    "url": "/uploads/calls/1a2b3c4d/documento.pdf"
  }
}

Tags de l'Appel

Lister les Tags

GET /api/v1/calls/:call_id/tags
bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Ajouter un Tag

POST /api/v1/calls/:call_id/tags
bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "tag_id": "t1a2b3c4-d5e6-7890-abcd-ef1234567890"
  }'

Retirer un Tag

DELETE /api/v1/calls/:call_id/tags/:tag_id
bash
curl -X DELETE https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/tags/t1a2b3c4-d5e6-7890-abcd-ef1234567890 \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Statuts de l'Appel

StatutDescription
queuedEn file d'attente, en attente d'un agent
assignedAttribué à un agent
activeAppel vidéo en cours
completedTerminé
missedNon pris en charge (timeout)
cancelledAnnulé par le client
abandonedAbandonné (expiré dans la file d'attente)

Transcription de l'Appel

Retourne la transcription générée automatiquement pendant l'appel (lorsque la fonctionnalité de transcription est activée dans le plan).

GET /api/v1/calls/:call_id/transcript

Exemple de Requête

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/transcript \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Réponse de Succès (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "transcript": "Agent : Bonjour, comment puis-je vous aider ?\nClient : J'ai besoin d'un support technique...",
    "language": "pt-BR",
    "generated_at": "2026-02-18T14:46:00Z"
  }
}

Erreurs

StatutDescription
403Fonctionnalité transcription non disponible dans le plan
404Appel non trouvé ou pas de transcription

Résumé IA de l'Appel

Retourne le résumé généré par IA après la finalisation de l'appel (disponible dans les plans avec la fonctionnalité ai_summaries).

GET /api/v1/calls/:call_id/summary

Exemple de Requête

bash
curl -X GET https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/summary \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter"

Réponse de Succès (200)

json
{
  "data": {
    "call_id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "summary": "Le client nous a contactés pour résoudre un problème de configuration...",
    "provider": "openai",
    "model": "gpt-4o-mini",
    "generated_at": "2026-02-18T14:46:30Z"
  }
}

Erreurs

StatutDescription
403Fonctionnalité ai_summaries non disponible dans le plan
404Appel non trouvé ou pas de résumé

Notes de Gestion

Ajoute des notes de gestion à un appel terminé. Les notes sont en mode append-only (ajoutées avec horodatage et auteur), jamais remplacées.

Rôles autorisés : owner, manager, supervisor

POST /api/v1/calls/:id/manager-notes

Request Body

ChampTypeObligatoireDescription
notesstringOuiTexte de la note de gestion

Exemple de Requête

bash
curl -X POST https://voki.avanter.com.br/api/v1/calls/1a2b3c4d-5e6f-7890-abcd-ef1234567890/manager-notes \
  -H "Authorization: Bearer eyJhbGci..." \
  -H "X-Tenant: avanter" \
  -H "Content-Type: application/json" \
  -d '{
    "notes": "Excellent service. Demander un retour au client."
  }'

Réponse de Succès (200)

json
{
  "data": {
    "id": "1a2b3c4d-5e6f-7890-abcd-ef1234567890",
    "manager_notes": "[2026-02-18 14:50 - Ana Superviseure] Excellent service. Demander un retour au client."
  }
}

Erreurs

StatutDescription
403Seuls owner, manager ou supervisor peuvent ajouter des notes
404Appel non trouvé
422Champ notes vide

Reconnexion d'Appels

Lorsqu'un participant se déconnecte pendant un appel actif, le système initie une période de grâce de 60 secondes pour la reconnexion automatique. Le champ end_reason indique comment l'appel a été terminé.

Champs de Reconnexion

ChampTypeDescription
disconnected_atdatetimeMoment de la déconnexion (null si aucune)
reconnected_atdatetimeMoment de la reconnexion (null si pas de reconnexion)
end_reasonstringRaison de la terminaison : normal, timeout, disconnect, abandoned

Flux de Reconnexion

  1. Le participant se déconnecte -> événement peer_disconnected envoyé via WebSocket
  2. Un timer de 60 secondes démarre sur le frontend (interface de reconnexion avec compte à rebours)
  3. Si reconnecté dans les 60s -> événement peer_reconnected -> renégociation WebRTC
  4. Si pas de reconnexion -> appel terminé avec end_reason: "disconnect"

Documentação da API Voki v4.0