Felhasználói bevitel összegyűjtése a Felismerés művelettel
Ez az útmutató segítséget nyújt a résztvevők által az Azure Communication Services Call Automation SDK-n keresztül megadott DTMF-bemenetek felismerésében.
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál.
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Figyelje meg az erőforrás kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- Az operációs rendszer legújabb .NET-kódtára .
- A legújabb NuGet-csomag.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Műszaki specifikációk
A Recognize függvény testreszabásához a következő paraméterek érhetők el:
Paraméter | Típus | Alapértelmezett (ha nincs megadva) | Leírás | Kötelező vagy nem kötelező |
---|---|---|---|---|
Prompt (A részletekért lásd: Hangüzenetek testreszabása a felhasználók számára a Play művelettel) |
FileSource, TextSource | Nincs beállítva | A bemenet felismerése előtt lejátszandó üzenet. | Választható |
InterToneTimeout |
időtartam | 2 másodperc Min: 1 másodperc Max: 60 másodperc |
Másodpercek alatt korlátozhatja, hogy az Azure Communication Services megvárja, amíg a hívó lenyom egy másik számjegyet (a számjegyek közötti időtúllépést). | Választható |
InitialSegmentationSilenceTimeoutInSeconds |
Egész | 0,5 másodperc | Mennyi ideig vár a művelet a bemenetre, mielőtt időtúllépésnek tekintené. Lásd: A beszéd felismerése. | Választható |
RecognizeInputsType |
Enumeráció | dtmf | A felismert bemenet típusa. A beállítások a következőkdtmf : , choices speech ésspeechordtmf . |
Kötelező |
InitialSilenceTimeout |
időtartam | 5 másodperc Min: 0 másodperc Max: 300 másodperc (DTMF) Max: 20 másodperc (Választási lehetőségek) Max: 20 másodperc (Beszéd) |
A kezdeti csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy kifejezés előtt, mielőtt a felismerési kísérlet "nincs egyezés" eredményre végződik. Lásd: A beszéd felismerése. | Választható |
MaxTonesToCollect |
Egész | Nincs alapértelmezett Min: 1 |
A fejlesztő által a résztvevőtől érkező bemenetként várt számjegyek száma. | Kötelező |
StopTones |
IEnumeration<DtmfTone> | Nincs beállítva | A számjegyek résztvevői a kötegelt DTMF-eseményből való kivezetéshez lenyomhatók. | Választható |
InterruptPrompt |
Bool | Igaz | Ha a résztvevő egy számjegy lenyomásával meg tudja szakítani a playMessage-et. | Választható |
InterruptCallMediaOperation |
Bool | Igaz | Ha ez a jelző be van állítva, az megszakítja az aktuális hívási adathordozó-műveletet. Ha például bármilyen hang lejátszása történik, az megszakítja a műveletet, és elindítja a felismeréseket. | Választható |
OperationContext |
Sztring | Nincs beállítva | Az a sztring, amelyet a fejlesztők a művelet közepén át tudnak adni, hasznos, ha lehetővé teszik a fejlesztők számára a kapott események kontextusának tárolását. | Választható |
Phrases |
Sztring | Nincs beállítva | A címkéhez társított kifejezések listája. Ezeknek a kifejezéseknek a meghallgatása sikeres felismeréshez vezet. | Kötelező |
Tone |
Sztring | Nincs beállítva | A felismerendő hang, ha a felhasználó úgy dönt, hogy a beszéd használata helyett egy számot lenyom. | Választható |
Label |
Sztring | Nincs beállítva | A felismerés kulcsértéke. | Kötelező |
Language |
Sztring | En-us | A beszéd felismeréséhez használt nyelv. | Választható |
EndSilenceTimeout |
időtartam | 0,5 másodperc | A beszélő utolsó szünete, amely a beszédként generált végeredmény észlelésére szolgál. | Választható |
Feljegyzés
Olyan helyzetekben, amelyekben a DTMF és a beszéd is szerepel recognizeInputsType
, a felismerési művelet az első fogadott bemeneti típusra hat. Ha például a felhasználó először lenyom egy billentyűzetszámot, akkor a felismerési művelet DTMF-eseménynek tekinti, és továbbra is figyeli a DTMF-hangokat. Ha a felhasználó először beszél, akkor a felismerési művelet beszédfelismerési eseménynek tekinti, és figyeli a hangbemenetet.
Új C#-alkalmazás létrehozása
Az operációs rendszer konzolablakában a dotnet
paranccsal hozzon létre egy új webalkalmazást.
dotnet new web -n MyApplication
A NuGet-csomag telepítése
A NuGet-csomag lekérése a NuGet-galériából | Azure.Communication.CallAutomation. A csomag telepítéséhez kövesse az utasításokat.
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását. A hívás indításáról további információt a gyorsútmutatóban talál : Hívás kezdeményezése és kimenő hívás. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
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);
A felismerő művelet meghívása
Amikor az alkalmazás válaszol a hívásra, információkat adhat meg a résztvevők bemenetének felismeréséről és egy üzenet lejátszásáról.
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);
A beszéd-szöveg folyamatok esetében a Hívásautomatizálás felismerése művelet az egyéni beszédmodellek használatát is támogatja. Az egyéni beszédmodellekhez hasonló funkciók hasznosak lehetnek olyan alkalmazások létrehozásakor, amelyeknek olyan összetett szavakat kell figyelniük, amelyeket az alapértelmezett beszéd-szöveg modellek nem feltétlenül értenek. Ilyen például, ha egy alkalmazást készít a telemedical iparág számára, és a virtuális ügynöknek képesnek kell lennie az orvosi kifejezések felismerésére. További információt az Egyéni beszédprojekt létrehozása című témakörben talál.
Szövegfelolvasási lehetőségek
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);
Beszédfelolvasás vagy 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);
Feljegyzés
Ha nincsenek megadva paraméterek, az alapértelmezett értékeket a rendszer alkalmazza, ahol csak lehetséges.
Felismerhető eseményfrissítések fogadása
A fejlesztők feliratkozhatnak a RecognizeCompleted
regisztrált webhook-visszahívásokra és RecognizeFailed
eseményekre. Ezzel a visszahívással üzleti logikával határozhatja meg az alkalmazás következő lépéseit, amikor az egyik esemény bekövetkezik.
Példa a RecognizeCompleted esemény deszerializálására:
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;
}
}
Példa a RecognizeFailed esemény deszerializálására:
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);
}
}
Példa a RecognizeCanceled esemény deszerializálására:
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);
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál.
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- A Java Development Kit 8-os vagy újabb verziója.
- Apache Maven.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Műszaki specifikációk
A Recognize függvény testreszabásához a következő paraméterek érhetők el:
Paraméter | Típus | Alapértelmezett (ha nincs megadva) | Leírás | Kötelező vagy nem kötelező |
---|---|---|---|---|
Prompt (A részletekért lásd: Hangüzenetek testreszabása a felhasználók számára a Play művelettel) |
FileSource, TextSource | Nincs beállítva | A bemenet felismerése előtt lejátszandó üzenet. | Választható |
InterToneTimeout |
időtartam | 2 másodperc Min: 1 másodperc Max: 60 másodperc |
Másodpercek alatt korlátozhatja, hogy az Azure Communication Services megvárja, amíg a hívó lenyom egy másik számjegyet (a számjegyek közötti időtúllépést). | Választható |
InitialSegmentationSilenceTimeoutInSeconds |
Egész | 0,5 másodperc | Mennyi ideig vár a művelet a bemenetre, mielőtt időtúllépésnek tekintené. Lásd: A beszéd felismerése. | Választható |
RecognizeInputsType |
Enumeráció | dtmf | A felismert bemenet típusa. A beállítások a következőkdtmf : , choices speech ésspeechordtmf . |
Kötelező |
InitialSilenceTimeout |
időtartam | 5 másodperc Min: 0 másodperc Max: 300 másodperc (DTMF) Max: 20 másodperc (Választási lehetőségek) Max: 20 másodperc (Beszéd) |
A kezdeti csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy kifejezés előtt, mielőtt a felismerési kísérlet "nincs egyezés" eredményre végződik. Lásd: A beszéd felismerése. | Választható |
MaxTonesToCollect |
Egész | Nincs alapértelmezett Min: 1 |
A fejlesztő által a résztvevőtől érkező bemenetként várt számjegyek száma. | Kötelező |
StopTones |
IEnumeration<DtmfTone> | Nincs beállítva | A számjegyek résztvevői a kötegelt DTMF-eseményből való kivezetéshez lenyomhatók. | Választható |
InterruptPrompt |
Bool | Igaz | Ha a résztvevő egy számjegy lenyomásával meg tudja szakítani a playMessage-et. | Választható |
InterruptCallMediaOperation |
Bool | Igaz | Ha ez a jelző be van állítva, az megszakítja az aktuális hívási adathordozó-műveletet. Ha például bármilyen hang lejátszása történik, az megszakítja a műveletet, és elindítja a felismeréseket. | Választható |
OperationContext |
Sztring | Nincs beállítva | Az a sztring, amelyet a fejlesztők a művelet közepén át tudnak adni, hasznos, ha lehetővé teszik a fejlesztők számára a kapott események kontextusának tárolását. | Választható |
Phrases |
Sztring | Nincs beállítva | A címkéhez társított kifejezések listája. Ezeknek a kifejezéseknek a meghallgatása sikeres felismeréshez vezet. | Kötelező |
Tone |
Sztring | Nincs beállítva | A felismerendő hang, ha a felhasználó úgy dönt, hogy a beszéd használata helyett egy számot lenyom. | Választható |
Label |
Sztring | Nincs beállítva | A felismerés kulcsértéke. | Kötelező |
Language |
Sztring | En-us | A beszéd felismeréséhez használt nyelv. | Választható |
EndSilenceTimeout |
időtartam | 0,5 másodperc | A beszélő utolsó szünete, amely a beszédként generált végeredmény észlelésére szolgál. | Választható |
Feljegyzés
Olyan helyzetekben, amelyekben a DTMF és a beszéd is szerepel recognizeInputsType
, a felismerési művelet az első fogadott bemeneti típusra hat. Ha például a felhasználó először lenyom egy billentyűzetszámot, akkor a felismerési művelet DTMF-eseménynek tekinti, és továbbra is figyeli a DTMF-hangokat. Ha a felhasználó először beszél, akkor a felismerési művelet beszédfelismerési eseménynek tekinti, és figyeli a hangbemenetet.
Új Java-alkalmazás létrehozása
A terminál vagy a parancsablakban lépjen arra a könyvtárra, ahol létre szeretné hozni a Java-alkalmazást. Futtassa a mvn
parancsot a Java-projekt létrehozásához a maven-archetype-quickstart sablonból.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
A mvn
parancs létrehoz egy olyan könyvtárat, amelynek neve megegyezik az artifactId
argumentum nevével. A src/main/java
könyvtár tartalmazza a projekt forráskódját. A src/test/java
könyvtár tartalmazza a tesztforrást.
Figyelje meg, hogy a generate
lépés létrehozott egy könyvtárat, amelynek a neve megegyezik a artifactId
. A src/main/java
könyvtár forráskódot tartalmaz. A src/test/java
könyvtár teszteket tartalmaz. A pom.xml
fájl a projekt projektobjektum-modellje (POM).
Frissítse az alkalmazások POM-fájlját a Java 8 vagy újabb verziójára.
<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>
Csomaghivatkozások hozzáadása
A POM-fájlban adja hozzá a projekt alábbi hivatkozását:
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását. A hívás indításáról további információt a gyorsútmutatóban talál : Hívás kezdeményezése és kimenő hívás. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
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();
A felismerő művelet meghívása
Amikor az alkalmazás válaszol a hívásra, információkat adhat meg a résztvevők bemenetének felismeréséről és egy üzenet lejátszásáról.
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());
A beszéd-szöveg folyamatok esetében a Hívásautomatizálás felismerése művelet az egyéni beszédmodellek használatát is támogatja. Az egyéni beszédmodellekhez hasonló funkciók hasznosak lehetnek olyan alkalmazások létrehozásakor, amelyeknek olyan összetett szavakat kell figyelniük, amelyeket az alapértelmezett beszéd-szöveg modellek nem feltétlenül értenek. Ilyen például, ha egy alkalmazást készít a telemedical iparág számára, és a virtuális ügynöknek képesnek kell lennie az orvosi kifejezések felismerésére. További információt az Egyéni beszédprojekt létrehozása című témakörben talál.
Szövegfelolvasási lehetőségek
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();
Beszédfelolvasás vagy 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();
Feljegyzés
Ha nincsenek megadva paraméterek, az alapértelmezett értékeket a rendszer alkalmazza, ahol csak lehetséges.
Felismerhető eseményfrissítések fogadása
A fejlesztők feliratkozhatnak a RecognizeCompleted
regisztrált webhook-visszahívásokra és RecognizeFailed
eseményekre. Ezzel a visszahívással üzleti logikával határozhatja meg az alkalmazás következő lépéseit, amikor az egyik esemény bekövetkezik.
Példa a RecognizeCompleted esemény deszerializálására:
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());
}
}
Példa a RecognizeFailed esemény deszerializálására:
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());
}
}
Példa a RecognizeCanceled esemény deszerializálására:
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál.
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Figyelje meg az erőforrás kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- A Node.js telepítve van, a hivatalos webhelyről telepítheti.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Műszaki specifikációk
A Recognize függvény testreszabásához a következő paraméterek érhetők el:
Paraméter | Típus | Alapértelmezett (ha nincs megadva) | Leírás | Kötelező vagy nem kötelező |
---|---|---|---|---|
Prompt (A részletekért lásd: Hangüzenetek testreszabása a felhasználók számára a Play művelettel) |
FileSource, TextSource | Nincs beállítva | A bemenet felismerése előtt lejátszandó üzenet. | Választható |
InterToneTimeout |
időtartam | 2 másodperc Min: 1 másodperc Max: 60 másodperc |
Másodpercek alatt korlátozhatja, hogy az Azure Communication Services megvárja, amíg a hívó lenyom egy másik számjegyet (a számjegyek közötti időtúllépést). | Választható |
InitialSegmentationSilenceTimeoutInSeconds |
Egész | 0,5 másodperc | Mennyi ideig vár a művelet a bemenetre, mielőtt időtúllépésnek tekintené. Lásd: A beszéd felismerése. | Választható |
RecognizeInputsType |
Enumeráció | dtmf | A felismert bemenet típusa. A beállítások a következőkdtmf : , choices speech ésspeechordtmf . |
Kötelező |
InitialSilenceTimeout |
időtartam | 5 másodperc Min: 0 másodperc Max: 300 másodperc (DTMF) Max: 20 másodperc (Választási lehetőségek) Max: 20 másodperc (Beszéd) |
A kezdeti csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy kifejezés előtt, mielőtt a felismerési kísérlet "nincs egyezés" eredményre végződik. Lásd: A beszéd felismerése. | Választható |
MaxTonesToCollect |
Egész | Nincs alapértelmezett Min: 1 |
A fejlesztő által a résztvevőtől érkező bemenetként várt számjegyek száma. | Kötelező |
StopTones |
IEnumeration<DtmfTone> | Nincs beállítva | A számjegyek résztvevői a kötegelt DTMF-eseményből való kivezetéshez lenyomhatók. | Választható |
InterruptPrompt |
Bool | Igaz | Ha a résztvevő egy számjegy lenyomásával meg tudja szakítani a playMessage-et. | Választható |
InterruptCallMediaOperation |
Bool | Igaz | Ha ez a jelző be van állítva, az megszakítja az aktuális hívási adathordozó-műveletet. Ha például bármilyen hang lejátszása történik, az megszakítja a műveletet, és elindítja a felismeréseket. | Választható |
OperationContext |
Sztring | Nincs beállítva | Az a sztring, amelyet a fejlesztők a művelet közepén át tudnak adni, hasznos, ha lehetővé teszik a fejlesztők számára a kapott események kontextusának tárolását. | Választható |
Phrases |
Sztring | Nincs beállítva | A címkéhez társított kifejezések listája. Ezeknek a kifejezéseknek a meghallgatása sikeres felismeréshez vezet. | Kötelező |
Tone |
Sztring | Nincs beállítva | A felismerendő hang, ha a felhasználó úgy dönt, hogy a beszéd használata helyett egy számot lenyom. | Választható |
Label |
Sztring | Nincs beállítva | A felismerés kulcsértéke. | Kötelező |
Language |
Sztring | En-us | A beszéd felismeréséhez használt nyelv. | Választható |
EndSilenceTimeout |
időtartam | 0,5 másodperc | A beszélő utolsó szünete, amely a beszédként generált végeredmény észlelésére szolgál. | Választható |
Feljegyzés
Olyan helyzetekben, amelyekben a DTMF és a beszéd is szerepel recognizeInputsType
, a felismerési művelet az első fogadott bemeneti típusra hat. Ha például a felhasználó először lenyom egy billentyűzetszámot, akkor a felismerési művelet DTMF-eseménynek tekinti, és továbbra is figyeli a DTMF-hangokat. Ha a felhasználó először beszél, akkor a felismerési művelet beszédfelismerési eseménynek tekinti, és figyeli a hangbemenetet.
Új JavaScript-alkalmazás létrehozása
Hozzon létre egy új JavaScript-alkalmazást a projektkönyvtárban. Inicializáljon egy új Node.js projektet az alábbi paranccsal. Ez létrehoz egy package.json fájlt a projekthez, amely kezeli a projekt függőségeit.
npm init -y
Az Azure Communication Services Hívásautomatizálási csomagjának telepítése
npm install @azure/communication-call-automation
Hozzon létre egy új JavaScript-fájlt a projektkönyvtárban, például nevezze el.app.js
Írja be a JavaScript-kódot ebbe a fájlba.
Futtassa az alkalmazást Node.js a következő paranccsal.
node app.js
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását. A hívás indításáról további információt a gyorsútmutatóban talál : Hívás kezdeményezése és kimenő hívás.
A felismerő művelet meghívása
Amikor az alkalmazás válaszol a hívásra, információkat adhat meg a résztvevők bemenetének felismeréséről és egy üzenet lejátszásáról.
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);
A beszéd-szöveg folyamatok esetében a Hívásautomatizálás felismerése művelet az egyéni beszédmodellek használatát is támogatja. Az egyéni beszédmodellekhez hasonló funkciók hasznosak lehetnek olyan alkalmazások létrehozásakor, amelyeknek olyan összetett szavakat kell figyelniük, amelyeket az alapértelmezett beszéd-szöveg modellek nem feltétlenül értenek. Ilyen például, ha egy alkalmazást készít a telemedical iparág számára, és a virtuális ügynöknek képesnek kell lennie az orvosi kifejezések felismerésére. További információt az Egyéni beszédprojekt létrehozása című témakörben talál.
Szövegfelolvasási lehetőségek
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);
Beszédfelolvasás vagy 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);
Feljegyzés
Ha nincsenek megadva paraméterek, az alapértelmezett értékeket a rendszer alkalmazza, ahol csak lehetséges.
Felismerhető eseményfrissítések fogadása
A fejlesztők feliratkozhatnak a RecognizeCompleted
regisztrált webhook-visszahívásokra és RecognizeFailed
eseményekre. Ezzel a visszahívással üzleti logikával határozhatja meg az alkalmazás következő lépéseit, amikor az egyik esemény bekövetkezik.
Példa a RecognizeCompleted esemény deszerializálására:
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));
}
}
Példa a RecognizeFailed esemény deszerializálására:
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Példa a RecognizeCanceled esemény deszerializálására:
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál.
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Figyelje meg az erőforrás kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- Telepítse a Pythont Python.org.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Műszaki specifikációk
A Recognize függvény testreszabásához a következő paraméterek érhetők el:
Paraméter | Típus | Alapértelmezett (ha nincs megadva) | Leírás | Kötelező vagy nem kötelező |
---|---|---|---|---|
Prompt (A részletekért lásd: Hangüzenetek testreszabása a felhasználók számára a Play művelettel) |
FileSource, TextSource | Nincs beállítva | A bemenet felismerése előtt lejátszandó üzenet. | Választható |
InterToneTimeout |
időtartam | 2 másodperc Min: 1 másodperc Max: 60 másodperc |
Másodpercek alatt korlátozhatja, hogy az Azure Communication Services megvárja, amíg a hívó lenyom egy másik számjegyet (a számjegyek közötti időtúllépést). | Választható |
InitialSegmentationSilenceTimeoutInSeconds |
Egész | 0,5 másodperc | Mennyi ideig vár a művelet a bemenetre, mielőtt időtúllépésnek tekintené. Lásd: A beszéd felismerése. | Választható |
RecognizeInputsType |
Enumeráció | dtmf | A felismert bemenet típusa. A beállítások a következőkdtmf : , choices speech ésspeechordtmf . |
Kötelező |
InitialSilenceTimeout |
időtartam | 5 másodperc Min: 0 másodperc Max: 300 másodperc (DTMF) Max: 20 másodperc (Választási lehetőségek) Max: 20 másodperc (Beszéd) |
A kezdeti csend időtúllépése módosítja, hogy mennyi nem beszélő hang legyen engedélyezve egy kifejezés előtt, mielőtt a felismerési kísérlet "nincs egyezés" eredményre végződik. Lásd: A beszéd felismerése. | Választható |
MaxTonesToCollect |
Egész | Nincs alapértelmezett Min: 1 |
A fejlesztő által a résztvevőtől érkező bemenetként várt számjegyek száma. | Kötelező |
StopTones |
IEnumeration<DtmfTone> | Nincs beállítva | A számjegyek résztvevői a kötegelt DTMF-eseményből való kivezetéshez lenyomhatók. | Választható |
InterruptPrompt |
Bool | Igaz | Ha a résztvevő egy számjegy lenyomásával meg tudja szakítani a playMessage-et. | Választható |
InterruptCallMediaOperation |
Bool | Igaz | Ha ez a jelző be van állítva, az megszakítja az aktuális hívási adathordozó-műveletet. Ha például bármilyen hang lejátszása történik, az megszakítja a műveletet, és elindítja a felismeréseket. | Választható |
OperationContext |
Sztring | Nincs beállítva | Az a sztring, amelyet a fejlesztők a művelet közepén át tudnak adni, hasznos, ha lehetővé teszik a fejlesztők számára a kapott események kontextusának tárolását. | Választható |
Phrases |
Sztring | Nincs beállítva | A címkéhez társított kifejezések listája. Ezeknek a kifejezéseknek a meghallgatása sikeres felismeréshez vezet. | Kötelező |
Tone |
Sztring | Nincs beállítva | A felismerendő hang, ha a felhasználó úgy dönt, hogy a beszéd használata helyett egy számot lenyom. | Választható |
Label |
Sztring | Nincs beállítva | A felismerés kulcsértéke. | Kötelező |
Language |
Sztring | En-us | A beszéd felismeréséhez használt nyelv. | Választható |
EndSilenceTimeout |
időtartam | 0,5 másodperc | A beszélő utolsó szünete, amely a beszédként generált végeredmény észlelésére szolgál. | Választható |
Feljegyzés
Olyan helyzetekben, amelyekben a DTMF és a beszéd is szerepel recognizeInputsType
, a felismerési művelet az első fogadott bemeneti típusra hat. Ha például a felhasználó először lenyom egy billentyűzetszámot, akkor a felismerési művelet DTMF-eseménynek tekinti, és továbbra is figyeli a DTMF-hangokat. Ha a felhasználó először beszél, akkor a felismerési művelet beszédfelismerési eseménynek tekinti, és figyeli a hangbemenetet.
Új Python-alkalmazás létrehozása
Python virtuális környezet beállítása a projekthez
python -m venv play-audio-app
A virtuális környezet aktiválása
Windows rendszeren használja a következő parancsot:
.\ play-audio-quickstart \Scripts\activate
A Unixon használja a következő parancsot:
source play-audio-quickstart /bin/activate
Az Azure Communication Services Hívásautomatizálási csomagjának telepítése
pip install azure-communication-callautomation
Hozza létre az alkalmazásfájlt a projektkönyvtárban, például nevezze el.app.py
Írja be a Python-kódot ebbe a fájlba.
Futtassa az alkalmazást a Python használatával az alábbi paranccsal.
python app.py
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását. A hívás indításáról további információt a gyorsútmutatóban talál : Hívás kezdeményezése és kimenő hívás.
A felismerő művelet meghívása
Amikor az alkalmazás válaszol a hívásra, információkat adhat meg a résztvevők bemenetének felismeréséről és egy üzenet lejátszásáról.
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 ])
A beszéd-szöveg folyamatok esetében a Hívásautomatizálás felismerése művelet az egyéni beszédmodellek használatát is támogatja. Az egyéni beszédmodellekhez hasonló funkciók hasznosak lehetnek olyan alkalmazások létrehozásakor, amelyeknek olyan összetett szavakat kell figyelniük, amelyeket az alapértelmezett beszéd-szöveg modellek nem feltétlenül értenek. Ilyen például, ha egy alkalmazást készít a telemedical iparág számára, és a virtuális ügynöknek képesnek kell lennie az orvosi kifejezések felismerésére. További információt az Egyéni beszédprojekt létrehozása című témakörben talál.
Szövegfelolvasási lehetőségek
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")
Beszédfelolvasás vagy 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")
Feljegyzés
Ha nincsenek megadva paraméterek, az alapértelmezett értékeket a rendszer alkalmazza, ahol csak lehetséges.
Felismerhető eseményfrissítések fogadása
A fejlesztők feliratkozhatnak a RecognizeCompleted
regisztrált webhook-visszahívásokra és RecognizeFailed
eseményekre. Ezzel a visszahívással üzleti logikával határozhatja meg az alkalmazás következő lépéseit, amikor az egyik esemény bekövetkezik.
Példa a RecognizeCompleted esemény deszerializálására:
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);
Példa a RecognizeFailed esemény deszerializálására:
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Példa a RecognizeCanceled esemény deszerializálására:
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Eseménykódok
Állapot | Kód | Alkód | Üzenet |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | A művelet befejeződött, a fogadott számjegyek maximális számát. |
RecognizeCompleted |
200 | 8514 | A művelet a leállítási hang észlelésekor befejeződött. |
RecognizeCompleted |
400 | 8508 | A művelet nem sikerült, a művelet megszakítva. |
RecognizeCompleted |
400 | 8532 | A művelet sikertelen volt, a számjegyek közötti csend időtúllépése elérte. |
RecognizeCanceled |
400 | 8508 | A művelet nem sikerült, a művelet megszakítva. |
RecognizeFailed |
400 | 8510 | A művelet sikertelen volt, a kezdeti csend időtúllépése elérte. |
RecognizeFailed |
500 | 8511 | A művelet sikertelen volt, hiba történt a parancssor lejátszása közben. |
RecognizeFailed |
500 | 8512 | Ismeretlen belső kiszolgálóhiba. |
RecognizeFailed |
400 | 8510 | A művelet sikertelen volt, a kezdeti csend időtúllépése elérte |
RecognizeFailed |
400 | 8532 | A művelet sikertelen volt, a számjegyek közötti csend időtúllépése elérte. |
RecognizeFailed |
400 | 8565 | A művelet nem sikerült, hibás kérés érkezett az Azure AI-szolgáltatásokhoz. Ellenőrizze a bemeneti paramétereket. |
RecognizeFailed |
400 | 8565 | A művelet nem sikerült, hibás kérés érkezett az Azure AI-szolgáltatásokhoz. Nem lehet feldolgozni a megadott hasznos adatokat, ellenőrizze a lejátszási forrás bemenetét. |
RecognizeFailed |
401 | 8565 | A művelet nem sikerült, az Azure AI-szolgáltatások hitelesítési hibája. |
RecognizeFailed |
403 | 8565 | A művelet sikertelen volt, tiltott kérés az Azure AI-szolgáltatásokhoz, a kérés által használt ingyenes előfizetés túllépte a kvótát. |
RecognizeFailed |
429 | 8565 | A művelet sikertelen volt, a kérések túllépték az Azure AI-szolgáltatások előfizetésére vonatkozó engedélyezett egyidejű kérések számát. |
RecognizeFailed |
408 | 8565 | A művelet sikertelen volt, az Azure AI-szolgáltatásokhoz való kérés időtúllépést vett igénybe. |
RecognizeFailed |
500 | 8511 | A művelet sikertelen volt, hiba történt a parancssor lejátszása közben. |
RecognizeFailed |
500 | 8512 | Ismeretlen belső kiszolgálóhiba. |
Ismert korlátozások
- A sávon belüli DTMF nem támogatott. Ehelyett használja az RFC 2833 DTMF-et.
- A szövegfelolvasási kérések legfeljebb 400 karaktert támogatnak, ha a kérés ennél hosszabb, javasoljuk az SSML használatát a szövegfelolvasáson alapuló lejátszási műveletekhez.
- Olyan forgatókönyvek esetén, ahol túllépi a Speech szolgáltatás kvótakorlátját, a Speech services kvótáiban és korlátaiban ismertetett lépések végrehajtásával kérheti a korlát növelését.
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy Communication Services-előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése a hozzá társított egyéb erőforrásokat is törli. További információ az erőforrások tisztításáról.
Következő lépések
- További információ a felhasználói bemenetek gyűjtéséről
- További információ a hang lejátszásáról hívás közben
- További információ a Hívásautomatizálásról