Appeler des points de terminaison

Les points de terminaison de l'API d'appel permettent d'accéder aux objets d'appel. Un objet d'appel est créé pour chaque appel émis vers et depuis Contact Center AI Platform (CCAI Platform).

Voici les points de terminaison de l'API Call :

Objet d'appel

Voici un exemple d'objet d'appel :

[
  {
    "id": 0,
    "parent_id": 0,
    "lang": "en",
    "call_type": "Voice Scheduled (API)",
    "status": "scheduled",
    "created_at": "2018-06-07T19:49:52.896Z",
    "queued_at": "2018-06-07T19:49:52.896Z",
    "assigned_at": "2018-06-07T19:49:52.896Z",
    "connected_at": "2018-06-07T19:49:52.896Z",
    "ends_at": "2018-06-07T19:49:52.896Z",
    "scheduled_at": "2018-06-07T19:49:52.896Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": 0,
    "has_feedback": true,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "string",
    "out_ticket_url": "string",
    "verified": true,
    "recording_url": "string",
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_details": "string",
    "fail_reason": "nothing",
    "support_number": "string",
    "selected_menu": {
      "id": 0,
      "name": "string",
      "parent_id": 0,
      "position": 0,
      "deleted": true,
      "hidden": "string",
      "menu_type": "ivr_menu",
      "output_msg": "string"
    },
    "menu_path": {
      "items_count": 0,
      "name": "string",
      "materialized_path": "string"
    },
    "agent_info": {
      "id": 0,
      "name": "string",
      "last_name": "string",
      "first_name": "string",
      "agent_number": "string",
      "avatar_url": "string"
    },
    "end_user": {
      "id": 0,
      "identifier": "string",
      "out_contact_id": "string"
    },
    "photos": [
      {
        "id": 0,
        "photo_type": "photo",
        "url": "string"
      }
    ],
    "videos": [
      {
        "id": 0,
        "url": "string"
      }
    ],
    "transfers": [
      {
        "id": 0,
        "status": "transferring",
        "fail_reason": "nothing",
        "created_at": "2018-06-07T19:49:52.896Z",
        "from_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "to_menu": {
          "items_count": 0,
          "name": "string",
          "materialized_path": "string"
        },
        "from_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        },
        "to_agent": {
          "id": 0,
          "name": "string",
          "last_name": "string",
          "first_name": "string",
          "agent_number": "string",
          "avatar_url": "string"
        }
      }
    ],
    "participants": [
      {
        "id": 0,
        "type": "end_user",
        "status": "waiting",
        "call_id": 0,
        "user_id": 0,
        "end_user_id": 0,
        "call_duration": 0,
        "hold_duration": 0,
        "connected_at": "2018-06-07T19:49:52.896Z",
        "ended_at": "2018-06-07T19:49:52.896Z",
        "fail_reason": "nothing"
      }
    ]
  }
]

Définitions des états des appels

Le champ "État" peut avoir l'une des valeurs suivantes :

