Настройте голосовые подсказки для пользователей с помощью действия «Воспроизвести».

Это руководство поможет вам начать воспроизводить аудиофайлы участникам, используя действие воспроизведения, предоставляемое службой автоматизации звонков Azure Communication Services SDK.

Предпосылки

Для функций ИИ

Создайте новое приложение на C#

В консольном окне вашей операционной системы используйте команду dotnet, чтобы создать новое веб-приложение.

dotnet new web -n MyApplication

Установите пакет NuGet

Пакет NuGet можно получить здесь, если вы еще этого не сделали.

(Не обязательно) Подготовьте ваш аудиофайл, если вы хотите использовать аудиофайлы для воспроизведения подсказок.

Создайте аудиофайл, если у вас его еще нет, чтобы использовать для воспроизведения подсказок и сообщений участникам. Аудиофайл должен быть размещен в месте, которое доступно для Azure Communication Services с поддержкой аутентификации. Сохраните копию URL, чтобы использовать ее при запросе воспроизведения аудиофайла. Azure Communication Services поддерживает оба типа файлов: MP3 файлы с ID3V2TAG и WAV файлы, моно 16-битный PCM с частотой дискретизации 16 КГц. .

Вы можете протестировать создание собственного аудиофайла с помощью нашего инструмента для синтеза речи и создания аудиоконтента.

(Необязательно) Подключите ваш сервис Azure Cognitive к вашему сервису Azure Communication

Если вы хотите использовать функции преобразования текста в речь, вам необходимо подключить службу Azure Cognitive Service к службе Azure Communication Service.

Установить вызов

На данном этапе вы должны быть знакомы с началом вызовов, если вам нужно узнать больше о совершении звонка, следуйте нашему quickstart. Вы также можете использовать предоставленный здесь код, чтобы понять, как ответить на звонок.

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

Воспроизведение звука

После установления соединения у вас есть несколько вариантов воспроизведения звука. Вы можете воспроизводить звук для участника, который присоединился к звонку, или воспроизводить звук для всех участников звонка.

Источник воспроизведения — звуковой файл

Чтобы воспроизвести звук для участников, используя аудиофайлы, убедитесь, что аудиофайл является файлом формата WAV, моно и 16 кГц. Чтобы воспроизвести аудиофайлы, убедитесь, что вы предоставили Azure Communication Services URI файла, который вы разместили в месте, доступном для Azure Communication Services. Тип FileSource в нашем SDK можно использовать для указания аудиофайлов для действия воспроизведения.

var playSource = new FileSource(new Uri(audioUri));

//Multiple FileSource Prompts, if you want to play multiple audio files in one request you can provide them in a list.
//var playSources = new List<PlaySource>() { new FileSource(new Uri("https://www2.cs.uic.edu/~i101/SoundFiles/StarWars3.wav")), new FileSource(new Uri("https://www2.cs.uic.edu/~i101/SoundFiles/preamble10.wav")) };

Воспроизвести исходник - Синтез речи

Чтобы воспроизвести звук с помощью text-To-Speech с помощью средств Foundry, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые Средствами Foundry, полный список здесь.

String textToPlay = "Welcome to Contoso";

// Provide SourceLocale and VoiceKind to select an appropriate voice. 
var playSource = new TextSource(textToPlay, "en-US", VoiceKind.Female);

//Multiple TextSource prompt, if you want to play multiple text prompts in one request you can provide them in a list.
//var playSources = new List<PlaySource>() { new TextSource("recognize prompt one") { VoiceName = SpeechToTextVoice }, new TextSource("recognize prompt two") { VoiceName = SpeechToTextVoice }, new TextSource(content) { VoiceName = SpeechToTextVoice } };
String textToPlay = "Welcome to Contoso"; 
 
// Provide VoiceName to select a specific voice. 
var playSource = new TextSource(textToPlay, "en-US-ElizabethNeural");

//Multiple TextSource prompt, if you want to play multiple text prompts in one request you can provide them in a list.
//var playSources = new List<PlaySource>() { new TextSource("recognize prompt one") { VoiceName = SpeechToTextVoice }, new TextSource("recognize prompt two") { VoiceName = SpeechToTextVoice }, new TextSource(content) { VoiceName = SpeechToTextVoice } };

Воспроизведение источника - Текст в речь с использованием SSML

Если вы хотите настроить выходные данные текст в речь еще больше с помощью инструментов Foundry Tools, вы можете использовать язык синтеза речи SSML при вызове действия воспроизведения с помощью "Call Automation". С помощью SSML вы можете точно настроить высоту тона, паузу, улучшить произношение, изменить скорость речи, отрегулировать громкость и использовать несколько голосов.

String ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"en-US-JennyNeural\">Hello World!</voice></speak>"; 

var playSource = new SsmlSource(ssmlToPlay);

Модели пользовательских голосов

Если вы хотите улучшить ваши подсказки и включить пользовательские голосовые модели, функция "воспроизведение текст-в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локализованный и персонализированный опыт или если есть ситуации, когда стандартные модели не могут охватить слова и акценты, которые вы пытаетесь произносить. Чтобы узнать больше о создании и развертывании пользовательских моделей, вы можете прочитать это руководство.

Настраиваемые имена голосов, пример обычного текста

String textToPlay = "Welcome to Contoso"; 
 
// Provide VoiceName and CustomVoiceEndpointId to select custom voice. 
var playSource = new TextSource(textToPlay)
    {
        VoiceName = "YourCustomVoiceName",
        CustomVoiceEndpointId = "YourCustomEndpointId"
    };

Пример имен настраиваемых голосов в формате SSML


var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");

