Teilen über


Erfassen von Benutzereingaben mit der Erkennungsaktion

Diese Anleitung unterstützt Sie beim Einstieg in die Erkennung von DTMF-Eingaben, die von Teilnehmern mithilfe des Azure Communication Services Call Automation SDK bereitgestellt werden.

Voraussetzungen

Für KI-Features

Technische Spezifikationen

Die folgenden Parameter stehen zum Anpassen der Erkennungsfunktion zur Verfügung:

Parameter type Standard (falls nicht angegeben) Beschreibung Erforderlich oder optional
Prompt

(Details finden Sie unter Anpassen von sprachbasierten Eingabeaufforderungen für Benutzer mit der Wiedergabeaktion)
FileSource, TextSource Nicht festgelegt Die Nachricht, die vor der Erkennung von Eingaben wiedergegeben werden soll. Optional
InterToneTimeout TimeSpan 2 Sekunden

Min: 1 Sekunde
Max: 60 Sekunden
Grenzwert in Sekunden, den Azure Communication Services wartet, dass der Anrufer oder die Aufruferin eine weitere Ziffer eingibt (Timeoutwert zwischen Ziffern). Optional
InitialSegmentationSilenceTimeoutInSeconds Integer 0,5 Sekunden Zeitraum, den eine Erkennungsaktion auf Eingaben wartet, bevor sie die Wartezeit als Timeout betrachtet. Siehe Erkennen von Sprache. Optional
RecognizeInputsType Enum dtmf Typ der erkannten Eingabedaten. Die Optionen sind dtmf, choices, speech und speechordtmf. Erforderlich
InitialSilenceTimeout TimeSpan 5 Sekunden

Min: 0 Sekunden
Max: 300 Sekunden (DTMF)
Max: 20 Sekunden (Auswahl)
Max: 20 Sekunden (Sprache)
Initial silence timeout (Anfangsstille-Timeout) passt an, wie viel sprachfremdes Audio vor einem Ausdruck zulässig ist, bevor der Erkennungsversuch mit dem Ergebnis „keine Übereinstimmung“ endet. Siehe Erkennen von Sprache. Optional
MaxTonesToCollect Integer Kein Standardwert

Min: 1
Anzahl der Ziffern, die ein Entwickler als Eingabe vom Teilnehmer erwartet. Erforderlich
StopTones IEnumeration<DtmfTone> Nicht festgelegt Die Ziffer, die Teilnehmer drücken können, um aus einem Batch-DTMF-Ereignis freizukommen. Optional
InterruptPrompt Bool True Falls der Teilnehmer die Möglichkeit hat, die playMessage durch Drücken einer Ziffer zu unterbrechen. Optional
InterruptCallMediaOperation Bool True Wenn dieses Flag festgelegt ist, wird der aktuelle Anrufmedienvorgang unterbrochen. Beispielsweise wird der Vorgang während einer laufenden Wiedergabe unterbrochen und die Erkennung eingeleitet. Optional
OperationContext String Nicht festgelegt Zeichenfolge, die Entwickler während einer Aktion übergeben können. Damit können Entwickler Kontext zu den empfangenen Ereignissen speichern. Optional
Phrases String Nicht festgelegt Liste der Ausdrücke, die der Bezeichnung zugeordnet sind. Das Hören eines dieser Ausdrücke führt zu einer erfolgreichen Erkennung. Erforderlich
Tone String Nicht festgelegt Der Ton, der erkannt werden soll, wenn der Benutzer oder die Benutzerin entscheidet, eine Zahl einzugeben, anstatt die Spracheingabe zu verwenden. Optional
Label String Nicht festgelegt Der Schlüsselwert für die Erkennung. Erforderlich
Language String en-US Die Sprache, die für die Spracherkennung verwendet wird. Optional
EndSilenceTimeout TimeSpan 0,5 Sekunden Die letzte Pause des Sprechers/der Sprecherin, die zum Erkennen des Endergebnisses verwendet wird, das als Sprache generiert wird. Optional

Hinweis

