Raccogliere l'input dell'utente con l'azione di riconoscimento
Questa guida consente di iniziare a riconoscere l'input DTMF fornito dai partecipanti tramite l’SDK di automazione delle chiamate di Servizi di comunicazione di Azure.
Prerequisiti
- Un account Azure con una sottoscrizione attiva; per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Prendere nota della stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- La versione più recente libreria .NET per il sistema operativo.
- Il pacchetto NuGet più recente.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Specifiche tecniche
Per personalizzare la funzione di riconoscimento sono disponibili i parametri seguenti:
Parametro | Type | Impostazione predefinita (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per i dettagli, vedere Personalizzare i prompt vocali agli utenti con l'azione di riproduzione |
FileSource, TextSource | Non impostato | Il messaggio da riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout |
TimeSpan | 2 secondi Min: 1 secondo max: 60 secondi |
Limite in secondi in cui Servizi di comunicazione di Azure attende che il chiamante prema un altro numero (timeout tra numeri). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds |
Intero | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Vedere Come riconoscere la voce. | Facoltativo |
RecognizeInputsType |
Enum | dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf , choices , speech e speechordtmf . |
Richiesto |
InitialSilenceTimeout |
TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Max: 20 secondi (Opzioni) Max: 20 secondi (Parlato) |
Il timeout del silenzio iniziale regola la quantità di audio non vocale consentito prima di una frase, prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Vedere Come riconoscere la voce. | Facoltativo |
MaxTonesToCollect |
Intero | Nessun valore predefinito Min: 1 |
Numero di numeri previsti dallo sviluppatore come input del partecipante. | Richiesto |
StopTones |
IEnumeration<DtmfTone> | Non impostato | I partecipanti al numero possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt |
Bool | Vero | Se il partecipante ha la possibilità di interrompere il playMessage premendo un numero. | Facoltativo |
InterruptCallMediaOperation |
Bool | Vero | Se questo flag è impostato, interrompe l'operazione multimediale di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
OperationContext |
String | Non impostato | Stringa che gli sviluppatori possono passare a metà azione, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Phrases |
String | Non impostato | Elenco di frasi associate all'etichetta. L'ascolto di una di queste frasi comporta un riconoscimento riuscito. | Richiesto |
Tone |
String | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label |
String | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Language |
String | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout |
TimeSpan | 0,5 secondi | La pausa finale del parlante viene usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
In situazioni in cui sia DTMF che la voce sono in recognizeInputsType
, l'azione di riconoscimento agisce sul primo tipo di input ricevuto. Ad esempio, se l'utente preme prima un numero del tastierino, l'azione di riconoscimento lo considera un evento DTMF e continua ad ascoltare i toni DTMF. Se l'utente parla prima, l'azione di riconoscimento lo considera un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione C#
Nella finestra della console del sistema operativo usare il comando dotnet
per creare una nuova applicazione Web.
dotnet new web -n MyApplication
Installare il pacchetto NuGet
Ottenere il pacchetto NuGet da Raccolta NuGet | Azure.Communication.CallAutomation. Seguire queste istruzioni per installare il pacchetto.
Stabilire una chiamata
A questo punto si dovrebbe avere familiarità con le chiamate di avvio. Per altre informazioni sull'esecuzione di una chiamata, vedere Avvio rapido: effettuare una chiamata in uscita. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
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);
Chiamare l'azione di riconoscimento
Quando l'applicazione risponde alla chiamata, è possibile fornire informazioni sul riconoscimento dell'input del partecipante e sulla riproduzione di una richiesta.
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);
Per i flussi di riconoscimento vocale, l'azione di riconoscimento di Automazione chiamate supporta anche l'uso di modelli di riconoscimento vocale personalizzato. Le funzionalità come i modelli di riconoscimento vocale personalizzato possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli di riconoscimento vocale predefiniti potrebbero non comprendere. Un esempio è la creazione di un'applicazione per il settore della telemedicina; l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni, vedere Creare un progetto di riconoscimento vocale personalizzato.
Opzioni di riconoscimento 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);
Riconoscimento 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);
Riconoscimento vocale o 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);
Nota
Se i parametri non sono impostati, le impostazioni predefinite vengono applicate laddove possibile.
Ricezione degli aggiornamenti degli eventi di riconoscimento
Gli sviluppatori possono sottoscrivere eventi RecognizeCompleted
eRecognizeFailed
nel callback del webhook registrato. Questo callback può essere usato con la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi.
Esempio di come è possibile deserializzare l'evento 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;
}
}
Esempio di come è possibile deserializzare l'evento 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);
}
}
Esempio di come è possibile deserializzare l'evento 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);
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva; per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Java Development Kit versione 8 o successiva.
- Apache Maven.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Specifiche tecniche
Per personalizzare la funzione di riconoscimento sono disponibili i parametri seguenti:
Parametro | Type | Impostazione predefinita (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per i dettagli, vedere Personalizzare i prompt vocali agli utenti con l'azione di riproduzione |
FileSource, TextSource | Non impostato | Il messaggio da riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout |
TimeSpan | 2 secondi Min: 1 secondo max: 60 secondi |
Limite in secondi in cui Servizi di comunicazione di Azure attende che il chiamante prema un altro numero (timeout tra numeri). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds |
Intero | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Vedere Come riconoscere la voce. | Facoltativo |
RecognizeInputsType |
Enum | dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf , choices , speech e speechordtmf . |
Richiesto |
InitialSilenceTimeout |
TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Max: 20 secondi (Opzioni) Max: 20 secondi (Parlato) |
Il timeout del silenzio iniziale regola la quantità di audio non vocale consentito prima di una frase, prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Vedere Come riconoscere la voce. | Facoltativo |
MaxTonesToCollect |
Intero | Nessun valore predefinito Min: 1 |
Numero di numeri previsti dallo sviluppatore come input del partecipante. | Richiesto |
StopTones |
IEnumeration<DtmfTone> | Non impostato | I partecipanti al numero possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt |
Bool | Vero | Se il partecipante ha la possibilità di interrompere il playMessage premendo un numero. | Facoltativo |
InterruptCallMediaOperation |
Bool | Vero | Se questo flag è impostato, interrompe l'operazione multimediale di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
OperationContext |
String | Non impostato | Stringa che gli sviluppatori possono passare a metà azione, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Phrases |
String | Non impostato | Elenco di frasi associate all'etichetta. L'ascolto di una di queste frasi comporta un riconoscimento riuscito. | Richiesto |
Tone |
String | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label |
String | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Language |
String | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout |
TimeSpan | 0,5 secondi | La pausa finale del parlante viene usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
In situazioni in cui sia DTMF che la voce sono in recognizeInputsType
, l'azione di riconoscimento agisce sul primo tipo di input ricevuto. Ad esempio, se l'utente preme prima un numero del tastierino, l'azione di riconoscimento lo considera un evento DTMF e continua ad ascoltare i toni DTMF. Se l'utente parla prima, l'azione di riconoscimento lo considera un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione Java
Nella finestra del terminale o di comando, passare alla directory in cui creare l'applicazione Java. Eseguire il comando mvn
per generare il progetto Java dal modello maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Il comando mvn
crea una directory con lo stesso nome dell'argomentoartifactId
. La directory src/main/java
contiene il codice sorgente del progetto. La directory src/test/java
contiene l'origine del testo.
Tenere presente che il passaggio generate
ha creato una directory con lo stesso nome di artifactId
. La directory src/main/java
contiene il codice sorgente. La directory src/test/java
contiene test. Il file pom.xml
è il POM (Project Object Model) del progetto.
Aggiornare il file POM dell'applicazione per usare Java 8 o versione successiva.
<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>
Aggiungere riferimenti ai pacchetti
Nel file POM, aggiungere il riferimento seguente per il progetto:
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Stabilire una chiamata
A questo punto si dovrebbe avere familiarità con le chiamate di avvio. Per altre informazioni sull'esecuzione di una chiamata, vedere Avvio rapido: effettuare una chiamata in uscita. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
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();
Chiamare l'azione di riconoscimento
Quando l'applicazione risponde alla chiamata, è possibile fornire informazioni sul riconoscimento dell'input del partecipante e sulla riproduzione di una richiesta.
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());
Per i flussi di riconoscimento vocale, l'azione di riconoscimento di Automazione chiamate supporta anche l'uso di modelli di riconoscimento vocale personalizzato. Le funzionalità come i modelli di riconoscimento vocale personalizzato possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli di riconoscimento vocale predefiniti potrebbero non comprendere. Un esempio è la creazione di un'applicazione per il settore della telemedicina; l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni, vedere Creare un progetto di riconoscimento vocale personalizzato.
Opzioni di riconoscimento 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();
Riconoscimento 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();
Riconoscimento vocale o 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();
Nota
Se i parametri non sono impostati, le impostazioni predefinite vengono applicate laddove possibile.
Ricezione degli aggiornamenti degli eventi di riconoscimento
Gli sviluppatori possono sottoscrivere eventi RecognizeCompleted
eRecognizeFailed
nel callback del webhook registrato. Questo callback può essere usato con la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi.
Esempio di come è possibile deserializzare l'evento 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());
}
}
Esempio di come è possibile deserializzare l'evento 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());
}
}
Esempio di come è possibile deserializzare l'evento RecognizeCanceled:
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Prendere nota della stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Una volta installato Node.js, è possibile installarlo dal sito Web ufficiale.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Specifiche tecniche
Per personalizzare la funzione di riconoscimento sono disponibili i parametri seguenti:
Parametro | Type | Impostazione predefinita (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per i dettagli, vedere Personalizzare i prompt vocali agli utenti con l'azione di riproduzione |
FileSource, TextSource | Non impostato | Il messaggio da riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout |
TimeSpan | 2 secondi Min: 1 secondo max: 60 secondi |
Limite in secondi in cui Servizi di comunicazione di Azure attende che il chiamante prema un altro numero (timeout tra numeri). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds |
Intero | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Vedere Come riconoscere la voce. | Facoltativo |
RecognizeInputsType |
Enum | dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf , choices , speech e speechordtmf . |
Richiesto |
InitialSilenceTimeout |
TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Max: 20 secondi (Opzioni) Max: 20 secondi (Parlato) |
Il timeout del silenzio iniziale regola la quantità di audio non vocale consentito prima di una frase, prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Vedere Come riconoscere la voce. | Facoltativo |
MaxTonesToCollect |
Intero | Nessun valore predefinito Min: 1 |
Numero di numeri previsti dallo sviluppatore come input del partecipante. | Richiesto |
StopTones |
IEnumeration<DtmfTone> | Non impostato | I partecipanti al numero possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt |
Bool | Vero | Se il partecipante ha la possibilità di interrompere il playMessage premendo un numero. | Facoltativo |
InterruptCallMediaOperation |
Bool | Vero | Se questo flag è impostato, interrompe l'operazione multimediale di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
OperationContext |
String | Non impostato | Stringa che gli sviluppatori possono passare a metà azione, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Phrases |
String | Non impostato | Elenco di frasi associate all'etichetta. L'ascolto di una di queste frasi comporta un riconoscimento riuscito. | Richiesto |
Tone |
String | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label |
String | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Language |
String | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout |
TimeSpan | 0,5 secondi | La pausa finale del parlante viene usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
In situazioni in cui sia DTMF che la voce sono in recognizeInputsType
, l'azione di riconoscimento agisce sul primo tipo di input ricevuto. Ad esempio, se l'utente preme prima un numero del tastierino, l'azione di riconoscimento lo considera un evento DTMF e continua ad ascoltare i toni DTMF. Se l'utente parla prima, l'azione di riconoscimento lo considera un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione JavaScript
Creare una nuova applicazione JavaScript nella directory del progetto. Inizializzare un nuovo progetto Node.js con il comando seguente. Verrà creato un file package.json per il progetto, che viene usato per gestire le dipendenze del progetto.
npm init -y
Installare il pacchetto di Automazione delle chiamate di Servizi di comunicazione di Azure
npm install @azure/communication-call-automation
Creare un nuovo file JavaScript nella directory del progetto, denominandolo, ad esempio, app.js
. Scrivere il codice JavaScript in questo file.
Eseguire l'applicazione usando Node.js con il comando seguente.
node app.js
Stabilire una chiamata
A questo punto si dovrebbe avere familiarità con le chiamate di avvio. Per altre informazioni sull'esecuzione di una chiamata, vedere Avvio rapido: effettuare una chiamata in uscita.
Chiamare l'azione di riconoscimento
Quando l'applicazione risponde alla chiamata, è possibile fornire informazioni sul riconoscimento dell'input del partecipante e sulla riproduzione di una richiesta.
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);
Per i flussi di riconoscimento vocale, l'azione di riconoscimento di Automazione chiamate supporta anche l'uso di modelli di riconoscimento vocale personalizzato. Le funzionalità come i modelli di riconoscimento vocale personalizzato possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli di riconoscimento vocale predefiniti potrebbero non comprendere. Un esempio è la creazione di un'applicazione per il settore della telemedicina; l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni, vedere Creare un progetto di riconoscimento vocale personalizzato.
Opzioni di riconoscimento 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);
Riconoscimento 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);
Riconoscimento vocale o 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);
Nota
Se i parametri non sono impostati, le impostazioni predefinite vengono applicate laddove possibile.
Ricezione degli aggiornamenti degli eventi di riconoscimento
Gli sviluppatori possono sottoscrivere eventi RecognizeCompleted
eRecognizeFailed
nel callback del webhook registrato. Questo callback può essere usato con la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi.
Esempio di come è possibile deserializzare l'evento 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));
}
}
Esempio di come è possibile deserializzare l'evento RecognizeFailed:
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Esempio di come è possibile deserializzare l'evento RecognizeCanceled:
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Prendere nota della stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Installare Python da Python.org.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Specifiche tecniche
Per personalizzare la funzione di riconoscimento sono disponibili i parametri seguenti:
Parametro | Type | Impostazione predefinita (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per i dettagli, vedere Personalizzare i prompt vocali agli utenti con l'azione di riproduzione |
FileSource, TextSource | Non impostato | Il messaggio da riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout |
TimeSpan | 2 secondi Min: 1 secondo max: 60 secondi |
Limite in secondi in cui Servizi di comunicazione di Azure attende che il chiamante prema un altro numero (timeout tra numeri). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds |
Intero | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Vedere Come riconoscere la voce. | Facoltativo |
RecognizeInputsType |
Enum | dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf , choices , speech e speechordtmf . |
Richiesto |
InitialSilenceTimeout |
TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Max: 20 secondi (Opzioni) Max: 20 secondi (Parlato) |
Il timeout del silenzio iniziale regola la quantità di audio non vocale consentito prima di una frase, prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Vedere Come riconoscere la voce. | Facoltativo |
MaxTonesToCollect |
Intero | Nessun valore predefinito Min: 1 |
Numero di numeri previsti dallo sviluppatore come input del partecipante. | Richiesto |
StopTones |
IEnumeration<DtmfTone> | Non impostato | I partecipanti al numero possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt |
Bool | Vero | Se il partecipante ha la possibilità di interrompere il playMessage premendo un numero. | Facoltativo |
InterruptCallMediaOperation |
Bool | Vero | Se questo flag è impostato, interrompe l'operazione multimediale di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
OperationContext |
String | Non impostato | Stringa che gli sviluppatori possono passare a metà azione, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Phrases |
String | Non impostato | Elenco di frasi associate all'etichetta. L'ascolto di una di queste frasi comporta un riconoscimento riuscito. | Richiesto |
Tone |
String | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label |
String | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Language |
String | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout |
TimeSpan | 0,5 secondi | La pausa finale del parlante viene usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
In situazioni in cui sia DTMF che la voce sono in recognizeInputsType
, l'azione di riconoscimento agisce sul primo tipo di input ricevuto. Ad esempio, se l'utente preme prima un numero del tastierino, l'azione di riconoscimento lo considera un evento DTMF e continua ad ascoltare i toni DTMF. Se l'utente parla prima, l'azione di riconoscimento lo considera un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione Python
Configurare un ambiente virtuale Python per il progetto
python -m venv play-audio-app
Attivare l'ambiente virtuale
In Windows usare il comando seguente:
.\ play-audio-quickstart \Scripts\activate
Utilizzare il comando seguente su Unix:
source play-audio-quickstart /bin/activate
Installare il pacchetto di Automazione delle chiamate di Servizi di comunicazione di Azure
pip install azure-communication-callautomation
Creare il file dell’applicazione nella directory del progetto, denominandolo, ad esempio, app.py
. Scrivere il codice Python in questo file.
Eseguire l'applicazione usando Python con il comando seguente.
python app.py
Stabilire una chiamata
A questo punto si dovrebbe avere familiarità con le chiamate di avvio. Per altre informazioni sull'esecuzione di una chiamata, vedere Avvio rapido: effettuare una chiamata in uscita.
Chiamare l'azione di riconoscimento
Quando l'applicazione risponde alla chiamata, è possibile fornire informazioni sul riconoscimento dell'input del partecipante e sulla riproduzione di una richiesta.
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 ])
Per i flussi di riconoscimento vocale, l'azione di riconoscimento di Automazione chiamate supporta anche l'uso di modelli di riconoscimento vocale personalizzato. Le funzionalità come i modelli di riconoscimento vocale personalizzato possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli di riconoscimento vocale predefiniti potrebbero non comprendere. Un esempio è la creazione di un'applicazione per il settore della telemedicina; l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni, vedere Creare un progetto di riconoscimento vocale personalizzato.
Opzioni di riconoscimento 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")
Riconoscimento 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")
Riconoscimento vocale o 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")
Nota
Se i parametri non sono impostati, le impostazioni predefinite vengono applicate laddove possibile.
Ricezione degli aggiornamenti degli eventi di riconoscimento
Gli sviluppatori possono sottoscrivere eventi RecognizeCompleted
eRecognizeFailed
nel callback del webhook registrato. Questo callback può essere usato con la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi.
Esempio di come è possibile deserializzare l'evento 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);
Esempio di come è possibile deserializzare l'evento RecognizeFailed:
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Esempio di come è possibile deserializzare l'evento RecognizeCanceled:
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Codici evento
Status | Codice | Sottocodice | Message |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | Azione completata, numero massimo di numeri ricevuto. |
RecognizeCompleted |
200 | 8514 | Azione completata quando è stato rilevato il tono di arresto. |
RecognizeCompleted |
400 | 8508 | Azione non riuscita. L'operazione è stata annullata. |
RecognizeCompleted |
400 | 8532 | Azione non riuscita. È stato raggiunto il timeout di silenzio tra numeri. |
RecognizeCanceled |
400 | 8508 | Azione non riuscita. L'operazione è stata annullata. |
RecognizeFailed |
400 | 8510 | Azione non riuscita. È stato raggiunto il timeout del silenzio iniziale. |
RecognizeFailed |
500 | 8511 | Azione non riuscita. Errore durante il tentativo di riproduzione della richiesta. |
RecognizeFailed |
500 | 8512 | Errore interno sconosciuto del server. |
RecognizeFailed |
400 | 8510 | Azione non riuscita. È stato raggiunto il timeout del silenzio iniziale. |
RecognizeFailed |
400 | 8532 | Azione non riuscita. È stato raggiunto il timeout di silenzio tra numeri. |
RecognizeFailed |
400 | 8565 | Azione non riuscita. Richiesta non valida ai servizi di intelligenza artificiale di Azure. Controllare i parametri di input. |
RecognizeFailed |
400 | 8565 | Azione non riuscita. Richiesta non valida ai servizi di intelligenza artificiale di Azure. Non è possibile elaborare il payload specificato. Controllare l'input dell'origine di riproduzione. |
RecognizeFailed |
401 | 8565 | Azione non riuscita. Errore di autenticazione dei servizi di intelligenza artificiale di Azure. |
RecognizeFailed |
403 | 8565 | Azione non riuscita, richiesta non consentita ai servizi di intelligenza artificiale di Azure, sottoscrizione gratuita usata dalla richiesta esaurita della quota. |
RecognizeFailed |
429 | 8565 | Azione non riuscita, le richieste hanno superato il numero di richieste simultanee consentite per la sottoscrizione dei servizi di intelligenza artificiale di Azure. |
RecognizeFailed |
408 | 8565 | Azione non riuscita e timeout della richiesta ai servizi di intelligenza artificiale di Azure. |
RecognizeFailed |
500 | 8511 | Azione non riuscita. Errore durante il tentativo di riproduzione della richiesta. |
RecognizeFailed |
500 | 8512 | Errore interno sconosciuto del server. |
Limitazioni note
- DTMF in banda non è supportato. Usare invece DTMF RFC 2833.
- Le richieste di testo di sintesi vocale supportano un massimo di 400 caratteri, se la richiesta è più lunga di questa, è consigliabile usare SSML per le azioni di riproduzione basate su sintesi vocale.
- Per gli scenari in cui si supera il limite di quota del servizio di riconoscimento vocale, è possibile richiedere di aumentare questo limite seguendo i passaggi descritti in Quote e limiti dei servizi di riconoscimento vocale.
Pulire le risorse
Se si vuole pulire e rimuovere una sottoscrizione a Servizi di comunicazione, è possibile eliminare la risorsa o il gruppo di risorse. L'eliminazione del gruppo di risorse comporta anche l'eliminazione di tutte le altre risorse associate. Altre informazioni sulla pulizia delle risorse.
Passaggi successivi
- Altre informazioni sulla Raccolta dell'input utente
- Altre informazioni su Riproduzione di audio nelle chiamate
- Altre informazioni su Automazione delle chiamate