Настройка голосовых запросов для пользователей с помощью действия Воспроизведения
Это руководство поможет вам приступить к воспроизведению звуковых файлов участникам с помощью действия воспроизведения, предоставленного с помощью пакета SDK для автоматизации вызовов Службы коммуникации Azure.
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Создайте новое приложение веб-службы с помощью пакета SDK службы автоматизации вызовов.
- Последняя библиотека .NET для операционной системы.
- Получите последний пакет NuGet.
Для функций ИИ
- Создайте и подключите службы ИИ Azure к Службы коммуникации Azure ресурсу.
- Создайте настраиваемый поддомен для ресурса служб искусственного интеллекта Azure.
Создание нового приложения C#
В окне консоли операционной системы используйте dotnet
команду для создания нового веб-приложения.
dotnet new web -n MyApplication
Установка пакета NuGet
Пакет NuGet можно получить отсюда, если вы еще этого не сделали.
(Необязательно) Подготовьте звуковой файл, если вы хотите использовать звуковые файлы для воспроизведения запросов
Создайте звуковой файл, если у вас еще нет его, чтобы использовать для воспроизведения запросов и сообщений участникам. Звуковой файл должен размещаться в расположении, доступном для Службы коммуникации Azure с поддержкой проверки подлинности. Сохраните копию URL-адреса, доступного для использования при запросе воспроизведения звукового файла. Службы коммуникации Azure поддерживает оба типа файловMP3-файлы с ID3V2TAG и WAV-файлами, моно 16-разрядная pcM с частотой выборки 16 КГц. .
Вы можете протестировать создание собственного звукового файла с помощью средства синтеза речи с помощью средства создания аудиоконтентов.
(Необязательно) Подключение Azure Cognitive Service к службе коммуникации Azure
Если вы хотите использовать возможности преобразования текста в речь, вам потребуется подключить Azure Cognitive Service к службе коммуникации Azure.
Установка вызова
К этому моменту вы должны ознакомиться с начальными звонками, если вам нужно узнать больше о вызове, следуйте нашему краткому руководству. Вы также можете использовать фрагмент кода, предоставленный здесь, чтобы понять, как ответить на вызов.
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 URI для файла, размещенного в расположении, где Службы коммуникации Azure может получить к нему доступ. Тип 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")) };
Источник воспроизведения — преобразование текста в речь
Чтобы воспроизвести звук с помощью служб ИИ Azure, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые службами ИИ Azure, полный список здесь.
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
Если вы хотите настроить выходные данные текста в речь еще больше с помощью служб ИИ Azure, вы можете использовать язык SSML синтеза речи при вызове действия воспроизведения с помощью службы автоматизации вызовов. С помощью 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);
Пользовательские модели голосовой связи
Если вы хотите улучшить запросы больше и включить пользовательские модели голосовой связи, то теперь действие воспроизведения "Текст в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локальный, персонализированный опыт или иметь ситуации, когда модели по умолчанию могут не охватывать слова и акценты, которые вы пытаетесь пропустить. Дополнительные сведения о создании и развертывании пользовательских моделей см. в этом руководстве.
Пользовательские голосовые имена регулярных текстовых эксmaple
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");
Когда вы решите, какой playSource вы хотите использовать для воспроизведения звука, вы можете выбрать, хотите ли вы воспроизвести его для определенного участника или для всех участников.
Воспроизведение звука для всех участников
В этом сценарии звук воспроизводится всем участникам звонка.
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 с исходным идентификатором для звукового файла. Службы коммуникации Azure кэширует этот звуковой файл в течение 1 часа.
Примечание.
Кэширование звуковых файлов не подходит для динамических запросов. При изменении URL-адреса, предоставленного на Службы коммуникации Azure, он не обновляет кэшированный 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);
}
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure"
- Создайте новое приложение веб-службы с помощью пакета SDK службы автоматизации вызовов.
- Пакет средств разработки Java версии 8 или более поздней.
- Apache Maven.
Для функций ИИ
- Создайте и подключите службы ИИ Azure к Службы коммуникации Azure ресурсу.
- Создайте настраиваемый поддомен для ресурса служб искусственного интеллекта Azure.
Создание нового приложения 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" создал каталог с таким же именем, как артефактId. В этом каталоге 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-callautomation
пакет SDK службы автоматизации вызовов Службы коммуникации Azure извлекается из веб-канала разработки для Azure SDK.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Необязательно) Подготовьте звуковой файл, если вы хотите использовать звуковые файлы для воспроизведения запросов
Создайте звуковой файл, если у вас еще нет его, чтобы использовать для воспроизведения запросов и сообщений участникам. Звуковой файл должен размещаться в расположении, доступном для Службы коммуникации Azure с поддержкой проверки подлинности. Сохраните копию URL-адреса, доступного для использования при запросе воспроизведения звукового файла. Службы коммуникации Azure поддерживает оба типа файловMP3-файлы с ID3V2TAG и WAV-файлами, моно 16-разрядная pcM с частотой выборки 16 КГц. .
Вы можете протестировать создание собственного звукового файла с помощью средства синтеза речи с помощью средства создания аудиоконтентов.
(Необязательно) Подключение Azure Cognitive Service к службе коммуникации Azure
Если вы хотите использовать возможности преобразования текста в речь, вам потребуется подключить Azure Cognitive Service к службе коммуникации Azure.
Обновление App.java с помощью кода
В редакторе откройте файл App.java и обновите его с помощью кода, предоставленного в разделе обновления app.java с помощью раздела кода .
Установка вызова
К этому моменту вы должны ознакомиться с начальными звонками, если вам нужно узнать больше о вызове, следуйте нашему краткому руководству. Вы также можете использовать фрагмент кода, предоставленный здесь, чтобы понять, как ответить на вызов.
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 URI для файла, размещенного в расположении, где Службы коммуникации Azure может получить к нему доступ. Тип 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);
*/
Источник воспроизведения — преобразование текста в речь
Чтобы воспроизвести звук с помощью служб ИИ Azure, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые службами ИИ Azure, полный список здесь.
// 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);
Пользовательские модели голосовой связи
Если вы хотите улучшить запросы больше и включить пользовательские модели голосовой связи, то теперь действие воспроизведения "Текст в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локальный, персонализированный опыт или иметь ситуации, когда модели по умолчанию могут не охватывать слова и акценты, которые вы пытаетесь пропустить. Дополнительные сведения о создании и развертывании пользовательских моделей см. в этом руководстве.
Пользовательские голосовые имена регулярных текстовых эксmaple
// 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");
Когда вы решите, какой playSource вы хотите использовать для воспроизведения звука, вы можете выбрать, хотите ли вы воспроизвести его для определенного участника или для всех участников.
Воспроизведение звука для всех участников
В этом сценарии звук воспроизводится всем участникам звонка.
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 с исходным идентификатором для звукового файла. Службы коммуникации Azure кэширует этот звуковой файл в течение 1 часа.
Примечание.
Кэширование звуковых файлов не подходит для динамических запросов. При изменении URL-адреса, предоставленного на Службы коммуникации Azure, он не обновляет кэшированный 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());
}
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Создайте новое приложение веб-службы с помощью пакета SDK службы автоматизации вызовов.
- Установите Node.js, вы можете установить его с официального веб-сайта.
Для функций ИИ
- Создайте и подключите службы ИИ Azure к Службы коммуникации Azure ресурсу.
- Создайте настраиваемый поддомен для ресурса служб искусственного интеллекта Azure.
Создание приложения JavaScript
Создайте приложение JavaScript в каталоге проекта. Инициализировать новый проект Node.js с помощью следующей команды. При этом создается файл package.json для проекта, который используется для управления зависимостями проекта.
npm init -y
Установка пакета автоматизации вызовов Службы коммуникации Azure
npm install @azure/communication-call-automation
Создайте файл JavaScript в каталоге проекта, например присвойте ему имя app.js. Код JavaScript записывается в этот файл. Запустите приложение с помощью Node.js с помощью следующей команды. Этот код выполняет написанный код JavaScript.
node app.js
(Необязательно) Подготовьте звуковой файл, если вы хотите использовать звуковые файлы для воспроизведения запросов
Создайте звуковой файл, если у вас еще нет его, чтобы использовать для воспроизведения запросов и сообщений участникам. Звуковой файл должен размещаться в расположении, доступном для Службы коммуникации Azure с поддержкой проверки подлинности. Сохраните копию URL-адреса, доступного для использования при запросе воспроизведения звукового файла. Службы коммуникации Azure поддерживает оба типа файловMP3-файлы с ID3V2TAG и WAV-файлами, моно 16-разрядная pcM с частотой выборки 16 КГц.
Вы можете протестировать создание собственного звукового файла с помощью средства синтеза речи с помощью средства создания аудиоконтентов.
(Необязательно) Подключение Azure Cognitive Service к службе коммуникации Azure
Если вы хотите использовать возможности преобразования текста в речь, вам потребуется подключить Azure Cognitive Service к службе коммуникации Azure.
Установка вызова
К этому моменту вы должны ознакомиться с начальными звонками, если вам нужно узнать больше о вызове, следуйте нашему краткому руководству. Вы также можете использовать фрагмент кода, предоставленный здесь, чтобы понять, как ответить на вызов.
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 URI для файла, размещенного в расположении, где Службы коммуникации Azure может получить к нему доступ. Тип FileSource в нашем пакете SDK можно использовать для указания звуковых файлов для действия воспроизведения.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Источник воспроизведения — преобразование текста в речь
Чтобы воспроизвести звук с помощью служб ИИ Azure, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые службами ИИ Azure, полный список здесь.
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
Если вы хотите настроить выходные данные текста в речь еще больше с помощью служб ИИ Azure, вы можете использовать язык 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" };
Пользовательские модели голосовой связи
Если вы хотите улучшить запросы больше и включить пользовательские модели голосовой связи, то теперь действие воспроизведения "Текст в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локальный, персонализированный опыт или иметь ситуации, когда модели по умолчанию могут не охватывать слова и акценты, которые вы пытаетесь пропустить. Дополнительные сведения о создании и развертывании пользовательских моделей см. в этом руководстве.
Пользовательские голосовые имена регулярных текстовых эксmaple
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"};
Когда вы решите, какой playSource вы хотите использовать для воспроизведения звука, вы можете выбрать, хотите ли вы воспроизвести его для определенного участника или для всех участников.
Воспроизведение звука — все участники
В этом сценарии звук воспроизводится всем участникам звонка.
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 с исходным идентификатором для звукового файла. Службы коммуникации Azure кэширует этот звуковой файл в течение 1 часа.
Примечание.
Кэширование звуковых файлов не подходит для динамических запросов. При изменении URL-адреса, предоставленного на Службы коммуникации Azure, он не обновляет кэшированный 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);
}
Необходимые компоненты
- Учетная запись Azure с активной подпиской см. в статье "Создание учетной записи бесплатно".
- Службы коммуникации Azure ресурс. См. статью "Создание ресурса Службы коммуникации Azure". Сохраните строка подключения для этого ресурса.
- Создайте новое приложение веб-службы с помощью пакета SDK службы автоматизации вызовов.
- Установить Python можно с официального сайта.
Для функций ИИ
- Создайте и подключите службы ИИ Azure к Службы коммуникации Azure ресурсу.
- Создайте настраиваемый поддомен для ресурса служб искусственного интеллекта Azure.
Создание приложения Python
Настройка виртуальной среды Python для проекта
python -m venv play-audio-app
Активация виртуального окружения
В windows используйте следующую команду:
.\ play-audio-quickstart \Scripts\activate
В Unix используйте следующую команду:
source play-audio-quickstart /bin/activate
Установка пакета автоматизации вызовов Службы коммуникации Azure
pip install azure-communication-callautomation
Создайте файл приложения в каталоге проекта, например присвойте ему имя app.py. Вы пишете код Python в этом файле.
Запустите приложение с помощью Python с помощью следующей команды для выполнения кода.
python app.py
(Необязательно) Подготовьте звуковой файл, если вы хотите использовать звуковые файлы для воспроизведения запросов
Создайте звуковой файл, если у вас еще нет его, чтобы использовать для воспроизведения запросов и сообщений участникам. Звуковой файл должен размещаться в расположении, доступном для Службы коммуникации Azure с поддержкой проверки подлинности. Сохраните копию URL-адреса, доступного для использования при запросе воспроизведения звукового файла. Службы коммуникации Azure поддерживает оба типа файловMP3 и WAV-файлы, моно 16-разрядная pcM с частотой выборки 16 КГц. .
Вы можете протестировать создание собственного звукового файла с помощью средства синтеза речи с помощью средства создания аудиоконтентов.
(Необязательно) Подключение Azure Cognitive Service к службе коммуникации Azure
Если вы хотите использовать возможности преобразования текста в речь, вам потребуется подключить Azure Cognitive Service к службе коммуникации Azure.
Установка вызова
К этому моменту вы должны ознакомиться с начальными звонками, если вам нужно узнать больше о вызове, следуйте нашему краткому руководству. Вы также можете использовать фрагмент кода, предоставленный здесь, чтобы понять, как ответить на вызов.
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 URI для файла, размещенного в расположении, где Службы коммуникации Azure может получить к нему доступ. Тип 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
# )
Источник воспроизведения — преобразование текста в речь
Чтобы воспроизвести звук с помощью служб ИИ Azure, необходимо указать текст, который вы хотите воспроизвести, а также SourceLocale и VoiceKind или VoiceName, которые вы хотите использовать. Мы поддерживаем все голосовые имена, поддерживаемые службами ИИ Azure, полный список здесь.
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
Если вы хотите настроить выходные данные текста в речь еще больше с помощью служб ИИ Azure, вы можете использовать язык 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
)
Пользовательские модели голосовой связи
Если вы хотите улучшить запросы больше и включить пользовательские модели голосовой связи, то теперь действие воспроизведения "Текст в речь" теперь поддерживает эти пользовательские голоса. Это отличный вариант, если вы пытаетесь предоставить клиентам более локальный, персонализированный опыт или иметь ситуации, когда модели по умолчанию могут не охватывать слова и акценты, которые вы пытаетесь пропустить. Дополнительные сведения о создании и развертывании пользовательских моделей см. в этом руководстве.
Пользовательские голосовые имена регулярных текстовых эксmaple
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
)
Когда вы решите, какой playSource вы хотите использовать для воспроизведения звука, вы можете выбрать, хотите ли вы воспроизвести его для определенного участника или для всех участников.
Воспроизведение звука — все участники
Воспроизведение предварительно созданного аудиофайла для всех участников звонка.
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 с исходным идентификатором для звукового файла. Службы коммуникации Azure кэширует этот звуковой файл в течение 1 часа.
Примечание.
Кэширование звуковых файлов не подходит для динамических запросов. При изменении URL-адреса, предоставленного на Службы коммуникации Azure, он не обновляет кэшированный 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"))
Коды событий
Состояние | Код | Дополнительный код | Сообщение |
---|---|---|---|
PlayCompleted | 200 | 0 | Действие выполнено успешно. |
PlayCanceled | 400 | 8508 | Сбой действия, операция была отменена. |
PlayFailed | 400 | 8535 | Сбой действия, недопустимый формат файла. |
PlayFailed | 400 | 8536 | Не удалось скачать файл. |
PlayFailed | 400 | 8565 | Сбой действия, неправильный запрос к службам ИИ Azure. Проверить входные параметры. |
PlayFailed | 401 | 8565 | Сбой действия, ошибка проверки подлинности служб ИИ Azure. |
PlayFailed | 403 | 8565 | Сбой действия, запрещенный запрос к службам ИИ Azure, бесплатная подписка, используемая запросом, закончилась квота. |
PlayFailed | 429 | 8565 | Сбой действия, запросы превысили количество разрешенных одновременных запросов для подписки на службы искусственного интеллекта Azure. |
PlayFailed | 408 | 8565 | Сбой действия, время ожидания запроса к службам ИИ Azure истекло. |
PlayFailed | 500 | 9999 | Неизвестная внутренняя ошибка сервера |
PlayFailed | 500 | 8572 | Сбой действия из-за завершения работы службы. |
Известные ограничения
- Текстовые запросы на речь поддерживают не более 400 символов, если ваш запрос больше, чем это мы рекомендуем использовать SSML для действий воспроизведения на основе текста в речь.
- В сценариях, когда превышено ограничение квоты службы "Речь", можно запросить увеличение этого lilmit, выполнив описанные здесь действия.
Очистка ресурсов
Если вы хотите отменить и удалить подписку на Службы коммуникации, можно удалить ресурс или группу ресурсов. При удалении группы ресурсов также удаляются все связанные с ней ресурсы. См. сведения об очистке ресурсов.
Следующие шаги
- Дополнительные сведения об автоматизации вызовов
- Дополнительные сведения о сборе входных данных пользователя в вызове