Megosztás a következőn keresztül:


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

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: , choicesspeeché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

AI-funkciók esetén

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: , choicesspeeché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

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: , choicesspeeché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

AI-funkciók esetén

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: , choicesspeeché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