Tanıma eylemiyle kullanıcı girişi toplama

Bu kılavuz, Azure İletişim Hizmetleri Çağrı Otomasyonu SDK'sı aracılığıyla katılımcılar tarafından sağlanan DTMF girişini tanımaya başlamanıza yardımcı olur.

Önkoşullar

Yapay zeka özellikleri için

  • Azure AI hizmetlerini oluşturun ve Azure İletişim Hizmetleri kaynağınıza bağlayın.
  • Azure AI hizmetleri kaynağınız için özel bir alt etki alanı oluşturun.

Teknik özellikler

Recognize işlevini özelleştirmek için aşağıdaki parametreler kullanılabilir:

Parametre Türü Varsayılan (belirtilmemişse) Açıklama Gerekli veya İsteğe Bağlı
Istemi

(Yürütme eylemiyle ilgili ayrıntılar için bu nasıl yapılır kılavuzuna bakın)
FileSource, TextSource Ayarlı değil Bu, girişi tanımadan önce oynatmak istediğiniz iletidir. İsteğe bağlı
InterToneTimeout TimeSpan 2 saniye

Min: 1 saniye
Maksimum: 60 saniye
Azure İletişim Hizmetleri çağıranın başka bir basamak (basamaklar arası zaman aşımı) tuşuna basmasını beklediği saniye cinsinden sınırlayın. İsteğe bağlı
InitialSegmentationSilenceTimeoutInSeconds Tamsayı 0,5 saniye Tanıma eyleminin zaman aşımı olarak kabul etmeden önce girişi ne kadar süre beklediği. Burada daha fazla bilgi edinin. İsteğe bağlı
RecognizeInputsType Sabit listesi Dtmf Tanınan giriş türü. Seçenekler dtmf, choices, speech ve speechordtmf'tir. Zorunlu
InitialSilenceTimeout TimeSpan 5 saniye

Min: 0 saniye
Maksimum: 300 saniye (DTMF)
Maksimum: 20 saniye (Seçenekler)
Maksimum: 20 saniye (Konuşma)
İlk sessizlik zaman aşımı, tanıma girişimi "eşleşme yok" sonucuyla bitmeden önce bir tümcecik öncesinde ne kadar sese izin verilmeyen sese izin verildiğinden emin olur. Burada daha fazla bilgi edinin. İsteğe bağlı
MaxTonesToCollect Tamsayı Varsayılan yok

Dk: 1
Bir geliştiricinin katılımcıdan giriş olarak beklediği basamak sayısı. Zorunlu
StopTones IEnumeration<DtmfTone> Ayarlı değil Basamak katılımcıları toplu DTMF olayından kaçmak için basabilir. İsteğe bağlı
KesmePrompt Boole True Katılımcının bir basamak basarak playMessage'ı kesintiye uğratma özelliği varsa. İsteğe bağlı
KesmeCallMediaOperation Boole True Bu bayrak ayarlanırsa geçerli çağrı medya işlemini kesintiye uğratır. Örneğin, herhangi bir ses yürütülüyorsa bu işlem kesintiye uğratır ve tanımayı başlatır. İsteğe bağlı
OperationContext String Ayarlı değil Geliştiricilerin orta eylem geçirebileceği dize, geliştiricilerin aldıkları olaylar hakkında bağlam depolamasına olanak sağlamak için kullanışlıdır. İsteğe bağlı
Tümcecikler String Ayarlı değil Etiketle ilişkilendirilen tümceciklerin listesi, bunlardan biri duyulursa başarılı bir tanıma olarak kabul edilir. Zorunlu
Ton String Ayarlı değil Kullanıcının konuşmayı kullanmak yerine bir sayıya basmaya karar verilip verirseniz tanıyacak ton. İsteğe bağlı
Etiket String Ayarlı değil Tanıma için anahtar değeri. Zorunlu
Dil String En-us Konuşmayı tanımak için kullanılan dil. İsteğe bağlı
EndSilenceTimeout TimeSpan 0,5 saniye Konuşma olarak oluşturulan nihai sonucu algılamak için kullanılan konuşmacının son duraklatması. İsteğe bağlı

Not

