Gebruikersinvoer verzamelen met de actie Recognize
Deze handleiding helpt u aan de slag te gaan met het herkennen van DTMF-invoer die door deelnemers wordt geleverd via azure Communication Services Call Automation SDK.
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie.
- Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken. Noteer de verbindingsreeks voor deze resource.
- Maak een nieuwe webservicetoepassing met behulp van de Call Automation SDK.
- De nieuwste .NET-bibliotheek voor uw besturingssysteem.
- Het nieuwste NuGet-pakket.
Voor AI-functies
- Azure AI-services maken en verbinden met uw Azure Communication Services-resource.
- Maak een aangepast subdomein voor uw Azure AI-servicesresource.
Technische specificaties
De volgende parameters zijn beschikbaar om de functie Recognize aan te passen:
Parameter | Type | Standaard (indien niet opgegeven) | Beschrijving | Vereist of optioneel |
---|---|---|---|---|
Prompt (Zie voor meer informatie Stemprompts aanpassen aan gebruikers met de actie Afspelen) |
FileSource, TextSource | Niet ingesteld | Het bericht dat moet worden afgespeeld voordat invoer wordt herkend. | Optioneel |
InterToneTimeout |
TimeSpan | 2 seconden Min: 1 seconde Max: 60 seconden |
Beperk in seconden dat Azure Communication Services wacht totdat de beller op een ander cijfer (time-out tussen cijfers) drukt. | Optioneel |
InitialSegmentationSilenceTimeoutInSeconds |
Geheel getal | 0,5 seconde | Hoe lang de actie wacht op invoer voordat deze een time-out overweegt. Zie Spraak herkennen. | Optioneel |
RecognizeInputsType |
Enum | Dtmf | Type invoer dat wordt herkend. Opties zijndtmf , choices , en speech speechordtmf . |
Vereist |
InitialSilenceTimeout |
TimeSpan | 5 seconden Min: 0 seconden Max: 300 seconden (DTMF) Max: 20 seconden (Keuzes) Max: 20 seconden (spraak) |
Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'. Zie Spraak herkennen. | Optioneel |
MaxTonesToCollect |
Geheel getal | Geen standaardwaarde Min. 1 |
Het aantal cijfers dat een ontwikkelaar verwacht als invoer van de deelnemer. | Vereist |
StopTones |
IEnumeration<DtmfTone> | Niet ingesteld | De cijferdeelnemers kunnen drukken om uit een batch-DTMF-gebeurtenis te ontsnappen. | Optioneel |
InterruptPrompt |
Bool | Waar | Als de deelnemer de playMessage kan onderbreken door op een cijfer te drukken. | Optioneel |
InterruptCallMediaOperation |
Bool | Waar | Als deze vlag is ingesteld, wordt de huidige oproepmediabewerking onderbroken. Als er bijvoorbeeld audio wordt afgespeeld, wordt die bewerking onderbroken en wordt herkend. | Optioneel |
OperationContext |
String | Niet ingesteld | Tekenreeks die ontwikkelaars mid action kunnen doorgeven, handig om ontwikkelaars in staat te stellen context op te slaan over de gebeurtenissen die ze ontvangen. | Optioneel |
Phrases |
String | Niet ingesteld | Lijst met woordgroepen die aan het label zijn gekoppeld. Het horen van een van deze zinnen resulteert in een geslaagde herkenning. | Vereist |
Tone |
String | Niet ingesteld | De toon die moet worden herkend als de gebruiker besluit om op een getal te drukken in plaats van spraak te gebruiken. | Optioneel |
Label |
String | Niet ingesteld | De sleutelwaarde voor herkenning. | Vereist |
Language |
String | En-us | De taal die wordt gebruikt voor het herkennen van spraak. | Optioneel |
EndSilenceTimeout |
TimeSpan | 0,5 seconde | De laatste pauze van de spreker die wordt gebruikt om het uiteindelijke resultaat te detecteren dat wordt gegenereerd als spraak. | Optioneel |
Notitie
In situaties waarin zowel DTMF als spraak zich in de recognizeInputsType
actie herkennen bevindt, handelt de herkenningsactie op het eerste ontvangen invoertype. Als de gebruiker bijvoorbeeld eerst op een toetsenbloknummer drukt, beschouwt de recognize-actie het als een DTMF-gebeurtenis en blijft luisteren naar DTMF-tonen. Als de gebruiker eerst spreekt, beschouwt de recognize-actie het als een spraakherkenningsevenement en luistert naar spraakinvoer.
Een nieuwe C#-toepassing maken
Gebruik in het consolevenster van uw besturingssysteem de dotnet
opdracht om een nieuwe webtoepassing te maken.
dotnet new web -n MyApplication
Installeer het NuGet-pakket van
Het NuGet-pakket ophalen uit De NuGet-galerie | Azure.Communication.CallAutomation. Volg de instructies om het pakket te installeren.
Een oproep tot stand brengen
Op dit punt moet u bekend zijn met het starten van oproepen. Zie quickstart: Bellen en uitgaand bellen voor meer informatie over het maken van een oproep. U kunt ook het hier opgegeven codefragment gebruiken om te begrijpen hoe u een oproep beantwoordt.
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);
De actie Herkennen aanroepen
Wanneer uw toepassing de oproep beantwoordt, kunt u informatie opgeven over het herkennen van deelnemersinvoer en het afspelen van een prompt.
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);
Voor spraak-naar-tekststromen ondersteunt de actie Oproepautomatisering herkennen ook het gebruik van aangepaste spraakmodellen. Functies zoals aangepaste spraakmodellen kunnen handig zijn wanneer u een toepassing bouwt die moet luisteren naar complexe woorden die de standaardmodellen voor spraak-naar-tekst mogelijk niet begrijpen. Een voorbeeld is wanneer u een toepassing bouwt voor de telemedicale industrie en uw virtuele agent medische termen moet kunnen herkennen. Meer informatie vindt u in Een aangepast spraakproject maken.
Opties voor spraak-naar-tekst
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);
Speech to Text
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);
Spraak-naar-tekst of 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);
Notitie
Als parameters niet zijn ingesteld, worden de standaardinstellingen waar mogelijk toegepast.
Gebeurtenisupdates herkennen ontvangen
Ontwikkelaars kunnen zich abonneren op RecognizeCompleted
en RecognizeFailed
gebeurtenissen op de geregistreerde webhook callback. Gebruik deze callback met bedrijfslogica in uw toepassing om de volgende stappen te bepalen wanneer een van de gebeurtenissen plaatsvindt.
Voorbeeld van hoe u de gebeurtenis RecognizeCompleted kunt deserialiseren:
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;
}
}
Voorbeeld van hoe u de recognizeFailed-gebeurtenis kunt deserialiseren:
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);
}
}
Voorbeeld van hoe u deserialiseren van de gebeurtenis RecognizeCanceled kunt deserialiseren :
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);
}
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie.
- Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken
- Maak een nieuwe webservicetoepassing met behulp van de Call Automation SDK.
- Java Development Kit versie 8 of hoger.
- Apache Maven.
Voor AI-functies
- Azure AI-services maken en verbinden met uw Azure Communication Services-resource.
- Maak een aangepast subdomein voor uw Azure AI-servicesresource.
Technische specificaties
De volgende parameters zijn beschikbaar om de functie Recognize aan te passen:
Parameter | Type | Standaard (indien niet opgegeven) | Beschrijving | Vereist of optioneel |
---|---|---|---|---|
Prompt (Zie voor meer informatie Stemprompts aanpassen aan gebruikers met de actie Afspelen) |
FileSource, TextSource | Niet ingesteld | Het bericht dat moet worden afgespeeld voordat invoer wordt herkend. | Optioneel |
InterToneTimeout |
TimeSpan | 2 seconden Min: 1 seconde Max: 60 seconden |
Beperk in seconden dat Azure Communication Services wacht totdat de beller op een ander cijfer (time-out tussen cijfers) drukt. | Optioneel |
InitialSegmentationSilenceTimeoutInSeconds |
Geheel getal | 0,5 seconde | Hoe lang de actie wacht op invoer voordat deze een time-out overweegt. Zie Spraak herkennen. | Optioneel |
RecognizeInputsType |
Enum | Dtmf | Type invoer dat wordt herkend. Opties zijndtmf , choices , en speech speechordtmf . |
Vereist |
InitialSilenceTimeout |
TimeSpan | 5 seconden Min: 0 seconden Max: 300 seconden (DTMF) Max: 20 seconden (Keuzes) Max: 20 seconden (spraak) |
Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'. Zie Spraak herkennen. | Optioneel |
MaxTonesToCollect |
Geheel getal | Geen standaardwaarde Min. 1 |
Het aantal cijfers dat een ontwikkelaar verwacht als invoer van de deelnemer. | Vereist |
StopTones |
IEnumeration<DtmfTone> | Niet ingesteld | De cijferdeelnemers kunnen drukken om uit een batch-DTMF-gebeurtenis te ontsnappen. | Optioneel |
InterruptPrompt |
Bool | Waar | Als de deelnemer de playMessage kan onderbreken door op een cijfer te drukken. | Optioneel |
InterruptCallMediaOperation |
Bool | Waar | Als deze vlag is ingesteld, wordt de huidige oproepmediabewerking onderbroken. Als er bijvoorbeeld audio wordt afgespeeld, wordt die bewerking onderbroken en wordt herkend. | Optioneel |
OperationContext |
String | Niet ingesteld | Tekenreeks die ontwikkelaars mid action kunnen doorgeven, handig om ontwikkelaars in staat te stellen context op te slaan over de gebeurtenissen die ze ontvangen. | Optioneel |
Phrases |
String | Niet ingesteld | Lijst met woordgroepen die aan het label zijn gekoppeld. Het horen van een van deze zinnen resulteert in een geslaagde herkenning. | Vereist |
Tone |
String | Niet ingesteld | De toon die moet worden herkend als de gebruiker besluit om op een getal te drukken in plaats van spraak te gebruiken. | Optioneel |
Label |
String | Niet ingesteld | De sleutelwaarde voor herkenning. | Vereist |
Language |
String | En-us | De taal die wordt gebruikt voor het herkennen van spraak. | Optioneel |
EndSilenceTimeout |
TimeSpan | 0,5 seconde | De laatste pauze van de spreker die wordt gebruikt om het uiteindelijke resultaat te detecteren dat wordt gegenereerd als spraak. | Optioneel |
Notitie
In situaties waarin zowel DTMF als spraak zich in de recognizeInputsType
actie herkennen bevindt, handelt de herkenningsactie op het eerste ontvangen invoertype. Als de gebruiker bijvoorbeeld eerst op een toetsenbloknummer drukt, beschouwt de recognize-actie het als een DTMF-gebeurtenis en blijft luisteren naar DTMF-tonen. Als de gebruiker eerst spreekt, beschouwt de recognize-actie het als een spraakherkenningsevenement en luistert naar spraakinvoer.
Een nieuwe Java-toepassing maken
Navigeer in het terminal- of opdrachtvenster naar de map waarin u uw Java-toepassing wilt maken. Voer de mvn
opdracht uit om het Java-project te genereren op basis van de maven-archetype-quickstart-sjabloon.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Met mvn
de opdracht maakt u een map met dezelfde naam als het artifactId
argument. De src/main/java
map bevat de broncode van het project. De src/test/java
map bevat de testbron.
U ziet dat de generate
stap een map met dezelfde naam als de artifactId
map heeft gemaakt. De src/main/java
map bevat broncode. De src/test/java
map bevat tests. Het pom.xml
bestand is het Project Object Model (POM) van het project.
Werk het POM-bestand van uw toepassingen bij om Java 8 of hoger te gebruiken.
<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>
Pakketverwijzingen toevoegen
Voeg in uw POM-bestand de volgende verwijzing toe voor het project:
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Een oproep tot stand brengen
Op dit punt moet u bekend zijn met het starten van oproepen. Zie quickstart: Bellen en uitgaand bellen voor meer informatie over het maken van een oproep. U kunt ook het hier opgegeven codefragment gebruiken om te begrijpen hoe u een oproep beantwoordt.
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();
De actie Herkennen aanroepen
Wanneer uw toepassing de oproep beantwoordt, kunt u informatie opgeven over het herkennen van deelnemersinvoer en het afspelen van een prompt.
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());
Voor spraak-naar-tekststromen ondersteunt de actie Oproepautomatisering herkennen ook het gebruik van aangepaste spraakmodellen. Functies zoals aangepaste spraakmodellen kunnen handig zijn wanneer u een toepassing bouwt die moet luisteren naar complexe woorden die de standaardmodellen voor spraak-naar-tekst mogelijk niet begrijpen. Een voorbeeld is wanneer u een toepassing bouwt voor de telemedicale industrie en uw virtuele agent medische termen moet kunnen herkennen. Meer informatie vindt u in Een aangepast spraakproject maken.
Opties voor spraak-naar-tekst
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();
Speech to Text
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();
Spraak-naar-tekst of 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();
Notitie
Als parameters niet zijn ingesteld, worden de standaardinstellingen waar mogelijk toegepast.
Gebeurtenisupdates herkennen ontvangen
Ontwikkelaars kunnen zich abonneren op RecognizeCompleted
en RecognizeFailed
gebeurtenissen op de geregistreerde webhook callback. Gebruik deze callback met bedrijfslogica in uw toepassing om de volgende stappen te bepalen wanneer een van de gebeurtenissen plaatsvindt.
Voorbeeld van hoe u de gebeurtenis RecognizeCompleted kunt deserialiseren:
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());
}
}
Voorbeeld van hoe u de recognizeFailed-gebeurtenis kunt deserialiseren:
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());
}
}
Voorbeeld van hoe u deserialiseren van de gebeurtenis RecognizeCanceled kunt deserialiseren :
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie.
- Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken. Noteer de verbindingsreeks voor deze resource.
- Maak een nieuwe webservicetoepassing met behulp van de Call Automation SDK.
- Node.js geïnstalleerd, kunt u deze installeren vanaf hun officiële website.
Voor AI-functies
- Azure AI-services maken en verbinden met uw Azure Communication Services-resource.
- Maak een aangepast subdomein voor uw Azure AI-servicesresource.
Technische specificaties
De volgende parameters zijn beschikbaar om de functie Recognize aan te passen:
Parameter | Type | Standaard (indien niet opgegeven) | Beschrijving | Vereist of optioneel |
---|---|---|---|---|
Prompt (Zie voor meer informatie Stemprompts aanpassen aan gebruikers met de actie Afspelen) |
FileSource, TextSource | Niet ingesteld | Het bericht dat moet worden afgespeeld voordat invoer wordt herkend. | Optioneel |
InterToneTimeout |
TimeSpan | 2 seconden Min: 1 seconde Max: 60 seconden |
Beperk in seconden dat Azure Communication Services wacht totdat de beller op een ander cijfer (time-out tussen cijfers) drukt. | Optioneel |
InitialSegmentationSilenceTimeoutInSeconds |
Geheel getal | 0,5 seconde | Hoe lang de actie wacht op invoer voordat deze een time-out overweegt. Zie Spraak herkennen. | Optioneel |
RecognizeInputsType |
Enum | Dtmf | Type invoer dat wordt herkend. Opties zijndtmf , choices , en speech speechordtmf . |
Vereist |
InitialSilenceTimeout |
TimeSpan | 5 seconden Min: 0 seconden Max: 300 seconden (DTMF) Max: 20 seconden (Keuzes) Max: 20 seconden (spraak) |
Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'. Zie Spraak herkennen. | Optioneel |
MaxTonesToCollect |
Geheel getal | Geen standaardwaarde Min. 1 |
Het aantal cijfers dat een ontwikkelaar verwacht als invoer van de deelnemer. | Vereist |
StopTones |
IEnumeration<DtmfTone> | Niet ingesteld | De cijferdeelnemers kunnen drukken om uit een batch-DTMF-gebeurtenis te ontsnappen. | Optioneel |
InterruptPrompt |
Bool | Waar | Als de deelnemer de playMessage kan onderbreken door op een cijfer te drukken. | Optioneel |
InterruptCallMediaOperation |
Bool | Waar | Als deze vlag is ingesteld, wordt de huidige oproepmediabewerking onderbroken. Als er bijvoorbeeld audio wordt afgespeeld, wordt die bewerking onderbroken en wordt herkend. | Optioneel |
OperationContext |
String | Niet ingesteld | Tekenreeks die ontwikkelaars mid action kunnen doorgeven, handig om ontwikkelaars in staat te stellen context op te slaan over de gebeurtenissen die ze ontvangen. | Optioneel |
Phrases |
String | Niet ingesteld | Lijst met woordgroepen die aan het label zijn gekoppeld. Het horen van een van deze zinnen resulteert in een geslaagde herkenning. | Vereist |
Tone |
String | Niet ingesteld | De toon die moet worden herkend als de gebruiker besluit om op een getal te drukken in plaats van spraak te gebruiken. | Optioneel |
Label |
String | Niet ingesteld | De sleutelwaarde voor herkenning. | Vereist |
Language |
String | En-us | De taal die wordt gebruikt voor het herkennen van spraak. | Optioneel |
EndSilenceTimeout |
TimeSpan | 0,5 seconde | De laatste pauze van de spreker die wordt gebruikt om het uiteindelijke resultaat te detecteren dat wordt gegenereerd als spraak. | Optioneel |
Notitie
In situaties waarin zowel DTMF als spraak zich in de recognizeInputsType
actie herkennen bevindt, handelt de herkenningsactie op het eerste ontvangen invoertype. Als de gebruiker bijvoorbeeld eerst op een toetsenbloknummer drukt, beschouwt de recognize-actie het als een DTMF-gebeurtenis en blijft luisteren naar DTMF-tonen. Als de gebruiker eerst spreekt, beschouwt de recognize-actie het als een spraakherkenningsevenement en luistert naar spraakinvoer.
Een nieuwe JavaScript-toepassing maken
Maak een nieuwe JavaScript-toepassing in uw projectmap. Initialiseer een nieuw Node.js project met de volgende opdracht. Hiermee maakt u een package.json-bestand voor uw project, waarmee de afhankelijkheden van uw project worden beheerd.
npm init -y
Het Azure Communication Services Call Automation-pakket installeren
npm install @azure/communication-call-automation
Maak een nieuw JavaScript-bestand in uw projectmap, bijvoorbeeld een naam app.js
. Schrijf uw JavaScript-code in dit bestand.
Voer uw toepassing uit met Node.js met de volgende opdracht.
node app.js
Een oproep tot stand brengen
Op dit punt moet u bekend zijn met het starten van oproepen. Zie quickstart: Bellen en uitgaand bellen voor meer informatie over het maken van een oproep.
De actie Herkennen aanroepen
Wanneer uw toepassing de oproep beantwoordt, kunt u informatie opgeven over het herkennen van deelnemersinvoer en het afspelen van een prompt.
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);
Voor spraak-naar-tekststromen ondersteunt de actie Oproepautomatisering herkennen ook het gebruik van aangepaste spraakmodellen. Functies zoals aangepaste spraakmodellen kunnen handig zijn wanneer u een toepassing bouwt die moet luisteren naar complexe woorden die de standaardmodellen voor spraak-naar-tekst mogelijk niet begrijpen. Een voorbeeld is wanneer u een toepassing bouwt voor de telemedicale industrie en uw virtuele agent medische termen moet kunnen herkennen. Meer informatie vindt u in Een aangepast spraakproject maken.
Opties voor spraak-naar-tekst
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);
Speech to Text
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);
Spraak-naar-tekst of 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);
Notitie
Als parameters niet zijn ingesteld, worden de standaardinstellingen waar mogelijk toegepast.
Gebeurtenisupdates herkennen ontvangen
Ontwikkelaars kunnen zich abonneren op RecognizeCompleted
en RecognizeFailed
gebeurtenissen op de geregistreerde webhook callback. Gebruik deze callback met bedrijfslogica in uw toepassing om de volgende stappen te bepalen wanneer een van de gebeurtenissen plaatsvindt.
Voorbeeld van hoe u de gebeurtenis RecognizeCompleted kunt deserialiseren:
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));
}
}
Voorbeeld van hoe u de recognizeFailed-gebeurtenis kunt deserialiseren:
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Voorbeeld van hoe u deserialiseren van de gebeurtenis RecognizeCanceled kunt deserialiseren :
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie.
- Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken. Noteer de verbindingsreeks voor deze resource.
- Maak een nieuwe webservicetoepassing met behulp van de Call Automation SDK.
- Installeer Python vanuit Python.org.
Voor AI-functies
- Azure AI-services maken en verbinden met uw Azure Communication Services-resource.
- Maak een aangepast subdomein voor uw Azure AI-servicesresource.
Technische specificaties
De volgende parameters zijn beschikbaar om de functie Recognize aan te passen:
Parameter | Type | Standaard (indien niet opgegeven) | Beschrijving | Vereist of optioneel |
---|---|---|---|---|
Prompt (Zie voor meer informatie Stemprompts aanpassen aan gebruikers met de actie Afspelen) |
FileSource, TextSource | Niet ingesteld | Het bericht dat moet worden afgespeeld voordat invoer wordt herkend. | Optioneel |
InterToneTimeout |
TimeSpan | 2 seconden Min: 1 seconde Max: 60 seconden |
Beperk in seconden dat Azure Communication Services wacht totdat de beller op een ander cijfer (time-out tussen cijfers) drukt. | Optioneel |
InitialSegmentationSilenceTimeoutInSeconds |
Geheel getal | 0,5 seconde | Hoe lang de actie wacht op invoer voordat deze een time-out overweegt. Zie Spraak herkennen. | Optioneel |
RecognizeInputsType |
Enum | Dtmf | Type invoer dat wordt herkend. Opties zijndtmf , choices , en speech speechordtmf . |
Vereist |
InitialSilenceTimeout |
TimeSpan | 5 seconden Min: 0 seconden Max: 300 seconden (DTMF) Max: 20 seconden (Keuzes) Max: 20 seconden (spraak) |
Met de initiële time-out voor stilte wordt aangepast hoeveel niet-peech-audio is toegestaan voordat een woordgroep wordt beëindigd voordat de herkenningspoging eindigt in het resultaat 'geen overeenkomst'. Zie Spraak herkennen. | Optioneel |
MaxTonesToCollect |
Geheel getal | Geen standaardwaarde Min. 1 |
Het aantal cijfers dat een ontwikkelaar verwacht als invoer van de deelnemer. | Vereist |
StopTones |
IEnumeration<DtmfTone> | Niet ingesteld | De cijferdeelnemers kunnen drukken om uit een batch-DTMF-gebeurtenis te ontsnappen. | Optioneel |
InterruptPrompt |
Bool | Waar | Als de deelnemer de playMessage kan onderbreken door op een cijfer te drukken. | Optioneel |
InterruptCallMediaOperation |
Bool | Waar | Als deze vlag is ingesteld, wordt de huidige oproepmediabewerking onderbroken. Als er bijvoorbeeld audio wordt afgespeeld, wordt die bewerking onderbroken en wordt herkend. | Optioneel |
OperationContext |
String | Niet ingesteld | Tekenreeks die ontwikkelaars mid action kunnen doorgeven, handig om ontwikkelaars in staat te stellen context op te slaan over de gebeurtenissen die ze ontvangen. | Optioneel |
Phrases |
String | Niet ingesteld | Lijst met woordgroepen die aan het label zijn gekoppeld. Het horen van een van deze zinnen resulteert in een geslaagde herkenning. | Vereist |
Tone |
String | Niet ingesteld | De toon die moet worden herkend als de gebruiker besluit om op een getal te drukken in plaats van spraak te gebruiken. | Optioneel |
Label |
String | Niet ingesteld | De sleutelwaarde voor herkenning. | Vereist |
Language |
String | En-us | De taal die wordt gebruikt voor het herkennen van spraak. | Optioneel |
EndSilenceTimeout |
TimeSpan | 0,5 seconde | De laatste pauze van de spreker die wordt gebruikt om het uiteindelijke resultaat te detecteren dat wordt gegenereerd als spraak. | Optioneel |
Notitie
In situaties waarin zowel DTMF als spraak zich in de recognizeInputsType
actie herkennen bevindt, handelt de herkenningsactie op het eerste ontvangen invoertype. Als de gebruiker bijvoorbeeld eerst op een toetsenbloknummer drukt, beschouwt de recognize-actie het als een DTMF-gebeurtenis en blijft luisteren naar DTMF-tonen. Als de gebruiker eerst spreekt, beschouwt de recognize-actie het als een spraakherkenningsevenement en luistert naar spraakinvoer.
Een nieuwe Python-toepassing maken
Een virtuele Python-omgeving instellen voor uw project
python -m venv play-audio-app
Uw virtuele omgeving activeren
Gebruik in Windows de volgende opdracht:
.\ play-audio-quickstart \Scripts\activate
Gebruik in Unix de volgende opdracht:
source play-audio-quickstart /bin/activate
Het Azure Communication Services Call Automation-pakket installeren
pip install azure-communication-callautomation
Maak uw toepassingsbestand in uw projectmap, bijvoorbeeld een naam app.py
. Schrijf uw Python-code in dit bestand.
Voer uw toepassing uit met behulp van Python met de volgende opdracht.
python app.py
Een oproep tot stand brengen
Op dit punt moet u bekend zijn met het starten van oproepen. Zie quickstart: Bellen en uitgaand bellen voor meer informatie over het maken van een oproep.
De actie Herkennen aanroepen
Wanneer uw toepassing de oproep beantwoordt, kunt u informatie opgeven over het herkennen van deelnemersinvoer en het afspelen van een prompt.
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 ])
Voor spraak-naar-tekststromen ondersteunt de actie Oproepautomatisering herkennen ook het gebruik van aangepaste spraakmodellen. Functies zoals aangepaste spraakmodellen kunnen handig zijn wanneer u een toepassing bouwt die moet luisteren naar complexe woorden die de standaardmodellen voor spraak-naar-tekst mogelijk niet begrijpen. Een voorbeeld is wanneer u een toepassing bouwt voor de telemedicale industrie en uw virtuele agent medische termen moet kunnen herkennen. Meer informatie vindt u in Een aangepast spraakproject maken.
Opties voor spraak-naar-tekst
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")
Speech to Text
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")
Spraak-naar-tekst of 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")
Notitie
Als parameters niet zijn ingesteld, worden de standaardinstellingen waar mogelijk toegepast.
Gebeurtenisupdates herkennen ontvangen
Ontwikkelaars kunnen zich abonneren op RecognizeCompleted
en RecognizeFailed
gebeurtenissen op de geregistreerde webhook callback. Gebruik deze callback met bedrijfslogica in uw toepassing om de volgende stappen te bepalen wanneer een van de gebeurtenissen plaatsvindt.
Voorbeeld van hoe u de gebeurtenis RecognizeCompleted kunt deserialiseren:
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);
Voorbeeld van hoe u de recognizeFailed-gebeurtenis kunt deserialiseren:
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Voorbeeld van hoe u deserialiseren van de gebeurtenis RecognizeCanceled kunt deserialiseren :
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Gebeurteniscodes
Status | Code | Subcode | Bericht |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | Actie voltooid, maximaal aantal ontvangen cijfers. |
RecognizeCompleted |
200 | 8514 | Actie voltooid als stoptoon is gedetecteerd. |
RecognizeCompleted |
400 | 8508 | De actie is mislukt, de bewerking is geannuleerd. |
RecognizeCompleted |
400 | 8532 | De time-out voor stilte tussen cijfers is mislukt. |
RecognizeCanceled |
400 | 8508 | De actie is mislukt, de bewerking is geannuleerd. |
RecognizeFailed |
400 | 8510 | Actie is mislukt, time-out voor initiële stilte bereikt. |
RecognizeFailed |
500 | 8511 | Er is een fout opgetreden tijdens het afspelen van de prompt. |
RecognizeFailed |
500 | 8512 | Onbekende interne serverfout. |
RecognizeFailed |
400 | 8510 | Actie mislukt, initiële time-out voor stilte bereikt |
RecognizeFailed |
400 | 8532 | De time-out voor stilte tussen cijfers is mislukt. |
RecognizeFailed |
400 | 8565 | Actie is mislukt, ongeldige aanvraag voor Azure AI-services. Controleer de invoerparameters. |
RecognizeFailed |
400 | 8565 | Actie is mislukt, ongeldige aanvraag voor Azure AI-services. Kan de opgegeven nettolading niet verwerken. Controleer de invoer van de play-bron. |
RecognizeFailed |
401 | 8565 | De actie is mislukt, verificatiefout in Azure AI-services. |
RecognizeFailed |
403 | 8565 | Actie is mislukt, verboden aanvraag voor Azure AI-services, gratis abonnement dat door de aanvraag wordt gebruikt, heeft geen quotum meer. |
RecognizeFailed |
429 | 8565 | Actie is mislukt, aanvragen hebben het aantal toegestane gelijktijdige aanvragen voor het Azure AI-servicesabonnement overschreden. |
RecognizeFailed |
408 | 8565 | Er is een time-out opgetreden voor de actie van Azure AI-services. |
RecognizeFailed |
500 | 8511 | Er is een fout opgetreden tijdens het afspelen van de prompt. |
RecognizeFailed |
500 | 8512 | Onbekende interne serverfout. |
Bekende beperkingen
- In-band DTMF wordt niet ondersteund. Gebruik in plaats daarvan RFC 2833 DTMF.
- Tekst-naar-spraak-tekstprompts ondersteunen maximaal 400 tekens, als uw prompt langer is dan dit, raden we u aan om SSML te gebruiken voor op tekst-naar-spraak gebaseerde afspeelacties.
- Voor scenario's waarin u de quotumlimiet van de Speech-service overschrijdt, kunt u aanvragen om deze limiet te verhogen door de stappen te volgen die worden beschreven in quota en limieten voor Speech-services.
Resources opschonen
Als u een Communication Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd. Meer informatie over het opschonen van resources.
Volgende stappen
- Meer informatie over het verzamelen van gebruikersinvoer
- Meer informatie over het afspelen van audio in gesprek
- Meer informatie over Gespreksautomatisering