Mengumpulkan input pengguna dengan tindakan Kenali
Panduan ini membantu Anda mulai mengenali input DTMF yang disediakan oleh peserta melalui Azure Communication Services Call Automation SDK.
Prasyarat
- Akun Azure dengan langganan aktif, untuk detailnya lihat Membuat akun secara gratis..
- Sumber daya Azure Communication Services. Lihat Membuat sumber daya Azure Communication Services. Perhatikan string koneksi untuk sumber daya ini.
- Buat aplikasi layanan web baru menggunakan Call Automation SDK.
- Pustaka .NET terbaru untuk sistem operasi Anda.
- Paket NuGet terbaru.
Untuk fitur AI
- Buat dan sambungkan layanan Azure AI ke sumber daya Azure Communication Services Anda.
- Buat subdomain kustom untuk sumber daya layanan Azure AI Anda.
Spesifikasi teknis
Parameter berikut tersedia untuk menyesuaikan fungsi Recognize:
Parameter | Tipe | Default (jika tidak ditentukan) | Deskripsi | Wajib atau Opsional |
---|---|---|---|---|
Prompt (Untuk detailnya, lihat Menyesuaikan perintah suara kepada pengguna dengan tindakan Putar) |
Sumber File, TextSource | Belum diatur | Pesan yang akan diputar sebelum mengenali input. | Opsional |
InterToneTimeout |
TimeSpan | 2 detik Min: 1 detik Maks: 60 detik |
Batasi dalam detik saat Azure Communication Services menunggu pemanggil menekan digit lain (batas waktu antar digit). | Opsional |
InitialSegmentationSilenceTimeoutInSeconds |
Bilangan bulat | 0,5 detik | Berapa lama tindakan kenali menunggu input sebelum mempertimbangkan waktu habis. Lihat Cara mengenali ucapan. | Opsional |
RecognizeInputsType |
Enum | Dtmf | Jenis input yang dikenali. Opsinya adalah dtmf , choices , speech , dan speechordtmf . |
Wajib |
InitialSilenceTimeout |
TimeSpan | 5 detik Min: 0 detik Maks: 300 detik (DTMF) Maks: 20 detik (Pilihan) Maks: 20 detik (Ucapan) |
Batas waktu keheningan awal menyesuaikan berapa banyak audio nonspeech yang diizinkan sebelum frasa sebelum upaya pengenalan berakhir dalam hasil "tidak ada kecocokan". Lihat Cara mengenali ucapan. | Opsional |
MaxTonesToCollect |
Bilangan bulat | Tidak ada default Min: 1 |
Jumlah digit yang diharapkan pengembang sebagai input dari peserta. | Wajib |
StopTones |
IEnumeration<DtmfTone> | Belum diatur | Peserta digit dapat menekan untuk keluar dari peristiwa DTMF batch. | Opsional |
InterruptPrompt |
Bool | Benar | Jika peserta memiliki kemampuan untuk mengganggu playMessage dengan menekan digit. | Opsional |
InterruptCallMediaOperation |
Bool | Benar | Jika bendera ini diatur, bendera ini akan mengganggu operasi media panggilan saat ini. Misalnya jika ada audio yang sedang diputar, audio akan mengganggu operasi tersebut dan memulai pengenalan. | Opsional |
OperationContext |
String | Belum diatur | String yang dapat diteruskan pengembang di tengah tindakan, berguna untuk memungkinkan pengembang menyimpan konteks tentang peristiwa yang mereka terima. | Opsional |
Phrases |
String | Belum diatur | Daftar frasa yang terkait dengan label. Mendengar salah satu frasa ini menghasilkan pengenalan yang berhasil. | Wajib |
Tone |
String | Belum diatur | Nada untuk mengenali jika pengguna memutuskan untuk menekan angka alih-alih menggunakan ucapan. | Opsional |
Label |
String | Belum diatur | Nilai kunci untuk pengenalan. | Wajib |
Language |
String | En-us | Bahasa yang digunakan untuk mengenali ucapan. | Opsional |
EndSilenceTimeout |
TimeSpan | 0,5 detik | Jeda akhir pembicara yang digunakan untuk mendeteksi hasil akhir yang dihasilkan sebagai ucapan. | Opsional |
Catatan
Dalam situasi di mana DTMF dan ucapan berada di recognizeInputsType
, tindakan kenali bertindak pada jenis input pertama yang diterima. Misalnya, jika pengguna menekan nomor keypad terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa DTMF dan terus mendengarkan nada DTMF. Jika pengguna berbicara terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa pengenalan ucapan dan mendengarkan input suara.
Membuat aplikasi C# baru
Di jendela konsol sistem operasi Anda, gunakan dotnet
perintah untuk membuat aplikasi web baru.
dotnet new web -n MyApplication
Instal paket NuGet
Dapatkan paket NuGet dari Galeri NuGet | Azure.Communication.CallAutomation. Ikuti instruksi untuk menginstal paket.
Membuat panggilan
Pada titik ini Anda harus terbiasa dengan memulai panggilan. Untuk informasi selengkapnya tentang melakukan panggilan, lihat Mulai Cepat: Melakukan dan panggilan keluar. Anda juga dapat menggunakan cuplikan kode yang disediakan di sini untuk memahami cara menjawab panggilan.
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);
Memanggil tindakan kenali
Saat aplikasi menjawab panggilan, Anda dapat memberikan informasi tentang mengenali input peserta dan memutar perintah.
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);
Untuk alur ucapan ke teks, tindakan Call Automation Recognize juga mendukung penggunaan model ucapan kustom. Fitur seperti model ucapan kustom dapat berguna saat Anda membangun aplikasi yang perlu mendengarkan kata-kata kompleks yang mungkin tidak dipahami oleh model ucapan ke teks default. Salah satu contohnya adalah ketika Anda membangun aplikasi untuk industri telemedis dan agen virtual Anda harus dapat mengenali istilah medis. Anda dapat mempelajari selengkapnya di Membuat proyek ucapan kustom.
Pilihan Ucapan ke Teks
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);
Ucapan ke Teks
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);
Ucapan ke Teks atau 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);
Catatan
Jika parameter tidak diatur, default diterapkan jika memungkinkan.
Menerima pembaruan peristiwa yang dikenali
Pengembang dapat berlangganan RecognizeCompleted
peristiwa dan RecognizeFailed
pada panggilan balik webhook terdaftar. Gunakan panggilan balik ini dengan logika bisnis di aplikasi Anda untuk menentukan langkah berikutnya saat salah satu peristiwa terjadi.
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCompleted :
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;
}
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeFailed :
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);
}
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCanceled :
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);
}
Prasyarat
- Akun Azure dengan langganan aktif, untuk detailnya lihat Membuat akun secara gratis..
- Sumber daya Azure Communication Services. Lihat Membuat sumber daya Azure Communication Services
- Buat aplikasi layanan web baru menggunakan Call Automation SDK.
- Java Development Kit versi 8 atau lebih tinggi.
- Apache Maven.
Untuk fitur AI
- Buat dan sambungkan layanan Azure AI ke sumber daya Azure Communication Services Anda.
- Buat subdomain kustom untuk sumber daya layanan Azure AI Anda.
Spesifikasi teknis
Parameter berikut tersedia untuk menyesuaikan fungsi Recognize:
Parameter | Tipe | Default (jika tidak ditentukan) | Deskripsi | Wajib atau Opsional |
---|---|---|---|---|
Prompt (Untuk detailnya, lihat Menyesuaikan perintah suara kepada pengguna dengan tindakan Putar) |
Sumber File, TextSource | Belum diatur | Pesan yang akan diputar sebelum mengenali input. | Opsional |
InterToneTimeout |
TimeSpan | 2 detik Min: 1 detik Maks: 60 detik |
Batasi dalam detik saat Azure Communication Services menunggu pemanggil menekan digit lain (batas waktu antar digit). | Opsional |
InitialSegmentationSilenceTimeoutInSeconds |
Bilangan bulat | 0,5 detik | Berapa lama tindakan kenali menunggu input sebelum mempertimbangkan waktu habis. Lihat Cara mengenali ucapan. | Opsional |
RecognizeInputsType |
Enum | Dtmf | Jenis input yang dikenali. Opsinya adalah dtmf , choices , speech , dan speechordtmf . |
Wajib |
InitialSilenceTimeout |
TimeSpan | 5 detik Min: 0 detik Maks: 300 detik (DTMF) Maks: 20 detik (Pilihan) Maks: 20 detik (Ucapan) |
Batas waktu keheningan awal menyesuaikan berapa banyak audio nonspeech yang diizinkan sebelum frasa sebelum upaya pengenalan berakhir dalam hasil "tidak ada kecocokan". Lihat Cara mengenali ucapan. | Opsional |
MaxTonesToCollect |
Bilangan bulat | Tidak ada default Min: 1 |
Jumlah digit yang diharapkan pengembang sebagai input dari peserta. | Wajib |
StopTones |
IEnumeration<DtmfTone> | Belum diatur | Peserta digit dapat menekan untuk keluar dari peristiwa DTMF batch. | Opsional |
InterruptPrompt |
Bool | Benar | Jika peserta memiliki kemampuan untuk mengganggu playMessage dengan menekan digit. | Opsional |
InterruptCallMediaOperation |
Bool | Benar | Jika bendera ini diatur, bendera ini akan mengganggu operasi media panggilan saat ini. Misalnya jika ada audio yang sedang diputar, audio akan mengganggu operasi tersebut dan memulai pengenalan. | Opsional |
OperationContext |
String | Belum diatur | String yang dapat diteruskan pengembang di tengah tindakan, berguna untuk memungkinkan pengembang menyimpan konteks tentang peristiwa yang mereka terima. | Opsional |
Phrases |
String | Belum diatur | Daftar frasa yang terkait dengan label. Mendengar salah satu frasa ini menghasilkan pengenalan yang berhasil. | Wajib |
Tone |
String | Belum diatur | Nada untuk mengenali jika pengguna memutuskan untuk menekan angka alih-alih menggunakan ucapan. | Opsional |
Label |
String | Belum diatur | Nilai kunci untuk pengenalan. | Wajib |
Language |
String | En-us | Bahasa yang digunakan untuk mengenali ucapan. | Opsional |
EndSilenceTimeout |
TimeSpan | 0,5 detik | Jeda akhir pembicara yang digunakan untuk mendeteksi hasil akhir yang dihasilkan sebagai ucapan. | Opsional |
Catatan
Dalam situasi di mana DTMF dan ucapan berada di recognizeInputsType
, tindakan kenali bertindak pada jenis input pertama yang diterima. Misalnya, jika pengguna menekan nomor keypad terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa DTMF dan terus mendengarkan nada DTMF. Jika pengguna berbicara terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa pengenalan ucapan dan mendengarkan input suara.
Membuat aplikasi Java baru
Di terminal atau jendela perintah Anda, navigasikan ke direktori tempat Anda ingin membuat aplikasi Java. Jalankan mvn
perintah untuk menghasilkan proyek Java dari templat maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Perintah mvn
membuat direktori dengan nama artifactId
yang sama dengan argumen. src/main/java
Direktori berisi kode sumber proyek. src/test/java
Direktori berisi sumber pengujian.
Perhatikan bahwa langkah membuat generate
direktori dengan nama artifactId
yang sama dengan . src/main/java
Direktori berisi kode sumber. src/test/java
Direktori berisi pengujian. File pom.xml
adalah Project Object Model (POM) proyek.
Perbarui file POM aplikasi Anda untuk menggunakan Java 8 atau yang lebih tinggi.
<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>
Menambahkan referensi paket
Dalam file POM Anda, tambahkan referensi berikut untuk proyek:
azure-communication-callautomation
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
Membuat panggilan
Pada titik ini Anda harus terbiasa dengan memulai panggilan. Untuk informasi selengkapnya tentang melakukan panggilan, lihat Mulai Cepat: Melakukan dan panggilan keluar. Anda juga dapat menggunakan cuplikan kode yang disediakan di sini untuk memahami cara menjawab panggilan.
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();
Memanggil tindakan kenali
Saat aplikasi menjawab panggilan, Anda dapat memberikan informasi tentang mengenali input peserta dan memutar perintah.
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());
Untuk alur ucapan ke teks, tindakan Call Automation Recognize juga mendukung penggunaan model ucapan kustom. Fitur seperti model ucapan kustom dapat berguna saat Anda membangun aplikasi yang perlu mendengarkan kata-kata kompleks yang mungkin tidak dipahami oleh model ucapan ke teks default. Salah satu contohnya adalah ketika Anda membangun aplikasi untuk industri telemedis dan agen virtual Anda harus dapat mengenali istilah medis. Anda dapat mempelajari selengkapnya di Membuat proyek ucapan kustom.
Pilihan Ucapan ke Teks
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();
Ucapan ke Teks
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();
Ucapan ke Teks atau 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();
Catatan
Jika parameter tidak diatur, default diterapkan jika memungkinkan.
Menerima pembaruan peristiwa yang dikenali
Pengembang dapat berlangganan RecognizeCompleted
peristiwa dan RecognizeFailed
pada panggilan balik webhook terdaftar. Gunakan panggilan balik ini dengan logika bisnis di aplikasi Anda untuk menentukan langkah berikutnya saat salah satu peristiwa terjadi.
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCompleted :
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());
}
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeFailed :
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());
}
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCanceled :
if (acsEvent instanceof RecognizeCanceled) {
RecognizeCanceled event = (RecognizeCanceled) acsEvent;
log.info("Recognition canceled, context=" + event.getOperationContext());
}
Prasyarat
- Akun Azure dengan langganan aktif, untuk detailnya lihat Membuat akun secara gratis.
- Sumber daya Azure Communication Services. Lihat Membuat sumber daya Azure Communication Services. Perhatikan string koneksi untuk sumber daya ini.
- Buat aplikasi layanan web baru menggunakan Call Automation SDK.
- Telah Node.js diinstal, Anda dapat menginstalnya dari situs web resmi mereka.
Untuk fitur AI
- Buat dan sambungkan layanan Azure AI ke sumber daya Azure Communication Services Anda.
- Buat subdomain kustom untuk sumber daya layanan Azure AI Anda.
Spesifikasi teknis
Parameter berikut tersedia untuk menyesuaikan fungsi Recognize:
Parameter | Tipe | Default (jika tidak ditentukan) | Deskripsi | Wajib atau Opsional |
---|---|---|---|---|
Prompt (Untuk detailnya, lihat Menyesuaikan perintah suara kepada pengguna dengan tindakan Putar) |
Sumber File, TextSource | Belum diatur | Pesan yang akan diputar sebelum mengenali input. | Opsional |
InterToneTimeout |
TimeSpan | 2 detik Min: 1 detik Maks: 60 detik |
Batasi dalam detik saat Azure Communication Services menunggu pemanggil menekan digit lain (batas waktu antar digit). | Opsional |
InitialSegmentationSilenceTimeoutInSeconds |
Bilangan bulat | 0,5 detik | Berapa lama tindakan kenali menunggu input sebelum mempertimbangkan waktu habis. Lihat Cara mengenali ucapan. | Opsional |
RecognizeInputsType |
Enum | Dtmf | Jenis input yang dikenali. Opsinya adalah dtmf , choices , speech , dan speechordtmf . |
Wajib |
InitialSilenceTimeout |
TimeSpan | 5 detik Min: 0 detik Maks: 300 detik (DTMF) Maks: 20 detik (Pilihan) Maks: 20 detik (Ucapan) |
Batas waktu keheningan awal menyesuaikan berapa banyak audio nonspeech yang diizinkan sebelum frasa sebelum upaya pengenalan berakhir dalam hasil "tidak ada kecocokan". Lihat Cara mengenali ucapan. | Opsional |
MaxTonesToCollect |
Bilangan bulat | Tidak ada default Min: 1 |
Jumlah digit yang diharapkan pengembang sebagai input dari peserta. | Wajib |
StopTones |
IEnumeration<DtmfTone> | Belum diatur | Peserta digit dapat menekan untuk keluar dari peristiwa DTMF batch. | Opsional |
InterruptPrompt |
Bool | Benar | Jika peserta memiliki kemampuan untuk mengganggu playMessage dengan menekan digit. | Opsional |
InterruptCallMediaOperation |
Bool | Benar | Jika bendera ini diatur, bendera ini akan mengganggu operasi media panggilan saat ini. Misalnya jika ada audio yang sedang diputar, audio akan mengganggu operasi tersebut dan memulai pengenalan. | Opsional |
OperationContext |
String | Belum diatur | String yang dapat diteruskan pengembang di tengah tindakan, berguna untuk memungkinkan pengembang menyimpan konteks tentang peristiwa yang mereka terima. | Opsional |
Phrases |
String | Belum diatur | Daftar frasa yang terkait dengan label. Mendengar salah satu frasa ini menghasilkan pengenalan yang berhasil. | Wajib |
Tone |
String | Belum diatur | Nada untuk mengenali jika pengguna memutuskan untuk menekan angka alih-alih menggunakan ucapan. | Opsional |
Label |
String | Belum diatur | Nilai kunci untuk pengenalan. | Wajib |
Language |
String | En-us | Bahasa yang digunakan untuk mengenali ucapan. | Opsional |
EndSilenceTimeout |
TimeSpan | 0,5 detik | Jeda akhir pembicara yang digunakan untuk mendeteksi hasil akhir yang dihasilkan sebagai ucapan. | Opsional |
Catatan
Dalam situasi di mana DTMF dan ucapan berada di recognizeInputsType
, tindakan kenali bertindak pada jenis input pertama yang diterima. Misalnya, jika pengguna menekan nomor keypad terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa DTMF dan terus mendengarkan nada DTMF. Jika pengguna berbicara terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa pengenalan ucapan dan mendengarkan input suara.
Membuat aplikasi JavaScript baru
Buat aplikasi JavaScript baru di direktori proyek Anda. Inisialisasi proyek Node.js baru dengan perintah berikut. Ini membuat file package.json untuk proyek Anda, yang mengelola dependensi proyek Anda.
npm init -y
Menginstal paket Automasi Panggilan Azure Communication Services
npm install @azure/communication-call-automation
Buat file JavaScript baru di direktori proyek Anda, misalnya, beri nama app.js
. Tulis kode JavaScript Anda dalam file ini.
Jalankan aplikasi Anda menggunakan Node.js dengan perintah berikut.
node app.js
Membuat panggilan
Pada titik ini Anda harus terbiasa dengan memulai panggilan. Untuk informasi selengkapnya tentang melakukan panggilan, lihat Mulai Cepat: Melakukan dan panggilan keluar.
Memanggil tindakan kenali
Saat aplikasi menjawab panggilan, Anda dapat memberikan informasi tentang mengenali input peserta dan memutar perintah.
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);
Untuk alur ucapan ke teks, tindakan Call Automation Recognize juga mendukung penggunaan model ucapan kustom. Fitur seperti model ucapan kustom dapat berguna saat Anda membangun aplikasi yang perlu mendengarkan kata-kata kompleks yang mungkin tidak dipahami oleh model ucapan ke teks default. Salah satu contohnya adalah ketika Anda membangun aplikasi untuk industri telemedis dan agen virtual Anda harus dapat mengenali istilah medis. Anda dapat mempelajari selengkapnya di Membuat proyek ucapan kustom.
Pilihan Ucapan ke Teks
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);
Ucapan ke Teks
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);
Ucapan ke Teks atau 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);
Catatan
Jika parameter tidak diatur, default diterapkan jika memungkinkan.
Menerima pembaruan peristiwa yang dikenali
Pengembang dapat berlangganan RecognizeCompleted
peristiwa dan RecognizeFailed
pada panggilan balik webhook terdaftar. Gunakan panggilan balik ini dengan logika bisnis di aplikasi Anda untuk menentukan langkah berikutnya saat salah satu peristiwa terjadi.
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCompleted :
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));
}
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeFailed :
if (event.type === "Microsoft.Communication.RecognizeFailed") {
console.log("Recognize failed: data=%s", JSON.stringify(eventData, null, 2));
}
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCanceled :
if (event.type === "Microsoft.Communication.RecognizeCanceled") {
console.log("Recognize canceled, context=%s", eventData.operationContext);
}
Prasyarat
- Akun Azure dengan langganan aktif, untuk detailnya lihat Membuat akun secara gratis.
- Sumber daya Azure Communication Services. Lihat Membuat sumber daya Azure Communication Services. Perhatikan string koneksi untuk sumber daya ini.
- Buat aplikasi layanan web baru menggunakan Call Automation SDK.
- Instal Python dari Python.org.
Untuk fitur AI
- Buat dan sambungkan layanan Azure AI ke sumber daya Azure Communication Services Anda.
- Buat subdomain kustom untuk sumber daya layanan Azure AI Anda.
Spesifikasi teknis
Parameter berikut tersedia untuk menyesuaikan fungsi Recognize:
Parameter | Tipe | Default (jika tidak ditentukan) | Deskripsi | Wajib atau Opsional |
---|---|---|---|---|
Prompt (Untuk detailnya, lihat Menyesuaikan perintah suara kepada pengguna dengan tindakan Putar) |
Sumber File, TextSource | Belum diatur | Pesan yang akan diputar sebelum mengenali input. | Opsional |
InterToneTimeout |
TimeSpan | 2 detik Min: 1 detik Maks: 60 detik |
Batasi dalam detik saat Azure Communication Services menunggu pemanggil menekan digit lain (batas waktu antar digit). | Opsional |
InitialSegmentationSilenceTimeoutInSeconds |
Bilangan bulat | 0,5 detik | Berapa lama tindakan kenali menunggu input sebelum mempertimbangkan waktu habis. Lihat Cara mengenali ucapan. | Opsional |
RecognizeInputsType |
Enum | Dtmf | Jenis input yang dikenali. Opsinya adalah dtmf , choices , speech , dan speechordtmf . |
Wajib |
InitialSilenceTimeout |
TimeSpan | 5 detik Min: 0 detik Maks: 300 detik (DTMF) Maks: 20 detik (Pilihan) Maks: 20 detik (Ucapan) |
Batas waktu keheningan awal menyesuaikan berapa banyak audio nonspeech yang diizinkan sebelum frasa sebelum upaya pengenalan berakhir dalam hasil "tidak ada kecocokan". Lihat Cara mengenali ucapan. | Opsional |
MaxTonesToCollect |
Bilangan bulat | Tidak ada default Min: 1 |
Jumlah digit yang diharapkan pengembang sebagai input dari peserta. | Wajib |
StopTones |
IEnumeration<DtmfTone> | Belum diatur | Peserta digit dapat menekan untuk keluar dari peristiwa DTMF batch. | Opsional |
InterruptPrompt |
Bool | Benar | Jika peserta memiliki kemampuan untuk mengganggu playMessage dengan menekan digit. | Opsional |
InterruptCallMediaOperation |
Bool | Benar | Jika bendera ini diatur, bendera ini akan mengganggu operasi media panggilan saat ini. Misalnya jika ada audio yang sedang diputar, audio akan mengganggu operasi tersebut dan memulai pengenalan. | Opsional |
OperationContext |
String | Belum diatur | String yang dapat diteruskan pengembang di tengah tindakan, berguna untuk memungkinkan pengembang menyimpan konteks tentang peristiwa yang mereka terima. | Opsional |
Phrases |
String | Belum diatur | Daftar frasa yang terkait dengan label. Mendengar salah satu frasa ini menghasilkan pengenalan yang berhasil. | Wajib |
Tone |
String | Belum diatur | Nada untuk mengenali jika pengguna memutuskan untuk menekan angka alih-alih menggunakan ucapan. | Opsional |
Label |
String | Belum diatur | Nilai kunci untuk pengenalan. | Wajib |
Language |
String | En-us | Bahasa yang digunakan untuk mengenali ucapan. | Opsional |
EndSilenceTimeout |
TimeSpan | 0,5 detik | Jeda akhir pembicara yang digunakan untuk mendeteksi hasil akhir yang dihasilkan sebagai ucapan. | Opsional |
Catatan
Dalam situasi di mana DTMF dan ucapan berada di recognizeInputsType
, tindakan kenali bertindak pada jenis input pertama yang diterima. Misalnya, jika pengguna menekan nomor keypad terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa DTMF dan terus mendengarkan nada DTMF. Jika pengguna berbicara terlebih dahulu, tindakan kenali menganggapnya sebagai peristiwa pengenalan ucapan dan mendengarkan input suara.
Membuat aplikasi Python baru
Menyiapkan lingkungan virtual Python untuk proyek Anda
python -m venv play-audio-app
Mengaktifkan lingkungan virtual Anda
Di Windows, gunakan perintah berikut:
.\ play-audio-quickstart \Scripts\activate
Di Unix, gunakan perintah berikut:
source play-audio-quickstart /bin/activate
Menginstal paket Automasi Panggilan Azure Communication Services
pip install azure-communication-callautomation
Buat file aplikasi Anda di direktori proyek Anda, misalnya, beri nama app.py
. Tulis kode Python Anda dalam file ini.
Jalankan aplikasi Anda menggunakan Python dengan perintah berikut.
python app.py
Membuat panggilan
Pada titik ini Anda harus terbiasa dengan memulai panggilan. Untuk informasi selengkapnya tentang melakukan panggilan, lihat Mulai Cepat: Melakukan dan panggilan keluar.
Memanggil tindakan kenali
Saat aplikasi menjawab panggilan, Anda dapat memberikan informasi tentang mengenali input peserta dan memutar perintah.
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 ])
Untuk alur ucapan ke teks, tindakan Call Automation Recognize juga mendukung penggunaan model ucapan kustom. Fitur seperti model ucapan kustom dapat berguna saat Anda membangun aplikasi yang perlu mendengarkan kata-kata kompleks yang mungkin tidak dipahami oleh model ucapan ke teks default. Salah satu contohnya adalah ketika Anda membangun aplikasi untuk industri telemedis dan agen virtual Anda harus dapat mengenali istilah medis. Anda dapat mempelajari selengkapnya di Membuat proyek ucapan kustom.
Pilihan Ucapan ke Teks
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")
Ucapan ke Teks
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")
Ucapan ke Teks atau 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")
Catatan
Jika parameter tidak diatur, default diterapkan jika memungkinkan.
Menerima pembaruan peristiwa yang dikenali
Pengembang dapat berlangganan RecognizeCompleted
peristiwa dan RecognizeFailed
pada panggilan balik webhook terdaftar. Gunakan panggilan balik ini dengan logika bisnis di aplikasi Anda untuk menentukan langkah berikutnya saat salah satu peristiwa terjadi.
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCompleted :
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);
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeFailed :
if event.type == "Microsoft.Communication.RecognizeFailed":
app.logger.info("Recognize failed: data=%s", event.data);
Contoh bagaimana Anda dapat mendeserialisasi peristiwa RecognizeCanceled :
if event.type == "Microsoft.Communication.RecognizeCanceled":
# Handle the RecognizeCanceled event according to your application logic
Kode peristiwa
Status | Kode | Subcode | Pesan |
---|---|---|---|
RecognizeCompleted |
200 | 8531 | Tindakan selesai, digit maks diterima. |
RecognizeCompleted |
200 | 8514 | Tindakan selesai karena nada berhenti terdeteksi. |
RecognizeCompleted |
400 | 8508 | Tindakan gagal, operasi dibatalkan. |
RecognizeCompleted |
400 | 8532 | Tindakan gagal, batas waktu keheningan antar digit tercapai. |
RecognizeCanceled |
400 | 8508 | Tindakan gagal, operasi dibatalkan. |
RecognizeFailed |
400 | 8510 | Tindakan gagal, batas waktu keheningan awal tercapai. |
RecognizeFailed |
500 | 8511 | Tindakan gagal, mengalami kegagalan saat mencoba memutar perintah. |
RecognizeFailed |
500 | 8512 | Kesalahan server internal yang tidak diketahui. |
RecognizeFailed |
400 | 8510 | Tindakan gagal, batas waktu keheningan awal tercapai |
RecognizeFailed |
400 | 8532 | Tindakan gagal, batas waktu keheningan antar digit tercapai. |
RecognizeFailed |
400 | 8565 | Tindakan gagal, permintaan buruk ke layanan Azure AI. Periksa parameter input. |
RecognizeFailed |
400 | 8565 | Tindakan gagal, permintaan buruk ke layanan Azure AI. Tidak dapat memproses payload yang disediakan, periksa input sumber putar. |
RecognizeFailed |
401 | 8565 | Tindakan gagal, kesalahan autentikasi layanan Azure AI. |
RecognizeFailed |
403 | 8565 | Tindakan gagal, permintaan terlarang ke layanan Azure AI, langganan gratis yang digunakan oleh permintaan kehabisan kuota. |
RecognizeFailed |
429 | 8565 | Tindakan gagal, permintaan melebihi jumlah permintaan bersamaan yang diizinkan untuk langganan layanan Azure AI. |
RecognizeFailed |
408 | 8565 | Tindakan gagal, permintaan ke layanan Azure AI kehabisan waktu. |
RecognizeFailed |
500 | 8511 | Tindakan gagal, mengalami kegagalan saat mencoba memutar perintah. |
RecognizeFailed |
500 | 8512 | Kesalahan server internal yang tidak diketahui. |
Pembatasan yang diketahui
- DTMF dalam band tidak didukung. Gunakan RFC 2833 DTMF sebagai gantinya.
- Perintah teks Teks ke Ucapan mendukung maksimal 400 karakter, jika perintah Anda lebih panjang dari ini, sebaiknya gunakan SSML untuk tindakan pemutaran berbasis Teks ke Ucapan.
- Untuk skenario di mana Anda melebihi batas kuota layanan Ucapan, Anda dapat meminta untuk meningkatkan batas ini dengan mengikuti langkah-langkah yang diuraikan dalam kuota dan batas layanan Ucapan.
Membersihkan sumber daya
Jika ingin membersihkan dan menghapus langganan Azure Communication Services, Anda bisa menghapus sumber daya atau grup sumber daya. Menghapus grup sumber daya juga menghapus sumber daya apa pun yang terkait dengannya. Pelajari selengkapnya tentang membersihkan sumber daya.
Langkah berikutnya
- Pelajari selengkapnya tentang Mengumpulkan input pengguna
- Pelajari selengkapnya tentang Memutar audio dalam panggilan
- Pelajari selengkapnya tentang Automasi Panggilan