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 :
Mettre à jour les attributs de données réservés pendant un appel
Transmettre des paramètres de données aux agents virtuels en cours de session
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 |
| 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.