Personalizzare le richieste vocali agli utenti con azione di riproduzione
Questa guida consente di iniziare a riprodurre file audio ai partecipanti utilizzando l'azione di riproduzione fornita tramite l’SDK di automazione delle chiamate di Servizi di comunicazione di Azure.
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Salvare la stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- La versione più recente libreria .NET per il sistema operativo.
- Ottenere la versione più recente del pacchetto NuGet.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Creare una nuova applicazione C#
Nella finestra della console del sistema operativo usare il comando dotnet
per creare una nuova applicazione Web.
dotnet new web -n MyApplication
Installare il pacchetto NuGet
Il pacchetto NuGet può essere ottenuto qui, se non è già stato fatto.
(Facoltativo) Preparare il file audio se si desidera usare i file audio per la riproduzione di richieste
Crea un file audio, se non ne hai già uno, da usare per la riproduzione di richieste e messaggi ai partecipanti. Il file audio deve essere ospitato in un percorso accessibile a Servizi di comunicazione di Azure con un supporto per l'autenticazione. Tenete a disposizione una copia dell'URL da utilizzare quando si richiede di riprodurre il file audio. Servizi di comunicazione di Azure supporta entrambi i tipi di file MP3 con ID3V2TAG e i file WAV, PCM mono a 16 bit con frequenza di campionamento a 16 KHz. .
È possibile testare la creazione di un file audio personalizzato utilizzando la sintesi vocale con lo strumento Creazione di contenuto audio.
(Facoltativo) Connettere il servizio cognitivo di Azure al servizio di comunicazione di Azure
Se si vogliono usare le funzionalità di sintesi vocale, è necessario connettere il Servizio cognitivo di Azure al servizio di comunicazione di Azure.
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio; per maggiori informazioni su come effettuare una chiamata, seguire la guida introduttiva. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
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);
Riprodurre audio
Una volta stabilita la chiamata, sono disponibili più opzioni per la modalità di riproduzione dell'audio. Puoi riprodurre audio al partecipante che ha partecipato alla chiamata o riprodurre audio a tutti i partecipanti della chiamata.
Origine riproduzione - File audio
Per riprodurre audio ai partecipanti usando file audio, è necessario assicurarsi che il file audio sia un file WAV, mono e 16 KHz. Per riprodurre file audio, è necessario assicurarsi di fornire a Servizi di comunicazione di Azure un URI a un file host in un percorso in cui Servizi di comunicazione di Azure possano accedervi. Il tipo FileSource nell'SDK può essere usato per specificare i file audio per l'azione di riproduzione.
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")) };
Origine riproduzione - Sintesi vocale
Per riprodurre un audio con la sintesi vocale tramite Servizi di Azure AI, è necessario fornire il testo che si vuole riprodurre, nonché SourceLocale e VoiceKind o il VoiceName che si desidera utilizzare. Tutti i nomi vocali supportati dai servizi di intelligenza artificiale di Azure sono supportati dall'elenco completo qui.
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 } };
Origine riproduzione - Sintesi vocale con SSML
Se si vuole personalizzare ulteriormente l'output di sintesi vocale con i servizi di intelligenza artificiale di Azure, è possibile usare il linguaggio di markup di sintesi vocale SSML quando si richiama l'azione di riproduzione tramite Automazione delle chiamate. Con SSML è possibile ottimizzare l’intonazione, mettere in pausa, migliorare la pronuncia, modificare la velocità di pronuncia, regolare il volume e attribuire più voci.
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);
Modelli vocali personalizzati
Se si vogliono migliorare le richieste e includere modelli vocali personalizzati, l'azione di riproduzione Sintesi vocale ora supporta queste voci personalizzate. Si tratta di un'ottima opzione se si sta cercando di offrire ai clienti un'esperienza più locale, personalizzata o in situazioni in cui i modelli predefiniti potrebbero non coprire le parole e gli accenti che si sta tentando di pronunciare. Per altre informazioni sulla creazione e la distribuzione di modelli personalizzati, vedere questa guida.
Esempio di testo regolare con nomi di voce personalizzata
String textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointId to select custom voice.
var playSource = new TextSource(textToPlay)
{
VoiceName = "YourCustomVoiceName",
CustomVoiceEndpointId = "YourCustomEndpointId"
};
Esempio di nomi di voce personalizzata con SSML
var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");
Dopo aver deciso quale playSource si vuole usare per la riproduzione audio, è possibile scegliere se riprodurre l'audio a un partecipante specifico o a tutti i partecipanti.
Riprodurre audio a tutti i partecipanti
In questo scenario, l'audio viene riprodotto a tutti i partecipanti alla chiamata.
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playSource);
Supporto per il barge-in
Durante gli scenari in cui si riproduce l'audio in ciclo a tutti i partecipanti, ad esempio la sala di attesa, è possibile riprodurre audio ai partecipanti nella sala di attesa e mantenerli aggiornati sul loro numero nella coda. Quando usi il supporto barge-in, l'audio in corso verrà annullato e riprodotto il nuovo messaggio. Quindi, per continuare a riprodurre l'audio originale, eseguire un'altra richiesta di riproduzione.
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);
*/
Riprodurre audio a un partecipante specifico
In questo scenario, l'audio viene riprodotto a un partecipante specifico.
var playTo = new List<CommunicationIdentifier> { targetParticipant };
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayAsync(playSource, playTo);
Riprodurre più richieste audio
Tutte le azioni di riproduzione supportano la possibilità di inviare più origini di riproduzione con una sola richiesta. Ciò significa che si invia un elenco di richieste da riprodurre in un'unica soluzione, invece di effettuare le richieste singolarmente.
Riprodurre audio in ciclo
È possibile usare l'opzione loop per riprodurre musica che viene eseguita a ciclo continuo finché l'applicazione non è pronta ad accettare il chiamante. In alternativa, passare al passaggio logico successivo in base alla logica di business delle applicazioni.
var playOptions = new PlayToAllOptions(playSource)
{
Loop = true
};
var playResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playOptions);
Migliorare la riproduzione con la memorizzazione nella cache dei file audio
Se si riproduce lo stesso file audio più volte, l'applicazione può fornire a Servizi di comunicazione di Azure il SourceID per il file audio. Servizi di comunicazione di Azure memorizza nella cache questo file audio per 1 ora.
Nota
La memorizzazione nella cache dei file audio non è adatta alle richieste dinamiche. Se si modifica l'URL fornito in Servizi di comunicazione di Azure, l'URL memorizzato nella cache non viene aggiornato immediatamente. L'aggiornamento verrà eseguito dopo la scadenza della cache esistente.
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);
Gestire gli aggiornamenti degli eventi di azione di riproduzione
L'applicazione riceve gli aggiornamenti degli eventi del ciclo di vita delle azioni sull'URL di callback fornito al servizio di Automazione delle chiamate al momento della risposta alla chiamata. Esempio di aggiornamento dell'evento di riproduzione riuscito.
Esempio di come è possibile deserializzare l'evento PlayCompleted:
if (acsEvent is PlayCompleted playCompleted)
{
logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext);
}
Esempio di come è possibile deserializzare l'evento PlayStarted:
if (acsEvent is PlayStarted playStarted)
{
logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext);
}
Esempio di come è possibile deserializzare l'evento PlayFailed:
if (acsEvent is PlayFailed playFailed)
{
if (MediaEventReasonCode.PlayDownloadFailed.Equals(playFailed.ReasonCode))
{
logger.LogInformation("Play failed: download failed, context={context}", playFailed.OperationContext);
}
else if (MediaEventReasonCode.PlayInvalidFileFormat.Equals(playFailed.ReasonCode))
{
logger.LogInformation("Play failed: invalid file format, context={context}", playFailed.OperationContext);
}
else
{
logger.LogInformation("Play failed, result={result}, context={context}", playFailed.ResultInformation?.Message, playFailed.OperationContext);
}
}
Per altre informazioni sugli altri eventi supportati, visitare il Documento di panoramica di Automazione delle chiamate.
Annulla azione di riproduzione
Annullare tutte le operazioni multimediali, tutte le operazioni multimediali in sospeso vengono annullate. Questa azione annulla anche altre azioni di riproduzione in coda.
var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.CancelAllMediaOperationsAsync();
Esempio di come è possibile deserializzare l'evento PlayCanceled:
if (acsEvent is PlayCanceled playCanceled)
{
logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext);
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Java Development Kit versione 8 o successiva.
- Apache Maven.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Creare una nuova applicazione Java
Nella finestra del terminale o di comando, passare alla directory in cui creare l'applicazione Java. Eseguire il comando illustrato di seguito per generare il progetto Java dal modello maven-archetype-quickstart.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Il comando precedente crea una directory con lo stesso nome dell'argomento artifactId
. In questa directory, la directory src/main/java
contiene il codice sorgente del progetto, la directory src/test/java
contiene l'origine di test.
Notare che il passaggio 'generate' ha creato una directory con lo stesso nome dell’artifactId. In questa directory, la directory src/main/java
contiene codice sorgente, la directory src/test/java
contiene test e il file pom.xml
è il modello a oggetti del progetto o POM.
Aggiornare il file POM dell'applicazione per usare Java 8 o versione successiva.
<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>
Aggiungere riferimenti ai pacchetti
Nel file POM aggiungere il riferimento seguente per il progetto.
azure-communication-callautomation
Il pacchetto SDK di automazione delle chiamate di Servizi di comunicazione di Azure viene recuperato dal feed di sviluppo di Azure SDK.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Facoltativo) Preparare il file audio se si desidera usare i file audio per la riproduzione di richieste
Crea un file audio, se non ne hai già uno, da usare per la riproduzione di richieste e messaggi ai partecipanti. Il file audio deve essere ospitato in un percorso accessibile a Servizi di comunicazione di Azure con un supporto per l'autenticazione. Tenete a disposizione una copia dell'URL da utilizzare quando si richiede di riprodurre il file audio. Servizi di comunicazione di Azure supporta entrambi i tipi di file MP3 con ID3V2TAG e i file WAV, PCM mono a 16 bit con frequenza di campionamento a 16 KHz. .
È possibile testare la creazione di un file audio personalizzato utilizzando la sintesi vocale con lo strumento Creazione di contenuto audio.
(Facoltativo) Connettere il servizio cognitivo di Azure al servizio di comunicazione di Azure
Se si vogliono usare le funzionalità di sintesi vocale, è necessario connettere il Servizio cognitivo di Azure al servizio di comunicazione di Azure.
Aggiorna App.java con il codice
Nell'editor preferito aprire App.java file e aggiornarlo con il codice fornito nella sezione Aggiorna app.java con il codice.
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio; per maggiori informazioni su come effettuare una chiamata, seguire la guida introduttiva. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
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();
Riprodurre audio
Una volta stabilita la chiamata, sono disponibili più opzioni per la modalità di riproduzione dell'audio. Puoi riprodurre audio al partecipante che ha partecipato alla chiamata o riprodurre audio a tutti i partecipanti della chiamata.
Origine riproduzione - File audio
Per riprodurre audio ai partecipanti usando file audio, è necessario assicurarsi che il file audio sia un file WAV, mono e 16 KHz. Per riprodurre file audio, è necessario assicurarsi di fornire a Servizi di comunicazione di Azure un URI a un file host in un percorso in cui Servizi di comunicazione di Azure possano accedervi. Il tipo FileSource nell'SDK può essere usato per specificare i file audio per l'azione di riproduzione.
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);
*/
Origine riproduzione - Sintesi vocale
Per riprodurre un audio con la sintesi vocale tramite Servizi di Azure AI, è necessario fornire il testo che si vuole riprodurre, nonché SourceLocale e VoiceKind o il VoiceName che si desidera utilizzare. Tutti i nomi vocali supportati dai servizi di intelligenza artificiale di Azure sono supportati dall'elenco completo qui.
// 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);
*/
Origine riproduzione - Sintesi vocale di 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);
Modelli vocali personalizzati
Se si vogliono migliorare le richieste e includere modelli vocali personalizzati, l'azione di riproduzione Sintesi vocale ora supporta queste voci personalizzate. Si tratta di un'ottima opzione se si sta cercando di offrire ai clienti un'esperienza più locale, personalizzata o in situazioni in cui i modelli predefiniti potrebbero non coprire le parole e gli accenti che si sta tentando di pronunciare. Per altre informazioni sulla creazione e la distribuzione di modelli personalizzati, vedere questa guida.
Esempio di testo regolare con nomi di voce personalizzata
// Provide VoiceName and to select a specific voice.
var playSource = new TextSource()
.setText(textToPlay)
.setCustomVoiceName("YourCustomVoiceName")
.setCustomVoiceEndpointId("YourCustomEndpointId");
Esempio di nomi di voce personalizzata con SSML
String ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"YourCustomVoiceName\">Hello World!</voice></speak>";
var playSource = new SsmlSource()
.setSsmlText(ssmlToPlay)
.setCustomVoiceEndpointId("YourCustomEndpointId");
Dopo aver deciso quale playSource si vuole usare per la riproduzione audio, è possibile scegliere se riprodurre l'audio a un partecipante specifico o a tutti i partecipanti.
Riprodurre audio a tutti i partecipanti
In questo scenario, l'audio viene riprodotto a tutti i partecipanti alla chiamata.
var playOptions = new PlayToAllOptions(playSource);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
log.info("Play result: " + playResponse.getStatusCode());
Supporto per il barge-in
Durante gli scenari in cui si riproduce l'audio in ciclo a tutti i partecipanti, ad esempio la sala di attesa, è possibile riprodurre audio ai partecipanti nella sala di attesa e mantenerli aggiornati sul loro numero nella coda. Quando usi il supporto barge-in, l'audio in corso verrà annullato e riprodotto il nuovo messaggio. Quindi, per continuare a riprodurre l'audio originale, eseguire un'altra richiesta di riproduzione.
// 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);
*/
Riprodurre audio a un partecipante specifico
In questo scenario, l'audio viene riprodotto a un partecipante specifico.
var playTo = Arrays.asList(targetParticipant);
var playOptions = new PlayOptions(playSource, playTo);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playWithResponse(playOptions)
.block();
Riprodurre audio in ciclo
È possibile usare l'opzione loop per riprodurre musica che viene eseguita a ciclo continuo finché l'applicazione non è pronta ad accettare il chiamante. In alternativa, passare al passaggio logico successivo in base alla logica di business delle applicazioni.
var playOptions = new PlayToAllOptions(playSource)
.setLoop(true);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
Migliorare la riproduzione con la memorizzazione nella cache dei file audio
Se si riproduce lo stesso file audio più volte, l'applicazione può fornire a Servizi di comunicazione di Azure il SourceID per il file audio. Servizi di comunicazione di Azure memorizza nella cache questo file audio per 1 ora.
Nota
La memorizzazione nella cache dei file audio non è adatta alle richieste dinamiche. Se si modifica l'URL fornito in Servizi di comunicazione di Azure, l'URL memorizzato nella cache non viene aggiornato immediatamente. L'aggiornamento verrà eseguito dopo la scadenza della cache esistente.
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();
Gestire gli aggiornamenti degli eventi di azione di riproduzione
L'applicazione riceve gli aggiornamenti degli eventi del ciclo di vita delle azioni sull'URL di callback fornito al servizio di Automazione delle chiamate al momento della risposta alla chiamata. Esempio di aggiornamento dell'evento di riproduzione riuscito.
Esempio di come è possibile deserializzare l'evento PlayCompleted:
if (acsEvent instanceof PlayCompleted) {
PlayCompleted event = (PlayCompleted) acsEvent;
log.info("Play completed, context=" + event.getOperationContext());
}
Esempio di come è possibile deserializzare l'evento PlayStarted:
if (acsEvent instanceof PlayStarted) {
PlayStarted event = (PlayStarted) acsEvent;
log.info("Play started, context=" + event.getOperationContext());
}
Esempio di come è possibile deserializzare l'evento PlayFailed:
if (acsEvent instanceof PlayFailed) {
PlayFailed event = (PlayFailed) acsEvent;
if (ReasonCode.Play.DOWNLOAD_FAILED.equals(event.getReasonCode())) {
log.info("Play failed: download failed, context=" + event.getOperationContext());
} else if (ReasonCode.Play.INVALID_FILE_FORMAT.equals(event.getReasonCode())) {
log.info("Play failed: invalid file format, context=" + event.getOperationContext());
} else {
log.info("Play failed, result=" + event.getResultInformation().getMessage() + ", context=" + event.getOperationContext());
}
}
Per altre informazioni sugli altri eventi supportati, visitare il Documento di panoramica di Automazione delle chiamate.
Annulla azione di riproduzione
Annullare tutte le operazioni multimediali, tutte le operazioni multimediali in sospeso vengono annullate. Questa azione annulla anche altre azioni di riproduzione in coda.
var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.cancelAllMediaOperationsWithResponse()
.block();
log.info("Cancel result: " + cancelResponse.getStatusCode());
Esempio di come è possibile deserializzare l'evento PlayCanceled:
if (acsEvent instanceof PlayCanceled) {
PlayCanceled event = (PlayCanceled) acsEvent;
log.info("Play canceled, context=" + event.getOperationContext());
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Salvare la stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Una volta installato Node.js, è possibile installarlo dal sito Web ufficiale.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Creare una nuova applicazione JavaScript
Creare una nuova applicazione JavaScript nella directory del progetto. Inizializzare un nuovo progetto Node.js con il comando seguente. Verrà creato un file package.json per il progetto, che viene usato per gestire le dipendenze del progetto.
npm init -y
Installare il pacchetto di Automazione delle chiamate di Servizi di comunicazione di Azure
npm install @azure/communication-call-automation
Creare un nuovo file JavaScript nella directory del progetto, ad esempio denominandolo app.js. Scrivere il codice JavaScript in questo file. Eseguire l'applicazione usando Node.js con il comando seguente. Questo codice esegue il codice JavaScript scritto.
node app.js
(Facoltativo) Preparare il file audio se si desidera usare i file audio per la riproduzione di richieste
Crea un file audio, se non ne hai già uno, da usare per la riproduzione di richieste e messaggi ai partecipanti. Il file audio deve essere ospitato in un percorso accessibile a Servizi di comunicazione di Azure con un supporto per l'autenticazione. Tenete a disposizione una copia dell'URL da utilizzare quando si richiede di riprodurre il file audio. Servizi di comunicazione di Azure supporta entrambi i tipi di file MP3 con ID3V2TAG e i file WAV, PCM mono a 16 bit con frequenza di campionamento a 16 KHz.
È possibile testare la creazione di un file audio personalizzato utilizzando la sintesi vocale con lo strumento Creazione di contenuto audio.
(Facoltativo) Connettere il servizio cognitivo di Azure al servizio di comunicazione di Azure
Se si vogliono usare le funzionalità di sintesi vocale, è necessario connettere il Servizio cognitivo di Azure al servizio di comunicazione di Azure.
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio; per maggiori informazioni su come effettuare una chiamata, seguire la guida introduttiva. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" };
const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions);
Riprodurre audio
Una volta stabilita la chiamata, sono disponibili più opzioni per la modalità di riproduzione dell'audio. Puoi riprodurre audio al partecipante che ha partecipato alla chiamata o riprodurre audio a tutti i partecipanti della chiamata.
Origine riproduzione - File audio
Per riprodurre audio ai partecipanti usando file audio, è necessario assicurarsi che il file audio sia un file WAV, mono e 16 KHz. Per riprodurre file audio, è necessario assicurarsi di fornire a Servizi di comunicazione di Azure un URI a un file host in un percorso in cui Servizi di comunicazione di Azure possano accedervi. Il tipo FileSource nell'SDK può essere usato per specificare i file audio per l'azione di riproduzione.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Origine riproduzione - Sintesi vocale
Per riprodurre un audio con la sintesi vocale tramite Servizi di Azure AI, è necessario fornire il testo che si vuole riprodurre, nonché SourceLocale e VoiceKind o il VoiceName che si desidera utilizzare. Tutti i nomi vocali supportati dai servizi di intelligenza artificiale di Azure sono supportati dall'elenco completo qui.
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" };
Origine riproduzione - Sintesi vocale con SSML
Se si vuole personalizzare ulteriormente l'output di sintesi vocale con i servizi di intelligenza artificiale di Azure, è possibile usare il linguaggio di markup di sintesi vocale SSML quando si richiama l'azione di riproduzione tramite Automazione delle chiamate. Con SSML è possibile ottimizzare l’intonazione, mettere in pausa, migliorare la pronuncia, modificare la velocità di pronuncia, regolare il volume e attribuire più voci.
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" };
Modelli vocali personalizzati
Se si vogliono migliorare le richieste e includere modelli vocali personalizzati, l'azione di riproduzione Sintesi vocale ora supporta queste voci personalizzate. Si tratta di un'ottima opzione se si sta cercando di offrire ai clienti un'esperienza più locale, personalizzata o in situazioni in cui i modelli predefiniti potrebbero non coprire le parole e gli accenti che si sta tentando di pronunciare. Per altre informazioni sulla creazione e la distribuzione di modelli personalizzati, vedere questa guida.
Esempio di testo regolare con nomi di voce personalizzata
const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}
Esempio di nomi di voce personalizzata con SSML
const ssmlToPlay = "<speak version=\"1.0\" xmlns=\"http://www.w3.org/2001/10/synthesis\" xml:lang=\"en-US\"><voice name=\"YourCustomVoiceName\">Hello World!</voice></speak>";
const playSource: SsmlSource = { ssmlText: ssmlToPlay, kind: "ssmlSource", customVoiceEndpointId: "YourCustomEndpointId"};
Dopo aver deciso quale playSource si vuole usare per la riproduzione audio, è possibile scegliere se riprodurre l'audio a un partecipante specifico o a tutti i partecipanti.
Riprodurre audio - Tutti i partecipanti
In questo scenario, l'audio viene riprodotto a tutti i partecipanti alla chiamata.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ]);
Supporto per il barge-in
Durante gli scenari in cui si riproduce l'audio in ciclo a tutti i partecipanti, ad esempio la sala di attesa, è possibile riprodurre audio ai partecipanti nella sala di attesa e mantenerli aggiornati sul loro numero nella coda. Quando usi il supporto barge-in, l'audio in corso verrà annullato e riprodotto il nuovo messaggio. Quindi, per continuare a riprodurre l'audio originale, eseguire un'altra richiesta di riproduzione.
// 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);
*/
Riprodurre audio - Partecipante specifico
In questo scenario, l'audio viene riprodotto a un partecipante specifico.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Riprodurre audio in ciclo
È possibile usare l'opzione loop per riprodurre musica che viene eseguita a ciclo continuo finché l'applicazione non è pronta ad accettare il chiamante. In alternativa, passare al passaggio logico successivo in base alla logica di business delle applicazioni.
const playOptions: PlayOptions = { loop: true };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ], playOptions);
Migliorare la riproduzione con la memorizzazione nella cache dei file audio
Se si riproduce lo stesso file audio più volte, l'applicazione può fornire a Servizi di comunicazione di Azure il SourceID per il file audio. Servizi di comunicazione di Azure memorizza nella cache questo file audio per 1 ora.
Nota
La memorizzazione nella cache dei file audio non è adatta alle richieste dinamiche. Se si modifica l'URL fornito in Servizi di comunicazione di Azure, l'URL memorizzato nella cache non viene aggiornato immediatamente. L'aggiornamento verrà eseguito dopo la scadenza della cache esistente.
const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Gestire gli aggiornamenti degli eventi di azione di riproduzione
L'applicazione riceve gli aggiornamenti degli eventi del ciclo di vita delle azioni sull'URL di callback fornito al servizio di Automazione delle chiamate al momento della risposta alla chiamata.
Esempio di come è possibile deserializzare l'evento PlayCompleted:
if (event.type === "Microsoft.Communication.PlayCompleted") {
console.log("Play completed, context=%s", eventData.operationContext);
}
Esempio di come è possibile deserializzare l'evento PlayFailed:
if (event.type === "Microsoft.Communication.PlayFailed") {
console.log("Play failed: data=%s", JSON.stringify(eventData));
}
Esempio di come è possibile deserializzare l'evento PlayStarted:
if (event.type === "Microsoft.Communication.PlayStarted") {
console.log("Play started: data=%s", JSON.stringify(eventData));
}
Per altre informazioni sugli altri eventi supportati, visitare il Documento di panoramica di Automazione delle chiamate.
Annulla azione di riproduzione
Annullare tutte le operazioni multimediali, tutte le operazioni multimediali in sospeso vengono annullate. Questa azione annulla anche altre azioni di riproduzione in coda.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.cancelAllOperations();
Esempio di come è possibile deserializzare l'evento PlayCanceled:
if (event.type === "Microsoft.Communication.PlayCanceled") {
console.log("Play canceled, context=%s", eventData.operationContext);
}
Prerequisiti
- Un account Azure con una sottoscrizione attiva, per informazioni dettagliate, vedere Creare un account gratuitamente.
- Risorsa di Servizi di comunicazione di Azure. Vedere Creare una risorsa di Servizi di comunicazione di Azure. Salvare la stringa di connessione per questa risorsa.
- Creare una nuova applicazione di servizio Web usando SDK di automazione delle chiamate.
- Una volta installato Python, è possibile eseguire l'installazione dal sito ufficiale.
Per le funzionalità di intelligenza artificiale
- Creare e connettere Servizi di Azure AI alla risorsa Servizi di comunicazione di Azure.
- Creare un sottodominio personalizzato per la risorsa dei Servizi di Azure AI.
Creare una nuova applicazione Python
Configurare un ambiente virtuale Python per il progetto
python -m venv play-audio-app
Attivare l'ambiente virtuale
In Windows usare il comando seguente:
.\ play-audio-quickstart \Scripts\activate
Utilizzare il comando seguente su Unix:
source play-audio-quickstart /bin/activate
Installare il pacchetto di Automazione delle chiamate di Servizi di comunicazione di Azure
pip install azure-communication-callautomation
Creare il file dell’applicazione nella directory del progetto, ad esempio denominandolo app.py. Scrivere il codice Python in questo file.
Eseguire l'applicazione usando Python con il comando seguente per eseguire il codice.
python app.py
(Facoltativo) Preparare il file audio se si desidera usare i file audio per la riproduzione di richieste
Crea un file audio, se non ne hai già uno, da usare per la riproduzione di richieste e messaggi ai partecipanti. Il file audio deve essere ospitato in un percorso accessibile a Servizi di comunicazione di Azure con un supporto per l'autenticazione. Tenete a disposizione una copia dell'URL da utilizzare quando si richiede di riprodurre il file audio. Servizi di comunicazione di Azure supporta entrambi i tipi di file MP3 e i file WAV, PCM mono a 16 bit con frequenza di campionamento a 16 KHz. .
È possibile testare la creazione di un file audio personalizzato utilizzando la sintesi vocale con lo strumento Creazione di contenuto audio.
(Facoltativo) Connettere il servizio cognitivo di Azure al servizio di comunicazione di Azure
Se si vogliono usare le funzionalità di sintesi vocale, è necessario connettere il Servizio cognitivo di Azure al servizio di comunicazione di Azure.
Stabilire una chiamata
A questo punto è necessario avere familiarità con le chiamate di avvio; per maggiori informazioni su come effettuare una chiamata, seguire la guida introduttiva. È anche possibile usare il frammento di codice fornito qui per comprendere come rispondere a una chiamata.
call_automation_client.answer_call(
incoming_call_context="<Incoming call context>",
callback_url="<https://sample-callback-uri>",
cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)
Riprodurre audio
Una volta stabilita la chiamata, sono disponibili più opzioni per la modalità di riproduzione dell'audio. Puoi riprodurre audio al partecipante che ha partecipato alla chiamata o riprodurre audio a tutti i partecipanti della chiamata.
Origine riproduzione - File audio
Per riprodurre audio ai partecipanti usando file audio, è necessario assicurarsi che il file audio sia un file WAV, mono e 16 KHz. Per riprodurre file audio, è necessario assicurarsi di fornire a Servizi di comunicazione di Azure un URI a un file host in un percorso in cui Servizi di comunicazione di Azure possano accedervi. Il tipo FileSource nell'SDK può essere usato per specificare i file audio per l'azione di riproduzione.
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
# )
Origine riproduzione - Sintesi vocale
Per riprodurre un audio con la sintesi vocale tramite Servizi di Azure AI, è necessario fornire il testo che si vuole riprodurre, nonché SourceLocale e VoiceKind o il VoiceName che si desidera utilizzare. Tutti i nomi vocali supportati dai servizi di intelligenza artificiale di Azure sono supportati dall'elenco completo qui.
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
#)
Origine riproduzione - Sintesi vocale con SSML
Se si vuole personalizzare ulteriormente l'output di sintesi vocale con i servizi di intelligenza artificiale di Azure, è possibile usare il linguaggio di markup di sintesi vocale SSML quando si richiama l'azione di riproduzione tramite Automazione delle chiamate. Con SSML è possibile ottimizzare l’intonazione, mettere in pausa, migliorare la pronuncia, modificare la velocità di pronuncia, regolare il volume e attribuire più voci.
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
)
Modelli vocali personalizzati
Se si vogliono migliorare le richieste e includere modelli vocali personalizzati, l'azione di riproduzione Sintesi vocale ora supporta queste voci personalizzate. Si tratta di un'ottima opzione se si sta cercando di offrire ai clienti un'esperienza più locale, personalizzata o in situazioni in cui i modelli predefiniti potrebbero non coprire le parole e gli accenti che si sta tentando di pronunciare. Per altre informazioni sulla creazione e la distribuzione di modelli personalizzati, vedere questa guida.
Esempio di testo regolare con nomi di voce personalizzata
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
)
Esempio di nomi di voce personalizzata con SSML
ssmlToPlay = '<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><voice name="YourCustomVoiceName">Hello World!</voice></speak>'
play_source = SsmlSource(ssml_text=ssmlToPlay, custom_voice_endpoint_id="YourCustomEndpointId")
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Dopo aver deciso quale playSource si vuole usare per la riproduzione audio, è possibile scegliere se riprodurre l'audio a un partecipante specifico o a tutti i partecipanti.
Riprodurre audio - Tutti i partecipanti
Riprodurre un file audio preregistrato a tutti i partecipanti alla chiamata.
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
)
Supporto per il barge-in
Durante gli scenari in cui si riproduce l'audio in ciclo a tutti i partecipanti, ad esempio la sala di attesa, è possibile riprodurre audio ai partecipanti nella sala di attesa e mantenerli aggiornati sul loro numero nella coda. Quando usi il supporto barge-in, l'audio in corso verrà annullato e riprodotto il nuovo messaggio. Quindi, per continuare a riprodurre l'audio originale, eseguire un'altra richiesta di riproduzione.
# 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
#)
Riprodurre audio - Partecipante specifico
Riprodurre un file audio preregistrato a un partecipante specifico della chiamata.
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Riprodurre audio in ciclo
È possibile usare l'opzione loop per riprodurre musica che viene eseguita a ciclo continuo finché l'applicazione non è pronta ad accettare il chiamante. In alternativa, passare al passaggio logico successivo in base alla logica di business delle applicazioni.
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
)
Migliorare la riproduzione con la memorizzazione nella cache dei file audio
Se si riproduce lo stesso file audio più volte, l'applicazione può fornire a Servizi di comunicazione di Azure il SourceID per il file audio. Servizi di comunicazione di Azure memorizza nella cache questo file audio per 1 ora.
Nota
La memorizzazione nella cache dei file audio non è adatta alle richieste dinamiche. Se si modifica l'URL fornito in Servizi di comunicazione di Azure, l'URL memorizzato nella cache non viene aggiornato immediatamente. L'aggiornamento verrà eseguito dopo la scadenza della cache esistente.
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
)
Gestire gli aggiornamenti degli eventi di azione di riproduzione
L'applicazione riceve gli aggiornamenti degli eventi del ciclo di vita delle azioni sull'URL di callback fornito al servizio di Automazione delle chiamate al momento della risposta alla chiamata.
Esempio di come è possibile deserializzare l'evento PlayCompleted:
if event.type == "Microsoft.Communication.PlayCompleted":
app.logger.info("Play completed, context=%s", event.data.get("operationContext"))
Esempio di come è possibile deserializzare l'evento PlayStarted:
if event.type == "Microsoft.Communication.PlayStarted":
app.logger.info("Play started, context=%s", event.data.get("operationContext"))
Esempio di come è possibile deserializzare l'evento PlayFailed:
if event.type == "Microsoft.Communication.PlayFailed":
app.logger.info("Play failed: data=%s", event.data)
Per altre informazioni sugli altri eventi supportati, visitare il Documento di panoramica di Automazione delle chiamate.
Annulla azione di riproduzione
Annullare tutte le operazioni multimediali, tutte le operazioni multimediali in sospeso vengono annullate. Questa azione annulla anche altre azioni di riproduzione in coda.
call_automation_client.get_call_connection(
call_connection_id
).cancel_all_media_operations()
Esempio di come è possibile deserializzare l'evento PlayCanceled:
if event.type == "Microsoft.Communication.PlayCanceled":
app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))
Codici evento
Status | Codice | Sottocodice | Message |
---|---|---|---|
PlayCompleted | 200 | 0 | Azione completata correttamente. |
PlayCanceled | 400 | 8508 | Azione non riuscita. L'operazione è stata annullata. |
PlayFailed | 400 | 8535 | Azione non riuscita. Formato file non valido. |
PlayFailed | 400 | 8536 | Azione non riuscita. Impossibile scaricare il file. |
PlayFailed | 400 | 8565 | Azione non riuscita. Richiesta non valida ai servizi di intelligenza artificiale di Azure. Controllare i parametri di input. |
PlayFailed | 401 | 8565 | Azione non riuscita. Errore di autenticazione dei servizi di intelligenza artificiale di Azure. |
PlayFailed | 403 | 8565 | Azione non riuscita, richiesta non consentita ai servizi di intelligenza artificiale di Azure, sottoscrizione gratuita usata dalla richiesta esaurita della quota. |
PlayFailed | 429 | 8565 | Azione non riuscita, le richieste hanno superato il numero di richieste simultanee consentite per la sottoscrizione dei servizi di intelligenza artificiale di Azure. |
PlayFailed | 408 | 8565 | Azione non riuscita e timeout della richiesta ai servizi di intelligenza artificiale di Azure. |
PlayFailed | 500 | 9999 | Errore interno sconosciuto del server |
PlayFailed | 500 | 8572 | Azione non riuscita a causa dell'arresto del servizio di riproduzione. |
Limitazioni note
- Le richieste di testo di sintesi vocale supportano un massimo di 400 caratteri, se la richiesta è più lunga di questa, è consigliabile usare SSML per le azioni di riproduzione basate su sintesi vocale.
- Per gli scenari in cui si supera il limite di quota del servizio di riconoscimento vocale, è possibile richiedere di aumentare di tale quota seguendo i passaggi descritti qui.
Pulire le risorse
Se si vuole pulire e rimuovere una sottoscrizione a Servizi di comunicazione, è possibile eliminare la risorsa o il gruppo di risorse. L'eliminazione del gruppo di risorse comporta anche l'eliminazione di tutte le altre risorse associate. Altre informazioni sulla pulizia delle risorse.
Passaggi successivi
- Altre informazioni su Automazione delle chiamate
- Altre informazioni sulla Raccolta dell'input utente in una chiamata