Bagikan melalui


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

Untuk fitur AI

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

Untuk fitur AI

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

Untuk fitur AI

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

Untuk fitur AI

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