Anpassen von sprachbasierten Eingabeaufforderungen für Benutzer mit der Wiedergabeaktion
Dieser Leitfaden enthält hilfreiche Informationen zu den ersten Schritten beim Wiedergeben von Audiodateien für Teilnehmer. Dazu verwenden Sie die Wiedergabeaktion, die über das Azure Communication Services Call Automation SDK bereitgestellt wird.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource. Speichern Sie die Verbindungszeichenfolge für diese Ressource.
- Erstellen einer neuen Webdienstanwendung mithilfe des Call Automation SDK
- Die aktuelle .NET-Bibliothek für Ihr Betriebssystem
- Rufen Sie das neueste NuGet-Paket ab.
Für KI-Features
- Erstellen Sie eine Azure KI Services-Instanz für Ihre Azure Communication Services-Ressource, und stellen Sie eine Verbindung mit ihr her.
- Erstellen Sie eine benutzerdefinierte Subdomäne für Ihre Azure KI Services-Ressource.
Erstellen einer neuen C#-Anwendung
Verwenden Sie im Konsolenfenster Ihres Betriebssystems den Befehl dotnet
, um eine neue Webanwendung zu erstellen.
dotnet new web -n MyApplication
Installieren des NuGet-Pakets
Das NuGet-Paket kann hier abgerufen werden, sofern noch nicht geschehen.
(Optional) Vorbereiten der Audiodatei, wenn Sie Audiodateien für die Wiedergabe von Prompts verwenden möchten
Erstellen Sie eine Audiodatei, wenn Sie noch keine haben, um Eingabeaufforderungen und Nachrichten für Teilnehmer wiederzugeben. Die Audiodatei muss an einem Speicherort gehostet werden, der für Azure Communication Services zugänglich ist und Authentifizierung unterstützt. Behalten Sie eine Kopie der URL, die Sie beim Anfordern der Wiedergabe der Audiodatei verwenden können. Azure Communication Services unterstützt die Dateitypen MP3 mit ID3V2TAG und WAV, Mono, 16-Bit-PCM mit 16 KHz Abtastrate. .
Sie können die Erstellung Ihrer eigenen Audiodatei testen, indem Sie unsere Sprachsynthese mit dem Audioinhaltserstellungs-Tool verwenden.
(Optional) Verknüpfen von Azure Cognitive Services mit Azure Communication Services
Wenn Sie Sprachsynthesefunktionen verwenden möchten, müssen Sie Azure Cognitive Services mit Azure Communication Services verknüpfen.
Einrichten eines Anrufs
An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Wenn Sie weitere Informationen zum Tätigen eines Anrufs benötigen, befolgen Sie unseren Schnellstart. Sie können auch das folgende Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.
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);
Audiowiedergabe
Nachdem der Anruf eingerichtet wurde, gibt es mehrere Optionen für die Wiedergabe der Audiodatei. Sie können Audio für den Teilnehmer, der dem Anruf gerade beigetreten ist, oder für alle Teilnehmer des Anrufs wiedergeben.
Wiedergabequelle – Audiodatei
Um Audio mithilfe von Audiodateien für Teilnehmer wiederzugeben, müssen Sie sicherstellen, dass es sich bei der Audiodatei um eine WAV-Datei (Mono) mit 16 KHz handelt. Um Audiodateien wiederzugeben, müssen Sie sicherstellen, dass Sie Azure Communication Services mit einem URI für eine Datei bereitstellen, die Sie an einem Ort hosten, an dem Azure Communication Services darauf zugreifen kann. Der FileSource-Typ in unserem SDK kann verwendet werden, um Audiodateien für die Wiedergabeaktion anzugeben.
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")) };
Wiedergabequelle – Sprachsynthese
Um Audio mit Sprachsynthese über Azure KI Services wiederzugeben, müssen Sie den Text bereitstellen, den Sie wiedergeben möchten, sowie entweder die „SourceLocale“ und „VoiceKind“ oder „VoiceName“, die Sie verwenden möchten. Wir unterstützen alle Stimmnamen, die von Azure KI Services unterstützt werden. Die vollständige Liste finden Sie hier.
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 } };
Wiedergabequelle – Sprachsynthese mit SSML
Wenn Sie Ihre Sprachsyntheseausgabe mit Azure KI Services weiter anpassen möchten, können Sie Speech Synthesis Markup Language SSML- verwenden, wenn Sie Ihre Wiedergabeaktion über die Anrufautomatisierung aufrufen. Mit SSML können Sie die Tonhöhe, Pausen und die Aussprache verbessern, die Sprechgeschwindigkeit ändern, die Lautstärke anpassen und mehrere Stimmen attributieren.
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);
Benutzerdefinierte Stimmmodelle
Wenn Sie Ihre Prompts weiter verbessern und benutzerdefinierte Stimmmodelle einbeziehen möchten, unterstützt die Wiedergabeaktion „Sprachsynthese“ jetzt diese benutzerdefinierten Stimmen. Diese sind gut geeignet, wenn Sie versuchen, Kunden eine lokale, personalisierte Erfahrung zu bieten, oder in Situationen, in denen die Standardmodelle möglicherweise nicht die Wörter und Akzente abdecken, die ausgesprochen werden sollen. Weitere Informationen zum Erstellen und Bereitstellen von benutzerdefinierten Modellen finden Sie in diesem Leitfaden.
Reguläres Textbeispiel für benutzerdefinierte Stimmnamen
String textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointId to select custom voice.
var playSource = new TextSource(textToPlay)
{
VoiceName = "YourCustomVoiceName",
CustomVoiceEndpointId = "YourCustomEndpointId"
};
SSML-Beispiel für benutzerdefinierte Stimmnamen
var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");
Nachdem Sie entschieden haben, welche Wiedergabequelle Sie für die Audiowiedergabe verwenden möchten, können Sie auswählen, ob Sie sie für einen bestimmten Teilnehmer oder allen Teilnehmer wiedergeben möchten.
Wiedergeben von Audio für alle Teilnehmer
In diesem Szenario wird Audio für alle Teilnehmer im Anruf wiedergegeben.
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playSource);
Barge-in-Unterstützung
In Szenarien, in denen Sie Audio in einer Schleife für alle Teilnehmenden abspielen, z. B. in einer Wartehalle, können Sie Audio für die Personen in der Wartehalle abspielen und sie über ihre Nummer in der Warteschlange auf dem Laufenden halten. Wenn Sie die Barge-in-Unterstützung verwenden, wird die laufende Audiowiedergabe abgebrochen und die neue Nachricht wiedergegeben. Wenn Sie dann ihre originale Audiowiedergabe fortsetzen möchten, müssen Sie eine weitere Wiedergabeanforderung stellen.
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);
*/
Wiedergeben von Audio für einen bestimmten Teilnehmer
In diesem Szenario wird Audio für einen bestimmten Teilnehmer wiedergegeben.
var playTo = new List<CommunicationIdentifier> { targetParticipant };
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayAsync(playSource, playTo);
Wiedergeben mehrerer Audioaufforderungen
Die Wiedergabeaktionen unterstützen alle die Möglichkeit, mehrere Wiedergabequellen mit nur einer Anforderung zu senden. Das bedeutet, dass Sie eine Liste von Aufforderungen zum Abspielen in einem Durchgang senden, anstatt diese Aufforderungen einzeln zu stellen.
Wiedergeben von Audio als Schleife
Sie können die Option für die Wiedergabeschleife verwenden, um Warteschleifenmusik wiederzugeben, die so lange läuft, bis Ihre Anwendung bereit ist, den Anruf anzunehmen. Oder leiten Sie den Anrufer auf der Grundlage der Geschäftslogik Ihrer Anwendung zum nächsten logischen Schritt weiter.
var playOptions = new PlayToAllOptions(playSource)
{
Loop = true
};
var playResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playOptions);
Verbessern der Wiedergabe mit der Zwischenspeicherung von Audiodateien
Wenn Sie dieselbe Audiodatei mehrmals wiedergeben, kann Ihre Anwendung die Quell-ID der Audiodatei für Azure Communication Services bereitstellen. Azure Communication Services speichert diese Audiodatei eine Stunde lang zwischen.
Hinweis
Das Zwischenspeichern von Audiodateien eignet sich nicht für dynamische Prompts. Wenn Sie die für Azure Communication Services bereitgestellte URL ändern, wird die zwischengespeicherte URL nicht sofort aktualisiert. Das Update erfolgt, nachdem der vorhandene Cache abgelaufen ist.
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);
Behandeln von Ereignisupdates für die Wiedergabeaktion
Ihre Anwendung erhält Ereignisupdates für den Aktionslebenszyklus unter der Rückruf-URL, die zum Zeitpunkt der Anrufannahme für den Anrufautomatisierungsdienst bereitgestellt wurde. Nachfolgend sehen Sie ein Beispiel für ein erfolgreiches Wiedergabeereignisupdate:
Beispiel zur Deserialisierung des PlayCompleted-Ereignisses:
if (acsEvent is PlayCompleted playCompleted)
{
logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext);
}
Beispiel zur Deserialisierung des PlayStarted-Ereignisses:
if (acsEvent is PlayStarted playStarted)
{
logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext);
}
Beispiel zur Deserialisierung des PlayFailed-Ereignisses:
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);
}
}
Weitere Informationen zu anderen unterstützten Ereignissen finden Sie im Übersichtsdokument zur Anrufautomatisierung.
Abbrechen der Wiedergabeaktion
Wenn Sie alle Medienvorgänge abbrechen, werden alle ausstehenden Medienvorgänge abgebrochen. Mit dieser Aktion werden auch andere Wiedergabeaktionen in der Warteschlange abgebrochen.
var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.CancelAllMediaOperationsAsync();
Beispiel zur Deserialisierung des PlayCanceled-Ereignisses:
if (acsEvent is PlayCanceled playCanceled)
{
logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext);
}
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource.
- Erstellen einer neuen Webdienstanwendung mithilfe des Call Automation SDK
- Java Development Kit, Version 8 oder höher
- Apache Maven.
Für KI-Features
- Erstellen Sie eine Azure KI Services-Instanz für Ihre Azure Communication Services-Ressource, und stellen Sie eine Verbindung mit ihr her.
- Erstellen Sie eine benutzerdefinierte Subdomäne für Ihre Azure KI Services-Ressource.
Erstellen einer neuen Java-Anwendung
Navigieren Sie in Ihrem Terminal- oder Befehlsfenster zu dem Verzeichnis, in dem Sie Ihre Java-Anwendung erstellen möchten. Führen Sie den hier gezeigten Befehl aus, um das Java-Projekt aus der Vorlage „maven-archetype-quickstart“ zu generieren.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Der vorherige Befehl erstellt ein Verzeichnis mit demselben Namen wie das artifactId
-Argument. In diesem Verzeichnis enthält das Verzeichnis src/main/java
den Projektquellcode, und das Verzeichnis src/test/java
enthält die Testquelle.
Sie sehen, dass über den Schritt „generate“ ein Verzeichnis mit dem gleichen Namen wie für „artifactId“ erstellt wurde. In diesem Verzeichnis enthält der Ordner src/main/java
den Quellcode, src/test/java
enthält die Tests, und die Datei pom.xml
repräsentiert das Projektobjektmodell (POM).
Aktualisieren Sie die POM-Datei Ihrer Anwendung für die Verwendung von Java 8 oder höher:
<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>
Hinzufügen von Paketverweisen
Fügen Sie in Ihrer POM-Datei den folgenden Verweis für das Projekt hinzu:
azure-communication-callautomation
Das Paket für das Call Automation SDK für Azure Communication Services wird aus dem Azure SDK-Entwicklungsfeed abgerufen.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Optional) Vorbereiten der Audiodatei, wenn Sie Audiodateien für die Wiedergabe von Prompts verwenden möchten
Erstellen Sie eine Audiodatei, wenn Sie noch keine haben, um Eingabeaufforderungen und Nachrichten für Teilnehmer wiederzugeben. Die Audiodatei muss an einem Speicherort gehostet werden, der für Azure Communication Services zugänglich ist und Authentifizierung unterstützt. Behalten Sie eine Kopie der URL, die Sie beim Anfordern der Wiedergabe der Audiodatei verwenden können. Azure Communication Services unterstützt die Dateitypen MP3 mit ID3V2TAG und WAV, Mono, 16-Bit-PCM mit 16 KHz Abtastrate. .
Sie können die Erstellung Ihrer eigenen Audiodatei testen, indem Sie unsere Sprachsynthese mit dem Audioinhaltserstellungs-Tool verwenden.
(Optional) Verknüpfen von Azure Cognitive Services mit Azure Communication Services
Wenn Sie Sprachsynthesefunktionen verwenden möchten, müssen Sie Azure Cognitive Services mit Azure Communication Services verknüpfen.
Aktualisieren von App.java mit Code
Öffnen Sie in dem Editor Ihrer Wahl die Datei „App.java“, und aktualisieren Sie sie mit dem Code aus dem Abschnitt Aktualisieren von App.java mit Code.
Einrichten eines Anrufs
An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Wenn Sie weitere Informationen zum Tätigen eines Anrufs benötigen, befolgen Sie unseren Schnellstart. Sie können auch das folgende Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.
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();
Audiowiedergabe
Nachdem der Anruf eingerichtet wurde, gibt es mehrere Optionen für die Wiedergabe der Audiodatei. Sie können Audio für den Teilnehmer, der dem Anruf gerade beigetreten ist, oder für alle Teilnehmer des Anrufs wiedergeben.
Wiedergabequelle – Audiodatei
Um Audio mithilfe von Audiodateien für Teilnehmer wiederzugeben, müssen Sie sicherstellen, dass es sich bei der Audiodatei um eine WAV-Datei (Mono) mit 16 KHz handelt. Um Audiodateien wiederzugeben, müssen Sie sicherstellen, dass Sie Azure Communication Services mit einem URI für eine Datei bereitstellen, die Sie an einem Ort hosten, an dem Azure Communication Services darauf zugreifen kann. Der FileSource-Typ in unserem SDK kann verwendet werden, um Audiodateien für die Wiedergabeaktion anzugeben.
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);
*/
Wiedergabequelle – Sprachsynthese
Um Audio mit Sprachsynthese über Azure KI Services wiederzugeben, müssen Sie den Text bereitstellen, den Sie wiedergeben möchten, sowie entweder die „SourceLocale“ und „VoiceKind“ oder „VoiceName“, die Sie verwenden möchten. Wir unterstützen alle Stimmnamen, die von Azure KI Services unterstützt werden. Die vollständige Liste finden Sie hier.
// 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);
*/
Wiedergabequelle – Sprachsynthese mit 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);
Benutzerdefinierte Stimmmodelle
Wenn Sie Ihre Prompts weiter verbessern und benutzerdefinierte Stimmmodelle einbeziehen möchten, unterstützt die Wiedergabeaktion „Sprachsynthese“ jetzt diese benutzerdefinierten Stimmen. Diese sind gut geeignet, wenn Sie versuchen, Kunden eine lokale, personalisierte Erfahrung zu bieten, oder in Situationen, in denen die Standardmodelle möglicherweise nicht die Wörter und Akzente abdecken, die ausgesprochen werden sollen. Weitere Informationen zum Erstellen und Bereitstellen von benutzerdefinierten Modellen finden Sie in diesem Leitfaden.
Reguläres Textbeispiel für benutzerdefinierte Stimmnamen
// Provide VoiceName and to select a specific voice.
var playSource = new TextSource()
.setText(textToPlay)
.setCustomVoiceName("YourCustomVoiceName")
.setCustomVoiceEndpointId("YourCustomEndpointId");
SSML-Beispiel für benutzerdefinierte Stimmnamen
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");
Nachdem Sie entschieden haben, welche Wiedergabequelle Sie für die Audiowiedergabe verwenden möchten, können Sie auswählen, ob Sie sie für einen bestimmten Teilnehmer oder allen Teilnehmer wiedergeben möchten.
Wiedergeben von Audio für alle Teilnehmer
In diesem Szenario wird Audio für alle Teilnehmer im Anruf wiedergegeben.
var playOptions = new PlayToAllOptions(playSource);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
log.info("Play result: " + playResponse.getStatusCode());
Barge-in-Unterstützung
In Szenarien, in denen Sie Audio in einer Schleife für alle Teilnehmenden abspielen, z. B. in einer Wartehalle, können Sie Audio für die Personen in der Wartehalle abspielen und sie über ihre Nummer in der Warteschlange auf dem Laufenden halten. Wenn Sie die Barge-in-Unterstützung verwenden, wird die laufende Audiowiedergabe abgebrochen und die neue Nachricht wiedergegeben. Wenn Sie dann ihre originale Audiowiedergabe fortsetzen möchten, müssen Sie eine weitere Wiedergabeanforderung stellen.
// 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);
*/
Wiedergeben von Audio für einen bestimmten Teilnehmer
In diesem Szenario wird Audio für einen bestimmten Teilnehmer wiedergegeben.
var playTo = Arrays.asList(targetParticipant);
var playOptions = new PlayOptions(playSource, playTo);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playWithResponse(playOptions)
.block();
Wiedergeben von Audio als Schleife
Sie können die Option für die Wiedergabeschleife verwenden, um Warteschleifenmusik wiederzugeben, die so lange läuft, bis Ihre Anwendung bereit ist, den Anruf anzunehmen. Oder leiten Sie den Anrufer auf der Grundlage der Geschäftslogik Ihrer Anwendung zum nächsten logischen Schritt weiter.
var playOptions = new PlayToAllOptions(playSource)
.setLoop(true);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
Verbessern der Wiedergabe mit der Zwischenspeicherung von Audiodateien
Wenn Sie dieselbe Audiodatei mehrmals wiedergeben, kann Ihre Anwendung die Quell-ID der Audiodatei für Azure Communication Services bereitstellen. Azure Communication Services speichert diese Audiodatei eine Stunde lang zwischen.
Hinweis
Das Zwischenspeichern von Audiodateien eignet sich nicht für dynamische Prompts. Wenn Sie die für Azure Communication Services bereitgestellte URL ändern, wird die zwischengespeicherte URL nicht sofort aktualisiert. Das Update erfolgt, nachdem der vorhandene Cache abgelaufen ist.
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();
Behandeln von Ereignisupdates für die Wiedergabeaktion
Ihre Anwendung erhält Ereignisupdates für den Aktionslebenszyklus unter der Rückruf-URL, die zum Zeitpunkt der Anrufannahme für den Anrufautomatisierungsdienst bereitgestellt wurde. Nachfolgend sehen Sie ein Beispiel für ein erfolgreiches Wiedergabeereignisupdate:
Beispiel zur Deserialisierung des PlayCompleted-Ereignisses:
if (acsEvent instanceof PlayCompleted) {
PlayCompleted event = (PlayCompleted) acsEvent;
log.info("Play completed, context=" + event.getOperationContext());
}
Beispiel zur Deserialisierung des PlayStarted-Ereignisses:
if (acsEvent instanceof PlayStarted) {
PlayStarted event = (PlayStarted) acsEvent;
log.info("Play started, context=" + event.getOperationContext());
}
Beispiel zur Deserialisierung des PlayFailed-Ereignisses:
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());
}
}
Weitere Informationen zu anderen unterstützten Ereignissen finden Sie im Übersichtsdokument zur Anrufautomatisierung.
Abbrechen der Wiedergabeaktion
Wenn Sie alle Medienvorgänge abbrechen, werden alle ausstehenden Medienvorgänge abgebrochen. Mit dieser Aktion werden auch andere Wiedergabeaktionen in der Warteschlange abgebrochen.
var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.cancelAllMediaOperationsWithResponse()
.block();
log.info("Cancel result: " + cancelResponse.getStatusCode());
Beispiel zur Deserialisierung des PlayCanceled-Ereignisses:
if (acsEvent instanceof PlayCanceled) {
PlayCanceled event = (PlayCanceled) acsEvent;
log.info("Play canceled, context=" + event.getOperationContext());
}
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource. Speichern Sie die Verbindungszeichenfolge für diese Ressource.
- Erstellen einer neuen Webdienstanwendung mithilfe des Call Automation SDK
- Installieren Sie Node.js über die offizielle Website.
Für KI-Features
- Erstellen Sie eine Azure KI Services-Instanz für Ihre Azure Communication Services-Ressource, und stellen Sie eine Verbindung mit ihr her.
- Erstellen Sie eine benutzerdefinierte Subdomäne für Ihre Azure KI Services-Ressource.
Erstellen einer neuen JavaScript-Anwendung
Erstellen Sie eine neue JavaScript-Anwendung in Ihrem Projektverzeichnis. Initialisieren Sie mit dem folgenden Befehl ein Node.js-Projekt. Damit wird eine Datei „package.json“ für Ihr Projekt erstellt, die zum Verwalten der Abhängigkeiten Ihres Projekts verwendet wird.
npm init -y
Installieren des Anrufautomatisierungspakets für Azure Communication Services
npm install @azure/communication-call-automation
Erstellen Sie eine neue JavaScript-Datei in Ihrem Projektverzeichnis, und nennen Sie sie z. B. „app.js“. Sie schreiben Ihren JavaScript-Code in dieser Datei. Führen Sie Ihre Anwendung mit dem folgenden Node.js-Befehl aus. Dieser Code führt den JavaScript-Code aus, den Sie geschrieben haben.
node app.js
(Optional) Vorbereiten der Audiodatei, wenn Sie Audiodateien für die Wiedergabe von Prompts verwenden möchten
Erstellen Sie eine Audiodatei, wenn Sie noch keine haben, um Eingabeaufforderungen und Nachrichten für Teilnehmer wiederzugeben. Die Audiodatei muss an einem Speicherort gehostet werden, der für Azure Communication Services zugänglich ist und Authentifizierung unterstützt. Behalten Sie eine Kopie der URL, die Sie beim Anfordern der Wiedergabe der Audiodatei verwenden können. Azure Communication Services unterstützt die Dateitypen MP3 mit ID3V2TAG und WAV, Mono, 16-Bit-PCM mit 16 KHz Abtastrate.
Sie können die Erstellung Ihrer eigenen Audiodatei testen, indem Sie unsere Sprachsynthese mit dem Audioinhaltserstellungs-Tool verwenden.
(Optional) Verknüpfen von Azure Cognitive Services mit Azure Communication Services
Wenn Sie Sprachsynthesefunktionen verwenden möchten, müssen Sie Azure Cognitive Services mit Azure Communication Services verknüpfen.
Einrichten eines Anrufs
An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Wenn Sie weitere Informationen zum Tätigen eines Anrufs benötigen, befolgen Sie unseren Schnellstart. Sie können auch das folgende Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.
const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" };
const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions);
Audiowiedergabe
Nachdem der Anruf eingerichtet wurde, gibt es mehrere Optionen für die Wiedergabe der Audiodatei. Sie können Audio für den Teilnehmer, der dem Anruf gerade beigetreten ist, oder für alle Teilnehmer des Anrufs wiedergeben.
Wiedergabequelle – Audiodatei
Um Audio mithilfe von Audiodateien für Teilnehmer wiederzugeben, müssen Sie sicherstellen, dass es sich bei der Audiodatei um eine WAV-Datei (Mono) mit 16 KHz handelt. Um Audiodateien wiederzugeben, müssen Sie sicherstellen, dass Sie Azure Communication Services mit einem URI für eine Datei bereitstellen, die Sie an einem Ort hosten, an dem Azure Communication Services darauf zugreifen kann. Der FileSource-Typ in unserem SDK kann verwendet werden, um Audiodateien für die Wiedergabeaktion anzugeben.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Wiedergabequelle – Sprachsynthese
Um Audio mit Sprachsynthese über Azure KI Services wiederzugeben, müssen Sie den Text bereitstellen, den Sie wiedergeben möchten, sowie entweder die „SourceLocale“ und „VoiceKind“ oder „VoiceName“, die Sie verwenden möchten. Wir unterstützen alle Stimmnamen, die von Azure KI Services unterstützt werden. Die vollständige Liste finden Sie hier.
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" };
Wiedergabequelle – Sprachsynthese mit SSML
Wenn Sie Ihre Sprachsyntheseausgabe mit Azure KI Services weiter anpassen möchten, können Sie Speech Synthesis Markup Language SSML- verwenden, wenn Sie Ihre Wiedergabeaktion über die Anrufautomatisierung aufrufen. Mit SSML können Sie die Tonhöhe, Pausen und die Aussprache verbessern, die Sprechgeschwindigkeit ändern, die Lautstärke anpassen und mehrere Stimmen attributieren.
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" };
Benutzerdefinierte Stimmmodelle
Wenn Sie Ihre Prompts weiter verbessern und benutzerdefinierte Stimmmodelle einbeziehen möchten, unterstützt die Wiedergabeaktion „Sprachsynthese“ jetzt diese benutzerdefinierten Stimmen. Diese sind gut geeignet, wenn Sie versuchen, Kunden eine lokale, personalisierte Erfahrung zu bieten, oder in Situationen, in denen die Standardmodelle möglicherweise nicht die Wörter und Akzente abdecken, die ausgesprochen werden sollen. Weitere Informationen zum Erstellen und Bereitstellen von benutzerdefinierten Modellen finden Sie in diesem Leitfaden.
Reguläres Textbeispiel für benutzerdefinierte Stimmnamen
const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}
SSML-Beispiel für benutzerdefinierte Stimmnamen
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"};
Nachdem Sie entschieden haben, welche Wiedergabequelle Sie für die Audiowiedergabe verwenden möchten, können Sie auswählen, ob Sie sie für einen bestimmten Teilnehmer oder allen Teilnehmer wiedergeben möchten.
Wiedergeben von Audio: alle Teilnehmer
In diesem Szenario wird Audio für alle Teilnehmer im Anruf wiedergegeben.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ]);
Barge-in-Unterstützung
In Szenarien, in denen Sie Audio in einer Schleife für alle Teilnehmenden abspielen, z. B. in einer Wartehalle, können Sie Audio für die Personen in der Wartehalle abspielen und sie über ihre Nummer in der Warteschlange auf dem Laufenden halten. Wenn Sie die Barge-in-Unterstützung verwenden, wird die laufende Audiowiedergabe abgebrochen und die neue Nachricht wiedergegeben. Wenn Sie dann ihre originale Audiowiedergabe fortsetzen möchten, müssen Sie eine weitere Wiedergabeanforderung stellen.
// 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);
*/
Wiedergeben von Audio: bestimmter Teilnehmer
In diesem Szenario wird Audio für einen bestimmten Teilnehmer wiedergegeben.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Wiedergeben von Audio als Schleife
Sie können die Option für die Wiedergabeschleife verwenden, um Warteschleifenmusik wiederzugeben, die so lange läuft, bis Ihre Anwendung bereit ist, den Anruf anzunehmen. Oder leiten Sie den Anrufer auf der Grundlage der Geschäftslogik Ihrer Anwendung zum nächsten logischen Schritt weiter.
const playOptions: PlayOptions = { loop: true };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ], playOptions);
Verbessern der Wiedergabe mit der Zwischenspeicherung von Audiodateien
Wenn Sie dieselbe Audiodatei mehrmals wiedergeben, kann Ihre Anwendung die Quell-ID der Audiodatei für Azure Communication Services bereitstellen. Azure Communication Services speichert diese Audiodatei eine Stunde lang zwischen.
Hinweis
Das Zwischenspeichern von Audiodateien eignet sich nicht für dynamische Prompts. Wenn Sie die für Azure Communication Services bereitgestellte URL ändern, wird die zwischengespeicherte URL nicht sofort aktualisiert. Das Update erfolgt, nachdem der vorhandene Cache abgelaufen ist.
const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Behandeln von Ereignisupdates für die Wiedergabeaktion
Ihre Anwendung erhält Ereignisupdates für den Aktionslebenszyklus unter der Rückruf-URL, die zum Zeitpunkt der Anrufannahme für den Anrufautomatisierungsdienst bereitgestellt wurde.
Beispiel zur Deserialisierung des PlayCompleted-Ereignisses:
if (event.type === "Microsoft.Communication.PlayCompleted") {
console.log("Play completed, context=%s", eventData.operationContext);
}
Beispiel zur Deserialisierung des PlayFailed-Ereignisses:
if (event.type === "Microsoft.Communication.PlayFailed") {
console.log("Play failed: data=%s", JSON.stringify(eventData));
}
Beispiel zur Deserialisierung des PlayStarted-Ereignisses:
if (event.type === "Microsoft.Communication.PlayStarted") {
console.log("Play started: data=%s", JSON.stringify(eventData));
}
Weitere Informationen zu anderen unterstützten Ereignissen finden Sie im Übersichtsdokument zur Anrufautomatisierung.
Abbrechen der Wiedergabeaktion
Wenn Sie alle Medienvorgänge abbrechen, werden alle ausstehenden Medienvorgänge abgebrochen. Mit dieser Aktion werden auch andere Wiedergabeaktionen in der Warteschlange abgebrochen.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.cancelAllOperations();
Beispiel zur Deserialisierung des PlayCanceled-Ereignisses:
if (event.type === "Microsoft.Communication.PlayCanceled") {
console.log("Play canceled, context=%s", eventData.operationContext);
}
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource. Speichern Sie die Verbindungszeichenfolge für diese Ressource.
- Erstellen einer neuen Webdienstanwendung mithilfe des Call Automation SDK
- Installieren Sie Python über die offizielle Website.
Für KI-Features
- Erstellen Sie eine Azure KI Services-Instanz für Ihre Azure Communication Services-Ressource, und stellen Sie eine Verbindung mit ihr her.
- Erstellen Sie eine benutzerdefinierte Subdomäne für Ihre Azure KI Services-Ressource.
Erstellen einer neuen Python-Anwendung
Einrichten einer virtuellen Python-Umgebung für Ihr Projekt
python -m venv play-audio-app
Aktivieren der virtuellen Umgebung
Verwenden Sie unter Windows den folgenden Befehl:
.\ play-audio-quickstart \Scripts\activate
Verwenden Sie unter Unix den folgenden Befehl:
source play-audio-quickstart /bin/activate
Installieren des Anrufautomatisierungspakets für Azure Communication Services
pip install azure-communication-callautomation
Erstellen Sie Ihre Anwendungsdatei in Ihrem Projektverzeichnis, und nennen Sie sie z. B. „app.py“. Sie schreiben Ihren Python-Code in dieser Datei.
Führen Sie Ihre Anwendung mit dem folgenden Python-Befehl aus, um Code auszuführen.
python app.py
(Optional) Vorbereiten der Audiodatei, wenn Sie Audiodateien für die Wiedergabe von Prompts verwenden möchten
Erstellen Sie eine Audiodatei, wenn Sie noch keine haben, um Eingabeaufforderungen und Nachrichten für Teilnehmer wiederzugeben. Die Audiodatei muss an einem Speicherort gehostet werden, der für Azure Communication Services zugänglich ist und Authentifizierung unterstützt. Behalten Sie eine Kopie der URL, die Sie beim Anfordern der Wiedergabe der Audiodatei verwenden können. Azure Communication Services unterstützt die Dateitypen MP3 und WAV, Mono, 16-Bit-PCM mit 16 KHz Abtastrate. .
Sie können die Erstellung Ihrer eigenen Audiodatei testen, indem Sie unsere Sprachsynthese mit dem Audioinhaltserstellungs-Tool verwenden.
(Optional) Verknüpfen von Azure Cognitive Services mit Azure Communication Services
Wenn Sie Sprachsynthesefunktionen verwenden möchten, müssen Sie Azure Cognitive Services mit Azure Communication Services verknüpfen.
Einrichten eines Anrufs
An diesem Punkt sollten Sie mit dem Starten von Anrufen vertraut sein. Wenn Sie weitere Informationen zum Tätigen eines Anrufs benötigen, befolgen Sie unseren Schnellstart. Sie können auch das folgende Codeschnipsel verwenden, um zu verstehen, wie auf einen Anruf reagiert wird.
call_automation_client.answer_call(
incoming_call_context="<Incoming call context>",
callback_url="<https://sample-callback-uri>",
cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)
Audiowiedergabe
Nachdem der Anruf eingerichtet wurde, gibt es mehrere Optionen für die Wiedergabe der Audiodatei. Sie können Audio für den Teilnehmer, der dem Anruf gerade beigetreten ist, oder für alle Teilnehmer des Anrufs wiedergeben.
Wiedergabequelle – Audiodatei
Um Audio mithilfe von Audiodateien für Teilnehmer wiederzugeben, müssen Sie sicherstellen, dass es sich bei der Audiodatei um eine WAV-Datei (Mono) mit 16 KHz handelt. Um Audiodateien wiederzugeben, müssen Sie sicherstellen, dass Sie Azure Communication Services mit einem URI für eine Datei bereitstellen, die Sie an einem Ort hosten, an dem Azure Communication Services darauf zugreifen kann. Der FileSource-Typ in unserem SDK kann verwendet werden, um Audiodateien für die Wiedergabeaktion anzugeben.
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
# )
Wiedergabequelle – Sprachsynthese
Um Audio mit Sprachsynthese über Azure KI Services wiederzugeben, müssen Sie den Text bereitstellen, den Sie wiedergeben möchten, sowie entweder die „SourceLocale“ und „VoiceKind“ oder „VoiceName“, die Sie verwenden möchten. Wir unterstützen alle Stimmnamen, die von Azure KI Services unterstützt werden. Die vollständige Liste finden Sie hier.
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
#)
Wiedergabequelle – Sprachsynthese mit SSML
Wenn Sie Ihre Sprachsyntheseausgabe mit Azure KI Services weiter anpassen möchten, können Sie Speech Synthesis Markup Language SSML- verwenden, wenn Sie Ihre Wiedergabeaktion über die Anrufautomatisierung aufrufen. Mit SSML können Sie die Tonhöhe, Pausen und die Aussprache verbessern, die Sprechgeschwindigkeit ändern, die Lautstärke anpassen und mehrere Stimmen attributieren.
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
)
Benutzerdefinierte Stimmmodelle
Wenn Sie Ihre Prompts weiter verbessern und benutzerdefinierte Stimmmodelle einbeziehen möchten, unterstützt die Wiedergabeaktion „Sprachsynthese“ jetzt diese benutzerdefinierten Stimmen. Diese sind gut geeignet, wenn Sie versuchen, Kunden eine lokale, personalisierte Erfahrung zu bieten, oder in Situationen, in denen die Standardmodelle möglicherweise nicht die Wörter und Akzente abdecken, die ausgesprochen werden sollen. Weitere Informationen zum Erstellen und Bereitstellen von benutzerdefinierten Modellen finden Sie in diesem Leitfaden.
Reguläres Textbeispiel für benutzerdefinierte Stimmnamen
text_to_play = "Welcome to Contoso"
# Provide VoiceName to select a specific voice.
play_source = TextSource(text=text_to_play, voice_name="YourCustomVoiceName", custom_voice_endpoint_id = "YourCustomEndpointId")
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
SSML-Beispiel für benutzerdefinierte Stimmnamen
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
)
Nachdem Sie entschieden haben, welche Wiedergabequelle Sie für die Audiowiedergabe verwenden möchten, können Sie auswählen, ob Sie sie für einen bestimmten Teilnehmer oder allen Teilnehmer wiedergeben möchten.
Wiedergeben von Audio: alle Teilnehmer
So geben Sie eine vorab aufgezeichneten Audiodatei für alle Anrufteilnehmer wieder:
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
)
Barge-in-Unterstützung
In Szenarien, in denen Sie Audio in einer Schleife für alle Teilnehmenden abspielen, z. B. in einer Wartehalle, können Sie Audio für die Personen in der Wartehalle abspielen und sie über ihre Nummer in der Warteschlange auf dem Laufenden halten. Wenn Sie die Barge-in-Unterstützung verwenden, wird die laufende Audiowiedergabe abgebrochen und die neue Nachricht wiedergegeben. Wenn Sie dann ihre originale Audiowiedergabe fortsetzen möchten, müssen Sie eine weitere Wiedergabeanforderung stellen.
# 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
#)
Wiedergeben von Audio: bestimmter Teilnehmer
So geben Sie eine vorab aufgezeichneten Audiodatei für bestimmte Anrufteilnehmer wieder:
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Wiedergeben von Audio als Schleife
Sie können die Option für die Wiedergabeschleife verwenden, um Warteschleifenmusik wiederzugeben, die so lange läuft, bis Ihre Anwendung bereit ist, den Anruf anzunehmen. Oder leiten Sie den Anrufer auf der Grundlage der Geschäftslogik Ihrer Anwendung zum nächsten logischen Schritt weiter.
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
)
Verbessern der Wiedergabe mit der Zwischenspeicherung von Audiodateien
Wenn Sie dieselbe Audiodatei mehrmals wiedergeben, kann Ihre Anwendung die Quell-ID der Audiodatei für Azure Communication Services bereitstellen. Azure Communication Services speichert diese Audiodatei eine Stunde lang zwischen.
Hinweis
Das Zwischenspeichern von Audiodateien eignet sich nicht für dynamische Prompts. Wenn Sie die für Azure Communication Services bereitgestellte URL ändern, wird die zwischengespeicherte URL nicht sofort aktualisiert. Das Update erfolgt, nachdem der vorhandene Cache abgelaufen ist.
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
)
Behandeln von Ereignisupdates für die Wiedergabeaktion
Ihre Anwendung erhält Ereignisupdates für den Aktionslebenszyklus unter der Rückruf-URL, die zum Zeitpunkt der Anrufannahme für den Anrufautomatisierungsdienst bereitgestellt wurde.
Beispiel zur Deserialisierung des PlayCompleted-Ereignisses:
if event.type == "Microsoft.Communication.PlayCompleted":
app.logger.info("Play completed, context=%s", event.data.get("operationContext"))
Beispiel zur Deserialisierung des PlayStarted-Ereignisses:
if event.type == "Microsoft.Communication.PlayStarted":
app.logger.info("Play started, context=%s", event.data.get("operationContext"))
Beispiel zur Deserialisierung des PlayFailed-Ereignisses:
if event.type == "Microsoft.Communication.PlayFailed":
app.logger.info("Play failed: data=%s", event.data)
Weitere Informationen zu anderen unterstützten Ereignissen finden Sie im Übersichtsdokument zur Anrufautomatisierung.
Abbrechen der Wiedergabeaktion
Wenn Sie alle Medienvorgänge abbrechen, werden alle ausstehenden Medienvorgänge abgebrochen. Mit dieser Aktion werden auch andere Wiedergabeaktionen in der Warteschlange abgebrochen.
call_automation_client.get_call_connection(
call_connection_id
).cancel_all_media_operations()
Beispiel zur Deserialisierung des PlayCanceled-Ereignisses:
if event.type == "Microsoft.Communication.PlayCanceled":
app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))
Ereigniscodes
Status | Code | Subcode | `Message` |
---|---|---|---|
PlayCompleted | 200 | 0 | Die Aktion wurde erfolgreich abgeschlossen. |
PlayCanceled | 400 | 8508 | Fehler bei der Aktion, der Vorgang wurde abgebrochen. |
PlayFailed | 400 | 8535 | Fehler bei der Aktion, Dateiformat ist ungültig |
PlayFailed | 400 | 8536 | Fehler bei der Aktion, Datei konnte nicht heruntergeladen werden |
PlayFailed | 400 | 8565 | Fehler bei der Aktion, ungültige Anforderung an Azure KI Services. Eingabeparameter prüfen. |
PlayFailed | 401 | 8565 | Fehler bei der Aktion, Azure KI Services-Authentifizierungsfehler |
PlayFailed | 403 | 8565 | Fehler bei der Aktion; unzulässige Anforderung an Azure KI Services, kein Kontingent mehr beim für die Anforderung verwendeten kostenlosen Abonnement |
PlayFailed | 429 | 8565 | Fehler bei der Aktion, Anzahl der zulässigen gleichzeitigen Anforderungen für das Azure KI Services-Abonnement überschritten |
PlayFailed | 408 | 8565 | Fehler bei der Aktion, Timeout bei der Anforderung an Azure KI Services |
PlayFailed | 500 | 9999 | Unbekannter interner Serverfehler |
PlayFailed | 500 | 8572 | Fehler bei der Aktion, Wiedergabedienst heruntergefahren |
Bekannte Einschränkungen
- In Textprompts für die Sprachsynthese werden maximal 400 Zeichen unterstützen. Wenn Ihr Prompt länger ist, wird die Verwendung von SSML für Sprachsynthese-Wiedergabeaktionen empfohlen.
- Sie können für Szenarios, in denen Sie Ihre Kontingentgrenze für den Speech-Dienst überschreiten, eine Erhöhung dieses Grenzwerts anfordern, indem Sie die hier beschriebenen Schritte befolgen.
Bereinigen von Ressourcen
Wenn Sie ein Communication Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind. Weitere Informationen zum Bereinigen von Ressourcen finden Sie hier.
Nächste Schritte
- Informieren Sie sich ausführlicher über die Anrufautomatisierung.
- Informieren Sie sich ausführlicher über das Sammeln von Benutzereingaben in einem Anruf.