Hem dtmf hem de konuşmanın recognizeInputsType içinde olduğu durumlarda, tanıma eylemi alınan ilk giriş türü üzerinde işlem yapar; örneğin, kullanıcı önce bir tuş takımı numarasına basarsa, tanıma eylemi bunu bir dtmf olayı olarak kabul eder ve dtmf tonlarını dinlemeye devam eder. Kullanıcı önce konuşuyorsa tanıma eylemi bunu bir konuşma tanıma olarak değerlendirir ve ses girişini dinler.

Yeni bir C# uygulaması oluşturma

İşletim sisteminizin konsol penceresinde komutunu kullanarak dotnet yeni bir web uygulaması oluşturun.

dotnet new web -n MyApplication

NuGet paketini yükleme

Henüz yapmadıysanız NuGet paketi buradan alınabilir.

Arama oluşturma

Bu noktada arama başlatma hakkında bilgi sahibi olmanız gerekir. Arama yapma hakkında daha fazla bilgi edinmek isterseniz hızlı başlangıcımızı izleyin. Çağrıyı yanıtlamayı anlamak için burada sağlanan kod parçacığını da kullanabilirsiniz.

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

Tanıma eylemini çağırma

Uygulamanız aramayı yanıtladığında katılımcı girişini tanıma ve istem yürütme hakkında bilgi sağlayabilirsiniz. Tanıma eylemi aynı istek içinde birden çok istem yürütmeyi de destekler.

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

Konuşmayı metne dönüştürme akışları için Çağrı Otomasyonu tanıma eylemi özel konuşma modellerinin kullanımını da destekler. Özel konuşma modelleri gibi özellikler, varsayılan konuşmayı metne dönüştürme modellerinin anlayamadığı karmaşık sözcükleri dinlemesi gereken bir uygulama oluştururken yararlı olabilir. Bunun iyi bir örneği teletıp endüstrisi için bir uygulama oluştururken ve sanal temsilcinizin tıbbi terimleri tanıyabilmesi gerektiğinde olabilir. Özel konuşma modelleri oluşturma ve dağıtma hakkında daha fazla bilgiyi burada bulabilirsiniz.

Konuşmayı Metne Dönüştürme Seçenekleri

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

Konuşmayı Metne Dönüştürme

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

Konuşmayı Metne Dönüştürme veya 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); 

Not

Parametreler ayarlanmamışsa, mümkün olduğunda varsayılan değerler uygulanır.

Olay güncelleştirmelerini tanıma alma

Geliştiriciler, daha önce bahsedilen olaylardan biri gerçekleştiğinde sonraki adımları belirlemek üzere kendi uygulamalarında iş mantığı oluşturmak üzere çağrıya kaydettikleri web kancası geri çağırmasında RecognizeCompleted ve RecognizeFailed olaylarına abone olabilir.

RecognizeCompleted olayını seri durumdan çıkarma örneği:

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

RecognizeFailed olayını seri durumdan çıkarma örneği:

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

RecognizeCanceled olayının seri durumdan nasıl çıkarabileceğinize ilişkin örnek:

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

Önkoşullar

Yapay zeka özellikleri için

  • Azure AI hizmetlerini oluşturun ve Azure İletişim Hizmetleri kaynağınıza bağlayın.
  • Azure AI hizmetleri kaynağınız için özel bir alt etki alanı oluşturun.

Teknik özellikler

Recognize işlevini özelleştirmek için aşağıdaki parametreler kullanılabilir:

Parametre Türü Varsayılan (belirtilmemişse) Açıklama Gerekli veya İsteğe Bağlı
Istemi

(Yürütme eylemiyle ilgili ayrıntılar için bu nasıl yapılır kılavuzuna bakın)
FileSource, TextSource Ayarlı değil Bu, girişi tanımadan önce oynatmak istediğiniz iletidir. İsteğe bağlı
InterToneTimeout TimeSpan 2 saniye