État de l'appel Description
Sélectionner État qui se produit lorsqu'un utilisateur final a appelé le centre de contact, mais qu'il parcourt toujours les options de menu avant d'être placé dans un menu feuille.
En file d'attente État qui se produit une fois que l'utilisateur final a sélectionné un nœud de menu feuille et a lancé une demande d'appel à transmettre à un agent par deltacast ou multicast.
Attribuée État qui se produit lorsqu'un agent est sélectionné pour recevoir l'appel de l'utilisateur final. Cela se produit lorsqu'un agent prend un appel.
Connexion État qui se produit après l'attribution d'un agent et l'établissement d'une connexion entre l'utilisateur final et l'agent.
Connecté État qui se produit lorsque l'appel a établi une connexion et que l'agent et l'utilisateur final sont tous deux placés dans un appel.
Terminé État qui se produit lorsqu'un appel se termine après avoir été connecté.
Échec État qui se produit lorsqu'un appel se termine avant d'avoir été connecté. Un motif d'échec sera également fourni pour plus de détails.
Changement de mode… État qui se produit lorsqu'un appel échoue lors de la tentative de connexion et que CCAI Platform tente de connecter l'appel avec un autre fournisseur VoIP.
Récupéré État qui se produit lorsqu'un appel ayant échoué est rappelé. Ce nouvel appel est un enfant de l'appel d'origine. Recovered indique que le rappel est terminé sans erreur.
Planifié État qui se produit lorsqu'un utilisateur final a planifié un appel futur à l'aide de In-Web ou In-App.
Action uniquement État qui se produit lorsqu'un appel géré par le propre fournisseur de téléphonie de notre client est connecté à notre SDK iOS ou Android.
Action uniquement terminée État qui se produit lorsqu'un appel géré par le propre fournisseur de téléphonie du client est connecté à notre SDK iOS ou Android et se termine
Dévié État qui se produit en fonction de la configuration des files d'attente en dépassement de capacité ou des appels hors des heures de travail. Les options de déviation incluent la messagerie vocale et la planification d'un appel, entre autres. La déviation varie en fonction du canal (application, SVI, Web).
Messagerie vocale État qui se produit lorsqu'un utilisateur final est redirigé vers une option de messagerie vocale et choisit de laisser un message vocal à écouter plus tard. Cet état est présent lorsque l'utilisateur final laisse un message vocal.
Message vocal reçu État qui se produit lorsqu'un utilisateur final a laissé un message vocal et qu'un agent ne l'a pas écouté
Message vocal lu État qui se produit lorsqu'un agent a ouvert le message vocal pour l'écouter.

Définitions des types d'appels

Le champ call_type ne peut prendre que l'une des valeurs suivantes :

Type d'appel Description
Sortant vocal (API) Appel effectué à partir de l'API Outbound Call.
Voix entrante (API) Appel effectué à partir de l'API Incoming Call.
Voix programmée (API) Appel effectué à partir de l'API Scheduled Call.

Codes de réponse d'API courants

Voici les réponses d'API les plus courantes :

Code de réponse Signification
201 La requête d'API a abouti et un appel sera créé.
202 La requête d'API a abouti, mais une intervention manuelle est requise dans le widget pour finaliser l'action.
400 Type d'appel non valide. Assurez-vous que call_type est accepté.
400 L'agent n'est pas disponible pour prendre cet appel
400 Paramètre manquant : vérifiez que les paramètres requis ont été ajoutés.
404 Ressource introuvable : veuillez vérifier votre sous-domaine

Appel sortant : end_user_number

Paramètre Obligatoire Type de données Définition
call_tye TRUE Chaîne Appelez tye pour créer. "Voice Outbound (API)" et "OutboundCall" (obsolète) sont disponibles pour le moment.
agent_email TRUE Chaîne Adresse e-mail de l'agent qui sera attribué à l'appel sortant.
ticket_id FALSE Chaîne ID de la demande CRM. Le numéro de téléphone de l'utilisateur final associé à la demande sera composé.
end_user_number FALSE Chaîne Numéro de téléphone de l'utilisateur final qui appellera. ticket_id a une priorité plus élevée que end_user_number.
outbound_number FALSE Chaîne Numéro sortant bien formé, géré depuis Paramètres > Numéros de téléphone > Gestion des numéros de téléphone. Le numéro sortant par défaut sera utilisé si ce champ est vide.
lang FALSE Chaîne Langue de l'appel. Utilise les codes ISO 639-1. (Valeur par défaut : "en")

Point de terminaison :

Method: POST
Type: RAW
URL: https://{subdomain}.​{domain}​/apps/api/v1/calls

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}

Exemple de requête et de réponses

Les sections suivantes fournissent des exemples de requêtes au point de terminaison.

Erreur : L'agent n'est pas disponible pour prendre cet appel

Cet exemple montre le scénario d'échec lorsque l'agent n'est pas disponible pour recevoir l'appel.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : L'agent n'est pas disponible pour prendre cet appel
{
    "message": "Agent is not available to take this call"
}

Code d'état : 400

Créer un appel sortant avec le numéro de l'utilisateur final

Cet exemple montre comment passer un appel sortant vers un numéro d'utilisateur final spécifique.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Réponse : Crée un appel sortant avec end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.jpg"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Créer un appel sortant avec un numéro de ticket

