Raccogliere l'input dell'utente con l'azione Recognize
Questa guida illustra come iniziare a riconoscere l'input DTMF fornito dai partecipanti tramite Servizi di comunicazione di Azure Call Automation SDK.
Prerequisiti
- Account Azure con una sottoscrizione attiva. Per informazioni dettagliate, vedere Creare gratuitamente un account.
- Servizi di comunicazione di Azure risorsa. Vedere Creare una risorsa Servizi di comunicazione di Azure. Prendere nota del stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando Call Automation SDK.
- La libreria .NET più recente per il sistema operativo.
- Ottenere il pacchetto NuGet più recente.
Per le funzionalità di intelligenza artificiale
- Creare e connettere i servizi di intelligenza artificiale di Azure alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei servizi di intelligenza artificiale di Azure.
Specifiche tecniche
Per personalizzare la funzione Recognize sono disponibili i parametri seguenti:
Parametro | Tipo | Valore predefinito (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per informazioni dettagliate sull'azione Di riproduzione, fare riferimento a questa guida pratica. |
FileSource, TextSource | Non impostato | Questo è il messaggio che desideri riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout | TimeSpan | 2 secondi Min: 1 secondo Massimo: 60 secondi |
Limite in secondi che Servizi di comunicazione di Azure attende che il chiamante premi un'altra cifra (timeout tra cifre). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds | Integer | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Per altre informazioni, leggi qui. | Facoltativo |
RecognizeInputsType | Enumerazione | Dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf, scelte, parlato e speechordtmf. | Richiesto |
InitialSilenceTimeout | TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Massimo: 20 secondi (scelte) Max: 20 secondi (Riconoscimento vocale) |
Il timeout del silenzio iniziale regola la quantità di audio non speciale consentita prima di una frase prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Per altre informazioni, leggi qui. | Facoltativo |
MaxTonesToCollect | Integer | Nessun valore predefinito Min: 1 |
Numero di cifre previste dallo sviluppatore come input del partecipante. | Richiesto |
StopTones | IEnumeration<DtmfTone> | Non impostato | I partecipanti alla cifra possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt | Bool | True | Se il partecipante ha la possibilità di interrompere il playMessage premendo una cifra. | Facoltativo |
InterruptCallMediaOperation | Bool | True | Se questo flag è impostato, interrompe l'operazione di supporto di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
Operationcontext | Stringa | Non impostato | Stringa che gli sviluppatori possono passare mid action, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Frasi | Stringa | Non impostato | Elenco di frasi associate all'etichetta, se una di queste viene considerata un riconoscimento riuscito. | Richiesto |
Tono | Stringa | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label | Stringa | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Lingua | Stringa | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout | TimeSpan | 0,5 secondi | La pausa finale dell'altoparlante usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
Nelle situazioni in cui sia dtmf che voce si trovano nel recognizeInputsType, l'azione di riconoscimento agisce sul primo tipo di input ricevuto, ad esempio se l'utente preme un numero di tastierino prima, l'azione di riconoscimento lo considererà un evento dtmf e continuerà ad ascoltare i toni dtmf. Se l'utente parla prima di tutto, l'azione di riconoscimento lo considererà un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione C#
Nella finestra della console del sistema operativo usare il dotnet
comando per creare una nuova applicazione Web.
dotnet new web -n MyApplication
Installare il pacchetto NuGet
Il pacchetto NuGet può essere ottenuto da qui, se non è già stato fatto.
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio, se è necessario ottenere altre informazioni sull'esecuzione di una chiamata, seguire la guida introduttiva. È 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 personalizzati. Le funzionalità come i modelli di riconoscimento vocale personalizzati possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli predefiniti di riconoscimento vocale potrebbero non essere in grado di comprendere, un buon esempio di questo può essere quando si crea un'applicazione per il settore telemedico e l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni sulla creazione e la distribuzione di modelli di riconoscimento vocale personalizzati, vedere qui.
Scelte 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 gli eventi RecognizeCompleted e RecognizeFailed nel callback webhook registrati per la chiamata per creare la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi menzionati in precedenza.
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
- Account Azure con una sottoscrizione attiva. Per informazioni dettagliate, vedere Creare gratuitamente un account.
- Servizi di comunicazione di Azure risorsa. Vedere Creare una risorsa Servizi di comunicazione di Azure
- Creare una nuova applicazione di servizio Web usando Call Automation SDK.
- Java Development Kit versione 8 o successiva.
- Apache Maven.
Per le funzionalità di intelligenza artificiale
- Creare e connettere i servizi di intelligenza artificiale di Azure alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei servizi di intelligenza artificiale di Azure.
Specifiche tecniche
Per personalizzare la funzione Recognize sono disponibili i parametri seguenti:
Parametro | Tipo | Valore predefinito (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per informazioni dettagliate sull'azione Di riproduzione, fare riferimento a questa guida pratica. |
FileSource, TextSource | Non impostato | Questo è il messaggio che desideri riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout | TimeSpan | 2 secondi Min: 1 secondo Massimo: 60 secondi |
Limite in secondi che Servizi di comunicazione di Azure attende che il chiamante premi un'altra cifra (timeout tra cifre). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds | Integer | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Per altre informazioni, leggi qui. | Facoltativo |
RecognizeInputsType | Enumerazione | Dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf, scelte, parlato e speechordtmf. | Richiesto |
InitialSilenceTimeout | TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Massimo: 20 secondi (scelte) Max: 20 secondi (Riconoscimento vocale) |
Il timeout del silenzio iniziale regola la quantità di audio non speciale consentita prima di una frase prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Per altre informazioni, leggi qui. | Facoltativo |
MaxTonesToCollect | Integer | Nessun valore predefinito Min: 1 |
Numero di cifre previste dallo sviluppatore come input del partecipante. | Richiesto |
StopTones | IEnumeration<DtmfTone> | Non impostato | I partecipanti alla cifra possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt | Bool | True | Se il partecipante ha la possibilità di interrompere il playMessage premendo una cifra. | Facoltativo |
InterruptCallMediaOperation | Bool | True | Se questo flag è impostato, interrompe l'operazione di supporto di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
Operationcontext | Stringa | Non impostato | Stringa che gli sviluppatori possono passare mid action, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Frasi | Stringa | Non impostato | Elenco di frasi associate all'etichetta, se una di queste viene considerata un riconoscimento riuscito. | Richiesto |
Tono | Stringa | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label | Stringa | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Lingua | Stringa | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout | TimeSpan | 0,5 secondi | La pausa finale dell'altoparlante usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
Nelle situazioni in cui sia dtmf che voce si trovano nel recognizeInputsType, l'azione di riconoscimento agisce sul primo tipo di input ricevuto, ad esempio se l'utente preme un numero di tastierino prima, l'azione di riconoscimento lo considererà un evento dtmf e continuerà ad ascoltare i toni dtmf. Se l'utente parla prima di tutto, l'azione di riconoscimento lo considererà un riconoscimento vocale e ascolterà l'input vocale.
Creare una nuova applicazione Java
Nel terminale o nella finestra di comando passare alla directory in cui si vuole creare l'applicazione Java. Eseguire il mvn
comando 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 mvn
comando crea una directory con lo stesso nome dell'argomento artifactId
. In questa directory la src/main/java
directory contiene il codice sorgente del progetto, src/test/java
la directory contiene l'origine di test.
Si noti che il passaggio 'generate' ha creato una directory con lo stesso nome di artifactId. In questa directory la src/main/java
directory contiene il codice sorgente, src/test/java
la directory contiene i test e pom.xml
il file è il modello a oggetti del progetto o POM.
Aggiornare il file POM delle applicazioni 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 è necessario avere familiarità con le chiamate di avvio, se è necessario ottenere altre informazioni sull'esecuzione di una chiamata, seguire la guida introduttiva. È 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 personalizzati. Le funzionalità come i modelli di riconoscimento vocale personalizzati possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli predefiniti di riconoscimento vocale potrebbero non essere in grado di comprendere, un buon esempio di questo può essere quando si crea un'applicazione per il settore telemedico e l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni sulla creazione e la distribuzione di modelli di riconoscimento vocale personalizzati, vedere qui.
Scelte 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 gli eventi RecognizeCompleted e RecognizeFailed nel callback 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
- Account Azure con una sottoscrizione attiva. Per informazioni dettagliate, vedere Creare gratuitamente un account.
- Servizi di comunicazione di Azure risorsa. Vedere Creare una risorsa Servizi di comunicazione di Azure. Prendere nota del stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando Call Automation SDK.
- Avere installato Node.js, è possibile installarlo dal sito Web ufficiale.
Per le funzionalità di intelligenza artificiale
- Creare e connettere i servizi di intelligenza artificiale di Azure alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei servizi di intelligenza artificiale di Azure.
Specifiche tecniche
Per personalizzare la funzione Recognize sono disponibili i parametri seguenti:
Parametro | Tipo | Valore predefinito (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per informazioni dettagliate sull'azione Di riproduzione, fare riferimento a questa guida pratica. |
FileSource, TextSource | Non impostato | Questo è il messaggio che desideri riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout | TimeSpan | 2 secondi Min: 1 secondo Massimo: 60 secondi |
Limite in secondi che Servizi di comunicazione di Azure attende che il chiamante premi un'altra cifra (timeout tra cifre). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds | Integer | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Per altre informazioni, leggi qui. | Facoltativo |
RecognizeInputsType | Enumerazione | Dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf, scelte, parlato e speechordtmf. | Richiesto |
InitialSilenceTimeout | TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Massimo: 20 secondi (scelte) Max: 20 secondi (Riconoscimento vocale) |
Il timeout del silenzio iniziale regola la quantità di audio non speciale consentita prima di una frase prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Per altre informazioni, leggi qui. | Facoltativo |
MaxTonesToCollect | Integer | Nessun valore predefinito Min: 1 |
Numero di cifre previste dallo sviluppatore come input del partecipante. | Richiesto |
StopTones | IEnumeration<DtmfTone> | Non impostato | I partecipanti alla cifra possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt | Bool | True | Se il partecipante ha la possibilità di interrompere il playMessage premendo una cifra. | Facoltativo |
InterruptCallMediaOperation | Bool | True | Se questo flag è impostato, interrompe l'operazione di supporto di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
Operationcontext | Stringa | Non impostato | Stringa che gli sviluppatori possono passare mid action, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Frasi | Stringa | Non impostato | Elenco di frasi associate all'etichetta, se una di queste viene considerata un riconoscimento riuscito. | Richiesto |
Tono | Stringa | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label | Stringa | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Lingua | Stringa | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout | TimeSpan | 0,5 secondi | La pausa finale dell'altoparlante usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
Nelle situazioni in cui sia dtmf che voce si trovano nel recognizeInputsType, l'azione di riconoscimento agisce sul primo tipo di input ricevuto, ad esempio se l'utente preme un numero di tastierino prima, l'azione di riconoscimento lo considererà un evento dtmf e continuerà ad ascoltare i toni dtmf. Se l'utente parla prima di tutto, l'azione di riconoscimento lo considererà 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 Servizi di comunicazione di Azure
npm install @azure/communication-call-automation
Creare un nuovo file JavaScript nella directory del progetto, ad esempio denominarlo app.js. Scrivere il codice JavaScript in questo file. Eseguire l'applicazione usando Node.js con il comando seguente. In questo modo viene eseguito il codice JavaScript scritto.
node app.js
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio, se è necessario ottenere altre informazioni sull'esecuzione di una chiamata, seguire la guida introduttiva. In questo argomento di avvio rapido viene creata 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 personalizzati. Le funzionalità come i modelli di riconoscimento vocale personalizzati possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli predefiniti di riconoscimento vocale potrebbero non essere in grado di comprendere, un buon esempio di questo può essere quando si crea un'applicazione per il settore telemedico e l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni sulla creazione e la distribuzione di modelli di riconoscimento vocale personalizzati, vedere qui.
Scelte 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 gli eventi RecognizeCompleted e RecognizeFailed nel callback webhook registrati per la chiamata per creare la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi menzionati in precedenza.
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
- Account Azure con una sottoscrizione attiva. Per informazioni dettagliate, vedere Creare gratuitamente un account.
- Servizi di comunicazione di Azure risorsa. Vedere Creare una risorsa Servizi di comunicazione di Azure. Prendere nota del stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando Call Automation SDK.
- Avere installato Python, è possibile eseguire l'installazione dal sito ufficiale.
Per le funzionalità di intelligenza artificiale
- Creare e connettere i servizi di intelligenza artificiale di Azure alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei servizi di intelligenza artificiale di Azure.
Specifiche tecniche
Per personalizzare la funzione Recognize sono disponibili i parametri seguenti:
Parametro | Tipo | Valore predefinito (se non specificato) | Descrizione | Obbligatorio o facoltativo |
---|---|---|---|---|
Prompt Per informazioni dettagliate sull'azione Di riproduzione, fare riferimento a questa guida pratica. |
FileSource, TextSource | Non impostato | Questo è il messaggio che desideri riprodurre prima di riconoscere l'input. | Facoltativo |
InterToneTimeout | TimeSpan | 2 secondi Min: 1 secondo Massimo: 60 secondi |
Limite in secondi che Servizi di comunicazione di Azure attende che il chiamante premi un'altra cifra (timeout tra cifre). | Facoltativo |
InitialSegmentationSilenceTimeoutInSeconds | Integer | 0,5 secondi | Per quanto tempo l'azione di riconoscimento attende l'input prima di considerarlo un timeout. Per altre informazioni, leggi qui. | Facoltativo |
RecognizeInputsType | Enumerazione | Dtmf | Tipo di input riconosciuto. Le opzioni sono dtmf, scelte, parlato e speechordtmf. | Richiesto |
InitialSilenceTimeout | TimeSpan | 5 secondi Min: 0 secondi Max: 300 secondi (DTMF) Massimo: 20 secondi (scelte) Max: 20 secondi (Riconoscimento vocale) |
Il timeout del silenzio iniziale regola la quantità di audio non speciale consentita prima di una frase prima che il tentativo di riconoscimento termini con un risultato "nessuna corrispondenza". Per altre informazioni, leggi qui. | Facoltativo |
MaxTonesToCollect | Integer | Nessun valore predefinito Min: 1 |
Numero di cifre previste dallo sviluppatore come input del partecipante. | Richiesto |
StopTones | IEnumeration<DtmfTone> | Non impostato | I partecipanti alla cifra possono premere per uscire da un evento DTMF batch. | Facoltativo |
InterruptPrompt | Bool | True | Se il partecipante ha la possibilità di interrompere il playMessage premendo una cifra. | Facoltativo |
InterruptCallMediaOperation | Bool | True | Se questo flag è impostato, interrompe l'operazione di supporto di chiamata corrente. Ad esempio, se viene riprodotto un audio interrompe l'operazione e avvia il riconoscimento. | Facoltativo |
Operationcontext | Stringa | Non impostato | Stringa che gli sviluppatori possono passare mid action, utile per consentire agli sviluppatori di archiviare il contesto sugli eventi ricevuti. | Facoltativo |
Frasi | Stringa | Non impostato | Elenco di frasi associate all'etichetta, se una di queste viene considerata un riconoscimento riuscito. | Richiesto |
Tono | Stringa | Non impostato | Tono da riconoscere se l'utente decide di premere un numero invece di usare il parlato. | Facoltativo |
Label | Stringa | Non impostato | Valore della chiave per il riconoscimento. | Richiesto |
Lingua | Stringa | En-us | Lingua usata per il riconoscimento vocale. | Facoltativo |
EndSilenceTimeout | TimeSpan | 0,5 secondi | La pausa finale dell'altoparlante usata per rilevare il risultato finale generato come voce. | Facoltativo |
Nota
Nelle situazioni in cui sia dtmf che voce si trovano nel recognizeInputsType, l'azione di riconoscimento agisce sul primo tipo di input ricevuto, ad esempio se l'utente preme un numero di tastierino prima, l'azione di riconoscimento lo considererà un evento dtmf e continuerà ad ascoltare i toni dtmf. Se l'utente parla prima di tutto, l'azione di riconoscimento lo considererà 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
In Unix usare il comando seguente:
source play-audio-quickstart /bin/activate
Installare il pacchetto di automazione delle chiamate Servizi di comunicazione di Azure
pip install azure-communication-callautomation
Creare il file dell'applicazione nella directory del progetto, ad esempio denominarlo app.py. Il codice Python viene scritto in questo file.
Eseguire l'applicazione usando Python con il comando seguente. In questo modo viene eseguito il codice Python scritto.
python app.py
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio, se è necessario ottenere altre informazioni sull'esecuzione di una chiamata, seguire la guida introduttiva. In questo argomento di avvio rapido viene creata 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 personalizzati. Le funzionalità come i modelli di riconoscimento vocale personalizzati possono essere utili quando si crea un'applicazione che deve ascoltare parole complesse che i modelli predefiniti di riconoscimento vocale potrebbero non essere in grado di comprendere, un buon esempio di questo può essere quando si crea un'applicazione per il settore telemedico e l'agente virtuale deve essere in grado di riconoscere i termini medici. Per altre informazioni sulla creazione e la distribuzione di modelli di riconoscimento vocale personalizzati, vedere qui.
Scelte 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 gli eventi RecognizeCompleted e RecognizeFailed nel callback webhook registrati per la chiamata per creare la logica di business nell'applicazione per determinare i passaggi successivi quando si verifica uno degli eventi menzionati in precedenza.
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
Stato | Codice | Sottocodice | Message |
---|---|---|---|
RecognizeCompleted | 200 | 8531 | Azione completata, numero massimo di cifre ricevute. |
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, timeout di silenzio tra cifre raggiunto. |
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 del server sconosciuto. |
RecognizeFailed | 400 | 8510 | Azione non riuscita, timeout di silenzio iniziale raggiunto |
RecognizeFailed | 400 | 8532 | Azione non riuscita, timeout di silenzio tra cifre raggiunto. |
RecognizeFailed | 400 | 8565 | Azione non riuscita, richiesta non valida ai servizi di intelligenza artificiale di Azure. Controllare i parametri di input. |
Riconoscimento non riuscito | 400 | 8565 | Azione non riuscita, richiesta non valida ai servizi di intelligenza artificiale di Azure. Impossibile 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 del server sconosciuto. |
Limitazioni note
- DTMF in banda non è supportato, usare invece DTMF RFC 2833.
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 su Raccolta di input utente
- Altre informazioni sulla riproduzione di audio nella chiamata
- Altre informazioni sull'automazione delle chiamate
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per