In Situationen, in denen sich sowohl DTMF als auch Sprache im recognizeInputsType befinden, wirkt die Erkennungsaktion auf den ersten empfangenen Eingabetyp. Wenn der Benutzer beispielsweise zuerst eine Wähltastatur drückt, betrachtet die Erkennungsaktion dies als DTMF-Ereignis und lauscht weiterhin auf DTMF-Töne. Wenn der Benutzer zuerst spricht, wertet die Erkennungsaktion dies als Spracherkennungsereignis und lauscht auf Spracheingaben.

Erstellen einer neuen C#-Anwendung

Verwenden Sie im Konsolenfenster Ihres Betriebssystems den Befehl dotnet, um eine neue Webanwendung zu erstellen.

dotnet new web -n MyApplication

Installieren des NuGet-Pakets

Rufen Sie das NuGet-Paket aus NuGet Gallery | Azure.Communication.CallAutomation ab. Verwenden Sie die hier angegebene Anleitung, um das Paket zu installieren.

Einrichten eines Anrufs

An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Weitere Informationen zum Tätigen eines Anrufs finden Sie unter Schnellstart: Ausführen eines ausgehenden Anrufs. Sie können auch den folgenden Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.

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); 

Aufrufen der Erkennungsaktion

Wenn Ihre Anwendung den Anruf annimmt, können Sie Informationen zur Erkennung von Teilnehmereingaben und zur Wiedergabe einer Äußerung bereitstellen.

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);

Bei Spracherkennungsflows unterstützt die Erkennungsaktion der Anrufautomatisierung auch die Verwendung von benutzerdefinierten Sprachmodellen. Features wie benutzerdefinierte Sprachmodelle können nützlich sein, wenn Sie eine Anwendung erstellen, die auf komplexe Wörter lauschen muss, die von den Standardmäßigen Sprache-in-Text-Modellen möglicherweise nicht verstanden werden. Ein Beispiel ist, wenn Sie eine Anwendung für die Telemedizinbranche erstellen und Ihr virtueller Agent in der Lage sein muss, medizinische Begriffe zu erkennen. Weitere Informationen finden Sie in Erstellen eines Custom Speech-Projekts.

Auswahlmöglichkeiten bei der Spracherkennung

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);

Spracherkennung

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);

Sprache-in-Text oder 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); 

Hinweis

Wenn keine Parameter festgelegt sind, werden nach Möglichkeit die Standardwerte angewandt.

Empfangen von Updates zu Erkennungsereignissen

Entwickler und Entwicklerinnen können die Ereignisse RecognizeCompleted und RecognizeFailed für den registrierten Webhook-Rückruf abonnieren. Verwenden Sie diesen Rückruf mit Geschäftslogik in Ihrer Anwendung, um die nächsten Schritte zu bestimmen, wenn eines der Ereignisse eintritt.

Beispiel zur Deserialisierung des RecognizeCompleted-Ereignisses:

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; 
    } 
} 

Beispiel zur Deserialisierung des RecognizeFailed-Ereignisses:

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); 
    } 
} 

Beispiel zur Deserialisierung des RecognizeCanceled-Ereignisses:

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);
        }

Voraussetzungen

Für KI-Features

Technische Spezifikationen

Die folgenden Parameter stehen zum Anpassen der Erkennungsfunktion zur Verfügung:

Parameter type Standard (falls nicht angegeben) Beschreibung Erforderlich oder optional
Prompt

(Details finden Sie unter Anpassen von sprachbasierten Eingabeaufforderungen für Benutzer mit der Wiedergabeaktion)
FileSource, TextSource Nicht festgelegt Die Nachricht, die vor der Erkennung von Eingaben wiedergegeben werden soll. Optional
InterToneTimeout TimeSpan 2 Sekunden

Min: 1 Sekunde
Max: 60 Sekunden
Grenzwert in Sekunden, den Azure Communication Services wartet, dass der Anrufer oder die Aufruferin eine weitere Ziffer eingibt (Timeoutwert zwischen Ziffern). Optional
InitialSegmentationSilenceTimeoutInSeconds Integer 0,5 Sekunden Zeitraum, den eine Erkennungsaktion auf Eingaben wartet, bevor sie die Wartezeit als Timeout betrachtet. Siehe Erkennen von Sprache. Optional
RecognizeInputsType Enum dtmf Typ der erkannten Eingabedaten. Die Optionen sind dtmf, choices, speech und speechordtmf. Erforderlich
InitialSilenceTimeout TimeSpan 5 Sekunden