Cet exemple montre comment créer un appel sortant avec un numéro de demande spécifique.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "ticket_id": "71450",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Réponse : Créer un appel sortant avec ticket_id
{
    "id": 398,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:28:47.955Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:28:47.971Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "71450",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/avatar.png"
    },
    "end_user": {
        "id": 67,
        "identifier": null,
        "out_contact_id": "381630957514"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 612,
            "type": "agent",
            "status": "waiting",
            "call_id": 398,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 613,
            "type": "end_user",
            "status": "waiting",
            "call_id": 398,
            "user_id": null,
            "end_user_id": 67,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Erreur : ID de demande ou numéro d'utilisateur final requis

Cet exemple montre le cas d'échec où l'ID de ticket ou le numéro de l'utilisateur final sont requis, mais ne sont pas fournis.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Réponse : Erreur : ticket_id ou end_user_number requis

{
    "message": "ticket_id or end_user_number required"
}

Code d'état : 400

Erreur : Adresse e-mail de l'agent non valide

Cet exemple montre l'échec lorsque l'adresse e-mail fournie pour un agent n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Réponse : Erreur : Adresse e-mail de l'agent non valide

{
    "message": "Not a valid agent email"
}

Code d'état : 400

Erreur : Adresse e-mail de l'agent requise

Cet exemple montre l'échec lorsqu'aucune adresse e-mail n'est fournie pour l'agent.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Réponse : Erreur : Adresse e-mail de l'agent requise

{
    "message": "Agent email required"
}

Code d'état : 400

Erreur : L'agent n'a pas accès aux appels

Cet exemple montre l'échec lorsque l'agent spécifié n'est pas autorisé à passer des appels sortants.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : l'agent n'a pas accès aux appels
{
    "message": "Agent does not have access to make calls"
}

Code d'état : 400

Erreur : end_user_number mal formé

Cet exemple illustre le scénario d'échec dans lequel le numéro de l'utilisateur final fourni n'est pas correctement mis en forme.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse : Erreur : end_user_number n'est pas au bon format
{
    "message": "end_user_number is not well-formed"
}

Code d'état : 400

Erreur : Contact introuvable

Cet exemple illustre le scénario d'échec dans lequel le contact fourni n'existe pas.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Réponse : Erreur : Contact introuvable
{
    "message": "Contact not found"
}

Code d'état : 400

Accepté : vous devez choisir un numéro sortant

Dans cet exemple, l'appel sortant est accepté, mais l'agent doit choisir le numéro sortant à utiliser avant de passer l'appel.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Code d'état : 200

Erreur : Type d'appel non valide

Cet exemple illustre le scénario d'échec dans lequel le type d'appel fourni n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse : Erreur : Type d'appel non valide
{
    "message": "Invalid call type"
}

Code d'état : 400

Inviter l'adaptateur d'appel par plusieurs numéros sortants

Dans ce scénario, l'adaptateur d'appel est invité à utiliser plusieurs numéros sortants.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "agent@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse
{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Code d'état : 200

Accepté : l'agent doit passer un appel sortant avec l'ID du ticket

Cet exemple illustre une requête dans laquelle l'agent doit passer un appel sortant en fonction de l'ID de demande fourni.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Code d'état : 202

Appel sortant : ticket_id

Paramètre Obligatoire Type de données Définition
call_type TRUE Chaîne Type d'appel à créer. "Voice Outbound (API)" et "OutboundCall" (obsolète) sont disponibles pour le moment.
agent_email TRUE Chaîne Adresse e-mail de l'agent qui sera attribué à l'appel sortant.
ticket_id FALSE Chaîne ID de la demande CRM. Le numéro de téléphone de l'utilisateur final associé à la demande sera composé.
end_user_number FALSE Chaîne Numéro de téléphone de l'utilisateur final qui appellera. ticket_id a une priorité plus élevée que end_user_number.
outbound_number FALSE Chaîne Numéro sortant bien formé, géré depuis Paramètres > Numéros de téléphone > Gestion des numéros de téléphone. Le numéro sortant par défaut sera utilisé si ce champ est vide.
lang FALSE Chaîne Langue de l'appel. Utilise les codes ISO 639-1. (Valeur par défaut : "en")

Point de terminaison :

Method: POST
Type: RAW
URL: https://{subdomain}.{domain}​/apps/api/v1/calls

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-867-5309",
    "ticket_id": "123123",
    "lang": "en"
}

Exemple de requête et de réponses

Les sections suivantes fournissent des exemples de requêtes au point de terminaison.

Erreur : ID de demande ou numéro d'utilisateur final requis

Dans cet exemple, le scénario d'échec de l'ID de ticket ou du numéro de l'utilisateur final est manquant, mais requis.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Réponse : Erreur : ticket_id ou end_user_number requis

{
    "message": "ticket_id or end_user_number required"
}

Code d'état : 400

Erreur : Adresse e-mail de l'agent requise

Dans cet exemple, nous illustrons le scénario d'échec dans lequel l'adresse e-mail de l'agent n'est pas fournie, mais est requise.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : Adresse e-mail de l'agent requise
{
    "message": "Agent email required"
}

Code d'état : 400

Créer un appel sortant avec le numéro de l'utilisateur final

Dans cet exemple, nous montrons comment créer un appel sortant en fournissant le numéro de l'utilisateur final.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Réponse : Crée un appel sortant avec end_user_number
{
    "id": 397,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:27:30.406Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:27:30.441Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reaso": "not_voicemail",
    "deflection": "n_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/default-profile.png"
    },
    "end_user": null,
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 610,
            "type": "agent",
            "status": "waiting",
            "call_id": 397,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 611,
            "type": "end_user",
            "status": "waiting",
            "call_id": 397,
            "user_id": null,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Erreur : Type d'appel non valide

Dans cet exemple, nous illustrons le scénario d'échec dans lequel le type d'appel fourni n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "ScheduledCall",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse : Erreur : Type d'appel non valide
{
    "message": "Invalid call type"
}

Code d'état : 400

Inviter l'adaptateur d'appel par plusieurs numéros sortants

Dans cet exemple, nous montrons comment inviter l'adaptateur d'appel avec plusieurs numéros de téléphone sortants.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 859-657-9625",
    "lang": "en"
}