После того как вы решите, какой источник воспроизведения вы хотите использовать для воспроизведения аудио, вы можете выбрать, хотите ли вы воспроизвести его конкретному участнику или всем участникам.

Воспроизвести аудио для всех участников

В этом сценарии аудио воспроизводится для всех участников звонка.

var playResponse = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayToAllAsync(playSource); 

Поддержка функции перебивания

Во время сценариев, когда вы проигрываете аудио по кругу для всех участников, например, в зале ожидания, вы можете проигрывать аудио для участников в лобби и держать их в курсе их номера в очереди. При использовании функции прерывания это отменяет воспроизведение текущего звука и воспроизводит ваше новое сообщение. Затем, если вы хотите продолжить воспроизведение исходного звука, вы сделаете другой запрос на воспроизведение.

var GoodbyePlaySource = new TextSource("Good bye")
{
    VoiceName = "en-US-NancyNeural"
};

PlayToAllOptions playOptions = new PlayToAllOptions(GoodbyePlaySource)
{
    InterruptCallMediaOperation = false,
    OperationCallbackUri = new Uri(callbackUriHost),
    Loop = true
};

await callConnectionMedia.PlayToAllAsync(playOptions);

// Interrupt media with text source

// Option1:
var interrupt = new TextSource("Interrupt prompt message")
{
    VoiceName = "en-US-NancyNeural"
};

PlayToAllOptions playInterrupt = new PlayToAllOptions(interrupt)
{
    InterruptCallMediaOperation = true,
    OperationCallbackUri = new Uri(callbackUriHost),
    Loop = false
};

await callConnectionMedia.PlayToAllAsync(playInterrupt);

/*
Option2: Interrupt media with file source
var interruptFile = new FileSource(new Uri(<AUDIO URL>));
PlayToAllOptions playFileInterrupt = new PlayToAllOptions(interruptFile)
{
    InterruptCallMediaOperation = true,
    OperationCallbackUri = new Uri(callbackUriHost),
    Loop = false
};
await callConnectionMedia.PlayToAllAsync(playFileInterrupt);
*/

Воспроизведение звука для определенного участника

В этом сценарии аудио воспроизводится для конкретного участника.

var playTo = new List<CommunicationIdentifier> { targetParticipant }; 
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayAsync(playSource, playTo); 

Воспроизводить несколько голосовых подсказок

Все действия воспроизведения поддерживают возможность отправки нескольких источников воспроизведения одним запросом. Это означает, что вы отправляете список подсказок для воспроизведения за раз вместо того, чтобы делать эти запросы по отдельности.

Проигрывать звук по кругу

Вы можете использовать параметр цикла, чтобы воспроизводить музыку на удержании, которая повторяется до тех пор, пока ваше приложение не будет готово принять звонящего. Или продвиньте вызывающего к следующему логическому шагу на основе бизнес-логики приложения.

var playOptions = new PlayToAllOptions(playSource) 
{ 
    Loop = true 
}; 
var playResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayToAllAsync(playOptions); 

Улучшите воспроизведение с помощью кэширования аудиофайлов

Если вы воспроизводите один и тот же аудиофайл несколько раз, ваше приложение может предоставить Azure Communication Services идентификатор источника для аудиофайла. Azure Communication Services кэширует этот аудиофайл в течение 1 часа.

Примечание

Кэширование аудиофайлов не подходит для динамических подсказок. Если вы измените URL-адрес, предоставленный в Azure Communication Services, он не обновит кэшированный URL-адрес сразу. Обновление будет происходить после истечения срока действия существующего кэша.

var playTo = new List<CommunicationIdentifier> { targetParticipant }; 
var playSource = new FileSource(new Uri(audioUri)) 
{ 
    PlaySourceCacheId = "<playSourceId>" 
}; 
var playResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayAsync(playSource, playTo); 

Обрабатывать обновления событий действия воспроизведения

Ваше приложение получает обновления о жизненном цикле действий на URL-адрес обратного вызова, который был предоставлен службе автоматизации вызовов в момент ответа на вызов. Пример успешного обновления события в игре.

Пример того, как можно десериализовать событие PlayCompleted:

if (acsEvent is PlayCompleted playCompleted) 
{ 
    logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext); 
} 

Пример десериализации события PlayStarted :

if (acsEvent is PlayStarted playStarted) 
{ 
    logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext); 
} 

Пример того, как можно десериализовать событие PlayFailed:

if (acsEvent is PlayFailed playFailed) 
{ 
    if (MediaEventReasonCode.PlayDownloadFailed.Equals(playFailed.ReasonCode)) 
    { 
        logger.LogInformation("Play failed: download failed, context={context}", playFailed.OperationContext); 
    } 
    else if (MediaEventReasonCode.PlayInvalidFileFormat.Equals(playFailed.ReasonCode)) 
    { 
        logger.LogInformation("Play failed: invalid file format, context={context}", playFailed.OperationContext); 
    } 
    else 
    { 
        logger.LogInformation("Play failed, result={result}, context={context}", playFailed.ResultInformation?.Message, playFailed.OperationContext); 
    } 
} 

Чтобы узнать больше о других поддерживаемых событиях, посетите документ обзора автоматизации вызовов.

Отменить действие воспроизведения

Отменить все медиа операции, все ожидающие медиа операции отменены. Это действие также отменяет другие поставленные в очередь действия воспроизведения.

var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .CancelAllMediaOperationsAsync(); 

Пример того, как вы можете десериализовать событие PlayCanceled:

if (acsEvent is PlayCanceled playCanceled) 
{ 
    logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext); 
} 

Предпосылки

Для функций ИИ

Создайте новое Java-приложение