Min: 1 saniye
Maksimum: 60 saniye
Azure İletişim Hizmetleri çağıranın başka bir basamak (basamaklar arası zaman aşımı) tuşuna basmasını beklediği saniye cinsinden sınırlayın. İsteğe bağlı
InitialSegmentationSilenceTimeoutInSeconds Tamsayı 0,5 saniye Tanıma eyleminin zaman aşımı olarak kabul etmeden önce girişi ne kadar süre beklediği. Burada daha fazla bilgi edinin. İsteğe bağlı
RecognizeInputsType Sabit listesi Dtmf Tanınan giriş türü. Seçenekler dtmf, choices, speech ve speechordtmf'tir. Zorunlu
InitialSilenceTimeout TimeSpan 5 saniye

Min: 0 saniye
Maksimum: 300 saniye (DTMF)
Maksimum: 20 saniye (Seçenekler)
Maksimum: 20 saniye (Konuşma)
İlk sessizlik zaman aşımı, tanıma girişimi "eşleşme yok" sonucuyla bitmeden önce bir tümcecik öncesinde ne kadar sese izin verilmeyen sese izin verildiğinden emin olur. Burada daha fazla bilgi edinin. İsteğe bağlı
MaxTonesToCollect Tamsayı Varsayılan yok

Dk: 1
Bir geliştiricinin katılımcıdan giriş olarak beklediği basamak sayısı. Zorunlu
StopTones IEnumeration<DtmfTone> Ayarlı değil Basamak katılımcıları toplu DTMF olayından kaçmak için basabilir. İsteğe bağlı
KesmePrompt Boole True Katılımcının bir basamak basarak playMessage'ı kesintiye uğratma özelliği varsa. İsteğe bağlı
KesmeCallMediaOperation Boole True Bu bayrak ayarlanırsa geçerli çağrı medya işlemini kesintiye uğratır. Örneğin, herhangi bir ses yürütülüyorsa bu işlem kesintiye uğratır ve tanımayı başlatır. İsteğe bağlı
OperationContext String Ayarlı değil Geliştiricilerin orta eylem geçirebileceği dize, geliştiricilerin aldıkları olaylar hakkında bağlam depolamasına olanak sağlamak için kullanışlıdır. İsteğe bağlı
Tümcecikler String Ayarlı değil Etiketle ilişkilendirilen tümceciklerin listesi, bunlardan biri duyulursa başarılı bir tanıma olarak kabul edilir. Zorunlu
Ton String Ayarlı değil Kullanıcının konuşmayı kullanmak yerine bir sayıya basmaya karar verilip verirseniz tanıyacak ton. İsteğe bağlı
Etiket String Ayarlı değil Tanıma için anahtar değeri. Zorunlu
Dil String En-us Konuşmayı tanımak için kullanılan dil. İsteğe bağlı
EndSilenceTimeout TimeSpan 0,5 saniye Konuşma olarak oluşturulan nihai sonucu algılamak için kullanılan konuşmacının son duraklatması. İsteğe bağlı

Not

Hem dtmf hem de konuşmanın recognizeInputsType içinde olduğu durumlarda, tanıma eylemi alınan ilk giriş türü üzerinde işlem yapar; örneğin, kullanıcı önce bir tuş takımı numarasına basarsa, tanıma eylemi bunu bir dtmf olayı olarak kabul eder ve dtmf tonlarını dinlemeye devam eder. Kullanıcı önce konuşuyorsa tanıma eylemi bunu bir konuşma tanıma olarak değerlendirir ve ses girişini dinler.

Yeni java uygulaması oluşturma

Terminal veya komut pencerenizde, Java uygulamanızı oluşturmak istediğiniz dizine gidin. mvn Maven-archetype-quickstart şablonundan Java projesi oluşturmak için komutunu çalıştırın.

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

komutu, mvn bağımsız değişkenle aynı ada artifactId sahip bir dizin oluşturur. Bu dizin altında dizin proje src/main/java kaynak kodunu, dizin ise src/test/java test kaynağını içerir.

'Oluştur' adımının artifactId ile aynı ada sahip bir dizin oluşturduğunu fark edeceksiniz. Bu dizin altında, src/main/java dizin kaynak kodu içerir, src/test/java dizin testleri içerir ve pom.xml dosya projenin Proje Nesne Modeli veya POM'dir.

Uygulama POM dosyanızı Java 8 veya üzerini kullanacak şekilde güncelleştirin.

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

Paket başvuruları ekleme

POM dosyanıza proje için aşağıdaki başvuruyu ekleyin