Code d'état : 202

Accepté : l'agent doit passer un appel sortant avec l'ID du ticket

Dans cet exemple, nous montrons comment passer un appel sortant avec un numéro de demande et comment l'agent accepte la demande.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json
***Body:*** ```json { "call_type": "Voice Outbound (API)", "agent_email": "allen@somedomain.com", "end_user_number": "+1 205-123-4567", "lang": "en" } ``` ***Status Code:*** 202 #### Error : Agent does not have access to make calls In this example we show the failure scenario where a call creation request is submitted but the agent does not have access to be able to make outbound calls. ##### Requête ***En-têtes :***
Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : l'agent n'a pas accès aux appels
{
    "message": "Agent does not have access to make calls"
}

Code d'état : 400

Créez un appel sortant avec l'ID du ticket.

Dans cet exemple, nous allons créer un appel sortant avec un numéro de ticket.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "ticket_id": "71450",
    "outbound_number": "+1 339-219-5276",
    "lang": "en"
}
Réponse : Créer un appel sortant avec ticket_id
{
    "id": 398,
    "lang": "en",
    "call_type": "Voice Outbound (API)",
    "status": "assigned",
    "created_at": "2019-06-07T01:28:47.955Z",
    "queued_at": null,
    "assigned_at": "2019-06-07T01:28:47.971Z",
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "voip_provider": "voip_provider_twilio",
    "out_ticket_id": "71450",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": null,
    "menu_path": null,
    "agent_info": {
        "id": 1,
        "agent_number": null,
        "name": "Admin UJET",
        "last_name": "UJET",
        "first_name": "Admin",
        "avatar_url": "https://somedomain.com/default-profile.png"
    },
    "end_user": {
        "id": 67,
        "identifier": null,
        "out_contact_id": "381630957514"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 612,
            "type": "agent",
            "status": "waiting",
            "call_id": 398,
            "user_id": 1,
            "end_user_id": null,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        },
        {
            "id": 613,
            "type": "end_user",
            "status": "waiting",
            "call_id": 398,
            "user_id": null,
            "end_user_id": 67,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": null,
    "offer_events": [],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Accepté : vous devez choisir un numéro sortant

Dans cet exemple, nous montrons le scénario dans lequel une demande d'appel sortant est créée avec la nécessité de choisir un numéro sortant, puis est acceptée.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}

Code d'état : 202

Erreur : L'agent n'est pas disponible pour prendre cet appel

Dans cet exemple, nous montrons le scénario d'échec dans lequel un appel est créé, mais l'agent n'est pas disponible pour l'accepter.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : L'agent n'est pas disponible pour prendre cet appel
{
    "message": "Agent is not available to take this call"
}

Code d'état : 400

Erreur : le numéro de l'utilisateur final n'est pas au bon format

Dans cet exemple, nous montrons le scénario d'échec dans lequel le numéro de téléphone de l'utilisateur final fourni est incorrectement formé.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "end_user_number": "123123",
    "lang": "en"
}
Réponse : Erreur : end_user_number n'est pas au bon format
{
    "message": "end_user_number is not well-formed"
}

Code d'état : 400

Erreur : Adresse e-mail de l'agent non valide

Dans cet exemple, nous illustrons le scénario d'échec dans lequel l'adresse e-mail de l'agent fournie n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "admin@somedomain.com",
    "end_user_number": "+1 205-123-4567",
    "lang": "en"
}
Réponse : Erreur : Adresse e-mail de l'agent non valide
{
    "message": "Not a valid agent email"
}