В терминале или командной строке перейдите в каталог, где вы хотите создать своё Java-приложение. Выполните команду, указанную здесь, чтобы сгенерировать проект Java из шаблона maven-archetype-quickstart.

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

Предыдущая команда создает каталог с именем, совпадающим с аргументом artifactId. Под этим каталогом каталог src/main/java содержит исходный код проекта, каталог src/test/java содержит тестовый код.

Вы замечаете, что на этапе «generate» была создана директория с тем же именем, что и у artifactId. В этом каталоге, каталог src/main/java содержит исходный код, каталог src/test/java содержит тесты, а файл pom.xml является Моделью Объекта Проекта, или POM.

Обновите файл POM вашего приложения, чтобы использовать Java 8 или более новую версию.

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

Добавить ссылки на пакет

В вашем POM-файле добавьте следующую ссылку для проекта.

Azure Communication Call Automation

Пакет Azure Communication Services Call Automation SDK загружается из Azure SDK Dev Feed.

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

(Не обязательно) Подготовьте ваш аудиофайл, если вы хотите использовать аудиофайлы для воспроизведения подсказок.

Создайте аудиофайл, если у вас его еще нет, чтобы использовать для воспроизведения подсказок и сообщений участникам. Аудиофайл должен быть размещен в месте, которое доступно для Azure Communication Services с поддержкой аутентификации. Сохраните копию URL, чтобы использовать ее при запросе воспроизведения аудиофайла. Azure Communication Services поддерживает оба типа файлов: MP3 файлы с ID3V2TAG и WAV файлы, моно 16-битный PCM с частотой дискретизации 16 КГц. .

Вы можете протестировать создание собственного аудиофайла с помощью нашего инструмента для синтеза речи и создания аудиоконтента.

(Необязательно) Подключите ваш сервис Azure Cognitive к вашему сервису Azure Communication

Если вы хотите использовать функции преобразования текста в речь, вам необходимо подключить службу Azure Cognitive Service к службе Azure Communication Service.

Обновите App.java с кодом

В вашем выбранном редакторе откройте файл App.java и обновите его с помощью кода, предоставленного в разделе «Обновление App.java с кодом».

Установить вызов

На данном этапе вы должны быть знакомы с началом вызовов, если вам нужно узнать больше о совершении звонка, следуйте нашему quickstart. Вы также можете использовать предоставленный здесь код, чтобы понять, как ответить на звонок.

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

Воспроизведение звука

После установления соединения у вас есть несколько вариантов воспроизведения звука. Вы можете воспроизводить звук для участника, который присоединился к звонку, или воспроизводить звук для всех участников звонка.

Источник воспроизведения — звуковой файл

Чтобы воспроизвести звук для участников, используя аудиофайлы, убедитесь, что аудиофайл является файлом формата WAV, моно и 16 кГц. Чтобы воспроизвести аудиофайлы, убедитесь, что вы предоставили Azure Communication Services URI файла, который вы разместили в месте, доступном для Azure Communication Services. Тип FileSource в нашем SDK можно использовать для указания аудиофайлов для действия воспроизведения.

var playSource = new FileSource(new Uri(audioUri));

/* Multiple FileSource Prompts
var p1 = new FileSource().setUrl("https://www2.cs.uic.edu/~i101/SoundFiles/StarWars3.wav");
var p2 = new FileSource().setUrl("https://www2.cs.uic.edu/~i101/SoundFiles/preamble10.wav");

var playSources = new ArrayList();
playSources.add(p1);
playSources.add(p2);
*/

Воспроизвести исходник - Синтез речи

Чтобы воспроизвести звук с помощью text-To-Speech с помощью средств Foundry, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые Средствами Foundry, полный список здесь.

// Provide SourceLocale and VoiceKind to select an appropriate voice.
var playSource = new TextSource() 
    .setText(textToPlay) 
    .setSourceLocale("en-US") 
    .setVoiceKind(VoiceKind.FEMALE);

/* Multiple Prompt list setup: Multiple TextSource prompt

var p1 = new TextSource().setText("recognize prompt one").setSourceLocale("en-US").setVoiceKind(VoiceKind.FEMALE);
var p2 = new TextSource().setText("recognize prompt two").setSourceLocale("en-US").setVoiceKind(VoiceKind.FEMALE);
var p3 = new TextSource().setText(content).setSourceLocale("en-US").setVoiceKind(VoiceKind.FEMALE);

var playSources = new ArrayList();
playSources.add(p1);
playSources.add(p2);
playSources.add(p3);
*/
// Provide VoiceName to select a specific voice.
var playSource = new TextSource() 
    .setText(textToPlay) 
    .setVoiceName("en-US-ElizabethNeural");

/* Multiple Prompt list setup: Multiple TextSource prompt

var p1 = new TextSource().setText("recognize prompt one").setVoiceName("en-US-NancyNeural");
var p2 = new TextSource().setText("recognize prompt two").setVoiceName("en-US-NancyNeural");
var p3 = new TextSource().setText(content).setVoiceName("en-US-NancyNeural");

var playSources = new ArrayList();
playSources.add(p1);
playSources.add(p2);
playSources.add(p3);
*/

Источник воспроизведения — SSML для преобразования текста в устную речь

String ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"en-US-JennyNeural\">Hello World!</voice></speak>"; 
var playSource = new SsmlSource() 
    .setSsmlText(ssmlToPlay);

Модели пользовательских голосов

Если вы хотите улучшить ваши подсказки и включить пользовательские голосовые модели, функция "воспроизведение текст-в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локализованный и персонализированный опыт или если есть ситуации, когда стандартные модели не могут охватить слова и акценты, которые вы пытаетесь произносить. Чтобы узнать больше о создании и развертывании пользовательских моделей, вы можете прочитать это руководство.