Min: 0 Sekunden
Max: 300 Sekunden (DTMF)
Max: 20 Sekunden (Auswahl)
Max: 20 Sekunden (Sprache)
Initial silence timeout (Anfangsstille-Timeout) passt an, wie viel sprachfremdes Audio vor einem Ausdruck zulässig ist, bevor der Erkennungsversuch mit dem Ergebnis „keine Übereinstimmung“ endet. Siehe Erkennen von Sprache. Optional
MaxTonesToCollect Integer Kein Standardwert

Min: 1
Anzahl der Ziffern, die ein Entwickler als Eingabe vom Teilnehmer erwartet. Erforderlich
StopTones IEnumeration<DtmfTone> Nicht festgelegt Die Ziffer, die Teilnehmer drücken können, um aus einem Batch-DTMF-Ereignis freizukommen. Optional
InterruptPrompt Bool True Falls der Teilnehmer die Möglichkeit hat, die playMessage durch Drücken einer Ziffer zu unterbrechen. Optional
InterruptCallMediaOperation Bool True Wenn dieses Flag festgelegt ist, wird der aktuelle Anrufmedienvorgang unterbrochen. Beispielsweise wird der Vorgang während einer laufenden Wiedergabe unterbrochen und die Erkennung eingeleitet. Optional
OperationContext String Nicht festgelegt Zeichenfolge, die Entwickler während einer Aktion übergeben können. Damit können Entwickler Kontext zu den empfangenen Ereignissen speichern. Optional
Phrases String Nicht festgelegt Liste der Ausdrücke, die der Bezeichnung zugeordnet sind. Das Hören eines dieser Ausdrücke führt zu einer erfolgreichen Erkennung. Erforderlich
Tone String Nicht festgelegt Der Ton, der erkannt werden soll, wenn der Benutzer oder die Benutzerin entscheidet, eine Zahl einzugeben, anstatt die Spracheingabe zu verwenden. Optional
Label String Nicht festgelegt Der Schlüsselwert für die Erkennung. Erforderlich
Language String en-US Die Sprache, die für die Spracherkennung verwendet wird. Optional
EndSilenceTimeout TimeSpan 0,5 Sekunden Die letzte Pause des Sprechers/der Sprecherin, die zum Erkennen des Endergebnisses verwendet wird, das als Sprache generiert wird. Optional

Hinweis

In Situationen, in denen sich sowohl DTMF als auch Sprache im recognizeInputsType befinden, wirkt die Erkennungsaktion auf den ersten empfangenen Eingabetyp. Wenn der Benutzer beispielsweise zuerst eine Wähltastatur drückt, betrachtet die Erkennungsaktion dies als DTMF-Ereignis und lauscht weiterhin auf DTMF-Töne. Wenn der Benutzer zuerst spricht, wertet die Erkennungsaktion dies als Spracherkennungsereignis und lauscht auf Spracheingaben.

Erstellen einer neuen Java-Anwendung

Navigieren Sie in Ihrem Terminal- oder Befehlsfenster zu dem Verzeichnis, in dem Sie Ihre Java-Anwendung erstellen möchten. Führen Sie den Befehl mvn aus, um das Java-Projekt aus der Vorlage „maven-archetype-quickstart“ zu generieren.

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Der oben angegebene Befehl mvn erstellt ein Verzeichnis mit demselben Namen wie das artifactId-Argument. Das Verzeichnis src/main/java enthält den Projektquellcode. Das Verzeichnis src/test/java enthält die Testquelle.

Beachten Sie, dass der Schritt generate ein Verzeichnis mit dem gleichen Namen wie die artifactId erstellt hat. Das Verzeichnis src/main/java enthält Quellcode. Das Verzeichnis src/test/java enthält Tests. Die Datei pom.xml ist das Project Object Model (POM) des Projekts.

Aktualisieren Sie die POM-Datei Ihrer Anwendung für die Verwendung von Java 8 oder höher:

<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>

Hinzufügen von Paketverweisen

Fügen Sie in Ihrer POM-Datei den folgenden Verweis für das Projekt hinzu:

azure-communication-callautomation

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-communication-callautomation</artifactId>
  <version>1.0.0</version>
</dependency>

Einrichten eines Anrufs

An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Weitere Informationen zum Tätigen eines Anrufs finden Sie unter Schnellstart: Ausführen eines ausgehenden Anrufs. Sie können auch den folgenden Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.

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();

Aufrufen der Erkennungsaktion

Wenn Ihre Anwendung den Anruf annimmt, können Sie Informationen zur Erkennung von Teilnehmereingaben und zur Wiedergabe einer Äußerung bereitstellen.

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()); 

Bei Spracherkennungsflows unterstützt die Erkennungsaktion der Anrufautomatisierung auch die Verwendung von benutzerdefinierten Sprachmodellen. Features wie benutzerdefinierte Sprachmodelle können nützlich sein, wenn Sie eine Anwendung erstellen, die auf komplexe Wörter lauschen muss, die von den Standardmäßigen Sprache-in-Text-Modellen möglicherweise nicht verstanden werden. Ein Beispiel ist, wenn Sie eine Anwendung für die Telemedizinbranche erstellen und Ihr virtueller Agent in der Lage sein muss, medizinische Begriffe zu erkennen. Weitere Informationen finden Sie in Erstellen eines Custom Speech-Projekts.

Auswahlmöglichkeiten bei der Spracherkennung

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();

Spracherkennung

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(); 

Sprache-in-Text oder 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(); 

Hinweis

Wenn keine Parameter festgelegt sind, werden nach Möglichkeit die Standardwerte angewandt.

Empfangen von Updates zu Erkennungsereignissen

Entwickler und Entwicklerinnen können die Ereignisse RecognizeCompleted und RecognizeFailed für den registrierten Webhook-Rückruf abonnieren. Verwenden Sie diesen Rückruf mit Geschäftslogik in Ihrer Anwendung, um die nächsten Schritte zu bestimmen, wenn eines der Ereignisse eintritt.

Beispiel zur Deserialisierung des RecognizeCompleted-Ereignisses:

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()); 
    } 
} 

Beispiel zur Deserialisierung des RecognizeFailed-Ereignisses:

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()); 
    } 
} 

Beispiel zur Deserialisierung des RecognizeCanceled-Ereignisses:

if (acsEvent instanceof RecognizeCanceled) { 
    RecognizeCanceled event = (RecognizeCanceled) acsEvent; 
    log.info("Recognition canceled, context=" + event.getOperationContext()); 
}

Voraussetzungen

Für KI-Features

Technische Spezifikationen

Die folgenden Parameter stehen zum Anpassen der Erkennungsfunktion zur Verfügung:

Parameter type Standard (falls nicht angegeben) Beschreibung Erforderlich oder optional
Prompt

(Details finden Sie unter Anpassen von sprachbasierten Eingabeaufforderungen für Benutzer mit der Wiedergabeaktion)
FileSource, TextSource Nicht festgelegt Die Nachricht, die vor der Erkennung von Eingaben wiedergegeben werden soll. Optional
InterToneTimeout TimeSpan 2 Sekunden

Min: 1 Sekunde
Max: 60 Sekunden
Grenzwert in Sekunden, den Azure Communication Services wartet, dass der Anrufer oder die Aufruferin eine weitere Ziffer eingibt (Timeoutwert zwischen Ziffern). Optional
InitialSegmentationSilenceTimeoutInSeconds Integer 0,5 Sekunden Zeitraum, den eine Erkennungsaktion auf Eingaben wartet, bevor sie die Wartezeit als Timeout betrachtet. Siehe Erkennen von Sprache. Optional
RecognizeInputsType Enum dtmf Typ der erkannten Eingabedaten. Die Optionen sind dtmf, choices, speech und speechordtmf. Erforderlich
InitialSilenceTimeout TimeSpan 5 Sekunden