azure-communication-callautomation

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

Arama oluşturma

Bu noktada arama başlatma hakkında bilgi sahibi olmanız gerekir. Arama yapma hakkında daha fazla bilgi edinmek isterseniz hızlı başlangıcımızı izleyin. Çağrıyı yanıtlamayı anlamak için burada sağlanan kod parçacığını da kullanabilirsiniz.

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

Tanıma eylemini çağırma

Uygulamanız aramayı yanıtladığında katılımcı girişini tanıma ve istem yürütme hakkında bilgi sağlayabilirsiniz. Tanıma eylemi aynı istek içinde birden çok istem yürütmeyi de destekler.

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

Konuşmayı metne dönüştürme akışları için Çağrı Otomasyonu tanıma eylemi özel konuşma modellerinin kullanımını da destekler. Özel konuşma modelleri gibi özellikler, varsayılan konuşmayı metne dönüştürme modellerinin anlayamadığı karmaşık sözcükleri dinlemesi gereken bir uygulama oluştururken yararlı olabilir. Bunun iyi bir örneği teletıp endüstrisi için bir uygulama oluştururken ve sanal temsilcinizin tıbbi terimleri tanıyabilmesi gerektiğinde olabilir. Özel konuşma modelleri oluşturma ve dağıtma hakkında daha fazla bilgiyi burada bulabilirsiniz.

Konuşmayı Metne Dönüştürme Seçenekleri

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

Konuşmayı Metne Dönüştürme

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

Konuşmayı Metne Dönüştürme veya 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(); 

Not

Parametreler ayarlanmamışsa, mümkün olduğunda varsayılan değerler uygulanır.

Olay güncelleştirmelerini tanıma alma

Geliştiriciler kayıtlı web kancası geri çağırmada RecognizeCompleted ve RecognizeFailed olaylarına abone olabilir. Bu geri çağırma, olaylardan biri gerçekleştiğinde sonraki adımları belirlemek için uygulamanızda iş mantığıyla kullanılabilir.

RecognizeCompleted olayını seri durumdan çıkarma örneği:

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

RecognizeFailed olayını seri durumdan çıkarma örneği:

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

RecognizeCanceled olayının seri durumdan nasıl çıkarabileceğinize ilişkin örnek:

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

Önkoşullar

Yapay zeka özellikleri için

  • Azure AI hizmetlerini oluşturun ve Azure İletişim Hizmetleri kaynağınıza bağlayın.
  • Azure AI hizmetleri kaynağınız için özel bir alt etki alanı oluşturun.

Teknik özellikler

Recognize işlevini özelleştirmek için aşağıdaki parametreler kullanılabilir:

Parametre Türü Varsayılan (belirtilmemişse) Açıklama Gerekli veya İsteğe Bağlı
Istemi

(Yürütme eylemiyle ilgili ayrıntılar için bu nasıl yapılır kılavuzuna bakın)
FileSource, TextSource Ayarlı değil Bu, girişi tanımadan önce oynatmak istediğiniz iletidir. İsteğe bağlı
InterToneTimeout TimeSpan 2 saniye

Min: 1 saniye
Maksimum: 60 saniye
Azure İletişim Hizmetleri çağıranın başka bir basamak (basamaklar arası zaman aşımı) tuşuna basmasını beklediği saniye cinsinden sınırlayın. İsteğe bağlı
InitialSegmentationSilenceTimeoutInSeconds Tamsayı 0,5 saniye Tanıma eyleminin zaman aşımı olarak kabul etmeden önce girişi ne kadar süre beklediği. Burada daha fazla bilgi edinin. İsteğe bağlı
RecognizeInputsType Sabit listesi Dtmf Tanınan giriş türü. Seçenekler dtmf, choices, speech ve speechordtmf'tir. Zorunlu
InitialSilenceTimeout TimeSpan 5 saniye

Min: 0 saniye
Maksimum: 300 saniye (DTMF)
Maksimum: 20 saniye (Seçenekler)
Maksimum: 20 saniye (Konuşma)
İlk sessizlik zaman aşımı, tanıma girişimi "eşleşme yok" sonucuyla bitmeden önce bir tümcecik öncesinde ne kadar sese izin verilmeyen sese izin verildiğinden emin olur. Burada daha fazla bilgi edinin. İsteğe bağlı
MaxTonesToCollect Tamsayı Varsayılan yok