Настраиваемые имена голосов, пример обычного текста

// Provide VoiceName and  to select a specific voice.
var playSource = new TextSource() 
    .setText(textToPlay) 
    .setCustomVoiceName("YourCustomVoiceName")
    .setCustomVoiceEndpointId("YourCustomEndpointId");

Пример имен настраиваемых голосов в формате SSML

String ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"YourCustomVoiceName\">Hello World!</voice></speak>"; 
var playSource = new SsmlSource() 
    .setSsmlText(ssmlToPlay)
    .setCustomVoiceEndpointId("YourCustomEndpointId");

После того как вы решите, какой источник воспроизведения вы хотите использовать для воспроизведения аудио, вы можете выбрать, хотите ли вы воспроизвести его конкретному участнику или всем участникам.

Воспроизвести аудио для всех участников

В этом сценарии аудио воспроизводится для всех участников звонка.

var playOptions = new PlayToAllOptions(playSource); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playToAllWithResponse(playOptions) 
    .block(); 
log.info("Play result: " + playResponse.getStatusCode()); 

Поддержка функции перебивания

Во время сценариев, когда вы проигрываете аудио по кругу для всех участников, например, в зале ожидания, вы можете проигрывать аудио для участников в лобби и держать их в курсе их номера в очереди. Когда вы используете функцию прерывания, текущий звук будет отменен, и ваше новое сообщение будет воспроизведено. Затем, если вы хотите продолжить воспроизведение исходного звука, вы сделаете другой запрос на воспроизведение.

// Option1: Interrupt media with text source
var textPlay = new TextSource()
    .setText("First Interrupt prompt message")
    .setVoiceName("en-US-NancyNeural");

var playToAllOptions = new PlayToAllOptions(textPlay)
    .setLoop(false)
    .setOperationCallbackUrl(appConfig.getBasecallbackuri())
    .setInterruptCallMediaOperation(false);

client.getCallConnection(callConnectionId)
    .getCallMedia()
    .playToAllWithResponse(playToAllOptions, Context.NONE);

/*
Option2: Interrupt media with text source
client.getCallConnection(callConnectionId)
    .getCallMedia()
    .playToAll(textPlay);
*/

/*
Option1: Barge-in with file source
var interruptFile = new FileSource()
    .setUrl("https://www2.cs.uic.edu/~i101/SoundFiles/StarWars3.wav");

var playFileOptions = new PlayToAllOptions(interruptFile)
    .setLoop(false)
    .setOperationCallbackUrl(appConfig.getBasecallbackuri())
    .setInterruptCallMediaOperation(true);

client.getCallConnection(callConnectionId)
    .getCallMedia()
    .playToAllWithResponse(playFileOptions, Context.NONE);

Option2: Barge-in with file source
client.getCallConnection(callConnectionId)
    .getCallMedia()
    .playToAll(interruptFile);
*/

Воспроизведение звука для определенного участника

В этом сценарии аудио воспроизводится для конкретного участника.

var playTo = Arrays.asList(targetParticipant); 
var playOptions = new PlayOptions(playSource, playTo); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playWithResponse(playOptions) 
    .block(); 

Проигрывать звук по кругу

Вы можете использовать параметр цикла, чтобы воспроизводить музыку на удержании, которая повторяется до тех пор, пока ваше приложение не будет готово принять звонящего. Или продвиньте вызывающего к следующему логическому шагу на основе бизнес-логики приложения.

var playOptions = new PlayToAllOptions(playSource) 
    .setLoop(true); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playToAllWithResponse(playOptions) 
    .block(); 

Улучшите воспроизведение с помощью кэширования аудиофайлов

Если вы воспроизводите один и тот же аудиофайл несколько раз, ваше приложение может предоставить Azure Communication Services идентификатор источника для аудиофайла. Azure Communication Services кэширует этот аудиофайл в течение 1 часа.

Примечание

Кэширование аудиофайлов не подходит для динамических подсказок. Если вы измените URL-адрес, предоставленный в Azure Communication Services, он не обновит кэшированный URL-адрес сразу. Обновление будет происходить после истечения срока действия существующего кэша.

var playTo = Arrays.asList(targetParticipant); 
var playSource = new FileSource() 
    .setUrl(audioUri) \
    .setPlaySourceCacheId("<playSourceId>"); 
var playOptions = new PlayOptions(playSource, playTo); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playWithResponse(playOptions) 
    .block(); 

Обрабатывать обновления событий действия воспроизведения

Ваше приложение получает обновления о жизненном цикле действий на URL-адрес обратного вызова, который был предоставлен службе автоматизации вызовов в момент ответа на вызов. Пример успешного обновления события в игре.

Пример того, как можно десериализовать событие PlayCompleted:

if (acsEvent instanceof PlayCompleted) { 
    PlayCompleted event = (PlayCompleted) acsEvent; 
    log.info("Play completed, context=" + event.getOperationContext()); 
} 

Пример десериализации события PlayStarted :

if (acsEvent instanceof PlayStarted) { 
    PlayStarted event = (PlayStarted) acsEvent; 
    log.info("Play started, context=" + event.getOperationContext()); 
} 

Пример того, как можно десериализовать событие PlayFailed:

if (acsEvent instanceof PlayFailed) { 
    PlayFailed event = (PlayFailed) acsEvent; 
    if (ReasonCode.Play.DOWNLOAD_FAILED.equals(event.getReasonCode())) { 
        log.info("Play failed: download failed, context=" + event.getOperationContext()); 
    } else if (ReasonCode.Play.INVALID_FILE_FORMAT.equals(event.getReasonCode())) { 
        log.info("Play failed: invalid file format, context=" + event.getOperationContext()); 
    } else { 
        log.info("Play failed, result=" + event.getResultInformation().getMessage() + ", context=" + event.getOperationContext()); 
    } 
} 

Чтобы узнать больше о других поддерживаемых событиях, посетите документ обзора автоматизации вызовов.

Отменить действие воспроизведения

Отменить все медиа операции, все ожидающие медиа операции отменены. Это действие также отменяет другие поставленные в очередь действия воспроизведения.

var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .cancelAllMediaOperationsWithResponse() 
    .block(); 
log.info("Cancel result: " + cancelResponse.getStatusCode()); 

Пример того, как вы можете десериализовать событие PlayCanceled:

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

Предпосылки

Для функций ИИ

Создать новое приложение на JavaScript

Создайте новое JavaScript-приложение в каталоге вашего проекта. Инициализируйте новый проект Node.js следующей командой. Это создаёт файл package.json для вашего проекта, который используется для управления зависимостями вашего проекта.

npm init -y

Установите пакет автоматизации вызовов Azure Communication Services

npm install @azure/communication-call-automation

Создайте новый JavaScript-файл в каталоге вашего проекта, например, назовите его app.js. Вы пишете свой код на JavaScript в этом файле. Запустите ваше приложение с помощью Node.js, используя следующую команду. Этот код выполняет написанный вами код JavaScript.

node app.js

(Не обязательно) Подготовьте ваш аудиофайл, если вы хотите использовать аудиофайлы для воспроизведения подсказок.

Создайте аудиофайл, если у вас его еще нет, чтобы использовать для воспроизведения подсказок и сообщений участникам. Аудиофайл должен быть размещен в месте, которое доступно для Azure Communication Services с поддержкой аутентификации. Сохраните копию URL, чтобы использовать ее при запросе воспроизведения аудиофайла. Azure Communication Services поддерживает оба типа файлов: MP3 файлы с ID3V2TAG и WAV файлы, моно 16-битный PCM с частотой дискретизации 16 КГц.

Вы можете протестировать создание собственного аудиофайла с помощью нашего инструмента для синтеза речи и создания аудиоконтента.

(Необязательно) Подключите ваш сервис Azure Cognitive к вашему сервису Azure Communication

Если вы хотите использовать возможности синтеза речи, вам необходимо подключить вашу службу Azure Cognitive Service к службе Azure Communication Service.

Установить вызов

На данном этапе вы должны быть знакомы с началом вызовов, если вам нужно узнать больше о совершении звонка, следуйте нашему quickstart. Вы также можете использовать предоставленный здесь код, чтобы понять, как ответить на звонок.

const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" }; 
        const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
  
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions); 

Воспроизведение звука

После установления соединения у вас есть несколько вариантов воспроизведения звука. Вы можете воспроизводить звук для участника, который присоединился к звонку, или воспроизводить звук для всех участников звонка.

Источник воспроизведения — звуковой файл

Чтобы воспроизвести звук для участников, используя аудиофайлы, убедитесь, что аудиофайл является файлом формата WAV, моно и 16 кГц. Чтобы воспроизвести аудиофайлы, убедитесь, что вы предоставили Azure Communication Services URI файла, который вы разместили в месте, доступном для Azure Communication Services. Тип FileSource в нашем SDK можно использовать для указания аудиофайлов для действия воспроизведения.

const playSource: FileSource = { url: audioUri, kind: "fileSource" };

Воспроизвести исходник - Синтез речи

Чтобы воспроизвести звук с помощью text-To-Speech с помощью средств Foundry, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые Средствами Foundry, полный список здесь.

const textToPlay = "Welcome to Contoso"; 
// Provide SourceLocale and VoiceKind to select an appropriate voice. 
const playSource: TextSource = { text: textToPlay, sourceLocale: "en-US", voiceKind: VoiceKind.Female, kind: "textSource" }; 
const textToPlay = "Welcome to Contoso"; 
// Provide VoiceName to select a specific voice. 
const playSource: TextSource = { text: textToPlay, voiceName: "en-US-ElizabethNeural", kind: "textSource" }; 

Воспроизведение источника - Текст в речь с использованием SSML

Если вы хотите еще больше настроить ваши результаты преобразования текста в речь с помощью инструментов Foundry, вы можете использовать язык разметки синтеза речи SSML при выполнении действия воспроизведения через автоматизацию вызовов. С помощью SSML вы можете точно настроить высоту тона, паузу, улучшить произношение, изменить скорость речи, отрегулировать громкость и использовать несколько голосов.

const ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"en-US-JennyNeural\">Hello World!</voice></speak>"; 
const playSource: SsmlSource = { ssmlText: ssmlToPlay, kind: "ssmlSource" }; 

Модели пользовательских голосов

Если вы хотите улучшить ваши подсказки и включить пользовательские голосовые модели, функция "воспроизведение текст-в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локализованный и персонализированный опыт или если есть ситуации, когда стандартные модели не могут охватить слова и акценты, которые вы пытаетесь произносить. Чтобы узнать больше о создании и развертывании пользовательских моделей, вы можете прочитать это руководство.

Настраиваемые имена голосов, пример обычного текста

const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}

Пример имен настраиваемых голосов в формате SSML

const ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"YourCustomVoiceName\">Hello World!</voice></speak>"; 
const playSource: SsmlSource = { ssmlText: ssmlToPlay, kind: "ssmlSource", customVoiceEndpointId: "YourCustomEndpointId"}; 