Min: 0 Sekunden
Max: 300 Sekunden (DTMF)
Max: 20 Sekunden (Auswahl)
Max: 20 Sekunden (Sprache)
Initial silence timeout (Anfangsstille-Timeout) passt an, wie viel sprachfremdes Audio vor einem Ausdruck zulässig ist, bevor der Erkennungsversuch mit dem Ergebnis „keine Übereinstimmung“ endet. Siehe Erkennen von Sprache. Optional
MaxTonesToCollect Integer Kein Standardwert

Min: 1
Anzahl der Ziffern, die ein Entwickler als Eingabe vom Teilnehmer erwartet. Erforderlich
StopTones IEnumeration<DtmfTone> Nicht festgelegt Die Ziffer, die Teilnehmer drücken können, um aus einem Batch-DTMF-Ereignis freizukommen. Optional
InterruptPrompt Bool True Falls der Teilnehmer die Möglichkeit hat, die playMessage durch Drücken einer Ziffer zu unterbrechen. Optional
InterruptCallMediaOperation Bool True Wenn dieses Flag festgelegt ist, wird der aktuelle Anrufmedienvorgang unterbrochen. Beispielsweise wird der Vorgang während einer laufenden Wiedergabe unterbrochen und die Erkennung eingeleitet. Optional
OperationContext String Nicht festgelegt Zeichenfolge, die Entwickler während einer Aktion übergeben können. Damit können Entwickler Kontext zu den empfangenen Ereignissen speichern. Optional
Phrases String Nicht festgelegt Liste der Ausdrücke, die der Bezeichnung zugeordnet sind. Das Hören eines dieser Ausdrücke führt zu einer erfolgreichen Erkennung. Erforderlich
Tone String Nicht festgelegt Der Ton, der erkannt werden soll, wenn der Benutzer oder die Benutzerin entscheidet, eine Zahl einzugeben, anstatt die Spracheingabe zu verwenden. Optional
Label String Nicht festgelegt Der Schlüsselwert für die Erkennung. Erforderlich
Language String en-US Die Sprache, die für die Spracherkennung verwendet wird. Optional
EndSilenceTimeout TimeSpan 0,5 Sekunden Die letzte Pause des Sprechers/der Sprecherin, die zum Erkennen des Endergebnisses verwendet wird, das als Sprache generiert wird. Optional

Hinweis

In Situationen, in denen sich sowohl DTMF als auch Sprache im recognizeInputsType befinden, wirkt die Erkennungsaktion auf den ersten empfangenen Eingabetyp. Wenn der Benutzer beispielsweise zuerst eine Wähltastatur drückt, betrachtet die Erkennungsaktion dies als DTMF-Ereignis und lauscht weiterhin auf DTMF-Töne. Wenn der Benutzer zuerst spricht, wertet die Erkennungsaktion dies als Spracherkennungsereignis und lauscht auf Spracheingaben.

Erstellen einer neuen JavaScript-Anwendung

Erstellen Sie eine neue JavaScript-Anwendung in Ihrem Projektverzeichnis. Initialisieren Sie mit dem folgenden Befehl ein Node.js-Projekt. Damit wird eine Datei „package.json“ für Ihr Projekt erstellt, die die Abhängigkeiten Ihres Projekts verwaltet.

npm init -y

Installieren des Anrufautomatisierungspakets für Azure Communication Services

npm install @azure/communication-call-automation

Erstellen Sie eine neue JavaScript-Datei in Ihrem Projektverzeichnis, und nennen Sie sie app.js. Schreiben Sie Ihren JavaScript-Code in dieser Datei.

Führen Sie Ihre Anwendung mit dem folgenden Node.js-Befehl aus.

node app.js

Einrichten eines Anrufs

An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Weitere Informationen zum Tätigen eines Anrufs finden Sie unter Schnellstart: Ausführen eines ausgehenden Anrufs.

Aufrufen der Erkennungsaktion

Wenn Ihre Anwendung den Anruf annimmt, können Sie Informationen zur Erkennung von Teilnehmereingaben und zur Wiedergabe einer Äußerung bereitstellen.

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); 