Dk: 1
Bir geliştiricinin katılımcıdan giriş olarak beklediği basamak sayısı. Zorunlu
StopTones IEnumeration<DtmfTone> Ayarlı değil Basamak katılımcıları toplu DTMF olayından kaçmak için basabilir. İsteğe bağlı
KesmePrompt Boole True Katılımcının bir basamak basarak playMessage'ı kesintiye uğratma özelliği varsa. İsteğe bağlı
KesmeCallMediaOperation Boole True Bu bayrak ayarlanırsa geçerli çağrı medya işlemini kesintiye uğratır. Örneğin, herhangi bir ses yürütülüyorsa bu işlem kesintiye uğratır ve tanımayı başlatır. İsteğe bağlı
OperationContext String Ayarlı değil Geliştiricilerin orta eylem geçirebileceği dize, geliştiricilerin aldıkları olaylar hakkında bağlam depolamasına olanak sağlamak için kullanışlıdır. İsteğe bağlı
Tümcecikler String Ayarlı değil Etiketle ilişkilendirilen tümceciklerin listesi, bunlardan biri duyulursa başarılı bir tanıma olarak kabul edilir. Zorunlu
Ton String Ayarlı değil Kullanıcının konuşmayı kullanmak yerine bir sayıya basmaya karar verilip verirseniz tanıyacak ton. İsteğe bağlı
Etiket String Ayarlı değil Tanıma için anahtar değeri. Zorunlu
Dil String En-us Konuşmayı tanımak için kullanılan dil. İsteğe bağlı
EndSilenceTimeout TimeSpan 0,5 saniye Konuşma olarak oluşturulan nihai sonucu algılamak için kullanılan konuşmacının son duraklatması. İsteğe bağlı

Not

Hem dtmf hem de konuşmanın recognizeInputsType içinde olduğu durumlarda, tanıma eylemi alınan ilk giriş türü üzerinde işlem yapar; örneğin, kullanıcı önce bir tuş takımı numarasına basarsa, tanıma eylemi bunu bir dtmf olayı olarak kabul eder ve dtmf tonlarını dinlemeye devam eder. Kullanıcı önce konuşuyorsa tanıma eylemi bunu bir konuşma tanıma olarak değerlendirir ve ses girişini dinler.

Yeni javascript uygulaması oluşturma

Proje dizininizde yeni bir JavaScript uygulaması oluşturun. Aşağıdaki komutla yeni bir Node.js projesi başlatın. Bu, projeniz için projenizin bağımlılıklarını yönetmek için kullanılan bir package.json dosyası oluşturur.

npm init -y

Azure İletişim Hizmetleri Çağrı Otomasyonu paketini yükleme

npm install @azure/communication-call-automation

Proje dizininizde yeni bir JavaScript dosyası oluşturun; örneğin, dosyayı app.js olarak adlandırınız. JavaScript kodunuzu bu dosyaya yazarsınız. Aşağıdaki komutla Node.js kullanarak uygulamanızı çalıştırın. Bu işlem, yazdığınız JavaScript kodunu yürütür.

node app.js

Arama oluşturma

Bu noktada arama başlatma hakkında bilgi sahibi olmanız gerekir. Arama yapma hakkında daha fazla bilgi edinmek isterseniz hızlı başlangıcımızı izleyin. Bu hızlı başlangıçta bir giden çağrı oluşturacağız.

Tanıma eylemini çağırma

Uygulamanız aramayı yanıtladığında katılımcı girişini tanıma ve istem yürütme hakkında bilgi sağlayabilirsiniz. Tanıma eylemi aynı istek içinde birden çok istem yürütmeyi de destekler.

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

Konuşmayı metne dönüştürme akışları için Çağrı Otomasyonu tanıma eylemi özel konuşma modellerinin kullanımını da destekler. Özel konuşma modelleri gibi özellikler, varsayılan konuşmayı metne dönüştürme modellerinin anlayamadığı karmaşık sözcükleri dinlemesi gereken bir uygulama oluştururken yararlı olabilir. Bunun iyi bir örneği teletıp endüstrisi için bir uygulama oluştururken ve sanal temsilcinizin tıbbi terimleri tanıyabilmesi gerektiğinde olabilir. Özel konuşma modelleri oluşturma ve dağıtma hakkında daha fazla bilgiyi burada bulabilirsiniz.