Code d'état : 400

Erreur : Contact introuvable

Dans cet exemple, nous montrons le scénario d'échec dans lequel le contact fourni n'a pas pu être trouvé.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Outbound (API)",
    "agent_email": "allen@somedomain.com",
    "outbound_number": "+1 760-410-8538",
    "ticket_id": 1,
    "lang": "en"
}
Réponse : Erreur : Contact introuvable
{
    "message": "Contact not found"
}

Code d'état : 400

Appel entrant

Paramètre Obligatoire Type de données Définition
call_type TRUE Chaîne Type d'appel à créer. Utilisez "Voice Inbound (API)" ou "IncomingCall" (obsolète) pour créer un appel entrant.
menu_id TRUE Integer ID du menu auquel attribuer l'appel. Seuls les ID de menu Web et SVI sont acceptés.
end_user_number TRUE Chaîne Numéro de téléphone de l'utilisateur final qui sera composé. Si un ticket_id et un end_user_number sont transmis, le ticket_id prévaut.
lang FALSE Chaîne Langue de l'appel. Utilise les codes ISO 639-1. (Valeur par défaut : "en")
ticket_id FALSE Chaîne ID de la demande CRM. Le numéro de téléphone de l'utilisateur final associé à la demande sera composé. Si un ticket_id et un end_user_number sont transmis, le ticket_id prévaut.
outbound_number FALSE Chaîne Numéro de téléphone sortant à utiliser pour l'appel. Le numéro de téléphone sortant mondial par défaut sera utilisé si aucune entrée n'est transmise ou si elle n'est pas valide. Les numéros sortants sont gérés depuis Paramètres > File d'attente > MODIFIER / AFFICHER > Sélectionnez une file d'attente > Numéros de téléphone sortants.
recording_permission FALSE Chaîne La valeur n'est évaluée que si la fonctionnalité "Options d'enregistrement des appels" est définie sur "Demander l'autorisation d'enregistrer à l'utilisateur". Vous pouvez le configurer en accédant à Paramètres > File d'attente > MODIFIER / AFFICHER > Sélectionner une file d'attente > Options d'enregistrement des appels. Si la valeur est "recording_permission_not_asked" (par défaut) ou "recording_permission_denied", l'appel ne sera pas enregistré. Si la valeur est "recording_permission_granted", l'appel sera enregistré.

Point de terminaison :

Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}

Exemple de requête et de réponses

Les sections suivantes fournissent des exemples de requêtes au point de terminaison.

Erreur : le numéro de l'utilisateur final n'est pas au bon format

Dans cet exemple, nous montrons le scénario d'échec où un appel entrant est créé, mais où le numéro de l'utilisateur final fourni est mal formé.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : le numéro de l'utilisateur final n'est pas au bon format
{
    "message": "end_user_number is not well formed"
}

Code d'état : 400

Erreur : Le menu est en état de "redirection manuelle". Vous ne pouvez pas accepter d'appels.

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel est routé vers un ID de menu, mais que le menu est en état de redirection manuelle et ne peut donc pas recevoir d'appels entrants.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : le menu est en état de "redirection manuelle", impossible d'accepter les appels
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Code d'état : 400