Bei Spracherkennungsflows unterstützt die Erkennungsaktion der Anrufautomatisierung auch die Verwendung von benutzerdefinierten Sprachmodellen. Features wie benutzerdefinierte Sprachmodelle können nützlich sein, wenn Sie eine Anwendung erstellen, die auf komplexe Wörter lauschen muss, die von den Standardmäßigen Sprache-in-Text-Modellen möglicherweise nicht verstanden werden. Ein Beispiel ist, wenn Sie eine Anwendung für die Telemedizinbranche erstellen und Ihr virtueller Agent in der Lage sein muss, medizinische Begriffe zu erkennen. Weitere Informationen finden Sie in Erstellen eines Custom Speech-Projekts.

Auswahlmöglichkeiten bei der Spracherkennung

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); 

Spracherkennung

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); 

Sprache-in-Text oder 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); 

Hinweis

Wenn keine Parameter festgelegt sind, werden nach Möglichkeit die Standardwerte angewandt.

Empfangen von Updates zu Erkennungsereignissen

Entwickler und Entwicklerinnen können die Ereignisse RecognizeCompleted und RecognizeFailed für den registrierten Webhook-Rückruf abonnieren. Verwenden Sie diesen Rückruf mit Geschäftslogik in Ihrer Anwendung, um die nächsten Schritte zu bestimmen, wenn eines der Ereignisse eintritt.

Beispiel zur Deserialisierung des RecognizeCompleted-Ereignisses:

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)); 
    } 
} 

Beispiel zur Deserialisierung des RecognizeFailed-Ereignisses:

if (event.type === "Microsoft.Communication.RecognizeFailed") {
    console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}

Beispiel zur Deserialisierung des RecognizeCanceled-Ereignisses:

if (event.type === "Microsoft.Communication.RecognizeCanceled") {
    console.log("Recognize canceled, context=%s", eventData.operationContext);
}

Voraussetzungen

Für KI-Features

Technische Spezifikationen

Die folgenden Parameter stehen zum Anpassen der Erkennungsfunktion zur Verfügung:

Parameter type Standard (falls nicht angegeben) Beschreibung Erforderlich oder optional
Prompt

(Details finden Sie unter Anpassen von sprachbasierten Eingabeaufforderungen für Benutzer mit der Wiedergabeaktion)
FileSource, TextSource Nicht festgelegt Die Nachricht, die vor der Erkennung von Eingaben wiedergegeben werden soll. Optional
InterToneTimeout TimeSpan 2 Sekunden

Min: 1 Sekunde
Max: 60 Sekunden
Grenzwert in Sekunden, den Azure Communication Services wartet, dass der Anrufer oder die Aufruferin eine weitere Ziffer eingibt (Timeoutwert zwischen Ziffern). Optional
InitialSegmentationSilenceTimeoutInSeconds Integer 0,5 Sekunden Zeitraum, den eine Erkennungsaktion auf Eingaben wartet, bevor sie die Wartezeit als Timeout betrachtet. Siehe Erkennen von Sprache. Optional
RecognizeInputsType Enum dtmf Typ der erkannten Eingabedaten. Die Optionen sind dtmf, choices, speech und speechordtmf. Erforderlich
InitialSilenceTimeout TimeSpan 5 Sekunden

Min: 0 Sekunden
Max: 300 Sekunden (DTMF)
Max: 20 Sekunden (Auswahl)
Max: 20 Sekunden (Sprache)
Initial silence timeout (Anfangsstille-Timeout) passt an, wie viel sprachfremdes Audio vor einem Ausdruck zulässig ist, bevor der Erkennungsversuch mit dem Ergebnis „keine Übereinstimmung“ endet. Siehe Erkennen von Sprache. Optional
MaxTonesToCollect Integer Kein Standardwert