Konuşmayı Metne Dönüştürme Seçenekleri

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

Konuşmayı Metne Dönüştürme

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

Konuşmayı Metne Dönüştürme veya 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); 

Not

Parametreler ayarlanmamışsa, mümkün olduğunda varsayılan değerler uygulanır.

Olay güncelleştirmelerini tanıma alma

Geliştiriciler, daha önce bahsedilen olaylardan biri gerçekleştiğinde sonraki adımları belirlemek üzere kendi uygulamalarında iş mantığı oluşturmak üzere çağrıya kaydettikleri web kancası geri çağırmasında RecognizeCompleted ve RecognizeFailed olaylarına abone olabilir.

RecognizeCompleted olayını seri durumdan çıkarma örneği:

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

RecognizeFailed olayını seri durumdan çıkarma örneği:

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

RecognizeCanceled olayının seri durumdan nasıl çıkarabileceğinize ilişkin örnek:

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

Önkoşullar

  • Etkin aboneliği olan Azure hesabı, ayrıntılar için bkz . Ücretsiz hesap oluşturma.
  • kaynağı Azure İletişim Hizmetleri. Bkz. Azure İletişim Hizmetleri kaynağı oluşturma. Bu kaynağın bağlantı dizesi not edin.
  • Çağrı Otomasyonu SDK'sını kullanarak yeni bir web hizmeti uygulaması oluşturun.
  • Python'ı yükledikten sonra resmi siteden yükleyebilirsiniz.

Yapay zeka özellikleri için

  • Azure AI hizmetlerini oluşturun ve Azure İletişim Hizmetleri kaynağınıza bağlayın.
  • Azure AI hizmetleri kaynağınız için özel bir alt etki alanı oluşturun.

Teknik özellikler

Recognize işlevini özelleştirmek için aşağıdaki parametreler kullanılabilir:

Parametre Türü Varsayılan (belirtilmemişse) Açıklama Gerekli veya İsteğe Bağlı
Istemi

(Yürütme eylemiyle ilgili ayrıntılar için bu nasıl yapılır kılavuzuna bakın)
FileSource, TextSource Ayarlı değil Bu, girişi tanımadan önce oynatmak istediğiniz iletidir. İsteğe bağlı
InterToneTimeout TimeSpan 2 saniye

Min: 1 saniye
Maksimum: 60 saniye
Azure İletişim Hizmetleri çağıranın başka bir basamak (basamaklar arası zaman aşımı) tuşuna basmasını beklediği saniye cinsinden sınırlayın. İsteğe bağlı
InitialSegmentationSilenceTimeoutInSeconds Tamsayı 0,5 saniye Tanıma eyleminin zaman aşımı olarak kabul etmeden önce girişi ne kadar süre beklediği. Burada daha fazla bilgi edinin. İsteğe bağlı
RecognizeInputsType Sabit listesi Dtmf Tanınan giriş türü. Seçenekler dtmf, choices, speech ve speechordtmf'tir. Zorunlu
InitialSilenceTimeout TimeSpan 5 saniye

Min: 0 saniye
Maksimum: 300 saniye (DTMF)
Maksimum: 20 saniye (Seçenekler)
Maksimum: 20 saniye (Konuşma)
İlk sessizlik zaman aşımı, tanıma girişimi "eşleşme yok" sonucuyla bitmeden önce bir tümcecik öncesinde ne kadar sese izin verilmeyen sese izin verildiğinden emin olur. Burada daha fazla bilgi edinin. İsteğe bağlı
MaxTonesToCollect Tamsayı Varsayılan yok