Erreur : Type d'appel non valide

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel entrant est créé, mais le type d'appel fourni n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Type d'appel non valide
{
    "message": "Invalid call type"
}

Code d'état : 400

Erreur : L'ID du menu est obligatoire

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel entrant est créé, mais l'ID de menu fourni n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : menu_id est obligatoire
{
    "message": "menu_id is required"
}

Code d'état : 400

Erreur : Seuls les ID de menu mobile et de réponse vocale interactive sont autorisés

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel entrant est créé, mais l'ID de menu fourni n'est pas un ID de menu SVI ni mobile.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : seuls les ID de menu mobile et de SVI sont autorisés
{
    "message": "Only IVR and mobile menu IDs are permitted"
}

Code d'état : 400

Créer un appel entrant avec le numéro de l'utilisateur final

Cet exemple montre comment créer un appel entrant avec un numéro d'utilisateur final spécifique.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "recording_permission": "recording_permission_granted"
}
Réponse : Crée un appel entrant avec end_user_number
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": "2019-09-10T00:19:14.421Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Erreur : Le menu est en mode "après les heures d'ouverture", impossible d'accepter les appels entrants

Cet exemple montre l'échec lorsque l'ID de menu fourni est dans l'état "après les heures d'ouverture".

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Le menu est en mode "heures creuses", impossible d'accepter les appels entrants
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Code d'état : 400

Erreur : La langue n'est pas disponible

Cet exemple illustre la requête d'échec lorsque la langue spécifiée n'est pas disponible.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : la langue n'est pas disponible
{
    "message": "Language 'fr' is not available"
}

Code d'état : 400

Créer un appel entrant avec un numéro de demande

Cet exemple montre la requête permettant de créer un appel entrant avec un numéro de demande associé.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Créer un appel entrant avec ticket_id
{
    "id": 519,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T05:12:26.000Z",
    "queued_at": "2019-09-10T05:12:26.295Z",
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": null,
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": "76517",
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 826,
            "type": "end_user",
            "status": "waiting",
            "call_id": 519,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T05:12:26.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Erreur : Langue introuvable

Cet exemple montre l'échec lorsque la langue fournie est introuvable.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Langue introuvable
{
    "message": "Language 'xy' is not found"
}

Code d'état : 400

Erreur : menu_id introuvable

Cet exemple montre l'échec lorsque l'ID de menu fourni est introuvable.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : menu_id introuvable
{
    "message": "menu_id 9999 is not found"
}

Code d'état : 400

Erreur : menu_id mal formé

Cet exemple montre l'échec lorsque l'ID de menu fourni est incorrect.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : menu_id n'est pas bien formé
{
    "message": "menu_id is not well formed"
}

Code d'état : 400

Erreur : Vous devez indiquer le numéro de l'utilisateur final

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel entrant est créé, mais le numéro de téléphone de l'utilisateur final n'a pas été fourni.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Inbound (API)",
    "lang": "en",
    "menu_id": 9,
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : end_user_number est obligatoire
{
    "message": "end_user_number is required"
}

Code d'état : 400

Appel planifié

Paramètre Obligatoire Type de données Définition
call_type TRUE Chaîne Type d'appel à créer. Utilisez "Voice Scheduled (API)" ou "ScheduledCall" (obsolète) pour créer un appel programmé.
menu_id TRUE Integer ID du menu auquel attribuer l'appel. Seuls les ID de menu Web et mobile sont acceptés.
call_id FALSE Integer ID de l'appel précédent, qui sera associé en tant qu'appel parent au nouvel appel programmé créé. Lorsque l'ID d'appel est utilisé, menu_id peut être facultatif.
end_user_number TRUE Chaîne Numéro de téléphone de l'utilisateur final qui sera composé. Si un ticket_id et un end_user_number sont transmis, le ticket_id prévaut.
lang FALSE Chaîne Langue de l'appel. Utilise les codes ISO 639-1. (Valeur par défaut : "en")
ticket_id FALSE Chaîne ID de la demande CRM. Le numéro de téléphone de l'utilisateur final associé à la demande sera composé. Si un ticket_id et un end_user_number sont transmis, le ticket_id prévaut.
scheduled_at TRUE Chaîne Heure prévue de l'appel. Utilisez le format ISO 8601 pour une heure future valide.
recording_permission FALSE Chaîne La valeur n'est évaluée que si la fonctionnalité "Options d'enregistrement des appels" est définie sur "Demander l'autorisation d'enregistrer à l'utilisateur". Vous pouvez le configurer en accédant à Paramètres > File d'attente > MODIFIER / AFFICHER > Sélectionner une file d'attente > Options d'enregistrement des appels. Si la valeur est "recording_permission_not_asked" (par défaut) ou "recording_permission_denied", l'appel ne sera pas enregistré. Si la valeur est "recording_permission_granted", l'appel sera enregistré.

Point de terminaison :

Method: POST
Type: RAW
URL: https://{{subdomain}}.{{domain}}/apps/api/v1/calls

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "ticket_id": "76517",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}

