Référence NCCO
Un objet de contrôle d'appel (NCCO) est représenté par un tableau JSON. Vous pouvez l'utiliser pour contrôler le flux d'un appel Voice API. Pour que votre NCCO s'exécute correctement, les objets JSON doivent être valides.
Pendant que vous développez et testez les NCCO, vous pouvez utiliser le Voice Playground pour tester les NCCO de manière interactive. Vous pouvez Pour en savoir plus, consultez l'aperçu de la Voice API ou accéder directement au terrain de jeu vocal dans le tableau de bord.
Actions du NCCO
L'ordre des actions dans le NCCO contrôle le flux de l'appel. Les actions qui doivent être achevées avant que l'action suivante puisse être exécutée sont les suivantes synchrone. Les autres actions sont asynchrone. En d'autres termes, ils sont censés poursuivre les actions suivantes jusqu'à ce qu'une condition soit remplie. Par exemple, une action record se termine lorsque l'action endOnSilence est satisfaite. Lorsque toutes les actions du BCN sont terminées, l'appel prend fin.
Les actions du NCCO et les options et types pour chaque action sont les suivants :
| Action | Description | Synchrone |
|---|---|---|
| enregistrer | Tout ou partie d'un appel | Non |
| conversation | Créer ou rejoindre un Conversation | Oui |
| relier | Vers un point d'extrémité connectable, tel qu'un numéro de téléphone ou un poste VBC. | Oui |
| parler | Envoi d'une synthèse vocale à une conversation. | Oui, sauf si bargeIn=true |
| flux | Envoyer des fichiers audio à une conversation. | Oui, sauf si bargeIn=true |
| entrée | Recueillir des chiffres ou des données vocales de la personne que vous appelez. | Oui |
| notifier | Envoyez une demande à votre application pour suivre les progrès réalisés par le biais d'un BCN. | Oui |
| attendre | Interrompre l'exécution pendant un nombre de secondes spécifié | Oui |
| transfert | Déplacer les segments d'appel d'une conversation en cours vers une autre conversation existante | Oui |
Note: Connecter un appel entrant fournit un exemple de la façon de servir vos OCNC à Vonage après le lancement d'un appel ou d'une conférence.
Notez que dans toutes les actions, le eventUrl DOIT être un tableau, même s'il ne contient qu'une seule valeur.
Enregistrer
Utiliser le record pour enregistrer un appel ou une partie d'un appel :
[
{
"action": "record",
"eventUrl": ["https://example.com/recordings"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from":"447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
L'action d'enregistrement est asynchrone.
Vous pouvez définir une condition synchrone - endOnSilence, timeOut ou endOnKey - pour terminer l'enregistrement lorsqu'elle est remplie.
Si aucune condition n'est définie, l'enregistrement fonctionnera de manière asynchrone et passera instantanément à l'action suivante tout en continuant à enregistrer l'appel. L'enregistrement ne se terminera et n'enverra l'événement correspondant que lorsque l'appel sera terminé.
Cette fonction est utilisée pour des scénarios similaires à la surveillance des appels.
Vous pouvez transcrire un enregistrement à l'aide de la fonction transcription option. Une fois la transcription de l'enregistrement achevée, un rappel sera envoyé à une personne de l'Union européenne. eventUrl. Les paramètres de transcription vous permettent de spécifier un nom de fichier personnalisé. eventUrl et language pour vos transcriptions. Veuillez noter qu'il s'agit d'une fonction payante ; les tarifs exacts peuvent être consultés sur le site web de la Commission européenne. Prix de l'API Voice sous la rubrique "Fonctions programmables".
Pour plus d'informations sur la procédure à suivre, voir Enregistrement.
Vous pouvez utiliser les options suivantes pour contrôler un record action :
| Option | Description | Exigée |
|---|---|---|
format | Enregistrer l'appel dans un format spécifique. Les options sont les suivantes :
mp3ou wav lors de l'enregistrement de plus de 2 canaux. | Non |
split | Enregistrer l'audio envoyé et reçu dans des canaux séparés d'un appareil d'enregistrement stéréo pour conversation pour permettre cela. | Non |
channels | Le nombre de chaînes à enregistrer (maximum 32). Si le nombre de participants est supérieur à channels tout participant supplémentaire sera ajouté au dernier canal du fichier. split conversation doit également être activée. | Non |
endOnSilence | Arrêter l'enregistrement après n secondes de silence. Une fois l'enregistrement arrêté, les données d'enregistrement sont envoyées à event_url. L'éventail des valeurs possibles est de 3<=endOnSilence<=10. | Non |
endOnKey | Arrêter l'enregistrement lorsqu'un chiffre est appuyé sur le combiné. Les valeurs possibles sont : *, # ou tout autre chiffre, par exemple 9. | Non |
timeOut | Durée maximale d'un enregistrement en secondes. Lorsque l'enregistrement est arrêté, les données d'enregistrement sont envoyées à event_url. Les valeurs possibles sont comprises entre 3 secondes et 7200 secondes (2 heures). | Non |
beepStart | Régler sur true pour émettre un bip lorsqu'un enregistrement commence. | Non |
eventUrl | L'URL du point de terminaison du webhook qui est appelé de manière asynchrone lorsqu'un enregistrement est terminé. Si l'enregistrement du message est hébergé par Vonage, ce webhook contient l'URL suivante URL nécessaire pour télécharger l'enregistrement et d'autres métadonnées. | Non |
eventMethod | La méthode HTTP utilisée pour faire la demande à eventUrl. La valeur par défaut est POST. | Non |
transcription [Beta] | Défini comme un objet vide, {}pour utiliser les valeurs par défaut ou personnaliser avec Paramètres de transcription | Non |
Paramètres de transcription
| Option | Description | Exigée |
|---|---|---|
language | La langue (BCP-47 ) pour l'enregistrement que vous transcrivez. Cette fonction prend actuellement en charge les mêmes langues que l'enregistrement automatique de la parole, et une liste est disponible. ici. | Non |
eventUrl | L'URL du point de terminaison du webhook qui est appelé de manière asynchrone lorsqu'une transcription est terminée. | Non |
eventMethod | La méthode HTTP utilisée par Vonage pour faire la demande à eventUrl. La valeur par défaut est POST. | Non |
sentimentAnalysis [Avant-première pour les développeurs] | Effectue une analyse des sentiments sur les segments de transcription de l'enregistrement des appels. Renvoie une valeur comprise entre -1 (sentiment négatif) et 1 (sentiment positif) pour chaque segment. La valeur par défaut est false. | Non |
Remarque : la durée maximale de transcription des appels vocaux est de 2 heures.
Paramètres de retour des enregistrements
Voir le Référence pour les webhooks pour les paramètres d'enregistrement ou de transcription qui sont renvoyés au eventUrl.
Conversation
Vous pouvez utiliser le conversation pour créer des conférences standard ou modérées, tout en préservant le contexte de communication. L'utilisation de conversation avec le même name réutilise les mêmes données persistantes Conversation. La première personne à appeler le numéro virtuel attribué à la conversation la crée. Cette action est synchrone.
Note: vous pouvez inviter jusqu'à 200 personnes à votre conversation.
Les exemples suivants du BCN montrent comment configurer différents types de conversation. Vous pouvez utiliser le answer_url afin de vous assurer que vous envoyez un NCCO aux participants et un autre à l'animateur.
[
{
"action": "conversation",
"name": "nexmo-conference-standard",
"record": true,
"transcription": {
"eventUrl": [ "https://example.com/transcription" ],
"eventMethod": "POST",
"language": "he-IL"
}
}
]
// As the customer is the first person to join, there is no canHear/canSpeak entry
// The customer's leg ID is 6a4d6af0-55a6-4667-be90-8614e4c8e83c
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": false,
"musicOnHoldUrl": ["https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3"],
}
]
// The agent joins and can both hear, and speak to the customer
// The agent's leg ID is 533c0874-f43d-446c-a153-f35bf30783fa
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": true,
"record": true,
"canHear": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c"], // Customer leg ID
"canSpeak": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c"] // Customer leg ID
}
]
// Finally, the supervisor joins the conversation. They can hear both the customer
// and the agent, but only speak to the agent
// The supervisor's leg ID is e2833e43-db39-4c1a-b689-d17ad2cf3529
[
{
"action": "conversation",
"name": "selective-audio-demo",
"startOnEnter": true,
"record": true,
"canHear": ["6a4d6af0-55a6-4667-be90-8614e4c8e83c", "533c0874-f43d-446c-a153-f35bf30783fa"] // Customer leg ID, Agent leg ID
"canSpeak": ["533c0874-f43d-446c-a153-f35bf30783fa"] // Agent leg ID
}
]
[
{
"action": "conversation",
"name": "nexmo-conference-moderated",
"record": true,
"startOnEnter": true
}
]
[
{
"action": "talk",
"text": "Welcome to a Vonage moderated conference. We will connect you when an agent is available"
},
{
"action": "conversation",
"name": "nexmo-conference-moderated",
"startOnEnter": false,
"musicOnHoldUrl": ["https://nexmo-community.github.io/ncco-examples/assets/voice_api_audio_streaming.mp3"]
}
]
Vous pouvez utiliser les options suivantes pour contrôler un conversation action :
| Option | Description | Exigée |
|---|---|---|
name | Le nom de la salle de conversation. Les noms sont classés par espace de noms jusqu'au niveau de l'application et région. | Oui |
musicOnHoldUrl | Une URL vers le mp3 à diffuser aux participants jusqu'à ce que la conversation commence. Par défaut, la conversation démarre lorsque la première personne appelle le numéro virtuel associé à votre In-App Voice. Pour diffuser ce mp3 avant que le modérateur ne se joigne à la conversation, définissez l'option startOnEnter à faux pour tous les utilisateurs autres que le modérateur. | Non |
startOnEnter | La valeur par défaut de vrai garantit que la conversation commence lorsque l'appelant se joint à la conversation name. Régler sur faux pour les participants dans le cadre d'une conversation animée. | Non |
endOnExit | Indique si une conversation modérée se termine lorsque le modérateur raccroche. La valeur est fixée à faux par défaut, ce qui signifie que la conversation ne se termine que lorsque le dernier participant raccroche, que le modérateur soit ou non encore en ligne. Définir endOnExit à vrai pour mettre fin à la conversation lorsque le modérateur raccroche. | Non |
record | Régler sur vrai pour enregistrer cette conversation. Pour les conversations standard, les enregistrements commencent lorsqu'un ou plusieurs participants se connectent à la conversation. Pour les conversations modérées, les enregistrements commencent lorsque le modérateur se connecte. C'est-à-dire lorsqu'un NCCO est exécuté pour la conversation nommée où startOnEnter est fixé à vrai. Lorsque l'enregistrement est terminé, l'URL à partir de laquelle vous avez téléchargé l'enregistrement est envoyée à l'URL de l'événement. Vous pouvez remplacer l'URL par défaut de l'événement d'enregistrement et la méthode HTTP par défaut en fournissant des eventUrl et eventMethod dans les options de la conversation définition de l'action. Par défaut, l'audio est enregistré au format MP3. Voir la page enregistrement pour plus de détails. | Non |
canSpeak | Une liste d'UUID de jambe par lesquels ce participant peut être entendu. Si cette liste n'est pas fournie, le participant peut être entendu par tout le monde. Si une liste vide est fournie, le participant ne sera entendu par personne. | Non |
canHear | Liste des UUID de jambe que ce participant peut entendre. Si cette liste n'est pas fournie, le participant peut entendre tout le monde. Si une liste vide est fournie, le participant n'entendra aucun autre participant. | Non |
mute | Régler sur vrai pour mettre le participant en sourdine. Le son du participant ne sera pas diffusé dans la conversation et ne sera pas enregistré. Lors de l'utilisation de canSpeak, le mute n'est pas pris en charge. | Non |
transcription | Paramètres de transcription. Si elle est présentée (même en tant qu'objet vide), la transcription est activée. Le paramètre d'enregistrement doit être réglé sur vrai. Voir Paramètres de transcription ci-dessus pour plus de détails. | Non |
Connecter
Vous pouvez utiliser le connect pour connecter un appel à des terminaux tels que des numéros de téléphone ou un poste VBC.
Cette action est synchrone, après une relier l'action suivante de la pile NCCO est traitée. Une action de connexion se termine lorsque le terminal que vous appelez est occupé ou indisponible. Vous appelez les terminaux de manière séquentielle en imbriquant les actions de connexion.
Les exemples suivants du BCN montrent comment configurer différents types de connexions.
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"timeout": "45",
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001",
"dtmfAnswer": "2p02p"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventType": "synchronous",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "websocket",
"uri": "ws://example.com/socket",
"content-type": "audio/l16;rate=16000",
"headers": {
"name": "J Doe",
"age": 40,
"address": {
"line_1": "Apartment 14",
"line_2": "123 Example Street",
"city": "New York City"
},
"system_roles": [183493, 1038492, 22],
"enable_auditing": false
},
"authorization": {
"type": "custom",
"value": "Bearer eyJhbGciOi..."
}
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "app",
"user": "jamie"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "sip",
"uri": "sip:rebekka@sip.mcrussell.com",
"headers": { "location": "New York City", "occupation": "developer" }
}
]
}
]
Vous pouvez prévoir une solution de repli pour les appels qui ne se connectent pas. Pour ce faire, définissez le paramètre eventType à synchronous et renvoyer un NCCO à partir du eventUrl si l'appel entre dans l'un des états suivants :
timeout- votre utilisateur n'a pas répondu à votre appel avecringing_timersecondesfailed- l'appel n'a pas aboutirejected- l'appel a été rejetéunanswered- l'appel n'a pas été prisbusy- la personne appelée était sur un autre appel
[
{
"action": "connect",
"from": "447700900000",
"timeout": 5,
"eventType": "synchronous",
"eventUrl": [
"https://example.com/event-fallback"
],
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
[
{
"action": "record",
"eventUrl": ["https://example.com/recordings"]
},
{
"action": "connect",
"eventUrl": ["https://example.com/events"],
"from": "447700900000",
"endpoint": [
{
"type": "phone",
"number": "447700900001"
}
]
}
]
[
{
"action": "talk",
"voiceName": "Russell",
"text": "Thank you for calling. Connecting you to extension."
},
{
"action": "connect",
"endpoint": [
{
"type": "vbc",
"extension": "111"
}
]
}
]
[
{
"action": "talk",
"text": "Please wait while we connect you"
},
{
"action": "connect",
"eventUrl": [
"https://example.com/events"
],
"from": "447700900000",
"endpoint": [
{
"type": "sip",
"user": "john",
"domain": "vonage-developer",
"headers":
{
"location": "New York City",
"occupation": "developer"
}
}
]
}
]
Vous pouvez utiliser les options suivantes pour contrôler un connect action :
| Option | Description | Exigée |
|---|---|---|
endpoint | Tableau de endpoint pour s'y connecter. Actuellement, il est possible d'utiliser un maximum d'un endpoint objet. Types de terminaux disponibles. | Oui |
from | Un nombre en E.164 qui identifie l'appelant. Il doit s'agir de l'un de vos numéros virtuels Vonage si vous vous connectez à un téléphone réel, sinon l'appel ne sera pas connecté. | Non |
randomFromNumber | Régler sur true pour utiliser un numéro de téléphone aléatoire comme from. Le numéro sera sélectionné dans la liste des numéros attribués à l'application en cours. L'application essaiera d'utiliser le(s) numéro(s) du même pays que la destination (si disponible). randomFromNumber: true ne peut pas être utilisé en même temps que from. La valeur par défaut est false. | Non |
eventType | Régler sur synchronous à :
| Non |
timeout | Si l'appel reste sans réponse, définissez le nombre de secondes avant que Vonage n'arrête la sonnerie endpoint. Doit être un nombre entier entre 1 et 120. La valeur par défaut est 60. | Non |
limit | Durée maximale de l'appel en secondes. La valeur par défaut et la valeur maximale sont 7200 secondes (2 heures). | Non |
machineDetection | Configurer le comportement lorsque Vonage détecte qu'une destination est un répondeur. Régler sur soit :
| Non |
advancedMachineDetection | Configurer le comportement de la détection avancée des machines de Vonage. Remplacements machineDetection si les deux sont activés. Voir l'article Référence API pour plus de détails sur les paramètres. Cette fonction est payante ; les tarifs exacts peuvent être consultés sur le site Internet de la Commission européenne. Prix de l'API Voice sous la rubrique "Fonctions programmables". | Non |
eventUrl | Définir le point de terminaison du webhook que Vonage appelle de manière asynchrone sur chacun des points de terminaison possibles. Appeler les États. Si eventType est fixé à synchronous les eventUrl peut renvoyer un NCCO qui remplace le NCCO actuel en cas de dépassement de délai. | Non |
eventMethod | La méthode HTTP utilisée par Vonage pour faire la demande à eventUrl. La valeur par défaut est POST. | Non |
ringbackTone | Une valeur URL qui pointe vers un ringbackTone à lire en boucle jusqu'à la appelantafin qu'ils n'entendent pas le silence. Les ringbackTone s'arrêtera automatiquement lorsque l'appel sera entièrement connecté. Il n'est pas recommandé d'utiliser ce paramètre lors d'une connexion à un terminal téléphonique, car l'opérateur fournira son propre système d'appel. ringbackTone. Exemple : "ringbackTone": "http://example.com/ringbackTone.wav". | Non |
Types et valeurs des points de terminaison
Téléphone (PSTN) - numéros de téléphone au format E.164
| Valeur | Description |
|---|---|
type | Le type d'extrémité : phone pour un terminal RTPC. |
number | Le numéro de téléphone auquel se connecter en E.164 format. |
dtmfAnswer | Définir les chiffres qui sont envoyés à l'utilisateur dès que l'appel est pris. Les chiffres * et # Les chiffres sont respectés. Vous créez des pauses en utilisant p. Chaque pause dure 500 ms. |
onAnswer | Un objet JSON contenant un url clé. L'URL sert de NCCO à exécuter dans le numéro connecté, avant que cet appel ne soit joint à votre conversation existante. En option, la touche ringbackTone peut être spécifiée avec une valeur URL qui pointe vers un fichier ringbackTone à lire en boucle jusqu'à la appelantIls n'entendent donc pas que du silence. Les ringbackTone s'arrêtera automatiquement lorsque l'appel sera entièrement connecté. Exemple : {"url":"https://example.com/answer", "ringbackTone":"http://example.com/ringbackTone.wav" }. Veuillez noter que la clé ringback est toujours pris en charge. |
shaken | Pour les clients de Vonage qui sont tenus par la FCC de signer leurs propres appels vers les États-Unis, nous offrons la possibilité de passer des appels Voice API en utilisant votre propre signature. Cette fonction n'est disponible que sur demande. Les appels dont la signature n'est pas valide seront rejetés. Veuillez nous contacter pour plus d'informations. Lorsque vous utilisez cette option, vous devez placer le contenu de l'en-tête d'identité STIR/SHAKEN que Vonage doit utiliser pour cet appel. Le format attendu est le suivant :
|
Exemple de la shaken option :
eyJhbGciOiJFUzI1NiIsInBwdCI6InNoYWtlbiIsInR5cCI6InBhc3Nwb3J0IiwieDV1IjoiaHR0cHM6Ly9jZXJ0LmV4YW1wbGUuY29tL3Bhc3Nwb3J0LnBlbSJ9.eyJhdHRlc3QiOiJBIiwiZGVzdCI6eyJ0biI6WyIxMjEyNTU1MTIxMiJdfSwiaWF0IjoxNjk0ODcwNDAwLCJvcmlnIjp7InRuIjoiMTQxNTU1NTEyMzQifSwib3JpZ2lkIjoiMTIzZTQ1NjctZTg5Yi0xMmQzLWE0NTYtNDI2NjE0MTc0MDAwIn0.MEUCIQCrfKeMtvn9I6zXjE2VfGEcdjC2sm5M6cPqBvFyV9XkpQIgLxlvLNmC8DJEKexXZqTZ;info=<https://stir-provider.example.net/cert.cer>;alg=ES256;ppt="shaken"
Applications - Connecter l'appel à une application compatible RTC
| Valeur | Description |
|---|---|
type | Le type d'extrémité : app pour un Applications. |
user | Le nom d'utilisateur de l'utilisateur auquel se connecter. Ce nom d'utilisateur doit avoir été ajouté en tant qu'utilisateur. |
WebSocket - le WebSocket auquel se connecter
| Valeur | Description |
|---|---|
type | Le type d'extrémité : websocket pour une WebSocket. |
uri | L'URI de la websocket vers laquelle vous diffusez votre flux. |
content-type | Le type de média Internet pour l'audio que vous diffusez. Les valeurs possibles sont les suivantes : audio/l16;rate=16000 ou audio/l16;rate=8000. |
headers | Un objet JSON contenant les métadonnées souhaitées. Voir se connecter à un websocket par exemple les en-têtes. |
authorization | Configuration facultative définissant la manière dont le Authorization L'en-tête HTTP est défini dans la poignée de main d'ouverture de WebSocket. Utiliser l'en-tête type: "vonage" pour que l'API Voice inclue le même JWT que celui utilisé pour les webhooks signés dans le fichier Authorization (Bearer <JWT>). Utiliser type: "custom" pour envoyer un Authorization mot pour mot. Lors de l'utilisation de type: "custom"vous devez également fournir value contenant la valeur de l'en-tête brut à inclure (par exemple, Bearer eyJhbGciOi... ou ApiKey X9Z...). Lors de l'utilisation de type: "vonage", value est ignorée. Plus d'informations ici. |
SIP - le point d'extrémité SIP auquel se connecter
| Valeur | Description |
|---|---|
type | Le type d'extrémité : sip pour le SIP. |
uri | L'URI SIP du point d'accès auquel vous vous connectez dans le format suivant sip:rebekka@sip.example.com. Pour utiliser TLS et/ou SRTPcomprennent respectivement transport=tls ou media=srtp à l'URL avec le point-virgule ; comme délimiteur, par exemple : sip:rebekka@sip.example.com;transport=tls;media=srtp. Notez que cette propriété s'exclut mutuellement avec user et domain. |
user | Les user de l'URI. Il sera utilisé avec l'élément domain pour créer l'URI SIP complet. Si vous définissez cette propriété, vous devez également définir la propriété domain et quitter uri non paramétré. |
domain | L'identifiant d'un tronc créé à l'aide du tableau de bord. Il doit s'agir d'un domaine provisionné avec succès à l'aide de la fonction Tableau de bord SIP Trunking ou le API SIP programmable. Les URI fournis dans le tronc seront utilisés dans le cadre de la procédure d'appel d'offres. user pour créer l'URI SIP complet. Par exemple, si l'URI dans le tronc est : sip.example.com et user est example_userVonage enverra l'appel à example_user@sip.example.com. Si vous définissez cette propriété, vous devez laisser uri non défini. Notez que cette propriété se réfère au nom de domaine, et non à l'URI du domaine. |
headers | key => value des paires de chaînes contenant toutes les métadonnées dont vous avez besoin, par exemple { "location": "New York City", "occupation": "developer" }. Les en-têtes sont transmis dans le cadre de l'INVITE SIP en tant que X-key: value les en-têtes. Ainsi, dans l'exemple, ces en-têtes sont envoyés : X-location: New York City et X-occupation: developer. |
standardHeaders | Un objet JSON contenant une seule clé User-to-User. Elle est utilisée pour transmettre des informations d'utilisateur à utilisateur si elle est prise en charge par le fournisseur, conformément à la procédure suivante RFC 7433. Contrairement à headersla clé ne sera pas précédée de X-puisqu'il est normalisé. Par exemple : { "User-to-User": "342342ef34;encoding=hex" }. Vonage ne validera pas le contenu de l'en-tête User-to-User, si ce n'est pour s'assurer qu'il utilise des caractères valides et que le contenu ne dépasse pas le nombre maximal de caractères autorisé (256). |
Pour comprendre comment votre application peut recevoir et traiter les en-têtes personnalisés SIP à la place, consultez la page suivante sur SIP programmable. Si vous souhaitez savoir comment votre application peut envoyer des en-têtes SIP, consultez la page Guide de référence des webhooks de l'API Voice.
VBC - l'extension Vonage Business Cloud (VBC) pour se connecter à .
| Valeur | Description |
|---|---|
type | Le type d'extrémité : vbc pour une extension VBC. |
extension | le poste VBC auquel connecter l'appel. |
Parler
Les talk envoie un discours synthétisé à une conversation.
Le texte fourni dans l'action "talk" peut être soit simple, soit formaté à l'aide de la fonction SSML. Les balises SSML fournissent des instructions supplémentaires au synthétiseur de synthèse vocale qui vous permettent de régler la hauteur, la prononciation et de combiner des textes dans plusieurs langues. Les balises SSML sont basées sur XML et envoyées en ligne dans la chaîne JSON.
Par défaut, l'action talk est synchrone. Cependant, si vous définissez bargeIn à vrai vous devez définir un entrée plus loin dans la pile NCCO. Les exemples NCCO suivants montrent comment envoyer un message vocal synthétisé à une conversation ou à un appel :
[
{
"action": "talk",
"text": "You are listening to a Call made with Voice API"
}
]
[
{
"action": "talk",
"text": "Welcome to a Voice API I V R. ",
"language": "en-GB",
"bargeIn": false
},
{
"action": "talk",
"text": "Press 1 for maybe and 2 for not sure followed by the hash key",
"language": "en-GB",
"bargeIn": true
},
{
"action": "input",
"submitOnHash": true,
"eventUrl": ["https://example.com/ivr"]
}
]
[
{
"action": "talk",
"text": "<speak><prosody rate='fast'>I can speak fast.</prosody></speak>"
}
]
Vous pouvez utiliser les options suivantes pour contrôler un parler action :
| Option | Description | Exigée |
|---|---|---|
text | Une chaîne de 1 500 caractères maximum (à l'exclusion des balises SSML) contenant le message à synthétiser dans l'appel ou la conversation. Une simple virgule dans text ajoute une courte pause au discours synthétisé. Pour ajouter une pause plus longue, un break doit être utilisée dans le SSML. Pour utiliser la balise SSML vous devez entourer le texte d'une balise speak élément. | Oui |
bargeIn | Régler sur true de sorte que cette action se termine lorsque l'utilisateur interagit avec l'application, que ce soit par DTMF ou par entrée vocale ASR. Utilisez cette fonction pour permettre aux utilisateurs de choisir une option sans avoir à écouter l'intégralité du message dans votre application. Réponse vocale interactive (RVI). Si vous réglez bargeIn à true l'action de non-parole suivante dans la pile NCCO doit soit un input action. La valeur par défaut est false. Une fois bargeIn est fixé à true il restera true (même si bargeIn: false est défini dans une action suivante) jusqu'à ce qu'un input l'action est rencontrée | Non |
loop | Le nombre de fois où text est répétée avant que l'appel ne soit fermé. La valeur par défaut est 1. Réglez-la à 0 pour que la boucle soit infinie. | Non |
level | Le niveau de volume auquel la parole est jouée. Cette valeur peut être comprise entre -1 à 1 avec 0 étant la valeur par défaut. | Non |
language | La langue (BCP-47 ) pour le message que vous envoyez. Par défaut : en-US. Les valeurs possibles sont énumérées dans le Guide de synthèse vocale. | Non |
style | Le style vocal (tessiture, tessiture et timbre). Par défaut : 0. Les valeurs possibles sont énumérées dans le Guide de synthèse vocale. | Non |
premium | Régler sur true pour utiliser la version premium du style spécifié si elle est disponible, sinon la version standard sera utilisée. La valeur par défaut est false. Vous trouverez plus d'informations sur Premium Voices dans la rubrique Guide de synthèse vocale. | Non |
Paramètres de retour de la conversation
Voir Référence pour les webhooks pour les paramètres qui sont renvoyés au eventUrl.
Flux
Les stream permet d'envoyer un flux audio à une Conversation
Par défaut, l'action stream est synchrone. Cependant, si vous définissez bargeIn à vrai vous devez définir un entrée plus tard dans la pile NCCO.
L'exemple suivant du BCN montre comment envoyer un flux audio à une conversation ou à un appel :
[
{
"action": "stream",
"streamUrl": ["https://acme.com/streams/music.mp3"]
}
]
[
{
"action": "stream",
"streamUrl": ["https://acme.com/streams/announcement.mp3"],
"bargeIn": "true"
},
{
"action": "input",
"submitOnHash": "true",
"eventUrl": ["https://example.com/ivr"]
}
]
Vous pouvez utiliser les options suivantes pour contrôler un flux action :
| Option | Description | Exigée |
|---|---|---|
streamUrl | Un tableau contenant une URL unique vers un fichier audio mp3 ou wav (16 bits) à diffuser dans l'appel ou la conversation. | Oui |
level | Définit le niveau audio du flux dans l'intervalle -1 >=niveau<=1 avec une précision de 0,1. La valeur par défaut est 0. | Non |
bargeIn | Régler sur true de sorte que cette action se termine lorsque l'utilisateur interagit avec l'application, que ce soit par DTMF ou par entrée vocale ASR. Utilisez cette fonction pour permettre aux utilisateurs de choisir une option sans avoir à écouter l'intégralité du message dans votre application. Réponse vocale interactive (RVI) ). Si vous définissez bargeIn à true sur une action de flux supplémentaire, puis sur l'action non de flux suivante dans la pile NCCO doit soit un input action. La valeur par défaut est false.Une fois bargeIn est fixé à true il restera true (même si bargeIn: false est défini dans une action suivante) jusqu'à ce qu'un input est rencontrée. | Non |
loop | Le nombre de fois où audio est répétée avant la fermeture de l'appel. La valeur par défaut est 1. Régler sur 0 pour tourner en boucle à l'infini. | Non |
Le flux audio auquel il est fait référence doit être un fichier au format MP3 ou WAV. Si vous rencontrez des problèmes lors de la lecture du fichier, veuillez l'encoder selon les spécifications techniques suivantes : Quels types de fichiers audio préenregistrés puis-je utiliser ?
Si vous lisez le même fichier audio plusieurs fois, par exemple en utilisant le même enregistrement dans plusieurs appels, envisagez d'ajouter un paramètre Cache-Control à la réponse URL avec les valeurs appropriées.
Cache-Control: public, max-age=360000
Cela permet à Vonage de mettre en cache votre fichier audio au lieu de le télécharger à chaque fois, ce qui peut améliorer considérablement la performance et l'expérience de l'utilisateur. La mise en cache est prise en charge pour les URL HTTP et HTTPS.
Paramètres de retour des cours d'eau
Voir Référence pour les webhooks pour les paramètres qui sont renvoyés au eventUrl.
Entrée
Vous pouvez utiliser le input pour collecter les chiffres ou les paroles de la personne que vous appelez. Cette action est synchrone, Vonage traite l'entrée et la transmet dans l'interface de l'appelant. paramètres envoyé au eventUrl que vous configurez dans votre demande. Votre point de terminaison webhook doit renvoyer un autre NCCO qui remplace le NCCO existant et contrôle l'appel en fonction de l'entrée de l'utilisateur. Vous pouvez utiliser cette fonctionnalité pour créer un serveur vocal interactif (SVI). Par exemple, si votre utilisateur appuie sur 4 ou dit "Sales", vous renvoyez un relier NCCO qui transmet l'appel à votre service commercial.
L'exemple suivant du NCCO montre comment configurer un terminal IVR :
[
{
"action": "talk",
"text": "Please enter a digit or say something"
},
{
"action": "input",
"eventUrl": [
"https://example.com/ivr"
],
"type": [ "dtmf", "speech" ],
"dtmf": {
"maxDigits": 1
},
"speech": {
"context": [ "sales", "support" ]
}
}
]
L'exemple suivant du NCCO montre comment utiliser bargeIn pour permettre à un utilisateur d'interrompre un talk action. Il convient de noter qu'une action input action doit suivre toute action ayant un bargeIn (par exemple talk ou stream).
[
{
"action": "talk",
"text": "Please enter a digit or say something",
"bargeIn": true
},
{
"action": "input",
"eventUrl": [
"https://example.com/ivr"
],
"type": [ "dtmf", "speech" ],
"dtmf": {
"maxDigits": 1
},
"speech": {
"context": [ "sales", "support" ]
}
}
]
Les options suivantes peuvent être utilisées pour contrôler un input action :
| Option | Description | Exigée |
|---|---|---|
type | Type d'entrée acceptable, peut être défini comme [ "dtmf" ] pour l'entrée DTMF uniquement, [ "speech" ] pour ASR uniquement, ou [ "dtmf", "speech" ] pour les deux. | Oui |
dtmf | Paramètres DTMF. | Non |
speech | Paramètres de reconnaissance vocale. | Non |
mode | Mode de traitement des entrées, actuellement uniquement applicable aux DTMF. Les valeurs valides sont synchronous (par défaut) et asynchronous. Si elle est réglée sur asynchronous, tous Paramètres DTMF doit être laissé vide. En mode asynchrone, les chiffres sont envoyés un par un au webhook de l'événement en temps réel. En mode asynchrone, les chiffres sont envoyés un par un au webhook de l'événement en temps réel. synchronous les entrées sont contrôlées par les paramètres DTMF et sont envoyées par lots. | Non |
eventUrl | Vonage envoie les chiffres pressés par l'appelant à cette URL 1) après que l'appelant a appuyé sur la touche timeOut une pause dans l'activité ou lorsque # est appuyé pour DTMF ou 2) après que l'utilisateur a cessé de parler ou 30 secondes de parole pour l'entrée vocale. | Non |
eventMethod | La méthode HTTP utilisée pour envoyer des informations sur les événements à event_url La valeur par défaut est POST. | Non |
Paramètres d'entrée DTMF
Remarque : Ces réglages ne s'appliquent pas si le mode est fixé à asynchronous.
| Option | Description | Exigée |
|---|---|---|
timeOut | Le résultat de l'activité de l'appelant est envoyé au eventUrl point de terminaison du webhook timeOut secondes après la dernière action. La valeur par défaut est 3. Le maximum est de 10. | Non |
maxDigits | Le nombre de chiffres que l'utilisateur peut appuyer. La valeur maximale est de 20la valeur par défaut est 4 chiffres. | Non |
submitOnHash | Régler sur true afin que l'activité de l'appelant soit envoyée à votre point de terminaison webhook à l'adresse eventUrl après avoir appuyé sur #. Si # n'est pas enfoncé, le résultat est soumis après timeOut secondes. La valeur par défaut est false. En d'autres termes, le résultat est envoyé à votre point de terminaison webhook après que timeOut secondes. | Non |
Paramètres de reconnaissance vocale
| Option | Description | Exigée |
|---|---|---|
uuid | L'identifiant unique du segment de l'appel dont l'utilisateur doit capturer la parole, défini comme un tableau à un seul élément. Par défaut, il s'agit du premier segment joint de l'appel. | Non |
endOnSilence | Contrôle la durée pendant laquelle le système attendra que l'utilisateur cesse de parler pour décider que la saisie est terminée. La valeur par défaut est 2.0 (secondes). Les valeurs possibles sont comprises entre 0.4 secondes et 10.0 secondes. | Non |
language | Langue attendue du discours de l'utilisateur. Format : BCP-47. Défaut : en-US. Liste des langues prises en charge. | Non |
context | Tableau d'indices (chaînes) pour améliorer la qualité de la reconnaissance si certains mots sont attendus de la part de l'utilisateur. | Non |
startTimeout | Contrôle la durée pendant laquelle le système attend que l'utilisateur commence à parler. Les valeurs possibles sont comprises entre 1 seconde et 60 secondes. La valeur par défaut est 10. | Non |
maxDuration | Contrôle la durée maximale du discours (à partir du moment où l'utilisateur commence à parler). La valeur par défaut est 60 (secondes). Les valeurs possibles sont comprises entre 1 et 60 secondes. | Non |
saveAudio | Régler sur true donc l'enregistrement de la parole (recording_url) est envoyé à votre point de terminaison webhook à l'adresse eventUrl. La valeur par défaut est false. | Non |
sensitivity | Sensibilité audio utilisée pour différencier le bruit de la parole. Il s'agit d'une valeur entière où 10 représente une faible sensibilité et 100 une sensibilité maximale. La valeur par défaut est 90. | Non |
L'exemple suivant montre les paramètres envoyés au eventUrl pour l'entrée DTMF :
{
"speech": { "results": [ ] },
"dtmf": {
"digits": "1234",
"timed_out": true
},
"from": "15551234567",
"to": "15557654321",
"uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab",
"timestamp": "2020-01-01T14:00:00.000Z"
}
L'exemple suivant montre les paramètres renvoyés au eventUrl pour la saisie vocale :
{
"speech": {
"recording_url": "https://api-us.nexmo.com/v1/files/eeeeeee-ffff-0123-4567-0123456789ab",
"timeout_reason": "end_on_silence_timeout",
"results": [
{
"confidence": "0.9405097",
"text": "sales"
},
{
"confidence": "0.70543784",
"text": "sails"
},
{
"confidence": "0.5949854",
"text": "sale"
}
]
},
"dtmf": {
"digits": null,
"timed_out": false
},
"from": "15551234567",
"to": "15557654321",
"uuid": "aaaaaaaa-bbbb-cccc-dddd-0123456789ab",
"conversation_uuid": "bbbbbbbb-cccc-dddd-eeee-0123456789ab",
"timestamp": "2020-01-01T14:00:00.000Z"
}
Paramètres de retour d'entrée
Voir Référence pour les webhooks pour les paramètres d'entrée qui sont renvoyés au eventUrl.
Notifier
Utiliser le notify pour envoyer une charge utile personnalisée à l'URL de votre événement. Votre point de terminaison webhook peut renvoyer un autre NCCO qui remplace le NCCO existant ou renvoyer un payload vide, ce qui signifie que le NCCO existant continuera à s'exécuter.
[
{
"action": "notify",
"payload": {
"foo": "bar"
},
"eventUrl": [
"https://example.com/webhooks/event"
],
"eventMethod": "POST"
}
]
| Option | Description | Exigée |
|---|---|---|
payload | Le corps JSON à envoyer à l'URL de l'événement. | Oui |
eventUrl | L'URL à laquelle envoyer les événements. Si vous renvoyez un NCCO lorsque vous recevez une notification, il remplacera le NCCO actuel. | Oui |
eventMethod | La méthode HTTP à utiliser pour l'envoi de payload à votre eventUrl. | Non |
Messages vocaux Paramètres vocaux
| Option | Description | Exigée |
|---|---|---|
language | La langue (BCP-47 ) pour les invites. Par défaut : en-US. Les valeurs possibles sont énumérées dans le Guide de synthèse vocale. | Non |
style | Le style vocal (tessiture, tessiture et timbre). Par défaut : 0. Les valeurs possibles sont énumérées dans le Guide de synthèse vocale. | Non |
Attendre
Vous pouvez utiliser le wait pour ajouter une période d'attente et suspendre l'exécution du BCN en cours pendant un nombre de secondes spécifié.
L'action est synchrone. La période d'attente commence lorsque l'action d'attente est exécutée dans le BCN et se termine après la valeur de temporisation fournie ou par défaut. À ce stade, le BCN reprend l'exécution.
L'action timeout est un nombre flottant. Les valeurs valides sont comprises entre 0,1 seconde et 7200 secondes. Les valeurs inférieures à 0,1 prennent par défaut la valeur 0,1 seconde, et les valeurs supérieures à 7200 prennent par défaut la valeur 7200 secondes. Si elle n'est pas spécifiée, la valeur par défaut est de 10 secondes.
Notesi vous avez besoin d'un rappel informant de la fin de l'action d'attente, ajoutez une action de notification après l'action d'attente.
L'exemple suivant du BCN montre comment exécuter l'action d'attente :
[
{
"action": "talk",
"text": "Welcome to a Vonage moderated conference"
},
{
"action": "wait",
"timeout": 0.5
},
{
"action": "talk",
"text": "We will connect you when an agent is available"
}
]
Vous pouvez utiliser les options suivantes pour contrôler un wait action :
| Option | Description | Exigée |
|---|---|---|
timeout | Contrôle la durée de la période d'attente avant l'exécution de l'action suivante dans le NCCO. Ce paramètre est une valeur flottante. Les valeurs valides sont comprises entre 0,1 seconde et 7 200 secondes. Les valeurs inférieures à 0,1 prennent par défaut la valeur 0,1 seconde, et les valeurs supérieures à 7200 prennent par défaut la valeur 7200 secondes. La valeur par défaut est 10. | Non |
Transfert
Les transfer est synchrone. Vous pouvez l'utiliser pour déplacer les segments d'appel d'une conversation en cours vers une autre conversation existante. L'action transfer est terminée pour la conversation en cours, et le NCCO de la conversation cible continue à contrôler le comportement de la conversation cible. Tous les segments de la conversation en cours sont transférés dans la conversation cible, en respectant les paramètres audio (canHear, canSpeak, mute) s'ils sont fournis.
L'exemple suivant du BCN montre comment exécuter l'action de transfert :
[
...
{
"action": "transfer",
"conversationId": "CON-f972836a-550f-45fa-956c-12a2ab5b7d22",
"canHear": [ "9c132730-8c22-4760-a4dc-40502f05b444" ]
}
...
]
Vous pouvez utiliser les options suivantes pour contrôler une action de transfert :
| Option | Description | Exigée |
|---|---|---|
conversation_id | ID de la conversation cible, défini comme une chaîne de caractères. | Oui |
canHear | Liste des UUID de jambe que ce participant peut entendre, définie comme un tableau de chaînes. S'il n'est pas fourni, le participant peut entendre tout le monde. Si une liste vide est fournie, le participant n'entendra aucun autre participant. | Non |
canSpeak | Une liste d'UUID de jambe que ce participant peut entendre, définie comme un tableau de chaînes. S'il n'est pas fourni, le participant peut être entendu par tout le monde. Si une liste vide est fournie, le participant ne sera entendu par personne. | Non |
mute | La valeur "true" permet de mettre le participant en sourdine. Le son du participant ne sera pas diffusé dans la conversation et ne sera pas enregistré. Lors de l'utilisation de canSpeak, le mute n'est pas pris en charge. | Non |