Min: 1
Anzahl der Ziffern, die ein Entwickler als Eingabe vom Teilnehmer erwartet. Erforderlich
StopTones IEnumeration<DtmfTone> Nicht festgelegt Die Ziffer, die Teilnehmer drücken können, um aus einem Batch-DTMF-Ereignis freizukommen. Optional
InterruptPrompt Bool True Falls der Teilnehmer die Möglichkeit hat, die playMessage durch Drücken einer Ziffer zu unterbrechen. Optional
InterruptCallMediaOperation Bool True Wenn dieses Flag festgelegt ist, wird der aktuelle Anrufmedienvorgang unterbrochen. Beispielsweise wird der Vorgang während einer laufenden Wiedergabe unterbrochen und die Erkennung eingeleitet. Optional
OperationContext String Nicht festgelegt Zeichenfolge, die Entwickler während einer Aktion übergeben können. Damit können Entwickler Kontext zu den empfangenen Ereignissen speichern. Optional
Phrases String Nicht festgelegt Liste der Ausdrücke, die der Bezeichnung zugeordnet sind. Das Hören eines dieser Ausdrücke führt zu einer erfolgreichen Erkennung. Erforderlich
Tone String Nicht festgelegt Der Ton, der erkannt werden soll, wenn der Benutzer oder die Benutzerin entscheidet, eine Zahl einzugeben, anstatt die Spracheingabe zu verwenden. Optional
Label String Nicht festgelegt Der Schlüsselwert für die Erkennung. Erforderlich
Language String en-US Die Sprache, die für die Spracherkennung verwendet wird. Optional
EndSilenceTimeout TimeSpan 0,5 Sekunden Die letzte Pause des Sprechers/der Sprecherin, die zum Erkennen des Endergebnisses verwendet wird, das als Sprache generiert wird. Optional

Hinweis

In Situationen, in denen sich sowohl DTMF als auch Sprache im recognizeInputsType befinden, wirkt die Erkennungsaktion auf den ersten empfangenen Eingabetyp. Wenn der Benutzer beispielsweise zuerst eine Wähltastatur drückt, betrachtet die Erkennungsaktion dies als DTMF-Ereignis und lauscht weiterhin auf DTMF-Töne. Wenn der Benutzer zuerst spricht, wertet die Erkennungsaktion dies als Spracherkennungsereignis und lauscht auf Spracheingaben.

Erstellen einer neuen Python-Anwendung

Einrichten einer virtuellen Python-Umgebung für Ihr Projekt

python -m venv play-audio-app

Aktivieren der virtuellen Umgebung

Verwenden Sie unter Windows den folgenden Befehl:

.\ play-audio-quickstart \Scripts\activate

Verwenden Sie unter Unix den folgenden Befehl:

source play-audio-quickstart /bin/activate

Installieren des Anrufautomatisierungspakets für Azure Communication Services

pip install azure-communication-callautomation

Erstellen Sie Ihre Anwendungsdatei in Ihrem Projektverzeichnis, und nennen Sie sie app.py. Schreiben Sie Ihren Python-Code in dieser Datei.

Führen Sie Ihre Anwendung mit Python und dem folgenden Befehl aus.

python app.py

Einrichten eines Anrufs

An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Weitere Informationen zum Tätigen eines Anrufs finden Sie unter Schnellstart: Ausführen eines ausgehenden Anrufs.

Aufrufen der Erkennungsaktion

Wenn Ihre Anwendung den Anruf annimmt, können Sie Informationen zur Erkennung von Teilnehmereingaben und zur Wiedergabe einer Äußerung bereitstellen.

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 ]) 

Bei Spracherkennungsflows unterstützt die Erkennungsaktion der Anrufautomatisierung auch die Verwendung von benutzerdefinierten Sprachmodellen. Features wie benutzerdefinierte Sprachmodelle können nützlich sein, wenn Sie eine Anwendung erstellen, die auf komplexe Wörter lauschen muss, die von den Standardmäßigen Sprache-in-Text-Modellen möglicherweise nicht verstanden werden. Ein Beispiel ist, wenn Sie eine Anwendung für die Telemedizinbranche erstellen und Ihr virtueller Agent in der Lage sein muss, medizinische Begriffe zu erkennen. Weitere Informationen finden Sie in Erstellen eines Custom Speech-Projekts.

Auswahlmöglichkeiten bei der Spracherkennung

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")  

Spracherkennung

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") 

Sprache-in-Text oder 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") 

Hinweis

Wenn keine Parameter festgelegt sind, werden nach Möglichkeit die Standardwerte angewandt.

Empfangen von Updates zu Erkennungsereignissen