После того как вы решите, какой источник воспроизведения вы хотите использовать для воспроизведения аудио, вы можете выбрать, хотите ли вы воспроизвести его конкретному участнику или всем участникам.

Воспроизвести аудио - Все участники

В этом сценарии аудио воспроизводится для всех участников звонка.

await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .playToAll([ playSource ]);

Поддержка функции перебивания

Во время сценариев, когда вы проигрываете аудио по кругу для всех участников, например, в зале ожидания, вы можете проигрывать аудио для участников в лобби и держать их в курсе их номера в очереди. Когда вы используете функцию прерывания, текущий звук будет отменен, и ваше новое сообщение будет воспроизведено. Затем, если вы хотите продолжить воспроизведение исходного звука, вы сделаете другой запрос на воспроизведение.

// Interrupt media with text source 
//Option1:

const playSource: TextSource = { text: "Interrupt prompt", voiceName: "en-US-NancyNeural", kind: "textSource" };

const interruptOption: PlayToAllOptions = { 
loop: false, 
interruptCallMediaOperation: true, 
operationContext: "interruptOperationContext", 
operationCallbackUrl: process.env.CALLBACK_URI + "/api/callbacks" 
}; 

await callConnectionMedia.playToAll([playSource], interruptOption); 

/*
// Interrupt media with file source 

Option2: 

const playSource: FileSource = { 
url: MEDIA_URI + "MainMenu.wav", 
kind: "fileSource" 
}; 

const interruptOption: PlayToAllOptions = { 
loop: false, 
interruptCallMediaOperation: true, 
operationContext: "interruptOperationContext", 
operationCallbackUrl: process.env.CALLBACK_URI + "/api/callbacks" 
}; 

await callConnectionMedia.playToAll([playSource], interruptOption); 
*/

Воспроизведение звука — определённый участник

В этом сценарии аудио воспроизводится для конкретного участника.

await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .play([ playSource ], [ targetParticipant ]); 

Проигрывать звук по кругу

Вы можете использовать параметр цикла, чтобы воспроизводить музыку на удержании, которая повторяется до тех пор, пока ваше приложение не будет готово принять звонящего. Или продвиньте вызывающего к следующему логическому шагу на основе бизнес-логики приложения.

const playOptions: PlayOptions = { loop: true }; 
await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .playToAll([ playSource ], playOptions); 

Улучшите воспроизведение с помощью кэширования аудиофайлов

Если вы воспроизводите один и тот же аудиофайл несколько раз, ваше приложение может предоставить Azure Communication Services идентификатор источника для аудиофайла. Azure Communication Services кэширует этот аудиофайл в течение 1 часа.

Примечание

Кэширование аудиофайлов не подходит для динамических подсказок. Если вы измените URL-адрес, предоставленный в Azure Communication Services, он не обновит кэшированный URL-адрес сразу. Обновление будет происходить после истечения срока действия существующего кэша.

const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" }; 
await callAutomationClient.getCallConnection(callConnectionId) 
.getCallMedia() 
.play([ playSource ], [ targetParticipant ]);

Обрабатывать обновления событий действия воспроизведения

Ваше приложение получает обновления о жизненном цикле действий на URL-адрес обратного вызова, который был предоставлен службе автоматизации вызовов в момент ответа на вызов.

Пример того, как можно десериализовать событие PlayCompleted:

if (event.type === "Microsoft.Communication.PlayCompleted") { 
    console.log("Play completed, context=%s", eventData.operationContext); 
} 

Пример того, как можно десериализовать событие PlayFailed:

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

Пример десериализации события PlayStarted :

if (event.type === "Microsoft.Communication.PlayStarted") { 
    console.log("Play started: data=%s", JSON.stringify(eventData)); 
} 

Чтобы узнать больше о других поддерживаемых событиях, посетите документ обзора автоматизации вызовов.

Отменить действие воспроизведения

Отменить все медиа операции, все ожидающие медиа операции отменены. Это действие также отменяет другие поставленные в очередь действия воспроизведения.

await callAutomationClient.getCallConnection(callConnectionId) 
.getCallMedia() 
.cancelAllOperations();

Пример того, как вы можете десериализовать событие PlayCanceled:

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

Предпосылки

Для функций ИИ

Создайте новое приложение на Python

Настройте виртуальное окружение Python для вашего проекта

python -m venv play-audio-app

Активируйте вашу виртуальную среду

На Windows используйте следующую команду:

.\ play-audio-quickstart \Scripts\activate

В Unix используйте следующую команду:

source play-audio-quickstart /bin/activate

Установите пакет автоматизации вызовов Azure Communication Services

pip install azure-communication-callautomation

Создайте файл вашего приложения в каталоге вашего проекта, например, назовите его app.py. Вы пишете свой код Python в этом файле.

Запустите ваше приложение с помощью Python, используя следующую команду для выполнения кода.

python app.py

(Не обязательно) Подготовьте ваш аудиофайл, если вы хотите использовать аудиофайлы для воспроизведения подсказок.

Создайте аудиофайл, если у вас его еще нет, чтобы использовать для воспроизведения подсказок и сообщений участникам. Аудиофайл должен быть размещен в месте, которое доступно для Azure Communication Services с поддержкой аутентификации. Сохраните копию URL, чтобы использовать ее при запросе воспроизведения аудиофайла. Azure Communication Services поддерживает оба типа файлов: MP3 и WAV, моно 16-бит PCM с частотой дискретизации 16 кГц. .

Вы можете протестировать создание собственного аудиофайла с помощью нашего инструмента для синтеза речи и создания аудиоконтента.

(Необязательно) Подключите ваш сервис Azure Cognitive к вашему сервису Azure Communication

