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 SDK Call Automation 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.
- Obtenez le dernier 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 sur l’action de lecture, consultez ce guide pratique) |
FileSource, TextSource | Non défini | Il s’agit du message que vous souhaitez 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 | Entier | 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. En savoir plus ici. | Facultatif |
RecognizeInputsType | Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf, choix, message 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 ». En savoir plus ici. | Facultatif |
MaxTonesToCollect | Entier | 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 d’expressions associées à l’étiquette, si l’une de ces expressions est entendue, elle est considérée comme une reconnaissance réussie. | Requis |
Ton | 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 |
Étiquette | Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Langue | 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ù dtmf et message se trouvent dans recognizeInputsType, l’action de reconnaissance agit sur le premier type d’entrée reçu, c’est-à-dire que si l’utilisateur appuie d’abord sur un chiffre de pavé numérique, l’action de reconnaissance la considère comme un événement dtmf et continue à écouter les tonalités dtmf. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cette action comme une 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
Le package NuGet peut être obtenu ici, si ce n’est déjà fait.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. 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 Call Automation recognize prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles de reconnaissance vocale personnalisée peuvent être utiles lorsque vous créez une application devant écouter des mots complexes que les modèles de reconnaissance vocale par défaut sont susceptibles de ne pas pouvoir comprendre, un bon exemple peut être lorsque vous générez une application pour le secteur de la télémédecine et que votre agent virtuel doit être en mesure de reconnaître les termes médicaux. Vous pouvez en savoir plus sur la création et le déploiement de modèles vocaux personnalisés ici.
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 webhook qu’ils ont inscrit pour l’appel, afin de créer une logique métier dans leur application pour déterminer les étapes à suivre quand l’un des événements mentionnés précédemment 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 sur l’action de lecture, consultez ce guide pratique) |
FileSource, TextSource | Non défini | Il s’agit du message que vous souhaitez 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 | Entier | 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. En savoir plus ici. | Facultatif |
RecognizeInputsType | Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf, choix, message 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 ». En savoir plus ici. | Facultatif |
MaxTonesToCollect | Entier | 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 d’expressions associées à l’étiquette, si l’une de ces expressions est entendue, elle est considérée comme une reconnaissance réussie. | Requis |
Ton | 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 |
Étiquette | Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Langue | 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ù dtmf et message se trouvent dans recognizeInputsType, l’action de reconnaissance agit sur le premier type d’entrée reçu, c’est-à-dire que si l’utilisateur appuie d’abord sur un chiffre de pavé numérique, l’action de reconnaissance la considère comme un événement dtmf et continue à écouter les tonalités dtmf. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cette action comme une 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 mvn
commande crée un répertoire portant le même nom que artifactId
l’argument. Sous ce répertoire, le répertoire src/main/java
contient le code source du projet, le répertoire src/test/java
contient la source de test.
Remarquez que l’étape « générer » a créé un répertoire portant le même nom que l’ID de l’artefact. Sous ce répertoire, le répertoire src/main/java
contient le code source, le répertoire src/test/java
contient les tests et le fichier pom.xml
est le modèle d’objet du projet (POM).
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 au 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 en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. 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 Call Automation recognize prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles de reconnaissance vocale personnalisée peuvent être utiles lorsque vous créez une application devant écouter des mots complexes que les modèles de reconnaissance vocale par défaut sont susceptibles de ne pas pouvoir comprendre, un bon exemple peut être lorsque vous générez une application pour le secteur de la télémédecine et que votre agent virtuel doit être en mesure de reconnaître les termes médicaux. Vous pouvez en savoir plus sur la création et le déploiement de modèles vocaux personnalisés ici.
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 de webhook inscrit. Ce rappel peut être utilisé avec une logique métier dans votre application pour déterminer les étapes suivantes quand l’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.
- Ayez Node.js installé, vous pouvez l’installer à partir du 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 sur l’action de lecture, consultez ce guide pratique) |
FileSource, TextSource | Non défini | Il s’agit du message que vous souhaitez 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 | Entier | 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. En savoir plus ici. | Facultatif |
RecognizeInputsType | Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf, choix, message 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 ». En savoir plus ici. | Facultatif |
MaxTonesToCollect | Entier | 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 d’expressions associées à l’étiquette, si l’une de ces expressions est entendue, elle est considérée comme une reconnaissance réussie. | Requis |
Ton | 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 |
Étiquette | Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Langue | 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ù dtmf et message se trouvent dans recognizeInputsType, l’action de reconnaissance agit sur le premier type d’entrée reçu, c’est-à-dire que si l’utilisateur appuie d’abord sur un chiffre de pavé numérique, l’action de reconnaissance la considère comme un événement dtmf et continue à écouter les tonalités dtmf. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cette action comme une 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. Cela crée un fichier package.json pour votre projet, qui est utilisé pour gérer 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 nouveau fichier JavaScript dans votre répertoire de projet, nommez-le par exemple app.js. Vous écrivez votre code JavaScript dans ce fichier. Exécutez votre application en utilisant Node.js à l’aide de la commande suivante. Cela exécute le code JavaScript que vous avez écrit.
node app.js
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Dans ce démarrage rapide, nous créons 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 Call Automation recognize prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles de reconnaissance vocale personnalisée peuvent être utiles lorsque vous créez une application devant écouter des mots complexes que les modèles de reconnaissance vocale par défaut sont susceptibles de ne pas pouvoir comprendre, un bon exemple peut être lorsque vous générez une application pour le secteur de la télémédecine et que votre agent virtuel doit être en mesure de reconnaître les termes médicaux. Vous pouvez en savoir plus sur la création et le déploiement de modèles vocaux personnalisés ici.
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 webhook qu’ils ont inscrit pour l’appel, afin de créer une logique métier dans leur application pour déterminer les étapes à suivre quand l’un des événements mentionnés précédemment 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.
- Ayez Python installé, vous pouvez l’installer à partir du 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 sur l’action de lecture, consultez ce guide pratique) |
FileSource, TextSource | Non défini | Il s’agit du message que vous souhaitez 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 | Entier | 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. En savoir plus ici. | Facultatif |
RecognizeInputsType | Enum | dtmf | Type d’entrée reconnu. Les options sont dtmf, choix, message 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 ». En savoir plus ici. | Facultatif |
MaxTonesToCollect | Entier | 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 d’expressions associées à l’étiquette, si l’une de ces expressions est entendue, elle est considérée comme une reconnaissance réussie. | Requis |
Ton | 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 |
Étiquette | Chaîne | Non défini | La valeur clé pour la reconnaissance. | Requis |
Langue | 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ù dtmf et message se trouvent dans recognizeInputsType, l’action de reconnaissance agit sur le premier type d’entrée reçu, c’est-à-dire que si l’utilisateur appuie d’abord sur un chiffre de pavé numérique, l’action de reconnaissance la considère comme un événement dtmf et continue à écouter les tonalités dtmf. Si l’utilisateur parle d’abord, l’action de reconnaissance considère cette action comme une 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, nommez-le par exemple app.py. Vous écrivez votre code Python dans ce fichier.
Exécutez votre application en utilisant Python à l’aide de la commande suivante. Cela exécute le code Python que vous avez écrit.
python app.py
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Dans ce démarrage rapide, nous créons 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 Call Automation recognize prend également en charge l’utilisation de modèles vocaux personnalisés. Les fonctionnalités telles que les modèles de reconnaissance vocale personnalisée peuvent être utiles lorsque vous créez une application devant écouter des mots complexes que les modèles de reconnaissance vocale par défaut sont susceptibles de ne pas pouvoir comprendre, un bon exemple peut être lorsque vous générez une application pour le secteur de la télémédecine et que votre agent virtuel doit être en mesure de reconnaître les termes médicaux. Vous pouvez en savoir plus sur la création et le déploiement de modèles vocaux personnalisés ici.
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 webhook qu’ils ont inscrit pour l’appel, afin de créer une logique métier dans leur application pour déterminer les étapes à suivre quand l’un des événements mentionnés précédemment 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. |
La reconnaissance a échoué | 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 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 | L’action a échoué, 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
- DTMF en bande non pris en charge, utilisez plutôt RFC 2833 DTMF.
- Les invites de texte de synthèse vocale prennent en charge un maximum de 400 caractères, si votre invite est plus longue, nous vous suggérons d’utiliser SSML pour les actions de lecture basées sur la synthèse vocale.
- Pour les scénarios où vous dépassez votre limite de quota de service Speech, vous pouvez demander à augmenter cette limite en suivant les étapes décrites ici.
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