Entwickler und Entwicklerinnen können die Ereignisse RecognizeCompleted und RecognizeFailed für den registrierten Webhook-Rückruf abonnieren. Verwenden Sie diesen Rückruf mit Geschäftslogik in Ihrer Anwendung, um die nächsten Schritte zu bestimmen, wenn eines der Ereignisse eintritt.

Beispiel zur Deserialisierung des RecognizeCompleted-Ereignisses:

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); 

Beispiel zur Deserialisierung des RecognizeFailed-Ereignisses:

if event.type == "Microsoft.Communication.RecognizeFailed": 
    app.logger.info("Recognize failed: data=%s", event.data); 

Beispiel zur Deserialisierung des RecognizeCanceled-Ereignisses:

if event.type == "Microsoft.Communication.RecognizeCanceled":
    # Handle the RecognizeCanceled event according to your application logic

Ereigniscodes

Status Code Subcode `Message`
RecognizeCompleted 200 8531 Aktion abgeschlossen, maximale Ziffern empfangen.
RecognizeCompleted 200 8514 Aktion abgeschlossen, da ein Stoppton erkannt wurde.
RecognizeCompleted 400 8508 Fehler bei der Aktion, der Vorgang wurde abgebrochen.
RecognizeCompleted 400 8532 Fehler bei der Aktion, das Timeout für Stille zwischen Zifferneingaben wurde erreicht.
RecognizeCanceled 400 8508 Fehler bei der Aktion, der Vorgang wurde abgebrochen.
RecognizeFailed 400 8510 Fehler bei der Aktion; das Timeout für anfängliche Stille wurde erreicht.
RecognizeFailed 500 8511 Fehler bei der Aktion, Fehler beim Wiedergeben der Äußerung.
RecognizeFailed 500 8512 Unbekannter interner Serverfehler.
RecognizeFailed 400 8510 Fehler bei der Aktion, das Timeout für anfängliche Stille wurde erreicht
RecognizeFailed 400 8532 Fehler bei der Aktion, das Timeout für Stille zwischen Zifferneingaben wurde erreicht.
RecognizeFailed 400 8565 Fehler bei der Aktion, ungültige Anforderung an Azure KI Services. Eingabeparameter prüfen.
RecognizeFailed 400 8565 Fehler bei der Aktion, ungültige Anforderung an Azure KI Services. Die bereitgestellten Nutzdaten konnten nicht verarbeitet werden, überprüfen Sie die Eingabe der Wiedergabequelle.
RecognizeFailed 401 8565 Fehler bei der Aktion, Azure KI Services-Authentifizierungsfehler
RecognizeFailed 403 8565 Fehler bei der Aktion; unzulässige Anforderung an Azure KI Services, kein Kontingent mehr beim für die Anforderung verwendeten kostenlosen Abonnement
RecognizeFailed 429 8565 Fehler bei der Aktion, Anzahl der zulässigen gleichzeitigen Anforderungen für das Azure KI Services-Abonnement überschritten
RecognizeFailed 408 8565 Fehler bei der Aktion, Timeout bei der Anforderung an Azure KI Services
RecognizeFailed 500 8511 Fehler bei der Aktion, Fehler beim Wiedergeben der Äußerung.
RecognizeFailed 500 8512 Unbekannter interner Serverfehler.

Bekannte Einschränkungen

  • In-Band DTMF wird nicht unterstützt. Verwenden Sie stattdessen RFC 2833 DTMF.
  • In Textprompts für die Sprachsynthese werden maximal 400 Zeichen unterstützen. Wenn Ihr Prompt länger ist, wird die Verwendung von SSML für Sprachsynthese-Wiedergabeaktionen empfohlen.
  • Sie können in Szenarien, in denen Sie Ihre Kontingentgrenze für den Speech-Dienst überschreiten, eine Erhöhung dieses Grenzwerts anfordern, indem Sie die in Kontingente und Grenzwerte für Speech-Dienste beschriebenen Schritte ausführen.

Bereinigen von Ressourcen

Wenn Sie ein Communication Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind. Weitere Informationen zum Bereinigen von Ressourcen finden Sie hier.

Nächste Schritte