Collecter les entrées utilisateur avec l’action de reconnaissance
Ce guide vous permet de vous familiariser avec la reconnaissance des entrées DTMF fournies par les participants via le Kit de développement logiciel (SDK) Automatisation des appels d’Azure Communication Services.
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement..
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Notez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Dernière version de la bibliothèque .NET pour votre système d’exploitation.
- La dernière version du package NuGet.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Spécifications techniques
Les paramètres suivants sont disponibles pour personnaliser la fonction Recognize :
Paramètre | Type | Par défaut (si non spécifié) | Description | Obligatoire ou facultatif |
---|---|---|---|---|
Prompt (Pour plus d’informations, consultez Personnaliser les invites vocales destinées aux utilisateurs avec l’action de lecture) |
FileSource, TextSource | Non défini | Le message à lire avant de reconnaître l’entrée. | Facultatif |
InterToneTimeout |
TimeSpan | 2 secondes Min : 1 seconde Max : 60 secondes |
Limite de temps en secondes pendant laquelle Azure Communication Services attend que l’appelant appuie sur un autre chiffre (délai d’expiration inter-chiffres). | Facultatif |
InitialSegmentationSilenceTimeoutInSeconds |
Integer | 0,5 secondes | Durée pendant laquelle l’action Recognize attend l’entrée avant de considérer que le délai d’expiration a été atteint. Consultez Comment reconnaître la voix. | Facultatif |
RecognizeInputsType |
Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf , choices , speech et speechordtmf . |
Requis |
InitialSilenceTimeout |
TimeSpan | 5 secondes Min : 0 seconde Max : 300 secondes (DTMF) Max : 20 secondes (Choix) Max : 20 secondes (Message) |
Le délai d’expiration du silence initial ajuste la quantité d’audio non vocal autorisée avant une expression avant que la tentative de reconnaissance se termine par un résultat « aucune correspondance ». Consultez Comment reconnaître la voix. | Facultatif |
MaxTonesToCollect |
Integer | Pas de valeur par défaut Min : 1 |
Nombre de chiffres attendus par un développeur en tant qu’entrée du participant. | Requis |
StopTones |
IEnumeration<DtmfTone> | Non défini | Le chiffre sur lequel les participants peuvent appuyer pour échapper à un événement DTMF de lot. | Facultatif |
InterruptPrompt |
Bool | True | Si le participant a la possibilité d’interrompre le playMessage en appuyant sur un chiffre. | Facultatif |
InterruptCallMediaOperation |
Bool | True | Si cet indicateur est défini, il interrompt l’opération de média d’appel actuelle. Par exemple, si un audio est lu, il interrompt cette opération et lance la reconnaissance. | Facultatif |
OperationContext |
Chaîne | Non défini | Chaîne que les développeurs peuvent passer à mi-action, utile pour permettre aux développeurs de stocker le contexte concernant les événements qu’ils reçoivent. | Facultatif |
Phrases |
Chaîne | Non défini | Liste des expressions associées à l’étiquette. Entendre une de ces expressions entraîne une reconnaissance réussie. | Requis |
Tone |
Chaîne | Non défini | Tonalité à reconnaître, si l’utilisateur décide d’appuyer sur un chiffre au lieu d’utiliser la fonctionnalité de message. | Facultatif |
Label |
Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Language |
Chaîne | En-us | La langue utilisée pour reconnaître le message. | Facultatif |
EndSilenceTimeout |
TimeSpan | 0,5 secondes | La dernière pause de l’orateur utilisée pour détecter le résultat final généré en tant que message. | Facultatif |
Remarque
Dans les situations où une numérotation DTMF et de la voix se trouvent dans le recognizeInputsType
, l’action de reconnaissance agit sur le premier type d’entrée reçu. Par exemple, si l’utilisateur appuie d’abord sur un numéro du pavé numérique, l’action de reconnaissance considère cela comme un événement DTMF et continue d’écouter les tonalités DTMF. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cela comme un événement de reconnaissance vocale et écoute l’entrée vocale.
Créer une application C#
Dans la fenêtre de console de votre système d’exploitation, utilisez la commande dotnet
pour créer une application web.
dotnet new web -n MyApplication
Installez le package NuGet
Obtenir le package NuGet auprès de la Galerie NuGet | Azure.Communication.CallAutomation. Suivez les instructions pour installer le package.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour plus d’informations sur la façon d’effectuer un appel, consultez Démarrage rapide : Effectuer un appel sortant. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");
var answerCallOptions = new AnswerCallOptions("<Incoming call context once call is connected>", new Uri("<https://sample-callback-uri>"))
{
CallIntelligenceOptions = new CallIntelligenceOptions() { CognitiveServicesEndpoint = new Uri("<Azure Cognitive Services Endpoint>") }
};
var answerCallResult = await callAutomationClient.AnswerCallAsync(answerCallOptions);
Appeler l’action Recognize
Lorsque votre application répond à l’appel, vous pouvez fournir des informations sur la reconnaissance des entrées des participants et la lecture d’une invite.
DTMF
var maxTonesToCollect = 3;
String textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeDtmfOptions(targetParticipant, maxTonesToCollect) {
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
Prompt = playSource,
InterToneTimeout = TimeSpan.FromSeconds(5),
InterruptPrompt = true,
StopTones = new DtmfTone[] {
DtmfTone.Pound
},
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Pour les flux de reconnaissance vocale, l’action Reconnaître d’Automatisation des appels prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles vocaux personnalisés peuvent être utiles quand vous créez une application qui doit écouter des mots complexes que les modèles de reconnaissance vocale par défaut peuvent ne pas comprendre. C’est par exemple le cas de la création d’une application pour le secteur de la télémédecine, où votre agent virtuel doit être en mesure de reconnaître des termes médicaux. Vous pouvez en savoir plus dans Créer un projet de reconnaissance vocale personnalisée.
Choix de reconnaissance vocale
var choices = new List < RecognitionChoice > {
new RecognitionChoice("Confirm", new List < string > {
"Confirm",
"First",
"One"
}) {
Tone = DtmfTone.One
},
new RecognitionChoice("Cancel", new List < string > {
"Cancel",
"Second",
"Two"
}) {
Tone = DtmfTone.Two
}
};
String textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeChoiceOptions(targetParticipant, choices) {
InterruptPrompt = true,
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
Prompt = playSource,
OperationContext = "AppointmentReminderMenu",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Reconnaissance vocale
String textToPlay = "Hi, how can I help you today?";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOptions(targetParticipant) {
Prompt = playSource,
EndSilenceTimeout = TimeSpan.FromMilliseconds(1000),
OperationContext = "OpenQuestionSpeech",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Reconnaissance vocale ou DTMF
var maxTonesToCollect = 1;
String textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOrDtmfOptions(targetParticipant, maxTonesToCollect)
{
Prompt = playSource,
EndSilenceTimeout = TimeSpan.FromMilliseconds(1000),
InitialSilenceTimeout = TimeSpan.FromSeconds(30),
InterruptPrompt = true,
OperationContext = "OpenQuestionSpeechOrDtmf",
//Only add the SpeechModelEndpointId if you have a custom speech model you would like to use
SpeechModelEndpointId = "YourCustomSpeechModelEndpointId"
};
var recognizeResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.StartRecognizingAsync(recognizeOptions);
Remarque
Si les paramètres ne sont pas définis, les valeurs par défaut sont appliquées si possible.
Réception des mises à jour des événements Recognize
Les développeurs peuvent s’abonner aux événements RecognizeCompleted
et RecognizeFailed
sur le rappel du webhook inscrit. Utilisez ce rappel avec une logique métier dans votre application pour déterminer les étapes suivantes quand un des événements se produit.
Exemple de désérialisation de l’événement RecognizeCompleted :
if (acsEvent is RecognizeCompleted recognizeCompleted)
{
switch (recognizeCompleted.RecognizeResult)
{
case DtmfResult dtmfResult:
//Take action for Recognition through DTMF
var tones = dtmfResult.Tones;
logger.LogInformation("Recognize completed succesfully, tones={tones}", tones);
break;
case ChoiceResult choiceResult:
// Take action for Recognition through Choices
var labelDetected = choiceResult.Label;
var phraseDetected = choiceResult.RecognizedPhrase;
// If choice is detected by phrase, choiceResult.RecognizedPhrase will have the phrase detected,
// If choice is detected using dtmf tone, phrase will be null
logger.LogInformation("Recognize completed succesfully, labelDetected={labelDetected}, phraseDetected={phraseDetected}", labelDetected, phraseDetected);
break;
case SpeechResult speechResult:
// Take action for Recognition through Choices
var text = speechResult.Speech;
logger.LogInformation("Recognize completed succesfully, text={text}", text);
break;
default:
logger.LogInformation("Recognize completed succesfully, recognizeResult={recognizeResult}", recognizeCompleted.RecognizeResult);
break;
}
}
Exemple de désérialisation de l’événement RecognizeFailed :
if (acsEvent is RecognizeFailed recognizeFailed)
{
if (MediaEventReasonCode.RecognizeInitialSilenceTimedOut.Equals(recognizeFailed.ReasonCode))
{
// Take action for time out
logger.LogInformation("Recognition failed: initial silencev time out");
}
else if (MediaEventReasonCode.RecognizeSpeechOptionNotMatched.Equals(recognizeFailed.ReasonCode))
{
// Take action for option not matched
logger.LogInformation("Recognition failed: speech option not matched");
}
else if (MediaEventReasonCode.RecognizeIncorrectToneDetected.Equals(recognizeFailed.ReasonCode))
{
// Take action for incorrect tone
logger.LogInformation("Recognition failed: incorrect tone detected");
}
else
{
logger.LogInformation("Recognition failed, result={result}, context={context}", recognizeFailed.ResultInformation?.Message, recognizeFailed.OperationContext);
}
}
Exemple de désérialisation de l’événement RecognizeCanceled :
if (acsEvent is RecognizeCanceled { OperationContext: "AppointmentReminderMenu" })
{
logger.LogInformation($"RecognizeCanceled event received for call connection id: {@event.CallConnectionId}");
//Take action on recognize canceled operation
await callConnection.HangUpAsync(forEveryone: true);
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement..
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Kit de développement Java version 8 ou ultérieure.
- Apache Maven.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Spécifications techniques
Les paramètres suivants sont disponibles pour personnaliser la fonction Recognize :
Paramètre | Type | Par défaut (si non spécifié) | Description | Obligatoire ou facultatif |
---|---|---|---|---|
Prompt (Pour plus d’informations, consultez Personnaliser les invites vocales destinées aux utilisateurs avec l’action de lecture) |
FileSource, TextSource | Non défini | Le message à lire avant de reconnaître l’entrée. | Facultatif |
InterToneTimeout |
TimeSpan | 2 secondes Min : 1 seconde Max : 60 secondes |
Limite de temps en secondes pendant laquelle Azure Communication Services attend que l’appelant appuie sur un autre chiffre (délai d’expiration inter-chiffres). | Facultatif |
InitialSegmentationSilenceTimeoutInSeconds |
Integer | 0,5 secondes | Durée pendant laquelle l’action Recognize attend l’entrée avant de considérer que le délai d’expiration a été atteint. Consultez Comment reconnaître la voix. | Facultatif |
RecognizeInputsType |
Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf , choices , speech et speechordtmf . |
Requis |
InitialSilenceTimeout |
TimeSpan | 5 secondes Min : 0 seconde Max : 300 secondes (DTMF) Max : 20 secondes (Choix) Max : 20 secondes (Message) |
Le délai d’expiration du silence initial ajuste la quantité d’audio non vocal autorisée avant une expression avant que la tentative de reconnaissance se termine par un résultat « aucune correspondance ». Consultez Comment reconnaître la voix. | Facultatif |
MaxTonesToCollect |
Integer | Pas de valeur par défaut Min : 1 |
Nombre de chiffres attendus par un développeur en tant qu’entrée du participant. | Requis |
StopTones |
IEnumeration<DtmfTone> | Non défini | Le chiffre sur lequel les participants peuvent appuyer pour échapper à un événement DTMF de lot. | Facultatif |
InterruptPrompt |
Bool | True | Si le participant a la possibilité d’interrompre le playMessage en appuyant sur un chiffre. | Facultatif |
InterruptCallMediaOperation |
Bool | True | Si cet indicateur est défini, il interrompt l’opération de média d’appel actuelle. Par exemple, si un audio est lu, il interrompt cette opération et lance la reconnaissance. | Facultatif |
OperationContext |
Chaîne | Non défini | Chaîne que les développeurs peuvent passer à mi-action, utile pour permettre aux développeurs de stocker le contexte concernant les événements qu’ils reçoivent. | Facultatif |
Phrases |
Chaîne | Non défini | Liste des expressions associées à l’étiquette. Entendre une de ces expressions entraîne une reconnaissance réussie. | Requis |
Tone |
Chaîne | Non défini | Tonalité à reconnaître, si l’utilisateur décide d’appuyer sur un chiffre au lieu d’utiliser la fonctionnalité de message. | Facultatif |
Label |
Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Language |
Chaîne | En-us | La langue utilisée pour reconnaître le message. | Facultatif |
EndSilenceTimeout |
TimeSpan | 0,5 secondes | La dernière pause de l’orateur utilisée pour détecter le résultat final généré en tant que message. | Facultatif |
Remarque
Dans les situations où une numérotation DTMF et de la voix se trouvent dans le recognizeInputsType
, l’action de reconnaissance agit sur le premier type d’entrée reçu. Par exemple, si l’utilisateur appuie d’abord sur un numéro du pavé numérique, l’action de reconnaissance considère cela comme un événement DTMF et continue d’écouter les tonalités DTMF. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cela comme un événement de reconnaissance vocale et écoute l’entrée vocale.
Créer une application Java
Dans votre terminal ou votre fenêtre Commande, accédez au répertoire dans lequel vous souhaitez créer votre application Java. Exécutez la mvn
commande pour générer le projet Java à partir du modèle de démarrage rapide maven-archetype.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
La commande mvn
crée un répertoire portant le même nom que l’argument artifactId
. Le répertoire src/main/java
contient le code source du projet. Le répertoire src/test/java
contient la source du test.
Notez que l’étape generate
a créé un répertoire portant le même nom que le artifactId
. Le répertoire src/main/java
contient le code source. Le répertoire src/test/java
contient des tests. Le fichier pom.xml
est le POM (Project Object Model) du projet.
Mettez à jour le fichier POM de vos applications pour utiliser Java 8 ou version ultérieure.
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Ajouter des références de package
Dans votre fichier POM, ajoutez la référence suivante pour le projet :
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour plus d’informations sur la façon d’effectuer un appel, consultez Démarrage rapide : Effectuer un appel sortant. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions().setCognitiveServicesEndpoint("https://sample-cognitive-service-resource.cognitiveservices.azure.com/");
answerCallOptions = new AnswerCallOptions("<Incoming call context>", "<https://sample-callback-uri>").setCallIntelligenceOptions(callIntelligenceOptions);
Response < AnswerCallResult > answerCallResult = callAutomationClient
.answerCallWithResponse(answerCallOptions)
.block();
Appeler l’action Recognize
Lorsque votre application répond à l’appel, vous pouvez fournir des informations sur la reconnaissance des entrées des participants et la lecture d’une invite.
DTMF
var maxTonesToCollect = 3;
String textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeDtmfOptions(targetParticipant, maxTonesToCollect)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setInterToneTimeout(Duration.ofSeconds(5))
.setInterruptPrompt(true)
.setStopTones(Arrays.asList(DtmfTone.POUND));
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
log.info("Start recognizing result: " + recognizeResponse.getStatusCode());
Pour les flux de reconnaissance vocale, l’action Reconnaître d’Automatisation des appels prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles vocaux personnalisés peuvent être utiles quand vous créez une application qui doit écouter des mots complexes que les modèles de reconnaissance vocale par défaut peuvent ne pas comprendre. C’est par exemple le cas de la création d’une application pour le secteur de la télémédecine, où votre agent virtuel doit être en mesure de reconnaître des termes médicaux. Vous pouvez en savoir plus dans Créer un projet de reconnaissance vocale personnalisée.
Choix de reconnaissance vocale
var choices = Arrays.asList(
new RecognitionChoice()
.setLabel("Confirm")
.setPhrases(Arrays.asList("Confirm", "First", "One"))
.setTone(DtmfTone.ONE),
new RecognitionChoice()
.setLabel("Cancel")
.setPhrases(Arrays.asList("Cancel", "Second", "Two"))
.setTone(DtmfTone.TWO)
);
String textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeChoiceOptions(targetParticipant, choices)
.setInterruptPrompt(true)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setPlayPrompt(playSource)
.setOperationContext("AppointmentReminderMenu")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Reconnaissance vocale
String textToPlay = "Hi, how can I help you today?";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOptions(targetParticipant, Duration.ofMillis(1000))
.setPlayPrompt(playSource)
.setOperationContext("OpenQuestionSpeech")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Reconnaissance vocale ou DTMF
var maxTonesToCollect = 1;
String textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
var playSource = new TextSource()
.setText(textToPlay)
.setVoiceName("en-US-ElizabethNeural");
var recognizeOptions = new CallMediaRecognizeSpeechOrDtmfOptions(targetParticipant, maxTonesToCollect, Duration.ofMillis(1000))
.setPlayPrompt(playSource)
.setInitialSilenceTimeout(Duration.ofSeconds(30))
.setInterruptPrompt(true)
.setOperationContext("OpenQuestionSpeechOrDtmf")
//Only add the SpeechRecognitionModelEndpointId if you have a custom speech model you would like to use
.setSpeechRecognitionModelEndpointId("YourCustomSpeechModelEndpointID");
var recognizeResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.startRecognizingWithResponse(recognizeOptions)
.block();
Remarque
Si les paramètres ne sont pas définis, les valeurs par défaut sont appliquées si possible.
Réception des mises à jour des événements Recognize
Les développeurs peuvent s’abonner aux événements RecognizeCompleted
et RecognizeFailed
sur le rappel du webhook inscrit. Utilisez ce rappel avec une logique métier dans votre application pour déterminer les étapes suivantes quand un des événements se produit.
Exemple de désérialisation de l’événement RecognizeCompleted :
if (acsEvent instanceof RecognizeCompleted) {
RecognizeCompleted event = (RecognizeCompleted) acsEvent;
RecognizeResult recognizeResult = event.getRecognizeResult().get();
if (recognizeResult instanceof DtmfResult) {
// Take action on collect tones
DtmfResult dtmfResult = (DtmfResult) recognizeResult;
List<DtmfTone> tones = dtmfResult.getTones();
log.info("Recognition completed, tones=" + tones + ", context=" + event.getOperationContext());
} else if (recognizeResult instanceof ChoiceResult) {
ChoiceResult collectChoiceResult = (ChoiceResult) recognizeResult;
String labelDetected = collectChoiceResult.getLabel();
String phraseDetected = collectChoiceResult.getRecognizedPhrase();
log.info("Recognition completed, labelDetected=" + labelDetected + ", phraseDetected=" + phraseDetected + ", context=" + event.getOperationContext());
} else if (recognizeResult instanceof SpeechResult) {
SpeechResult speechResult = (SpeechResult) recognizeResult;
String text = speechResult.getSpeech();
log.info("Recognition completed, text=" + text + ", context=" + event.getOperationContext());
} else {
log.info("Recognition completed, result=" + recognizeResult + ", context=" + event.getOperationContext());
}
}
Exemple de désérialisation de l’événement RecognizeFailed :
if (acsEvent instanceof RecognizeFailed) {
RecognizeFailed event = (RecognizeFailed) acsEvent;
if (ReasonCode.Recognize.INITIAL_SILENCE_TIMEOUT.equals(event.getReasonCode())) {
// Take action for time out
log.info("Recognition failed: initial silence time out");
} else if (ReasonCode.Recognize.SPEECH_OPTION_NOT_MATCHED.equals(event.getReasonCode())) {
// Take action for option not matched
log.info("Recognition failed: speech option not matched");
} else if (ReasonCode.Recognize.DMTF_OPTION_MATCHED.equals(event.getReasonCode())) {
// Take action for incorrect tone
log.info("Recognition failed: incorrect tone detected");
} else {
log.info("Recognition failed, result=" + event.getResultInformation().getMessage() + ", context=" + event.getOperationContext());
}
}
Exemple de désérialisation de l’événement RecognizeCanceled :
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Notez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Installez Node.js, vous pouvez le faire à partir de leur site officiel.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Spécifications techniques
Les paramètres suivants sont disponibles pour personnaliser la fonction Recognize :
Paramètre | Type | Par défaut (si non spécifié) | Description | Obligatoire ou facultatif |
---|---|---|---|---|
Prompt (Pour plus d’informations, consultez Personnaliser les invites vocales destinées aux utilisateurs avec l’action de lecture) |
FileSource, TextSource | Non défini | Le message à lire avant de reconnaître l’entrée. | Facultatif |
InterToneTimeout |
TimeSpan | 2 secondes Min : 1 seconde Max : 60 secondes |
Limite de temps en secondes pendant laquelle Azure Communication Services attend que l’appelant appuie sur un autre chiffre (délai d’expiration inter-chiffres). | Facultatif |
InitialSegmentationSilenceTimeoutInSeconds |
Integer | 0,5 secondes | Durée pendant laquelle l’action Recognize attend l’entrée avant de considérer que le délai d’expiration a été atteint. Consultez Comment reconnaître la voix. | Facultatif |
RecognizeInputsType |
Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf , choices , speech et speechordtmf . |
Requis |
InitialSilenceTimeout |
TimeSpan | 5 secondes Min : 0 seconde Max : 300 secondes (DTMF) Max : 20 secondes (Choix) Max : 20 secondes (Message) |
Le délai d’expiration du silence initial ajuste la quantité d’audio non vocal autorisée avant une expression avant que la tentative de reconnaissance se termine par un résultat « aucune correspondance ». Consultez Comment reconnaître la voix. | Facultatif |
MaxTonesToCollect |
Integer | Pas de valeur par défaut Min : 1 |
Nombre de chiffres attendus par un développeur en tant qu’entrée du participant. | Requis |
StopTones |
IEnumeration<DtmfTone> | Non défini | Le chiffre sur lequel les participants peuvent appuyer pour échapper à un événement DTMF de lot. | Facultatif |
InterruptPrompt |
Bool | True | Si le participant a la possibilité d’interrompre le playMessage en appuyant sur un chiffre. | Facultatif |
InterruptCallMediaOperation |
Bool | True | Si cet indicateur est défini, il interrompt l’opération de média d’appel actuelle. Par exemple, si un audio est lu, il interrompt cette opération et lance la reconnaissance. | Facultatif |
OperationContext |
Chaîne | Non défini | Chaîne que les développeurs peuvent passer à mi-action, utile pour permettre aux développeurs de stocker le contexte concernant les événements qu’ils reçoivent. | Facultatif |
Phrases |
Chaîne | Non défini | Liste des expressions associées à l’étiquette. Entendre une de ces expressions entraîne une reconnaissance réussie. | Requis |
Tone |
Chaîne | Non défini | Tonalité à reconnaître, si l’utilisateur décide d’appuyer sur un chiffre au lieu d’utiliser la fonctionnalité de message. | Facultatif |
Label |
Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Language |
Chaîne | En-us | La langue utilisée pour reconnaître le message. | Facultatif |
EndSilenceTimeout |
TimeSpan | 0,5 secondes | La dernière pause de l’orateur utilisée pour détecter le résultat final généré en tant que message. | Facultatif |
Remarque
Dans les situations où une numérotation DTMF et de la voix se trouvent dans le recognizeInputsType
, l’action de reconnaissance agit sur le premier type d’entrée reçu. Par exemple, si l’utilisateur appuie d’abord sur un numéro du pavé numérique, l’action de reconnaissance considère cela comme un événement DTMF et continue d’écouter les tonalités DTMF. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cela comme un événement de reconnaissance vocale et écoute l’entrée vocale.
Créer une application JavaScript
Créez une nouvelle application JavaScript dans votre répertoire de projet. Initialisez un nouveau projet Node.js en exécutant la commande suivante. Ceci crée un fichier package.json pour votre projet, qui gère les dépendances de votre projet.
npm init -y
Installez le package d’automation des appels d’Azure Communication Services
npm install @azure/communication-call-automation
Créez un fichier JavaScript dans votre répertoire de projet, en le nommant par exemple app.js
. Écrivez votre code JavaScript dans ce fichier.
Exécutez votre application en utilisant Node.js à l’aide de la commande suivante.
node app.js
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour plus d’informations sur la façon d’effectuer un appel, consultez Démarrage rapide : Effectuer un appel sortant.
Appeler l’action Recognize
Lorsque votre application répond à l’appel, vous pouvez fournir des informations sur la reconnaissance des entrées des participants et la lecture d’une invite.
DTMF
const maxTonesToCollect = 3;
const textToPlay = "Welcome to Contoso, please enter 3 DTMF.";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeDtmfOptions = {
maxTonesToCollect: maxTonesToCollect,
initialSilenceTimeoutInSeconds: 30,
playPrompt: playSource,
interToneTimeoutInSeconds: 5,
interruptPrompt: true,
stopDtmfTones: [ DtmfTone.Pound ],
kind: "callMediaRecognizeDtmfOptions"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Pour les flux de reconnaissance vocale, l’action Reconnaître d’Automatisation des appels prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles vocaux personnalisés peuvent être utiles quand vous créez une application qui doit écouter des mots complexes que les modèles de reconnaissance vocale par défaut peuvent ne pas comprendre. C’est par exemple le cas de la création d’une application pour le secteur de la télémédecine, où votre agent virtuel doit être en mesure de reconnaître des termes médicaux. Vous pouvez en savoir plus dans Créer un projet de reconnaissance vocale personnalisée.
Choix de reconnaissance vocale
const choices = [
{
label: "Confirm",
phrases: [ "Confirm", "First", "One" ],
tone: DtmfTone.One
},
{
label: "Cancel",
phrases: [ "Cancel", "Second", "Two" ],
tone: DtmfTone.Two
}
];
const textToPlay = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeChoiceOptions = {
choices: choices,
interruptPrompt: true,
initialSilenceTimeoutInSeconds: 30,
playPrompt: playSource,
operationContext: "AppointmentReminderMenu",
kind: "callMediaRecognizeChoiceOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Reconnaissance vocale
const textToPlay = "Hi, how can I help you today?";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeSpeechOptions = {
endSilenceTimeoutInSeconds: 1,
playPrompt: playSource,
operationContext: "OpenQuestionSpeech",
kind: "callMediaRecognizeSpeechOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Reconnaissance vocale ou DTMF
const maxTonesToCollect = 1;
const textToPlay = "Hi, how can I help you today, you can press 0 to speak to an agent?";
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" };
const recognizeOptions: CallMediaRecognizeSpeechOrDtmfOptions = {
maxTonesToCollect: maxTonesToCollect,
endSilenceTimeoutInSeconds: 1,
playPrompt: playSource,
initialSilenceTimeoutInSeconds: 30,
interruptPrompt: true,
operationContext: "OpenQuestionSpeechOrDtmf",
kind: "callMediaRecognizeSpeechOrDtmfOptions",
//Only add the speechRecognitionModelEndpointId if you have a custom speech model you would like to use
speechRecognitionModelEndpointId: "YourCustomSpeechEndpointId"
};
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.startRecognizing(targetParticipant, recognizeOptions);
Remarque
Si les paramètres ne sont pas définis, les valeurs par défaut sont appliquées si possible.
Réception des mises à jour des événements Recognize
Les développeurs peuvent s’abonner aux événements RecognizeCompleted
et RecognizeFailed
sur le rappel du webhook inscrit. Utilisez ce rappel avec une logique métier dans votre application pour déterminer les étapes suivantes quand un des événements se produit.
Exemple de désérialisation de l’événement RecognizeCompleted :
if (event.type === "Microsoft.Communication.RecognizeCompleted") {
if (eventData.recognitionType === "dtmf") {
const tones = eventData.dtmfResult.tones;
console.log("Recognition completed, tones=%s, context=%s", tones, eventData.operationContext);
} else if (eventData.recognitionType === "choices") {
const labelDetected = eventData.choiceResult.label;
const phraseDetected = eventData.choiceResult.recognizedPhrase;
console.log("Recognition completed, labelDetected=%s, phraseDetected=%s, context=%s", labelDetected, phraseDetected, eventData.operationContext);
} else if (eventData.recognitionType === "speech") {
const text = eventData.speechResult.speech;
console.log("Recognition completed, text=%s, context=%s", text, eventData.operationContext);
} else {
console.log("Recognition completed: data=%s", JSON.stringify(eventData, null, 2));
}
}
Exemple de désérialisation de l’événement RecognizeFailed :
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Exemple de désérialisation de l’événement RecognizeCanceled :
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Notez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Installez Python depuis Python.org.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Spécifications techniques
Les paramètres suivants sont disponibles pour personnaliser la fonction Recognize :
Paramètre | Type | Par défaut (si non spécifié) | Description | Obligatoire ou facultatif |
---|---|---|---|---|
Prompt (Pour plus d’informations, consultez Personnaliser les invites vocales destinées aux utilisateurs avec l’action de lecture) |
FileSource, TextSource | Non défini | Le message à lire avant de reconnaître l’entrée. | Facultatif |
InterToneTimeout |
TimeSpan | 2 secondes Min : 1 seconde Max : 60 secondes |
Limite de temps en secondes pendant laquelle Azure Communication Services attend que l’appelant appuie sur un autre chiffre (délai d’expiration inter-chiffres). | Facultatif |
InitialSegmentationSilenceTimeoutInSeconds |
Integer | 0,5 secondes | Durée pendant laquelle l’action Recognize attend l’entrée avant de considérer que le délai d’expiration a été atteint. Consultez Comment reconnaître la voix. | Facultatif |
RecognizeInputsType |
Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf , choices , speech et speechordtmf . |
Requis |
InitialSilenceTimeout |
TimeSpan | 5 secondes Min : 0 seconde Max : 300 secondes (DTMF) Max : 20 secondes (Choix) Max : 20 secondes (Message) |
Le délai d’expiration du silence initial ajuste la quantité d’audio non vocal autorisée avant une expression avant que la tentative de reconnaissance se termine par un résultat « aucune correspondance ». Consultez Comment reconnaître la voix. | Facultatif |
MaxTonesToCollect |
Integer | Pas de valeur par défaut Min : 1 |
Nombre de chiffres attendus par un développeur en tant qu’entrée du participant. | Requis |
StopTones |
IEnumeration<DtmfTone> | Non défini | Le chiffre sur lequel les participants peuvent appuyer pour échapper à un événement DTMF de lot. | Facultatif |
InterruptPrompt |
Bool | True | Si le participant a la possibilité d’interrompre le playMessage en appuyant sur un chiffre. | Facultatif |
InterruptCallMediaOperation |
Bool | True | Si cet indicateur est défini, il interrompt l’opération de média d’appel actuelle. Par exemple, si un audio est lu, il interrompt cette opération et lance la reconnaissance. | Facultatif |
OperationContext |
Chaîne | Non défini | Chaîne que les développeurs peuvent passer à mi-action, utile pour permettre aux développeurs de stocker le contexte concernant les événements qu’ils reçoivent. | Facultatif |
Phrases |
Chaîne | Non défini | Liste des expressions associées à l’étiquette. Entendre une de ces expressions entraîne une reconnaissance réussie. | Requis |
Tone |
Chaîne | Non défini | Tonalité à reconnaître, si l’utilisateur décide d’appuyer sur un chiffre au lieu d’utiliser la fonctionnalité de message. | Facultatif |
Label |
Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Language |
Chaîne | En-us | La langue utilisée pour reconnaître le message. | Facultatif |
EndSilenceTimeout |
TimeSpan | 0,5 secondes | La dernière pause de l’orateur utilisée pour détecter le résultat final généré en tant que message. | Facultatif |
Remarque
Dans les situations où une numérotation DTMF et de la voix se trouvent dans le recognizeInputsType
, l’action de reconnaissance agit sur le premier type d’entrée reçu. Par exemple, si l’utilisateur appuie d’abord sur un numéro du pavé numérique, l’action de reconnaissance considère cela comme un événement DTMF et continue d’écouter les tonalités DTMF. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cela comme un événement de reconnaissance vocale et écoute l’entrée vocale.
Créer une application Python
Configurez un environnement virtuel Python pour votre projet
python -m venv play-audio-app
Activer votre environnement virtuel
Dans Windows, utilisez la commande suivante :
.\ play-audio-quickstart \Scripts\activate
Dans Unix, utilisez la commande suivante :
source play-audio-quickstart /bin/activate
Installez le package d’automation des appels d’Azure Communication Services
pip install azure-communication-callautomation
Créez votre fichier d’application dans votre répertoire de projet, en le nommant par exemple app.py
. Écrivez votre code Python dans ce fichier.
Exécutez votre application en utilisant Python à l’aide de la commande suivante.
python app.py
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour plus d’informations sur la façon d’effectuer un appel, consultez Démarrage rapide : Effectuer un appel sortant.
Appeler l’action Recognize
Lorsque votre application répond à l’appel, vous pouvez fournir des informations sur la reconnaissance des entrées des participants et la lecture d’une invite.
DTMF
max_tones_to_collect = 3
text_to_play = "Welcome to Contoso, please enter 3 DTMF."
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
dtmf_max_tones_to_collect=max_tones_to_collect,
input_type=RecognizeInputType.DTMF,
target_participant=target_participant,
initial_silence_timeout=30,
play_prompt=play_source,
dtmf_inter_tone_timeout=5,
interrupt_prompt=True,
dtmf_stop_tones=[ DtmfTone.Pound ])
Pour les flux de reconnaissance vocale, l’action Reconnaître d’Automatisation des appels prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles vocaux personnalisés peuvent être utiles quand vous créez une application qui doit écouter des mots complexes que les modèles de reconnaissance vocale par défaut peuvent ne pas comprendre. C’est par exemple le cas de la création d’une application pour le secteur de la télémédecine, où votre agent virtuel doit être en mesure de reconnaître des termes médicaux. Vous pouvez en savoir plus dans Créer un projet de reconnaissance vocale personnalisée.
Choix de reconnaissance vocale
choices = [
RecognitionChoice(
label="Confirm",
phrases=[ "Confirm", "First", "One" ],
tone=DtmfTone.ONE
),
RecognitionChoice(
label="Cancel",
phrases=[ "Cancel", "Second", "Two" ],
tone=DtmfTone.TWO
)
]
text_to_play = "Hello, This is a reminder for your appointment at 2 PM, Say Confirm to confirm your appointment or Cancel to cancel the appointment. Thank you!"
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
input_type=RecognizeInputType.CHOICES,
target_participant=target_participant,
choices=choices,
interrupt_prompt=True,
initial_silence_timeout=30,
play_prompt=play_source,
operation_context="AppointmentReminderMenu",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
Reconnaissance vocale
text_to_play = "Hi, how can I help you today?"
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
input_type=RecognizeInputType.SPEECH,
target_participant=target_participant,
end_silence_timeout=1,
play_prompt=play_source,
operation_context="OpenQuestionSpeech",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
Reconnaissance vocale ou DTMF
max_tones_to_collect = 1
text_to_play = "Hi, how can I help you today, you can also press 0 to speak to an agent."
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
call_automation_client.get_call_connection(call_connection_id).start_recognizing_media(
dtmf_max_tones_to_collect=max_tones_to_collect,
input_type=RecognizeInputType.SPEECH_OR_DTMF,
target_participant=target_participant,
end_silence_timeout=1,
play_prompt=play_source,
initial_silence_timeout=30,
interrupt_prompt=True,
operation_context="OpenQuestionSpeechOrDtmf",
# Only add the speech_recognition_model_endpoint_id if you have a custom speech model you would like to use
speech_recognition_model_endpoint_id="YourCustomSpeechModelEndpointId")
app.logger.info("Start recognizing")
Remarque
Si les paramètres ne sont pas définis, les valeurs par défaut sont appliquées si possible.
Réception des mises à jour des événements Recognize
Les développeurs peuvent s’abonner aux événements RecognizeCompleted
et RecognizeFailed
sur le rappel du webhook inscrit. Utilisez ce rappel avec une logique métier dans votre application pour déterminer les étapes suivantes quand un des événements se produit.
Exemple de désérialisation de l’événement RecognizeCompleted :
if event.type == "Microsoft.Communication.RecognizeCompleted":
app.logger.info("Recognize completed: data=%s", event.data)
if event.data['recognitionType'] == "dtmf":
tones = event.data['dtmfResult']['tones']
app.logger.info("Recognition completed, tones=%s, context=%s", tones, event.data.get('operationContext'))
elif event.data['recognitionType'] == "choices":
labelDetected = event.data['choiceResult']['label'];
phraseDetected = event.data['choiceResult']['recognizedPhrase'];
app.logger.info("Recognition completed, labelDetected=%s, phraseDetected=%s, context=%s", labelDetected, phraseDetected, event.data.get('operationContext'));
elif event.data['recognitionType'] == "speech":
text = event.data['speechResult']['speech'];
app.logger.info("Recognition completed, text=%s, context=%s", text, event.data.get('operationContext'));
else:
app.logger.info("Recognition completed: data=%s", event.data);
Exemple de désérialisation de l’événement RecognizeFailed :
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Exemple de désérialisation de l’événement RecognizeCanceled :
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Codes d’événement
État | Code | Sous-code | Message |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | Action terminée, chiffres max reçus. |
RecognizeCompleted |
200 | 8514 | L’action s’est terminée lorsqu’un ton d’arrêt a été détecté. |
RecognizeCompleted |
400 | 8508 | Échec de l’action, l’opération a été annulée. |
RecognizeCompleted |
400 | 8532 | Échec de l’action, délai d’expiration du silence inter-chiffres atteint. |
RecognizeCanceled |
400 | 8508 | Échec de l’action, l’opération a été annulée. |
RecognizeFailed |
400 | 8510 | Échec de l’action, délai d’expiration du silence initial atteint. |
RecognizeFailed |
500 | 8511 | Échec de l’action, échec rencontré lors de la tentative de lecture de l’invite. |
RecognizeFailed |
500 | 8512 | Erreur interne du serveur inconnue. |
RecognizeFailed |
400 | 8510 | Échec de l’action, délai d’expiration du silence initial atteint |
RecognizeFailed |
400 | 8532 | Échec de l’action, délai d’expiration du silence inter-chiffres atteint. |
RecognizeFailed |
400 | 8565 | Échec de l’action, requête incorrecte à Azure AI services. Vérifiez les paramètres d’entrée. |
RecognizeFailed |
400 | 8565 | Échec de l’action, requête incorrecte à Azure AI services. Impossible de traiter la charge utile fournie : vérifiez l’entrée source de la lecture. |
RecognizeFailed |
401 | 8565 | Échec de l’action, erreur d’authentification d’Azure AI services. |
RecognizeFailed |
403 | 8565 | Échec de l’action, requête interdite à Azure AI services, abonnement gratuit utilisé par la requête hors quota. |
RecognizeFailed |
429 | 8565 | Échec de l’action, les requêtes ont dépassé le nombre de requêtes simultanées autorisées pour l’abonnement à Azure AI services. |
RecognizeFailed |
408 | 8565 | Échec de l’action, délai de requête à Azure AI services expiré. |
RecognizeFailed |
500 | 8511 | Échec de l’action, échec rencontré lors de la tentative de lecture de l’invite. |
RecognizeFailed |
500 | 8512 | Erreur interne du serveur inconnue. |
Limitations connues
- La numérotation DTMF intrabande n’est pas prise en charge. Utilisez plutôt RFC 2833 DTMF.
- Les invites textuelles de synthèse vocale prennent en charge un maximum de 400 caractères. Si votre invite dépasse cette limite, nous vous conseillons d’utiliser SSML pour les actions de jeu basées sur la synthèse vocale.
- Pour les scénarios où vous dépassez votre limite de quota du service Speech, vous pouvez demander une augmentation de cette limite en suivant les étapes décrites dans Quotas et limites des services Speech.
Nettoyer les ressources
Si vous voulez nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Apprenez-en davantage sur le nettoyage des ressources.
Étapes suivantes
- En savoir plus sur la collecte d’entrées utilisateur
- En savoir plus sur la lecture du contenu audio durant un appel
- En savoir plus sur l’automatisation des appels