Exemple de requête et de réponses

Les sections suivantes fournissent des exemples de requêtes au point de terminaison.

Erreur : end_user_number n'est pas au bon format

Cet exemple montre l'échec dû au fait que le numéro end_user_number n'est pas au bon format.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 999-657-12",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : le numéro de l'utilisateur final n'est pas au bon format
{
    "message": "end_user_number is not well formed"
}

Code d'état : 400

Erreur : Le menu est en état de "redirection manuelle". Vous ne pouvez pas accepter d'appels.

Cet exemple montre l'échec lorsque l'ID de menu spécifié est défini sur la redirection de menu et ne peut pas accepter les appels.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : le menu est en état de "redirection manuelle", impossible d'accepter les appels
{
    "message": "Menu is in 'manual redirection' state, can't accept calls"
}

Code d'état : 400

Erreur : Type d'appel non valide

Cet exemple montre l'échec d'une requête lorsque le type d'appel n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "InvalidCallType",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Type d'appel non valide
{
    "message": "Invalid call type"
}

Code d'état : 400

Erreur : menu_id est obligatoire

Cet exemple illustre la requête et la réponse lorsqu'un ID de menu n'est pas fourni, mais qu'il est obligatoire.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : menu_id est obligatoire
{
    "message": "menu_id is required"
}

Code d'état : 400

Erreur : Seuls les ID de menu mobile et Web sont autorisés

Cet exemple montre une requête qui échoue lorsqu'un ID de menu fourni n'est pas un ID de menu Web ou mobile.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 50,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Seuls les ID de menu mobile et Web sont autorisés
{
    "message": "Only mobile and web menu IDs are permitted"
}

Code d'état : 400

Créer un appel programmé avec un ID de menu

Cet exemple montre comment créer un appel planifié avec un ID de menu spécifique.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Créer un appel programmé avec un ID de menu
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Créer un appel programmé avec un ID d'appel

Cet exemple montre comment créer un appel planifié avec un ID d'appel spécifique.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "call_id": 514,
    "end_user_number": "+82-10-6861-2345",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Créer un appel programmé avec un ID d'appel
{
    "id": 515,
    "lang": "en",
    "call_type": "Voice Inbound (API)",
    "status": "queued",
    "created_at": "2019-09-10T00:19:14.000Z",
    "queued_at": null,
    "assigned_at": null,
    "connected_at": null,
    "ends_at": null,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "wait_duration": 0,
    "call_duration": 0,
    "hold_duration": 0,
    "rating": null,
    "has_feedback": false,
    "out_ticket_id": null,
    "out_ticket_url": null,
    "verified": false,
    "recording_url": null,
    "recording_permission": "not_asked",
    "voicemail_reason": "not_voicemail",
    "deflection": "no_deflection",
    "disconnected_by": "disconnected_by_unknown",
    "fail_reason": "nothing",
    "fail_details": null,
    "support_number": null,
    "selected_menu": {
        "id": 9,
        "name": "Lock Star",
        "parent_id": null,
        "position": 0,
        "deleted": false,
        "menu_type": "ivr_menu",
        "output_msg": "You selected Lock Star.",
        "hidden": false
    },
    "menu_path": {
        "items_count": 1,
        "name": "Lock Star",
        "materialized_path": "9"
    },
    "agent_info": null,
    "end_user": {
        "id": 75,
        "identifier": null,
        "out_contact_id": "389391400633"
    },
    "photos": [],
    "videos": [],
    "transfers": [],
    "deflection_details": [],
    "participants": [
        {
            "id": 820,
            "type": "end_user",
            "status": "waiting",
            "call_id": 515,
            "user_id": null,
            "end_user_id": 75,
            "call_duration": null,
            "hold_duration": null,
            "connected_at": null,
            "ended_at": null,
            "fail_reason": "nothing"
        }
    ],
    "offer_type": "cascade",
    "offer_events": [
        {
            "casting_time": "2019-09-10T00:19:14.000Z",
            "group": "Group 1"
        }
    ],
    "answer_type": "manual",
    "outbound_number": "+1 339-219-5276"
}