Dk: 1
Bir geliştiricinin katılımcıdan giriş olarak beklediği basamak sayısı. Zorunlu
StopTones IEnumeration<DtmfTone> Ayarlı değil Basamak katılımcıları toplu DTMF olayından kaçmak için basabilir. İsteğe bağlı
KesmePrompt Boole True Katılımcının bir basamak basarak playMessage'ı kesintiye uğratma özelliği varsa. İsteğe bağlı
KesmeCallMediaOperation Boole True Bu bayrak ayarlanırsa geçerli çağrı medya işlemini kesintiye uğratır. Örneğin, herhangi bir ses yürütülüyorsa bu işlem kesintiye uğratır ve tanımayı başlatır. İsteğe bağlı
OperationContext String Ayarlı değil Geliştiricilerin orta eylem geçirebileceği dize, geliştiricilerin aldıkları olaylar hakkında bağlam depolamasına olanak sağlamak için kullanışlıdır. İsteğe bağlı
Tümcecikler String Ayarlı değil Etiketle ilişkilendirilen tümceciklerin listesi, bunlardan biri duyulursa başarılı bir tanıma olarak kabul edilir. Zorunlu
Ton String Ayarlı değil Kullanıcının konuşmayı kullanmak yerine bir sayıya basmaya karar verilip verirseniz tanıyacak ton. İsteğe bağlı
Etiket String Ayarlı değil Tanıma için anahtar değeri. Zorunlu
Dil String En-us Konuşmayı tanımak için kullanılan dil. İsteğe bağlı
EndSilenceTimeout TimeSpan 0,5 saniye Konuşma olarak oluşturulan nihai sonucu algılamak için kullanılan konuşmacının son duraklatması. İsteğe bağlı

Not

Hem dtmf hem de konuşmanın recognizeInputsType içinde olduğu durumlarda, tanıma eylemi alınan ilk giriş türü üzerinde işlem yapar; örneğin, kullanıcı önce bir tuş takımı numarasına basarsa, tanıma eylemi bunu bir dtmf olayı olarak kabul eder ve dtmf tonlarını dinlemeye devam eder. Kullanıcı önce konuşuyorsa tanıma eylemi bunu bir konuşma tanıma olarak değerlendirir ve ses girişini dinler.

Yeni Python uygulaması oluşturma

Projeniz için Python sanal ortamı ayarlama

python -m venv play-audio-app

Sanal ortamınızı etkinleştirme

Windows'ta aşağıdaki komutu kullanın:

.\ play-audio-quickstart \Scripts\activate

Unix'te aşağıdaki komutu kullanın:

source play-audio-quickstart /bin/activate

Azure İletişim Hizmetleri Çağrı Otomasyonu paketini yükleme

pip install azure-communication-callautomation

Proje dizininizde uygulama dosyanızı oluşturun, örneğin, app.py olarak adlandırınız. Python kodunuzu bu dosyaya yazarsınız.

Aşağıdaki komutla Python kullanarak uygulamanızı çalıştırın. Bu işlem, yazdığınız Python kodunu yürütür.

python app.py

Arama oluşturma

Bu noktada arama başlatma hakkında bilgi sahibi olmanız gerekir. Arama yapma hakkında daha fazla bilgi edinmek isterseniz hızlı başlangıcımızı izleyin. Bu hızlı başlangıçta bir giden çağrı oluşturacağız.

Tanıma eylemini çağırma

Uygulamanız aramayı yanıtladığında katılımcı girişini tanıma ve istem yürütme hakkında bilgi sağlayabilirsiniz. Tanıma eylemi aynı istek içinde birden çok istem yürütmeyi de destekler.

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

Konuşmayı metne dönüştürme akışları için Çağrı Otomasyonu tanıma eylemi özel konuşma modellerinin kullanımını da destekler. Özel konuşma modelleri gibi özellikler, varsayılan konuşmayı metne dönüştürme modellerinin anlayamadığı karmaşık sözcükleri dinlemesi gereken bir uygulama oluştururken yararlı olabilir. Bunun iyi bir örneği teletıp endüstrisi için bir uygulama oluştururken ve sanal temsilcinizin tıbbi terimleri tanıyabilmesi gerektiğinde olabilir. Özel konuşma modelleri oluşturma ve dağıtma hakkında daha fazla bilgiyi burada bulabilirsiniz.

Konuşmayı Metne Dönüştürme Seçenekleri

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

Konuşmayı Metne Dönüştürme

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

