Personnaliser les invites vocales destinées aux utilisateurs avec l’action de lecture
Ce guide vous permet de vous familiariser avec la lecture des fichiers audio pour les participants à l’aide de l’action de lecture fournie via le kit SDK Call Automation d’Azure Communication Services.
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Enregistrez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Dernière version de la bibliothèque .NET pour votre système d’exploitation.
- Obtenez le dernier package NuGet.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Créer une application C#
Dans la fenêtre de console de votre système d’exploitation, utilisez la commande dotnet
pour créer une application web.
dotnet new web -n MyApplication
Installez le package NuGet
Le package NuGet peut être obtenu ici, si ce n’est déjà fait.
(Facultatif) Préparez votre fichier audio si vous souhaitez utiliser des fichiers audio pour lire des invites
Le cas échéant, créez un fichier audio à utiliser pour lire des invites et des messages aux participants. Le fichier audio doit être hébergé dans un emplacement accessible à Azure Communication Services avec prise en charge de l’authentification. Conservez une copie de l’URL à utiliser quand vous demandez la lecture du fichier audio. Azure Communication Services prend en charge les fichiers MP3 avec ID3V2TAG et les fichiers WAV, au format PCM mono 16 bits à un taux d’échantillonnage de 16 KHz. .
Vous pouvez tester la création de votre propre fichier audio en utilisant la fonctionnalité de synthèse vocale de notre outil Création de contenu audio disponible avec Speech.
(Facultatif) Connectez votre Azure Cognitive Service à votre Azure Communication Service
Si vous souhaitez utiliser des fonctionnalités de conversion de texte par synthèse vocale, vous devez connecter votre Azure Cognitive Service à votre Azure Communication Service.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
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);
Lire un fichier audio
Une fois l’appel établi, plusieurs options s’offrent à vous pour lire l’audio. Vous pouvez lire l’audio au participant venant de rejoindre l’appel ou bien lire l’audio à tous les participants de l’appel.
Lire la source - Fichier audio
Pour lire de l’audio aux participants à l’aide de fichiers audio, vous devez vous assurer que le fichier audio est un fichier WAV, mono et 16 KHz. Pour lire des fichiers audio, vous devez vous assurer que vous fournissez à Azure Communication Services l’URI d’un fichier que vous hébergez dans un emplacement auquel Azure Communication Services peut accéder. Le type FileSource de notre Kit de développement logiciel (SDK) peut être utilisé pour spécifier les fichiers audio à lire.
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")) };
Lire la source - Synthèse vocale
Pour lire du contenu audio à l’aide de la Synthèse vocale via les Azure AI services, vous devez fournir le texte que vous souhaitez lire, ainsi que les SourceLocale et VoiceKind ou VoiceName que vous souhaitez utiliser. Nous prenons en charge tous les noms vocaux pris en charge par les Azure AI services, la liste complète est disponible ici.
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 } };
Lire la source - Synthèse vocale avec SSML
Si vous souhaitez personnaliser encore plus votre sortie de Synthèse vocale avec les Azure AI services, vous pouvez utiliser Speech Synthesis Markup Language SSML lorsque vous invoquez votre action de jeu par le biais de Call Automation. Avec SSML, vous pouvez ajuster la tonalité de la voix, mettre en pause l’énonciation, améliorer la prononciation, modifier le débit de parole, ajuster le volume et attribuer plusieurs voix.
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);
Modèles vocaux personnalisés
Si vous souhaitez encore améliorer vos invites et inclure des modèles vocaux personnalisés, l’action de lecture de Synthèse vocale prend désormais en charge ces voix personnalisées. Il s’agit d’une option intéressante si vous souhaitez offrir à vos clients une expérience plus locale et personnalisée ou si vous vous trouvez dans une situation où les modèles par défaut ne couvrent pas les mots et les accents que vous essayez de prononcer. Pour en savoir plus sur la création et le déploiement de modèles personnalisés, vous pouvez lire ce guide.
Exemple de texte ordinaire de noms vocaux personnalisés
String textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointId to select custom voice.
var playSource = new TextSource(textToPlay)
{
VoiceName = "YourCustomVoiceName",
CustomVoiceEndpointId = "YourCustomEndpointId"
};
Exemple SSML de noms vocaux personnalisés
var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");
Une fois que vous avez choisi le playSource que vous souhaitez utiliser pour lire l’audio, vous pouvez choisir de le lire à un participant spécifique ou à tous les participants.
Lire l’audio à tous les participants
Dans ce scénario, l’audio est lu à tous les participants de l’appel.
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playSource);
Prise en charge de l’interception d’appel
Dans les scénarios où vous lisez une séquence audio en boucle à tous les participants, par exemple dans une salle d’attente, vous pouvez lire de l’audio aux participants présents dans la salle d’attente et les tenir à jour concernant leur numéro dans la file d’attente. Lorsque vous utilisez la prise en charge de l’interception d’appel, cela annule l’audio en cours et lit votre nouveau message. Ensuite, si vous voulez continuer à lire l’audio d’origine, vous devez effectuer une autre demande de lecture.
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);
*/
Lire l’audio à un participant spécifique
Dans ce scénario, l’audio est lu à un participant spécifique.
var playTo = new List<CommunicationIdentifier> { targetParticipant };
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayAsync(playSource, playTo);
Lire plusieurs invites audio
Les actions de lecture prennent toutes en charge la capacité à envoyer plusieurs sources de lecture en une seule demande. Cela signifie que vous envoyez une liste d’invites à lire en une seule fois, au lieu de faire ces demandes individuellement.
Lire l’audio en boucle
Vous pouvez utiliser l’option de lecture en boucle pour lire la musique d’attente jusqu’à ce que votre application soit prête à accepter l’appelant. Vous pouvez également passer à l’étape logique suivante en fonction de la logique métier de vos applications.
var playOptions = new PlayToAllOptions(playSource)
{
Loop = true
};
var playResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playOptions);
Améliorer la lecture avec la mise en cache des fichiers audio
Si vous lisez le même fichier audio plusieurs fois, votre application peut fournir à Azure Communication Services le sourceID du fichier audio. Azure Communication Services met en cache ce fichier audio pendant 1 heure.
Remarque
La mise en cache des fichiers audio n’est pas adaptée aux invites dynamiques. Si vous modifiez l’URL fournie à Azure Communication Services, l’URL mise en cache ne sera pas mise à jour immédiatement. La mise à jour s’effectue après l’expiration du cache existant.
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);
Gérer les mises à jour des événements d’action de lecture
Votre application reçoit les mises à jour des événements du cycle de vie de l’action sur l’URL de rappel qui a été fournie à Call Automation au moment de répondre à l’appel. Voici un exemple de mise à jour d’événement de lecture réussie.
Exemple de désérialisation de l’événement PlayCompleted :
if (acsEvent is PlayCompleted playCompleted)
{
logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext);
}
Exemple de désérialisation de l’événement PlayStarted :
if (acsEvent is PlayStarted playStarted)
{
logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext);
}
Exemple de désérialisation de l’événement 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);
}
}
Pour en savoir plus sur les autres événements pris en charge, consultez le document de vue d’ensemble de l’automatisation des appels.
Annuler l’action de lecture
Annuler toutes les opérations média, toutes les opérations média en cours sont annulées. Cette action annule également d’autres actions de lecture mises en file d’attente.
var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.CancelAllMediaOperationsAsync();
Exemple de désérialisation de l’événement PlayCanceled :
if (acsEvent is PlayCanceled playCanceled)
{
logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext);
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Kit de développement Java version 8 ou ultérieure.
- Apache Maven.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Créer une application Java
Dans votre terminal ou votre fenêtre Commande, accédez au répertoire dans lequel vous souhaitez créer votre application Java. Exécutez la commande ci-dessous pour générer le projet Java à partir du modèle maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
La commande précédente crée un répertoire portant le même nom que l’argument artifactId
. Sous ce répertoire, le répertoire src/main/java
contient le code source du projet, le répertoire src/test/java
contient la source de test.
Remarquez que l’étape « générer » a créé un répertoire portant le même nom que l’artifactId. Sous ce répertoire, le répertoire src/main/java
contient le code source, le répertoire src/test/java
contient les tests et le fichier pom.xml
est le modèle d’objet du projet (POM).
Mettez à jour le fichier POM de vos applications pour utiliser Java 8 ou version ultérieure.
<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>
Ajouter des références de package
Dans votre fichier POM, ajoutez la référence suivante pour le projet.
azure-communication-callautomation
Le package du kit SDK Call Automation d’Azure Communication Services est récupéré à partir du flux de développement du kit SDK Azure configuré ci-dessus.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Facultatif) Préparez votre fichier audio si vous souhaitez utiliser des fichiers audio pour lire des invites
Le cas échéant, créez un fichier audio à utiliser pour lire des invites et des messages aux participants. Le fichier audio doit être hébergé dans un emplacement accessible à Azure Communication Services avec prise en charge de l’authentification. Conservez une copie de l’URL à utiliser quand vous demandez la lecture du fichier audio. Azure Communication Services prend en charge les fichiers MP3 avec ID3V2TAG et les fichiers WAV, au format PCM mono 16 bits à un taux d’échantillonnage de 16 KHz. .
Vous pouvez tester la création de votre propre fichier audio en utilisant la fonctionnalité de synthèse vocale de notre outil Création de contenu audio disponible avec Speech.
(Facultatif) Connectez votre Azure Cognitive Service à votre Azure Communication Service
Si vous souhaitez utiliser des fonctionnalités de conversion de texte par synthèse vocale, vous devez connecter votre Azure Cognitive Service à votre Azure Communication Service.
Mettre à jour le fichier App.java avec le code
Dans l’éditeur de votre choix, ouvrez le fichier App.java et mettez-le à jour avec le code fourni dans la section Mettre à jour le fichier App.java avec le code.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
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();
Lire un fichier audio
Une fois l’appel établi, plusieurs options s’offrent à vous pour lire l’audio. Vous pouvez lire l’audio au participant venant de rejoindre l’appel ou bien lire l’audio à tous les participants de l’appel.
Lire la source - Fichier audio
Pour lire de l’audio aux participants à l’aide de fichiers audio, vous devez vous assurer que le fichier audio est un fichier WAV, mono et 16 KHz. Pour lire des fichiers audio, vous devez vous assurer que vous fournissez à Azure Communication Services l’URI d’un fichier que vous hébergez dans un emplacement auquel Azure Communication Services peut accéder. Le type FileSource de notre Kit de développement logiciel (SDK) peut être utilisé pour spécifier les fichiers audio à lire.
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);
*/
Lire la source - Synthèse vocale
Pour lire du contenu audio à l’aide de la Synthèse vocale via les Azure AI services, vous devez fournir le texte que vous souhaitez lire, ainsi que les SourceLocale et VoiceKind ou VoiceName que vous souhaitez utiliser. Nous prenons en charge tous les noms vocaux pris en charge par les Azure AI services, la liste complète est disponible ici.
// 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);
*/
Lire la source - Synthèse vocale 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);
Modèles vocaux personnalisés
Si vous souhaitez encore améliorer vos invites et inclure des modèles vocaux personnalisés, l’action de lecture de Synthèse vocale prend désormais en charge ces voix personnalisées. Il s’agit d’une option intéressante si vous souhaitez offrir à vos clients une expérience plus locale et personnalisée ou si vous vous trouvez dans une situation où les modèles par défaut ne couvrent pas les mots et les accents que vous essayez de prononcer. Pour en savoir plus sur la création et le déploiement de modèles personnalisés, vous pouvez lire ce guide.
Exemple de texte ordinaire de noms vocaux personnalisés
// Provide VoiceName and to select a specific voice.
var playSource = new TextSource()
.setText(textToPlay)
.setCustomVoiceName("YourCustomVoiceName")
.setCustomVoiceEndpointId("YourCustomEndpointId");
Exemple SSML de noms vocaux personnalisés
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");
Une fois que vous avez choisi le playSource que vous souhaitez utiliser pour lire l’audio, vous pouvez choisir de le lire à un participant spécifique ou à tous les participants.
Lire l’audio à tous les participants
Dans ce scénario, l’audio est lu à tous les participants de l’appel.
var playOptions = new PlayToAllOptions(playSource);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
log.info("Play result: " + playResponse.getStatusCode());
Prise en charge de l’interception d’appel
Dans les scénarios où vous lisez une séquence audio en boucle à tous les participants, par exemple dans une salle d’attente, vous pouvez lire de l’audio aux participants présents dans la salle d’attente et les tenir à jour concernant leur numéro dans la file d’attente. Lorsque vous utilisez la prise en charge de l’interception d’appel, cela annule l’audio en cours et lit votre nouveau message. Ensuite, si vous voulez continuer à lire l’audio d’origine, vous devez effectuer une autre demande de lecture.
// 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);
*/
Lire l’audio à un participant spécifique
Dans ce scénario, l’audio est lu à un participant spécifique.
var playTo = Arrays.asList(targetParticipant);
var playOptions = new PlayOptions(playSource, playTo);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playWithResponse(playOptions)
.block();
Lire l’audio en boucle
Vous pouvez utiliser l’option de lecture en boucle pour lire la musique d’attente jusqu’à ce que votre application soit prête à accepter l’appelant. Vous pouvez également passer à l’étape logique suivante en fonction de la logique métier de vos applications.
var playOptions = new PlayToAllOptions(playSource)
.setLoop(true);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
Améliorer la lecture avec la mise en cache des fichiers audio
Si vous lisez le même fichier audio plusieurs fois, votre application peut fournir à Azure Communication Services le sourceID du fichier audio. Azure Communication Services met en cache ce fichier audio pendant 1 heure.
Remarque
La mise en cache des fichiers audio n’est pas adaptée aux invites dynamiques. Si vous modifiez l’URL fournie à Azure Communication Services, l’URL mise en cache ne sera pas mise à jour immédiatement. La mise à jour s’effectue après l’expiration du cache existant.
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();
Gérer les mises à jour des événements d’action de lecture
Votre application reçoit les mises à jour des événements du cycle de vie de l’action sur l’URL de rappel qui a été fournie à Call Automation au moment de répondre à l’appel. Voici un exemple de mise à jour d’événement de lecture réussie.
Exemple de désérialisation de l’événement PlayCompleted :
if (acsEvent instanceof PlayCompleted) {
PlayCompleted event = (PlayCompleted) acsEvent;
log.info("Play completed, context=" + event.getOperationContext());
}
Exemple de désérialisation de l’événement PlayStarted :
if (acsEvent instanceof PlayStarted) {
PlayStarted event = (PlayStarted) acsEvent;
log.info("Play started, context=" + event.getOperationContext());
}
Exemple de désérialisation de l’événement 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());
}
}
Pour en savoir plus sur les autres événements pris en charge, consultez le document de vue d’ensemble de l’automatisation des appels.
Annuler l’action de lecture
Annuler toutes les opérations média, toutes les opérations média en cours sont annulées. Cette action annule également d’autres actions de lecture mises en file d’attente.
var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.cancelAllMediaOperationsWithResponse()
.block();
log.info("Cancel result: " + cancelResponse.getStatusCode());
Exemple de désérialisation de l’événement PlayCanceled :
if (acsEvent instanceof PlayCanceled) {
PlayCanceled event = (PlayCanceled) acsEvent;
log.info("Play canceled, context=" + event.getOperationContext());
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Enregistrez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Installez Node.js, vous pouvez le faire à partir de leur site officiel.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Créer une application JavaScript
Créez une nouvelle application JavaScript dans votre répertoire de projet. Initialisez un nouveau projet Node.js en exécutant la commande suivante. Cela crée un fichier package.json pour votre projet, qui est utilisé pour gérer les dépendances de votre projet.
npm init -y
Installez le package d’automation des appels d’Azure Communication Services
npm install @azure/communication-call-automation
Créez un nouveau fichier JavaScript dans votre répertoire de projet, nommez-le par exemple app.js. Vous écrivez votre code JavaScript dans ce fichier. Exécutez votre application en utilisant Node.js à l’aide de la commande suivante. Ce code exécute le code JavaScript que vous avez écrit.
node app.js
(Facultatif) Préparez votre fichier audio si vous souhaitez utiliser des fichiers audio pour lire des invites
Le cas échéant, créez un fichier audio à utiliser pour lire des invites et des messages aux participants. Le fichier audio doit être hébergé dans un emplacement accessible à Azure Communication Services avec prise en charge de l’authentification. Conservez une copie de l’URL à utiliser quand vous demandez la lecture du fichier audio. Azure Communication Services prend en charge les fichiers MP3 avec ID3V2TAG et les fichiers WAV, au format PCM mono 16 bits à un taux d’échantillonnage de 16 KHz.
Vous pouvez tester la création de votre propre fichier audio en utilisant la fonctionnalité de synthèse vocale de notre outil Création de contenu audio disponible avec Speech.
(Facultatif) Connectez votre Azure Cognitive Service à votre Azure Communication Service
Si vous souhaitez utiliser des fonctionnalités de Synthèse vocale, vous devez connecter votre Azure Cognitive Service à votre Azure Communication Service.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" };
const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions);
Lire un fichier audio
Une fois l’appel établi, plusieurs options s’offrent à vous pour lire l’audio. Vous pouvez lire l’audio au participant venant de rejoindre l’appel ou bien lire l’audio à tous les participants de l’appel.
Lire la source - Fichier audio
Pour lire de l’audio aux participants à l’aide de fichiers audio, vous devez vous assurer que le fichier audio est un fichier WAV, mono et 16 KHz. Pour lire des fichiers audio, vous devez vous assurer que vous fournissez à Azure Communication Services l’URI d’un fichier que vous hébergez dans un emplacement auquel Azure Communication Services peut accéder. Le type FileSource de notre Kit de développement logiciel (SDK) peut être utilisé pour spécifier les fichiers audio à lire.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Lire la source - Synthèse vocale
Pour lire du contenu audio à l’aide de la Synthèse vocale via les Azure AI services, vous devez fournir le texte que vous souhaitez lire, ainsi que les SourceLocale et VoiceKind ou VoiceName que vous souhaitez utiliser. Nous prenons en charge tous les noms vocaux pris en charge par les Azure AI services, la liste complète est disponible ici.
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" };
Lire la source - Synthèse vocale avec SSML
Si vous souhaitez personnaliser encore plus votre sortie de Synthèse vocale avec les Azure AI services, vous pouvez utiliser Speech Synthesis Markup Language SSML lorsque vous invoquez votre action de jeu par le biais de Call Automation. Avec SSML, vous pouvez ajuster la tonalité de la voix, mettre en pause l’énonciation, améliorer la prononciation, modifier le débit de parole, ajuster le volume et attribuer plusieurs voix.
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" };
Modèles vocaux personnalisés
Si vous souhaitez encore améliorer vos invites et inclure des modèles vocaux personnalisés, l’action de lecture de Synthèse vocale prend désormais en charge ces voix personnalisées. Il s’agit d’une option intéressante si vous souhaitez offrir à vos clients une expérience plus locale et personnalisée ou si vous vous trouvez dans une situation où les modèles par défaut ne couvrent pas les mots et les accents que vous essayez de prononcer. Pour en savoir plus sur la création et le déploiement de modèles personnalisés, vous pouvez lire ce guide.
Exemple de texte ordinaire de noms vocaux personnalisés
const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}
Exemple SSML de noms vocaux personnalisés
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"};
Une fois que vous avez choisi le playSource que vous souhaitez utiliser pour lire l’audio, vous pouvez choisir de le lire à un participant spécifique ou à tous les participants.
Lire l’audio – Tous les participants
Dans ce scénario, l’audio est lu à tous les participants de l’appel.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ]);
Prise en charge de l’interception d’appel
Dans les scénarios où vous lisez une séquence audio en boucle à tous les participants, par exemple dans une salle d’attente, vous pouvez lire de l’audio aux participants présents dans la salle d’attente et les tenir à jour concernant leur numéro dans la file d’attente. Lorsque vous utilisez la prise en charge de l’interception d’appel, cela annule l’audio en cours et lit votre nouveau message. Ensuite, si vous voulez continuer à lire l’audio d’origine, vous devez effectuer une autre demande de lecture.
// 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);
*/
Lire l’audio – Participant spécifique
Dans ce scénario, l’audio est lu à un participant spécifique.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Lire l’audio en boucle
Vous pouvez utiliser l’option de lecture en boucle pour lire la musique d’attente jusqu’à ce que votre application soit prête à accepter l’appelant. Vous pouvez également passer à l’étape logique suivante en fonction de la logique métier de vos applications.
const playOptions: PlayOptions = { loop: true };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ], playOptions);
Améliorer la lecture avec la mise en cache des fichiers audio
Si vous lisez le même fichier audio plusieurs fois, votre application peut fournir à Azure Communication Services le sourceID du fichier audio. Azure Communication Services met en cache ce fichier audio pendant 1 heure.
Remarque
La mise en cache des fichiers audio n’est pas adaptée aux invites dynamiques. Si vous modifiez l’URL fournie à Azure Communication Services, l’URL mise en cache ne sera pas mise à jour immédiatement. La mise à jour s’effectue après l’expiration du cache existant.
const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Gérer les mises à jour des événements d’action de lecture
Votre application reçoit les mises à jour des événements du cycle de vie de l’action sur l’URL de rappel qui a été fournie à Call Automation au moment de répondre à l’appel.
Exemple de désérialisation de l’événement PlayCompleted :
if (event.type === "Microsoft.Communication.PlayCompleted") {
console.log("Play completed, context=%s", eventData.operationContext);
}
Exemple de désérialisation de l’événement PlayFailed :
if (event.type === "Microsoft.Communication.PlayFailed") {
console.log("Play failed: data=%s", JSON.stringify(eventData));
}
Exemple de désérialisation de l’événement PlayStarted :
if (event.type === "Microsoft.Communication.PlayStarted") {
console.log("Play started: data=%s", JSON.stringify(eventData));
}
Pour en savoir plus sur les autres événements pris en charge, consultez le document de vue d’ensemble de l’automatisation des appels.
Annuler l’action de lecture
Annuler toutes les opérations média, toutes les opérations média en cours sont annulées. Cette action annule également d’autres actions de lecture mises en file d’attente.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.cancelAllOperations();
Exemple de désérialisation de l’événement PlayCanceled :
if (event.type === "Microsoft.Communication.PlayCanceled") {
console.log("Play canceled, context=%s", eventData.operationContext);
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services. Enregistrez la chaîne de connexion de cette ressource.
- Créez une application de service web à l’aide du kit SDK d’automatisation des appels.
- Installez Python, vous pouvez le faire à partir du site officiel.
Pour les fonctionnalités d’intelligence artificielle
- Créez et connectez les Azure AI services à votre ressource Azure Communication Services.
- Créez un sous-domaine personnalisé pour votre ressource Azure AI services.
Créer une application Python
Configurez un environnement virtuel Python pour votre projet
python -m venv play-audio-app
Activer votre environnement virtuel
Dans Windows, utilisez la commande suivante :
.\ play-audio-quickstart \Scripts\activate
Dans Unix, utilisez la commande suivante :
source play-audio-quickstart /bin/activate
Installez le package d’automation des appels d’Azure Communication Services
pip install azure-communication-callautomation
Créez votre fichier d'application dans votre répertoire de projet, nommez-le par exemple app.py. Vous écrivez votre code Python dans ce fichier.
Exécutez votre application en utilisant Python avec la commande suivante pour exécuter le code.
python app.py
(Facultatif) Préparez votre fichier audio si vous souhaitez utiliser des fichiers audio pour lire des invites
Le cas échéant, créez un fichier audio à utiliser pour lire des invites et des messages aux participants. Le fichier audio doit être hébergé dans un emplacement accessible à Azure Communication Services avec prise en charge de l’authentification. Conservez une copie de l’URL à utiliser quand vous demandez la lecture du fichier audio. Azure Communication Services prend en charge les fichiers MP3 et les fichiers WAV, au format PCM mono 16 bits à un taux d’échantillonnage de 16 KHz. .
Vous pouvez tester la création de votre propre fichier audio en utilisant la fonctionnalité de synthèse vocale de notre outil Création de contenu audio disponible avec Speech.
(Facultatif) Connectez votre Azure Cognitive Service à votre Azure Communication Service
Si vous souhaitez utiliser des fonctionnalités de conversion de texte par synthèse vocale, vous devez connecter votre Azure Cognitive Service à votre Azure Communication Service.
Établir un appel
À ce stade, vous devez être familiarisé avec le démarrage des appels. Pour en savoir plus sur la procédure pour passer un appel, suivez notre guide de démarrage rapide. Vous pouvez également utiliser l’extrait de code fourni ici, pour comprendre comment répondre à un appel.
call_automation_client.answer_call(
incoming_call_context="<Incoming call context>",
callback_url="<https://sample-callback-uri>",
cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)
Lire un fichier audio
Une fois l’appel établi, plusieurs options s’offrent à vous pour lire l’audio. Vous pouvez lire l’audio au participant venant de rejoindre l’appel ou bien lire l’audio à tous les participants de l’appel.
Lire la source - Fichier audio
Pour lire de l’audio aux participants à l’aide de fichiers audio, vous devez vous assurer que le fichier audio est un fichier WAV, mono et 16 KHz. Pour lire des fichiers audio, vous devez vous assurer que vous fournissez à Azure Communication Services l’URI d’un fichier que vous hébergez dans un emplacement auquel Azure Communication Services peut accéder. Le type FileSource de notre Kit de développement logiciel (SDK) peut être utilisé pour spécifier les fichiers audio à lire.
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
# )
Lire la source - Synthèse vocale
Pour lire du contenu audio à l’aide de la Synthèse vocale via les Azure AI services, vous devez fournir le texte que vous souhaitez lire, ainsi que les SourceLocale et VoiceKind ou VoiceName que vous souhaitez utiliser. Nous prenons en charge tous les noms vocaux pris en charge par les Azure AI services, la liste complète est disponible ici.
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
#)
Lire la source - Synthèse vocale avec SSML
Si vous souhaitez personnaliser encore plus votre sortie de Synthèse vocale avec les Azure AI services, vous pouvez utiliser Speech Synthesis Markup Language SSML lorsque vous invoquez votre action de jeu par le biais de Call Automation. Avec SSML, vous pouvez ajuster la tonalité de la voix, mettre en pause l’énonciation, améliorer la prononciation, modifier le débit de parole, ajuster le volume et attribuer plusieurs voix.
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
)
Modèles vocaux personnalisés
Si vous souhaitez encore améliorer vos invites et inclure des modèles vocaux personnalisés, l’action de lecture de Synthèse vocale prend désormais en charge ces voix personnalisées. Il s’agit d’une option intéressante si vous souhaitez offrir à vos clients une expérience plus locale et personnalisée ou si vous vous trouvez dans une situation où les modèles par défaut ne couvrent pas les mots et les accents que vous essayez de prononcer. Pour en savoir plus sur la création et le déploiement de modèles personnalisés, vous pouvez lire ce guide.
Exemple de texte ordinaire de noms vocaux personnalisés
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
)
Exemple SSML de noms vocaux personnalisés
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
)
Une fois que vous avez choisi le playSource que vous souhaitez utiliser pour lire l’audio, vous pouvez choisir de le lire à un participant spécifique ou à tous les participants.
Lire l’audio – Tous les participants
Lire un fichier audio pré-enregistré à tous les participants de l’appel.
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
)
Prise en charge de l’interception d’appel
Dans les scénarios où vous lisez une séquence audio en boucle à tous les participants, par exemple dans une salle d’attente, vous pouvez lire de l’audio aux participants présents dans la salle d’attente et les tenir à jour concernant leur numéro dans la file d’attente. Lorsque vous utilisez la prise en charge de l’interception d’appel, cela annule l’audio en cours et lit votre nouveau message. Ensuite, si vous voulez continuer à lire l’audio d’origine, vous devez effectuer une autre demande de lecture.
# 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
#)
Lire l’audio – Participant spécifique
Lire un fichier audio pré-enregistré à un participant spécifique de l’appel.
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Lire l’audio en boucle
Vous pouvez utiliser l’option de lecture en boucle pour lire la musique d’attente jusqu’à ce que votre application soit prête à accepter l’appelant. Vous pouvez également passer à l’étape logique suivante en fonction de la logique métier de vos applications.
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
)
Améliorer la lecture avec la mise en cache des fichiers audio
Si vous lisez le même fichier audio plusieurs fois, votre application peut fournir à Azure Communication Services le sourceID du fichier audio. Azure Communication Services met en cache ce fichier audio pendant 1 heure.
Remarque
La mise en cache des fichiers audio n’est pas adaptée aux invites dynamiques. Si vous modifiez l’URL fournie à Azure Communication Services, l’URL mise en cache ne sera pas mise à jour immédiatement. La mise à jour s’effectue après l’expiration du cache existant.
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
)
Gérer les mises à jour des événements d’action de lecture
Votre application reçoit les mises à jour des événements du cycle de vie de l’action sur l’URL de rappel qui a été fournie à Call Automation au moment de répondre à l’appel.
Exemple de désérialisation de l’événement PlayCompleted :
if event.type == "Microsoft.Communication.PlayCompleted":
app.logger.info("Play completed, context=%s", event.data.get("operationContext"))
Exemple de désérialisation de l’événement PlayStarted :
if event.type == "Microsoft.Communication.PlayStarted":
app.logger.info("Play started, context=%s", event.data.get("operationContext"))
Exemple de désérialisation de l’événement PlayFailed :
if event.type == "Microsoft.Communication.PlayFailed":
app.logger.info("Play failed: data=%s", event.data)
Pour en savoir plus sur les autres événements pris en charge, consultez le document de vue d’ensemble de l’automatisation des appels.
Annuler l’action de lecture
Annuler toutes les opérations média, toutes les opérations média en cours sont annulées. Cette action annule également d’autres actions de lecture mises en file d’attente.
call_automation_client.get_call_connection(
call_connection_id
).cancel_all_media_operations()
Exemple de désérialisation de l’événement PlayCanceled :
if event.type == "Microsoft.Communication.PlayCanceled":
app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))
Codes d’événement
État | Code | Sous-code | Message |
---|---|---|---|
PlayCompleted | 200 | 0 | Action réalisée avec succès. |
PlayCanceled | 400 | 8508 | Échec de l’action, l’opération a été annulée. |
PlayFailed | 400 | 8535 | Échec de l’action, le format de fichier n’est pas valide. |
PlayFailed | 400 | 8536 | Échec de l’action, le fichier n’a pas pu être téléchargé. |
PlayFailed | 400 | 8565 | Échec de l’action, requête incorrecte à Azure AI services. Vérifiez les paramètres d’entrée. |
PlayFailed | 401 | 8565 | Échec de l’action, erreur d’authentification d’Azure AI services. |
PlayFailed | 403 | 8565 | Échec de l’action, requête interdite à Azure AI services, abonnement gratuit utilisé par la requête hors quota. |
PlayFailed | 429 | 8565 | Échec de l’action, les requêtes ont dépassé le nombre de requêtes simultanées autorisées pour l’abonnement à Azure AI services. |
PlayFailed | 408 | 8565 | Échec de l’action, délai de requête à Azure AI services expiré. |
PlayFailed | 500 | 9999 | Erreur interne du serveur inconnue |
PlayFailed | 500 | 8572 | Échec de l’action en raison de l’arrêt du service de lecture. |
Limitations connues
- Les invites textuelles de synthèse vocale prennent en charge un maximum de 400 caractères. Si votre invite dépasse cette limite, nous vous conseillons d’utiliser SSML pour les actions de jeu basées sur la synthèse vocale.
- Si vous dépassez votre quota de service Speech, vous pouvez demander une augmentation de ce quota en suivant les étapes décrites ici.
Nettoyer les ressources
Si vous voulez nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Apprenez-en davantage sur le nettoyage des ressources.
Étapes suivantes
- En savoir plus sur l’automatisation des appels
- En savoir plus sur la collecte d’entrées utilisateur au cours d’un appel