Condividi tramite


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

Per le funzionalità di intelligenza artificiale

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

Per le funzionalità di intelligenza artificiale

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

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

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