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
- 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.
- İşletim sisteminiz için en son .NET kitaplığı .
- En son NuGet paketini edinin.
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
- 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
- Çağrı Otomasyonu SDK'sını kullanarak yeni bir web hizmeti uygulaması oluşturun.
- Java Development Kit sürüm 8 veya üzeri.
- Apache Maven.
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
- 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.
- Node.js yükledikten sonra resmi web sitesinden 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 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
- Kullanıcı girişi toplama hakkında daha fazla bilgi edinin
- Aramada ses çalma hakkında daha fazla bilgi edinin
- Çağrı Otomasyonu hakkında daha fazla bilgi edinin