Code d'état : 201

Erreur : Le menu est en mode "après les heures d'ouverture", impossible d'accepter les appels entrants

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel planifié est créé, mais le menu fourni est hors plage horaire et ne peut donc pas recevoir d'appels entrants.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Le menu est en mode "heures creuses", impossible d'accepter les appels entrants
{
    "message": "Menu is in 'after hours' state, can't accept incoming calls"
}

Code d'état : 400

Erreur : La langue n'est pas disponible

Cet exemple montre l'échec lorsque la langue spécifiée n'est pas valide.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "fr",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : la langue n'est pas disponible
{
    "message": "Language 'fr' is not available"
}

Code d'état : 400

Erreur : Langue introuvable

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel planifié est créé, mais la langue n'est pas valide ou n'est pas disponible.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "xy",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : Langue introuvable
{
    "message": "Language 'xy' is not found"
}

Code d'état : 400

Erreur : ID de menu introuvable

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel planifié est créé, mais l'ID de menu fourni n'est pas valide et est introuvable.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9999,
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : ID de menu introuvable
{
    "message": "menu_id 9999 is not found"
}

Code d'état : 400

Erreur : l'ID du menu n'est pas bien formé

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel planifié est créé, mais l'ID de menu fourni est incorrectement formé.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": "menu_999",
    "end_user_number": "+1 859-657-9625",
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : menu_id n'est pas bien formé
{
    "message": "menu_id is not well formed"
}

Code d'état : 400

Erreur : Vous devez indiquer le numéro de l'utilisateur final

Dans cet exemple, nous montrons le scénario d'échec dans lequel un appel planifié est créé, mais le numéro de téléphone de l'utilisateur final n'a pas été fourni.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "scheduled_at": "2019-09-15T00:19:14.421Z",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : end_user_number est obligatoire
{
    "message": "end_user_number is required"
}

Code d'état : 400

Erreur : scheduled_at est obligatoire

Dans cet exemple, nous illustrons le scénario d'échec dans lequel un appel planifié est créé, mais la valeur "scheduled_at" est manquante alors qu'elle est requise.

Requête

En-têtes

Clé Valeur Description
Content-Type application/json

Corps :

{
    "call_type": "Voice Scheduled (API)",
    "lang": "en",
    "menu_id": 9,
    "end_user_number": "+1 859-657-9625",
    "recording_permission": "recording_permission_granted"
}
Réponse : Erreur : scheduled_at est obligatoire
{
    "message": "scheduled_at is required"
}

Code d'état : 400

Obtenir les attributs de données réservés pendant un appel

Point de terminaison

Method: GET
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Exemple de requête et de réponses

Cette section contient un exemple de requête et de réponse pour le point de terminaison.

Opération réussie

Cet exemple montre un appel réussi.

Requête

Variables d'URL

Clé Valeur Description
id entier (obligatoire)
Réponse
{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customer": "boolean"
}

Code d'état 0

Mettre à jour les attributs de données réservés pendant un appel

Point de terminaison

Method: PATCH
Type: RAW
URL: https://{subdomain}.{domain}/apps/api/v1/calls/:id/customer_flag

Variables d'URL

Clé Valeur Description
id entier (obligatoire)

Body

{
    "verified_customer": "boolean",
    "bad_actor": "boolean",
    "repeat_customers": "boolean"
}

Transmettre des paramètres de données aux agents virtuels en cours de session

Pour utiliser l'API Apps afin de transmettre des paramètres de données à des agents virtuels au milieu d'une session d'appel, consultez Transmettre des paramètres de données à des agents virtuels en cours de session.