Если вы хотите использовать функции преобразования текста в речь, вам необходимо подключить службу Azure Cognitive Service к службе Azure Communication Service.

Установить вызов

На данном этапе вы должны быть знакомы с началом вызовов, если вам нужно узнать больше о совершении звонка, следуйте нашему quickstart. Вы также можете использовать предоставленный здесь код, чтобы понять, как ответить на звонок.

call_automation_client.answer_call(
    incoming_call_context="<Incoming call context>",
    callback_url="<https://sample-callback-uri>",
    cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)

Воспроизведение звука

После установления соединения у вас есть несколько вариантов воспроизведения звука. Вы можете воспроизводить звук для участника, который присоединился к звонку, или воспроизводить звук для всех участников звонка.

Источник воспроизведения — звуковой файл

Чтобы воспроизвести звук для участников, используя аудиофайлы, убедитесь, что аудиофайл является файлом формата WAV, моно и 16 кГц. Чтобы воспроизвести аудиофайлы, убедитесь, что вы предоставили Azure Communication Services URI файла, который вы разместили в месте, доступном для Azure Communication Services. Тип FileSource в нашем SDK можно использовать для указания аудиофайлов для действия воспроизведения.

play_source = FileSource(url=audioUri)

#Play multiple audio files
#file_source1 = FileSource(MAIN_MENU_PROMPT_URI) 
#file_source2 = FileSource(MAIN_MENU_PROMPT_URI) 
#
# play_sources = [file_source1, file_source2]
# 
# call_connection_client.play_media_to_all(
#     play_source=play_sources,
#     interrupt_call_media_operation=False,
#     operation_context="multiplePlayContext",
#     operation_callback_url=CALLBACK_EVENTS_URI,
#     loop=False
# )

Воспроизвести исходник - Синтез речи

Чтобы воспроизвести звук с помощью text-To-Speech с помощью средств Foundry, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые Средствами Foundry, полный список здесь.

text_to_play = "Welcome to Contoso"

# Provide SourceLocale and VoiceKind to select an appropriate voice. 
play_source = TextSource(
    text=text_to_play, source_locale="en-US", voice_kind=VoiceKind.FEMALE
)
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

#Multiple text prompts
#play_source1 = TextSource(text="Hi, This is multiple play source one call media test.", source_locale="en-US", voice_kind=VoiceKind.FEMALE) 
#play_source2 = TextSource(text="Hi, This is multiple play source two call media test.", source_locale="en-US", voice_kind=VoiceKind.FEMALE)
#
#play_sources = [play_source1, play_source2]
#
#call_connection_client.play_media_to_all(
#    play_source=play_sources,
#    interrupt_call_media_operation=False,
#    operation_context="multiplePlayContext",
#    operation_callback_url=CALLBACK_EVENTS_URI,
#    loop=False
#)
text_to_play = "Welcome to Contoso"

# Provide VoiceName to select a specific voice. 
play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

#Play multiple text prompts
#play_source1 = TextSource(text="Hi, This is multiple play source one call media test.", voice_name=SPEECH_TO_TEXT_VOICE) 
#play_source2 = TextSource(text="Hi, This is multiple play source two call media test.", voice_name=SPEECH_TO_TEXT_VOICE)
#
#play_sources = [play_source1, play_source2]
#
#call_connection_client.play_media_to_all(
#    play_source=play_sources,
#    interrupt_call_media_operation=False,
#    operation_context="multiplePlayContext",
#    operation_callback_url=CALLBACK_EVENTS_URI,
#    loop=False
#)

Воспроизведение источника - Текст в речь с использованием SSML

Если вы хотите ещё более настроить выходные данные Текст-в-речь с помощью средств Foundry, вы можете использовать язык синтеза речи SSML при вызове действия воспроизведения через автоматизацию вызовов. С помощью SSML вы можете точно настроить высоту тона, паузу, улучшить произношение, изменить скорость речи, отрегулировать громкость и использовать несколько голосов.

ssmlToPlay = '<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><voice name="en-US-JennyNeural">Hello World!</voice></speak>'

play_source = SsmlSource(ssml_text=ssmlToPlay)

play_to = [target_participant]

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

Модели пользовательских голосов

Если вы хотите улучшить ваши подсказки и включить пользовательские голосовые модели, функция "воспроизведение текст-в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локализованный и персонализированный опыт или если есть ситуации, когда стандартные модели не могут охватить слова и акценты, которые вы пытаетесь произносить. Чтобы узнать больше о создании и развертывании пользовательских моделей, вы можете прочитать это руководство.

Настраиваемые имена голосов, пример обычного текста

text_to_play = "Welcome to Contoso"

# Provide VoiceName to select a specific voice. 
play_source = TextSource(text=text_to_play, voice_name="YourCustomVoiceName", custom_voice_endpoint_id = "YourCustomEndpointId")
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

Пример имен настраиваемых голосов в формате SSML

ssmlToPlay = '<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><voice name="YourCustomVoiceName">Hello World!</voice></speak>'

play_source = SsmlSource(ssml_text=ssmlToPlay, custom_voice_endpoint_id="YourCustomEndpointId")

play_to = [target_participant]

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

После того как вы решите, какой источник воспроизведения вы хотите использовать для воспроизведения аудио, вы можете выбрать, хотите ли вы воспроизвести его конкретному участнику или всем участникам.

Воспроизвести аудио - Все участники

Проиграйте предварительно записанный аудиофайл всем участникам звонка.

text_to_play = "Welcome to Contoso"

play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source
)

Поддержка функции перебивания

