Partager via


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

Pour les fonctionnalités d’intelligence artificielle

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

Pour les fonctionnalités d’intelligence artificielle

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

Pour les fonctionnalités d’intelligence artificielle

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

Pour les fonctionnalités d’intelligence artificielle

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