Konuşmayı Metne Dönüştürme veya 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") 

Not

Parametreler ayarlanmamışsa, mümkün olduğunda varsayılan değerler uygulanır.

Olay güncelleştirmelerini tanıma alma

Geliştiriciler, daha önce bahsedilen olaylardan biri gerçekleştiğinde sonraki adımları belirlemek üzere kendi uygulamalarında iş mantığı oluşturmak üzere çağrıya kaydettikleri web kancası geri çağırmasında RecognizeCompleted ve RecognizeFailed olaylarına abone olabilir.

RecognizeCompleted olayını seri durumdan çıkarma örneği:

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

RecognizeFailed olayını seri durumdan çıkarma örneği:

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

RecognizeCanceled olayının seri durumdan nasıl çıkarabileceğinize ilişkin örnek:

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

Olay kodları

Durum Kod Subcode İleti
RecognizeCompleted 200 8531 Eylem tamamlandı, maksimum basamak alındı.
RecognizeCompleted 200 8514 Durdurma tonu algılandıktan sonra eylem tamamlandı.
RecognizeCompleted 400 8508 Eylem başarısız oldu, işlem iptal edildi.
RecognizeCompleted 400 8532 Eylem başarısız oldu, basamaklar arası sessizlik zaman aşımına ulaşıldı.
RecognizeCanceled 400 8508 Eylem başarısız oldu, işlem iptal edildi.
RecognizeFailed 400 8510 Eylem başarısız oldu, ilk sessizlik zaman aşımına ulaşıldı.
RecognizeFailed 500 8511 Komut istemi yürütülmeye çalışılırken eylem başarısız oldu, hatayla karşılaşıldı.
RecognizeFailed 500 8512 Bilinmeyen iç sunucu hatası.
RecognizeFailed 400 8510 Eylem başarısız oldu, ilk sessizlik zaman aşımına ulaşıldı
RecognizeFailed 400 8532 Eylem başarısız oldu, basamaklar arası sessizlik zaman aşımına ulaşıldı.
RecognizeFailed 400 8565 Eylem başarısız oldu, Azure AI hizmetlerine hatalı istek. Giriş parametrelerini denetleyin.
Tanıma Başarısız Oldu 400 8565 Eylem başarısız oldu, Azure AI hizmetlerine hatalı istek. Sağlanan yük işlenemedi, yürütme kaynağı girişini denetleyin
RecognizeFailed Kategori 401 8565 Eylem başarısız oldu, Azure AI hizmetleri kimlik doğrulaması hatası.
RecognizeFailed Kategori 403 8565 Eylem başarısız oldu, Azure AI hizmetlerine yönelik yasak istek, istek tarafından kullanılan ücretsiz abonelik kotası doldu.
RecognizeFailed Kategori 429 8565 Eylem başarısız oldu, istekler Azure AI hizmetleri aboneliği için izin verilen eşzamanlı istek sayısını aştı.
RecognizeFailed 408 8565 Eylem başarısız oldu, Azure AI hizmetlerine yönelik istek zaman aşımına uğradı.
RecognizeFailed 500 8511 Komut istemi yürütülmeye çalışılırken eylem başarısız oldu, hatayla karşılaşıldı.
RecognizeFailed 500 8512 Bilinmeyen iç sunucu hatası.

Bilinen sınırlamalar

  • Bant içi DTMF desteklenmiyor, bunun yerine RFC 2833 DTMF kullanın.
  • Metin Okuma metin istemleri en fazla 400 karakteri destekler. İsteminiz bundan uzunsa, Metin Okuma tabanlı yürütme eylemleri için SSML kullanmanızı öneririz.
  • Konuşma hizmeti kota sınırınızı aştığınız senaryolarda, burada açıklanan adımları izleyerek bu sınırı artırmayı isteyebilirsiniz.

Kaynakları temizleme

İletişim Hizmetleri aboneliğini temizlemek ve kaldırmak istiyorsanız, kaynağı veya kaynak grubunu silebilirsiniz. Kaynak grubunun silinmesi, kaynak grubuyla ilişkili diğer tüm kaynakları da siler. Kaynakları temizleme hakkında daha fazla bilgi edinin.

Sonraki Adımlar