Во время сценариев, когда вы проигрываете аудио по кругу для всех участников, например, в зале ожидания, вы можете проигрывать аудио для участников в лобби и держать их в курсе их номера в очереди. Когда вы используете функцию прерывания, текущий звук будет отменен, и ваше новое сообщение будет воспроизведено. Затем, если вы хотите продолжить воспроизведение исходного звука, вы сделаете другой запрос на воспроизведение.

# Interrupt media with text source
# Option 1
play_source = TextSource(text="This is interrupt call media test.", voice_name=SPEECH_TO_TEXT_VOICE)
call_connection_client.play_media_to_all(
    play_source, 
    interrupt_call_media_operation=True, 
    operation_context="interruptContext", 
    operation_callback_url=CALLBACK_EVENTS_URI, 
    loop=False
)

# Interrupt media with file source
# Option 2
#play_source = FileSource(MAIN_MENU_PROMPT_URI)
#call_connection_client.play_media_to_all(
#    play_source, 
#    interrupt_call_media_operation=True, 
#    operation_context="interruptContext", 
#    operation_callback_url=CALLBACK_EVENTS_URI, 
#    loop=False
#)

Воспроизведение звука — определённый участник

Проиграйте предварительно записанный аудиофайл конкретному участнику звонка.

play_to = [target_participant]

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

Проигрывать звук по кругу

Вы можете использовать параметр цикла, чтобы воспроизводить музыку на удержании, которая повторяется до тех пор, пока ваше приложение не будет готово принять звонящего. Или продвиньте вызывающего к следующему логическому шагу на основе бизнес-логики приложения.

text_to_play = "Welcome to Contoso"

play_source = TextSource(text=text_to_play, voice_name="en-US-ElizabethNeural")

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, loop=True
)

Улучшите воспроизведение с помощью кэширования аудиофайлов

Если вы воспроизводите один и тот же аудиофайл несколько раз, ваше приложение может предоставить Azure Communication Services идентификатор источника для аудиофайла. Azure Communication Services кэширует этот аудиофайл в течение 1 часа.

Примечание

Кэширование аудиофайлов не подходит для динамических подсказок. Если вы измените URL-адрес, предоставленный в Azure Communication Services, он не обновит кэшированный URL-адрес сразу. Обновление будет происходить после истечения срока действия существующего кэша.

play_source = FileSource(url=audioUri, play_source_cache_id="<playSourceId>")

play_to = [target_participant]

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

Обрабатывать обновления событий действия воспроизведения

Ваше приложение получает обновления о жизненном цикле действий на URL-адрес обратного вызова, который был предоставлен службе автоматизации вызовов в момент ответа на вызов.

Пример того, как можно десериализовать событие PlayCompleted:

if event.type == "Microsoft.Communication.PlayCompleted":

    app.logger.info("Play completed, context=%s", event.data.get("operationContext"))

Пример десериализации события PlayStarted :

if event.type == "Microsoft.Communication.PlayStarted":

    app.logger.info("Play started, context=%s", event.data.get("operationContext"))

Пример того, как можно десериализовать событие PlayFailed:

if event.type == "Microsoft.Communication.PlayFailed":

    app.logger.info("Play failed: data=%s", event.data)

Чтобы узнать больше о других поддерживаемых событиях, посетите документ обзора автоматизации вызовов.

Отменить действие воспроизведения

Отменить все медиа операции, все ожидающие медиа операции отменены. Это действие также отменяет другие поставленные в очередь действия воспроизведения.

call_automation_client.get_call_connection(
    call_connection_id
).cancel_all_media_operations()

Пример того, как вы можете десериализовать событие PlayCanceled:

if event.type == "Microsoft.Communication.PlayCanceled":

    app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))

Коды событий

Статус Код Подкод Сообщение
Воспроизведение завершено 200 0 Действие успешно выполнено.
Игра отменена 400 8508 Действие не удалось, операция была отменена.
PlayFailed 400 8535 Действие не выполнено, формат файла недействителен.
PlayFailed 400 8536 Действие не выполнено, файл не удалось скачать.
PlayFailed 400 8565 Действие не выполнено, некорректный запрос к службам Azure AI. Проверить входные параметры.
PlayFailed 401 8565 Сбой действия, ошибка проверки подлинности служб ИИ Azure.
PlayFailed Ошибка 403: Доступ запрещён 8565 Ошибка выполнения действия, запрос к службам Azure AI запрещен, бесплатная подписка, использованная для запроса, исчерпала квоту.
PlayFailed 429 8565 Сбой действия, запросы превысили количество разрешенных одновременных запросов для подписки на службы искусственного интеллекта Azure.
PlayFailed 408 8565 Действие не выполнено: время ожидания запроса к службам ИИ Azure истекло.
PlayFailed 500 9999 Неизвестная внутренняя ошибка сервера
PlayFailed 500 8572 Действие не удалось из-за отключения службы воспроизведения.

Известные ограничения

  • Подсказки для преобразования текста в речь поддерживают максимум 4 000 символов. Если ваш запрос превышает это ограничение, мы рекомендуем использовать SSML для работы с функциями преобразования текста в речь.
  • Голоса HD из Microsoft Foundry официально не поддерживаются. Это приведет к истечению времени ожидания при их использовании.
  • Увеличение квоты службы распознавания речи можно запросить, если превышено ограничение квоты. Выполните описанные здесь действия, чтобы запросить увеличение.

Очистите ресурсы

Если вы хотите очистить и удалить подписку на Communication Services, вы можете удалить ресурс или группу ресурсов. Удаление группы ресурсов также удаляет все другие ресурсы, связанные с ней. Узнайте больше о упорядочении ресурсов.

Следующие шаги