Personalización de indicaciones de voz para los usuarios con la acción Reproducir
Esta guía le ayudará a empezar a reproducir archivos de audio para los participantes mediante la acción de reproducción proporcionada a través del SDK de Automatización de llamadas de Azure Communication Services.
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Guarde la cadena de conexión para usarla más adelante.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- La biblioteca de .NET más reciente para el sistema operativo.
- Consigue el último paquete NuGet.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Creación de una aplicación de C#
En la ventana de consola del sistema operativo, use el comando dotnet
para crear una aplicación web.
dotnet new web -n MyApplication
Instalación del paquete NuGet.
El paquete NuGet se puede obtener desde aquí, si aún no lo has hecho.
(Opcional) Prepara el archivo de audio si desea usar archivos de audio para reproducir mensajes
Cree un archivo de audio, si aún no tiene uno, para usarlo para reproducir solicitudes y mensajes a los participantes. El archivo de audio debe hospedarse en una ubicación que sea accesible para Azure Communication Services con compatibilidad para la autenticación. Mantenga una copia de la dirección URL disponible para que la use al solicitar reproducir el archivo de audio. Azure Communication Services admite ambos tipos de archivos de archivos MP3 con archivos ID3V2TAG y WAV, PCM mono de 16 bits a una frecuencia de muestreo de 16 KHz. .
Puede probar la creación de su propio archivo de audio mediante nuestra Síntesis de voz con la herramienta de Creación de contenido de audio.
(Opcional) Conecta Azure Cognitive Service a Azure Communication Service
Si quieres usar funcionalidades de conversión de texto a voz, es necesario que conecte su Azure Cognitive Service a su instancia de Azure Communication Service.
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
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);
Reproducir audio
Una vez establecida la llamada, hay varias opciones para reproducir el audio. Puedes reproducir audio al participante que se ha unido a la llamada o reproducir audio a todos los participantes de la llamada.
Reproducir origen: archivo de audio
Para reproducir audio a los participantes mediante archivos de audio, debes asegurarte de que el archivo de audio es un archivo WAV, mono y 16 KHz. Para reproducir archivos de audio, debes asegurarte de proporcionar Azure Communication Services con un URI a un archivo que hospede en una ubicación donde Azure Communication Services pueda acceder a él. El tipo FileSource de nuestro SDK se puede usar para especificar archivos de audio para la acción de reproducción.
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")) };
Origen de reproducción: texto a voz
Para reproducir audio mediante texto a voz a través de los servicios de Azure AI, debes proporcionar el texto que desea reproducir, así como SourceLocale y VoiceKind o VoiceName que quieres usar. Se admiten todos los nombres de voz admitidos por los servicios de Azure AI, la lista completa aquí.
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 } };
Reproducir origen: texto a voz con SSML
Si quieres personalizar la salida de texto a voz aún más con los servicios de Azure AI, puede usar lenguaje de marcado de síntesis de voz SSML al invocar la acción de reproducción a través de La automatización de llamadas. Mediante SSML, puedes ajustar con precisión el tono, agregar pausas, mejorar la pronunciación, cambiar la velocidad del habla, ajustar el volumen y atribuir varias voces a un solo documento.
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);
Modelos de voz personalizados
Si quieres mejorar más sus mensajes e incluir modelos de voz personalizados, la acción reproducir texto a voz ahora admite estas voces personalizadas. Esta es una excelente opción si estás intentando ofrecer a los clientes una experiencia más local, personalizada o tener situaciones en las que los modelos predeterminados pueden no cubrir las palabras y acentos que intentas pronunciar. Para obtener más información sobre cómo crear e implementar modelos, puedes leer esta guía.
Ejemplo de texto normal de nombres de voz personalizados
String textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointId to select custom voice.
var playSource = new TextSource(textToPlay)
{
VoiceName = "YourCustomVoiceName",
CustomVoiceEndpointId = "YourCustomEndpointId"
};
Ejemplo de SSML de nombres de voz personalizados
var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");
Una vez que hayas decidido qué playSource quieres usar para reproducir audio, puedes elegir si quieres reproducirlo a un participante específico o a todos los participantes.
Reproducir audio a todos los participantes
En este escenario, el audio se reproduce a todos los participantes de la llamada.
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playSource);
Soporte de entrada
Durante escenarios en los que esté reproduciendo audio en bucle a todos los participantes, por ejemplo, en una sala de espera, puede reproducir audio a los participantes de la sala y mantenerlos informados de su número en la cola. Al usar el soporte de entrada, se cancelará el audio en marcha y se reproducirá el nuevo mensaje. Después, si quisiera seguir reproduciendo el audio original, haría otra solicitud de reproducción.
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);
*/
Reproducir audio a un participante específico
En este escenario, el audio se reproduce a un participante específico.
var playTo = new List<CommunicationIdentifier> { targetParticipant };
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayAsync(playSource, playTo);
Reproducción de varios mensajes de audio
Todas las acciones de reproducción admiten la capacidad de enviar varios orígenes de reproducción con una sola solicitud. Esto significa que se envía una lista de mensajes para reproducir en una sola vez en lugar de realizar estas solicitudes individualmente.
Reproducir audio en bucle
Puede usar la opción de bucle para reproducir música mientras se espera que se repite hasta que la aplicación esté lista para aceptar el autor de la llamada. O bien, haga avanzar el autor de la llamada al siguiente paso en función de la lógica de negocios de las aplicaciones.
var playOptions = new PlayToAllOptions(playSource)
{
Loop = true
};
var playResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playOptions);
Mejora de la reproducción con el almacenamiento en caché de archivos de audio
Si reproduce el mismo archivo de audio varias veces, la aplicación puede proporcionar a Azure Communication Services el sourceID para el archivo de audio. Azure Communication Services almacena en caché este archivo de audio durante 1 hora.
Nota:
El almacenamiento en caché de archivos de audio no es adecuado para avisos dinámicos. Si cambias la dirección URL proporcionada a Azure Communication Services, no se actualiza la dirección URL almacenada en caché inmediatamente. La actualización se producirá después de que expire la caché existente.
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);
Control de las actualizaciones de eventos de acción de reproducción
La aplicación recibe actualizaciones de eventos de ciclo de vida de acción en la URL de devolución de llamada que se proporcionó al servicio de automatización de llamadas en el momento de responder a la llamada. Se muestra un ejemplo de una actualización correcta de eventos de reproducción.
Ejemplo de cómo se puede deserializar el evento PlayCompleted:
if (acsEvent is PlayCompleted playCompleted)
{
logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext);
}
Ejemplo de cómo se puede deserializar el evento PlayStarted:
if (acsEvent is PlayStarted playStarted)
{
logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext);
}
Ejemplo de cómo se puede deserializar el evento 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);
}
}
Para obtener más información sobre otros eventos admitidos, visite el documento de información general de automatización de llamadas.
Cancelar acción de reproducción
Cancelar todas las operaciones de elementos multimedia, se cancelan todas las operaciones multimedia pendientes. Esta acción también cancela otras acciones de reproducción en cola.
var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.CancelAllMediaOperationsAsync();
Ejemplo de cómo se puede deserializar el evento PlayCanceled:
if (acsEvent is PlayCanceled playCanceled)
{
logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext);
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Kit de desarrollo de Java, versión 8 o posterior.
- Apache Maven.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Creación de una aplicación Java
En la ventana de terminal o de comandos, navegue hasta el directorio en el que quiere crear la aplicación de Java. Ejecuta el comando que se muestra aquí para generar el proyecto de Java a partir de la plantilla maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
El comando anterior crea un directorio con el mismo nombre que el argumento artifactId
. En este directorio, el directorio src/main/java
contiene el código fuente del proyecto, el directorio src/test/java
contiene el origen de prueba.
Verás que el paso ‘generar’ creó un directorio con el mismo nombre que el objeto artifactId. En este directorio, el directorio src/main/java
contiene el código fuente, el directorio src/test/java
contiene pruebas, y el archivo pom.xml
es el modelo de objetos del proyecto o POM.
Actualice el archivo POM de la aplicación para usar Java 8 o posterior.
<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>
Incorporación de referencias de paquete
En el archivo POM, agregue la siguiente referencia para el proyecto.
azure-communication-callautomation
El paquete del SDK de automatización de llamadas de Azure Communication Services se recupera de la fuente de desarrollo del SDK de Azure.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Opcional) Prepara el archivo de audio si desea usar archivos de audio para reproducir mensajes
Cree un archivo de audio, si aún no tiene uno, para usarlo para reproducir solicitudes y mensajes a los participantes. El archivo de audio debe hospedarse en una ubicación que sea accesible para Azure Communication Services con compatibilidad para la autenticación. Mantenga una copia de la dirección URL disponible para que la use al solicitar reproducir el archivo de audio. Azure Communication Services admite ambos tipos de archivos de archivos MP3 con archivos ID3V2TAG y WAV, PCM mono de 16 bits a una frecuencia de muestreo de 16 KHz. .
Puede probar la creación de su propio archivo de audio mediante nuestra Síntesis de voz con la herramienta de Creación de contenido de audio.
(Opcional) Conecta Azure Cognitive Service a Azure Communication Service
Si quieres usar funcionalidades de conversión de texto a voz, es necesario que conecte su Azure Cognitive Service a su instancia de Azure Communication Service.
Actualización de App.java con código
En el editor que prefiera, abra el archivo App.java y actualícelo con el código proporcionado en la sección Actualizar app.java con código.
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
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();
Reproducir audio
Una vez establecida la llamada, hay varias opciones para reproducir el audio. Puedes reproducir audio al participante que se ha unido a la llamada o reproducir audio a todos los participantes de la llamada.
Reproducir origen: archivo de audio
Para reproducir audio a los participantes mediante archivos de audio, debes asegurarte de que el archivo de audio es un archivo WAV, mono y 16 KHz. Para reproducir archivos de audio, debes asegurarte de proporcionar Azure Communication Services con un URI a un archivo que hospede en una ubicación donde Azure Communication Services pueda acceder a él. El tipo FileSource de nuestro SDK se puede usar para especificar archivos de audio para la acción de reproducción.
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);
*/
Origen de reproducción: texto a voz
Para reproducir audio mediante texto a voz a través de los servicios de Azure AI, debes proporcionar el texto que desea reproducir, así como SourceLocale y VoiceKind o VoiceName que quieres usar. Se admiten todos los nombres de voz admitidos por los servicios de Azure AI, la lista completa aquí.
// 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);
*/
Origen de reproducción: SSML de texto a voz
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);
Modelos de voz personalizados
Si quieres mejorar más sus mensajes e incluir modelos de voz personalizados, la acción reproducir texto a voz ahora admite estas voces personalizadas. Esta es una excelente opción si estás intentando ofrecer a los clientes una experiencia más local, personalizada o tener situaciones en las que los modelos predeterminados pueden no cubrir las palabras y acentos que intentas pronunciar. Para obtener más información sobre cómo crear e implementar modelos, puedes leer esta guía.
Ejemplo de texto normal de nombres de voz personalizados
// Provide VoiceName and to select a specific voice.
var playSource = new TextSource()
.setText(textToPlay)
.setCustomVoiceName("YourCustomVoiceName")
.setCustomVoiceEndpointId("YourCustomEndpointId");
Ejemplo de SSML de nombres de voz personalizados
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");
Una vez que hayas decidido qué playSource quieres usar para reproducir audio, puedes elegir si quieres reproducirlo a un participante específico o a todos los participantes.
Reproducir audio a todos los participantes
En este escenario, el audio se reproduce a todos los participantes de la llamada.
var playOptions = new PlayToAllOptions(playSource);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
log.info("Play result: " + playResponse.getStatusCode());
Soporte de entrada
Durante escenarios en los que esté reproduciendo audio en bucle a todos los participantes, por ejemplo, en una sala de espera, puede reproducir audio a los participantes de la sala y mantenerlos informados de su número en la cola. Al usar el soporte de entrada, se cancelará el audio en marcha y se reproducirá el nuevo mensaje. Después, si quisiera seguir reproduciendo el audio original, haría otra solicitud de reproducción.
// 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);
*/
Reproducir audio a un participante específico
En este escenario, el audio se reproduce a un participante específico.
var playTo = Arrays.asList(targetParticipant);
var playOptions = new PlayOptions(playSource, playTo);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playWithResponse(playOptions)
.block();
Reproducir audio en bucle
Puede usar la opción de bucle para reproducir música mientras se espera que se repite hasta que la aplicación esté lista para aceptar el autor de la llamada. O bien, haga avanzar el autor de la llamada al siguiente paso en función de la lógica de negocios de las aplicaciones.
var playOptions = new PlayToAllOptions(playSource)
.setLoop(true);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
Mejora de la reproducción con el almacenamiento en caché de archivos de audio
Si reproduce el mismo archivo de audio varias veces, la aplicación puede proporcionar a Azure Communication Services el sourceID para el archivo de audio. Azure Communication Services almacena en caché este archivo de audio durante 1 hora.
Nota:
El almacenamiento en caché de archivos de audio no es adecuado para avisos dinámicos. Si cambias la dirección URL proporcionada a Azure Communication Services, no se actualiza la dirección URL almacenada en caché inmediatamente. La actualización se producirá después de que expire la caché existente.
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();
Control de las actualizaciones de eventos de acción de reproducción
La aplicación recibe actualizaciones de eventos de ciclo de vida de acción en la URL de devolución de llamada que se proporcionó al servicio de automatización de llamadas en el momento de responder a la llamada. Se muestra un ejemplo de una actualización correcta de eventos de reproducción.
Ejemplo de cómo se puede deserializar el evento PlayCompleted:
if (acsEvent instanceof PlayCompleted) {
PlayCompleted event = (PlayCompleted) acsEvent;
log.info("Play completed, context=" + event.getOperationContext());
}
Ejemplo de cómo se puede deserializar el evento PlayStarted:
if (acsEvent instanceof PlayStarted) {
PlayStarted event = (PlayStarted) acsEvent;
log.info("Play started, context=" + event.getOperationContext());
}
Ejemplo de cómo se puede deserializar el evento 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());
}
}
Para obtener más información sobre otros eventos admitidos, visite el documento de información general de automatización de llamadas.
Cancelar acción de reproducción
Cancelar todas las operaciones de elementos multimedia, se cancelan todas las operaciones multimedia pendientes. Esta acción también cancela otras acciones de reproducción en cola.
var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.cancelAllMediaOperationsWithResponse()
.block();
log.info("Cancel result: " + cancelResponse.getStatusCode());
Ejemplo de cómo se puede deserializar el evento PlayCanceled:
if (acsEvent instanceof PlayCanceled) {
PlayCanceled event = (PlayCanceled) acsEvent;
log.info("Play canceled, context=" + event.getOperationContext());
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Guarde la cadena de conexión para usarla más adelante.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Tener Node.js instalado, puedes instalarlo desde su sitio web oficial.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Creación de una aplicación de JavaScript
Crea una nueva aplicación de JavaScript en el directorio del proyecto. Inicia un nuevo proyecto de Node.js con el siguiente comando. Esto crea un archivo package.json para el proyecto, que se usa para administrar las dependencias del proyecto.
npm init -y
Instalación del paquete de Automatización de llamadas de Azure Communication Services
npm install @azure/communication-call-automation
Crea un nuevo archivo JavaScript en el directorio del proyecto, por ejemplo, asígnale el nombre app.js. Escribe el código JavaScript en este archivo. Ejecuta la aplicación mediante Node.js con el comando siguiente. Este código ejecuta el código JavaScript que has escrito.
node app.js
(Opcional) Prepara el archivo de audio si desea usar archivos de audio para reproducir mensajes
Cree un archivo de audio, si aún no tiene uno, para usarlo para reproducir solicitudes y mensajes a los participantes. El archivo de audio debe hospedarse en una ubicación que sea accesible para Azure Communication Services con compatibilidad para la autenticación. Mantenga una copia de la dirección URL disponible para que la use al solicitar reproducir el archivo de audio. Azure Communication Services admite ambos tipos de archivos de archivos MP3 con archivos ID3V2TAG y WAV, PCM mono de 16 bits a una frecuencia de muestreo de 16 KHz.
Puede probar la creación de su propio archivo de audio mediante nuestra Síntesis de voz con la herramienta de Creación de contenido de audio.
(Opcional) Conecta Azure Cognitive Service a Azure Communication Service
Si desea usar funcionalidades de conversión de texto a voz, es necesario que conecte su Azure Cognitive Service a su instancia de Azure Communication Service.
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" };
const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions);
Reproducir audio
Una vez establecida la llamada, hay varias opciones para reproducir el audio. Puedes reproducir audio al participante que se ha unido a la llamada o reproducir audio a todos los participantes de la llamada.
Reproducir origen: archivo de audio
Para reproducir audio a los participantes mediante archivos de audio, debes asegurarte de que el archivo de audio es un archivo WAV, mono y 16 KHz. Para reproducir archivos de audio, debes asegurarte de proporcionar Azure Communication Services con un URI a un archivo que hospede en una ubicación donde Azure Communication Services pueda acceder a él. El tipo FileSource de nuestro SDK se puede usar para especificar archivos de audio para la acción de reproducción.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Origen de reproducción: texto a voz
Para reproducir audio mediante texto a voz a través de los servicios de Azure AI, debes proporcionar el texto que desea reproducir, así como SourceLocale y VoiceKind o VoiceName que quieres usar. Se admiten todos los nombres de voz admitidos por los servicios de Azure AI, la lista completa aquí.
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" };
Reproducir origen: texto a voz con SSML
Si quieres personalizar la salida de texto a voz aún más con los servicios de Azure AI, puede usar lenguaje de marcado de síntesis de voz SSML al invocar la acción de reproducción a través de La automatización de llamadas. Mediante SSML, puedes ajustar con precisión el tono, agregar pausas, mejorar la pronunciación, cambiar la velocidad del habla, ajustar el volumen y atribuir varias voces a un solo documento.
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" };
Modelos de voz personalizados
Si quieres mejorar más sus mensajes e incluir modelos de voz personalizados, la acción reproducir texto a voz ahora admite estas voces personalizadas. Esta es una excelente opción si estás intentando ofrecer a los clientes una experiencia más local, personalizada o tener situaciones en las que los modelos predeterminados pueden no cubrir las palabras y acentos que intentas pronunciar. Para obtener más información sobre cómo crear e implementar modelos, puedes leer esta guía.
Ejemplo de texto normal de nombres de voz personalizados
const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}
Ejemplo de SSML de nombres de voz personalizados
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"};
Una vez que hayas decidido qué playSource quieres usar para reproducir audio, puedes elegir si quieres reproducirlo a un participante específico o a todos los participantes.
Reproducir audio: todos los participantes
En este escenario, el audio se reproduce a todos los participantes de la llamada.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ]);
Soporte de entrada
Durante escenarios en los que esté reproduciendo audio en bucle a todos los participantes, por ejemplo, en una sala de espera, puede reproducir audio a los participantes de la sala y mantenerlos informados de su número en la cola. Al usar el soporte de entrada, se cancelará el audio en marcha y se reproducirá el nuevo mensaje. Después, si quisiera seguir reproduciendo el audio original, haría otra solicitud de reproducción.
// 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);
*/
Reproducir audio: participante específico
En este escenario, el audio se reproduce a un participante específico.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Reproducir audio en bucle
Puede usar la opción de bucle para reproducir música mientras se espera que se repite hasta que la aplicación esté lista para aceptar el autor de la llamada. O bien, haga avanzar el autor de la llamada al siguiente paso en función de la lógica de negocios de las aplicaciones.
const playOptions: PlayOptions = { loop: true };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ], playOptions);
Mejora de la reproducción con el almacenamiento en caché de archivos de audio
Si reproduce el mismo archivo de audio varias veces, la aplicación puede proporcionar a Azure Communication Services el sourceID para el archivo de audio. Azure Communication Services almacena en caché este archivo de audio durante 1 hora.
Nota:
El almacenamiento en caché de archivos de audio no es adecuado para avisos dinámicos. Si cambias la dirección URL proporcionada a Azure Communication Services, no se actualiza la dirección URL almacenada en caché inmediatamente. La actualización se producirá después de que expire la caché existente.
const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Control de las actualizaciones de eventos de acción de reproducción
La aplicación recibe actualizaciones de eventos de ciclo de vida de acción en la URL de devolución de llamada que se proporcionó al servicio de automatización de llamadas en el momento de responder a la llamada.
Ejemplo de cómo se puede deserializar el evento PlayCompleted:
if (event.type === "Microsoft.Communication.PlayCompleted") {
console.log("Play completed, context=%s", eventData.operationContext);
}
Ejemplo de cómo se puede deserializar el evento PlayFailed:
if (event.type === "Microsoft.Communication.PlayFailed") {
console.log("Play failed: data=%s", JSON.stringify(eventData));
}
Ejemplo de cómo se puede deserializar el evento PlayStarted:
if (event.type === "Microsoft.Communication.PlayStarted") {
console.log("Play started: data=%s", JSON.stringify(eventData));
}
Para obtener más información sobre otros eventos admitidos, visite el documento de información general de automatización de llamadas.
Cancelar acción de reproducción
Cancelar todas las operaciones de elementos multimedia, se cancelan todas las operaciones multimedia pendientes. Esta acción también cancela otras acciones de reproducción en cola.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.cancelAllOperations();
Ejemplo de cómo se puede deserializar el evento PlayCanceled:
if (event.type === "Microsoft.Communication.PlayCanceled") {
console.log("Play canceled, context=%s", eventData.operationContext);
}
Requisitos previos
- Cuenta de Azure con una suscripción activa: consulte Crear una cuenta gratuita.
- Un recurso de Azure Communication Services. Consulte Creación de un recurso de Azure Communication Services. Guarde la cadena de conexión para usarla más adelante.
- Cree una nueva aplicación de servicio web mediante el SDK de automatización de llamadas.
- Tener Instalado Python, puedes instalar desde el sitio oficial.
Para las características de IA
- Crea y conecta los servicios de Azure AI al recurso de Azure Communication Services.
- Crea un subdominio personalizado para el recurso de servicios de Azure AI.
Creación de una nueva aplicación de Python
Configuración de un entorno virtual de Python para el proyecto
python -m venv play-audio-app
Activación del entorno virtual
En Windows, use el siguiente comando:
.\ play-audio-quickstart \Scripts\activate
En Unix, use el comando siguiente:
source play-audio-quickstart /bin/activate
Instalación del paquete de Automatización de llamadas de Azure Communication Services
pip install azure-communication-callautomation
Cree el archivo de aplicación en el directorio del proyecto, por ejemplo, asígnale el nombre app.py. Escriba el código de Python en este archivo.
Ejecute la aplicación mediante Python con el comando siguiente.
python app.py
(Opcional) Prepara el archivo de audio si desea usar archivos de audio para reproducir mensajes
Cree un archivo de audio, si aún no tiene uno, para usarlo para reproducir solicitudes y mensajes a los participantes. El archivo de audio debe hospedarse en una ubicación que sea accesible para Azure Communication Services con compatibilidad para la autenticación. Mantenga una copia de la dirección URL disponible para que la use al solicitar reproducir el archivo de audio. Azure Communication Services admite ambos tipos de archivos de MP3 y WAV, PCM mono de 16 bits a una frecuencia de muestreo de 16 KHz. .
Puede probar la creación de su propio archivo de audio mediante nuestra Síntesis de voz con la herramienta de Creación de contenido de audio.
(Opcional) Conecta Azure Cognitive Service a Azure Communication Service
Si quieres usar funcionalidades de conversión de texto a voz, es necesario que conecte su Azure Cognitive Service a su instancia de Azure Communication Service.
Establecimiento de una llamada
En este punto, debe estar familiarizado con el inicio de llamadas, si necesita obtener más información sobre cómo realizar una llamada, siga nuestro inicio rápido. También puedes usar el fragmento de código proporcionado aquí para comprender cómo responder a una llamada.
call_automation_client.answer_call(
incoming_call_context="<Incoming call context>",
callback_url="<https://sample-callback-uri>",
cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)
Reproducir audio
Una vez establecida la llamada, hay varias opciones para reproducir el audio. Puedes reproducir audio al participante que se ha unido a la llamada o reproducir audio a todos los participantes de la llamada.
Reproducir origen: archivo de audio
Para reproducir audio a los participantes mediante archivos de audio, debes asegurarte de que el archivo de audio es un archivo WAV, mono y 16 KHz. Para reproducir archivos de audio, debes asegurarte de proporcionar Azure Communication Services con un URI a un archivo que hospede en una ubicación donde Azure Communication Services pueda acceder a él. El tipo FileSource de nuestro SDK se puede usar para especificar archivos de audio para la acción de reproducción.
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
# )
Origen de reproducción: texto a voz
Para reproducir audio mediante texto a voz a través de los servicios de Azure AI, debes proporcionar el texto que desea reproducir, así como SourceLocale y VoiceKind o VoiceName que quieres usar. Se admiten todos los nombres de voz admitidos por los servicios de Azure AI, la lista completa aquí.
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
#)
Reproducir origen: texto a voz con SSML
Si quieres personalizar la salida de texto a voz aún más con los servicios de Azure AI, puede usar lenguaje de marcado de síntesis de voz SSML al invocar la acción de reproducción a través de La automatización de llamadas. Mediante SSML, puedes ajustar con precisión el tono, agregar pausas, mejorar la pronunciación, cambiar la velocidad del habla, ajustar el volumen y atribuir varias voces a un solo documento.
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
)
Modelos de voz personalizados
Si quieres mejorar más sus mensajes e incluir modelos de voz personalizados, la acción reproducir texto a voz ahora admite estas voces personalizadas. Esta es una excelente opción si estás intentando ofrecer a los clientes una experiencia más local, personalizada o tener situaciones en las que los modelos predeterminados pueden no cubrir las palabras y acentos que intentas pronunciar. Para obtener más información sobre cómo crear e implementar modelos, puedes leer esta guía.
Ejemplo de texto normal de nombres de voz personalizados
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
)
Ejemplo de SSML de nombres de voz personalizados
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
)
Una vez que hayas decidido qué playSource quieres usar para reproducir audio, puedes elegir si quieres reproducirlo a un participante específico o a todos los participantes.
Reproducir audio: todos los participantes
Reproducir un archivo de audio pregrabado para todos los participantes de la llamada.
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
)
Soporte de entrada
Durante escenarios en los que esté reproduciendo audio en bucle a todos los participantes, por ejemplo, en una sala de espera, puede reproducir audio a los participantes de la sala y mantenerlos informados de su número en la cola. Al usar el soporte de entrada, se cancelará el audio en marcha y se reproducirá el nuevo mensaje. Después, si quisiera seguir reproduciendo el audio original, haría otra solicitud de reproducción.
# 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
#)
Reproducir audio: participante específico
Reproducir un archivo de audio pregrabado a un participante específico de la llamada.
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Reproducir audio en bucle
Puede usar la opción de bucle para reproducir música mientras se espera que se repite hasta que la aplicación esté lista para aceptar el autor de la llamada. O bien, haga avanzar el autor de la llamada al siguiente paso en función de la lógica de negocios de las aplicaciones.
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
)
Mejora de la reproducción con el almacenamiento en caché de archivos de audio
Si reproduce el mismo archivo de audio varias veces, la aplicación puede proporcionar a Azure Communication Services el sourceID para el archivo de audio. Azure Communication Services almacena en caché este archivo de audio durante 1 hora.
Nota:
El almacenamiento en caché de archivos de audio no es adecuado para avisos dinámicos. Si cambias la dirección URL proporcionada a Azure Communication Services, no se actualiza la dirección URL almacenada en caché inmediatamente. La actualización se producirá después de que expire la caché existente.
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
)
Control de las actualizaciones de eventos de acción de reproducción
La aplicación recibe actualizaciones de eventos de ciclo de vida de acción en la URL de devolución de llamada que se proporcionó al servicio de automatización de llamadas en el momento de responder a la llamada.
Ejemplo de cómo se puede deserializar el evento PlayCompleted:
if event.type == "Microsoft.Communication.PlayCompleted":
app.logger.info("Play completed, context=%s", event.data.get("operationContext"))
Ejemplo de cómo se puede deserializar el evento PlayStarted:
if event.type == "Microsoft.Communication.PlayStarted":
app.logger.info("Play started, context=%s", event.data.get("operationContext"))
Ejemplo de cómo se puede deserializar el evento PlayFailed:
if event.type == "Microsoft.Communication.PlayFailed":
app.logger.info("Play failed: data=%s", event.data)
Para obtener más información sobre otros eventos admitidos, visite el documento de información general de automatización de llamadas.
Cancelar acción de reproducción
Cancelar todas las operaciones de elementos multimedia, se cancelan todas las operaciones multimedia pendientes. Esta acción también cancela otras acciones de reproducción en cola.
call_automation_client.get_call_connection(
call_connection_id
).cancel_all_media_operations()
Ejemplo de cómo se puede deserializar el evento PlayCanceled:
if event.type == "Microsoft.Communication.PlayCanceled":
app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))
Códigos de evento
Estado | Código | SubCode | Mensaje |
---|---|---|---|
PlayCompleted | 200 | 0 | La acción se ha completado correctamente. |
PlayCanceled | 400 | 8508 | Error de acción, se canceló la operación. |
PlayFailed | 400 | 8535 | Ha habido un error, el formato de archivo no es válido. |
PlayFailed | 400 | 8536 | Ha habido un error, no se pudo descargar el archivo solicitado. |
PlayFailed | 400 | 8565 | Ha habido un error, solicitud incorrecta a los servicios de Azure AI. Compruebe los parámetros de entrada. |
PlayFailed | 401 | 8565 | Ha habido un error, error de autenticación de los servicios de Azure AI. |
PlayFailed | 403 | 8565 | Ha habido un error, solicitud prohibida a los servicios de Azure AI, la suscripción gratuita usada por la solicitud ha agotado la cuota. |
PlayFailed | 429 | 8565 | Ha habido un error, las solicitudes superaron el número de solicitudes simultáneas permitidas para la suscripción de servicios de Azure AI. |
PlayFailed | 408 | 8565 | Ha habido un error, se agota el tiempo de espera de la solicitud a los servicios de Azure AI. |
PlayFailed | 500 | 9999 | Error interno desconocido del servidor |
PlayFailed | 500 | 8572 | Ha habido un error debido al apagado del servicio de reproducción. |
Limitaciones conocidas
- Los mensajes de texto a voz admiten un máximo de 400 caracteres, si el mensaje es mayor se recomienda usar SSML para acciones de reproducción basadas en la conversión de texto a voz.
- En escenarios en los que se supera el límite de cuota del servicio de voz, puedes solicitar aumentar este limite siguiendo los pasos descritos aquí.
Limpieza de recursos
Si quiere limpiar y quitar una suscripción a Communication Services, puede eliminar el recurso o grupo de recursos. Al eliminar el grupo de recursos, también se elimina cualquier otro recurso que esté asociado a él. Obtenga más información sobre la limpieza de recursos.
Pasos siguientes
- Más información sobre la automatización de llamadas
- Más información sobre la Recopilación de entradas de usuario en una llamada