Hangüzenetek testreszabása a felhasználók számára a Play művelettel
Ez az útmutató segítséget nyújt a hangfájlok lejátszásának megkezdésében a résztvevők számára az Azure Communication Services Call Automation SDK-ján keresztül biztosított lejátszási művelet használatával.
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál .
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Mentse az erőforráshoz tartozó kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- Az operációs rendszer legújabb .NET-kódtára .
- Szerezze be a legújabb NuGet-csomagot.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Új C#-alkalmazás létrehozása
Az operációs rendszer konzolablakában a dotnet
paranccsal hozzon létre egy új webalkalmazást.
dotnet new web -n MyApplication
A NuGet-csomag telepítése
A NuGet-csomag innen beszerezhető, ha még nem tette meg.
(Nem kötelező) Készítse elő a hangfájlt, ha hangfájlokat szeretne használni a lejátszási kérésekhez
Hozzon létre egy hangfájlt, ha még nem rendelkezik ilyen fájllal, amelyet a résztvevőknek küldött üzenetekkel és üzenetekkel játszhat le. A hangfájlt olyan helyen kell tárolni, amely a hitelesítés támogatásával elérhető az Azure Communication Services számára. Őrizze meg a hangfájl lejátszásának igénylésekor használni kívánt URL-cím másolatát. Az Azure Communication Services támogatja az MP3-fájlok mindkét fájltípusát ID3V2TAG - és WAV-fájlokkal, mono 16 bites PCM 16 KHz-es mintasebességgel. .
Saját hangfájl létrehozását tesztelheti a Beszédszintézis segítségével a Hangtartalom létrehozása eszközzel.
(Nem kötelező) Az Azure Cognitive Service csatlakoztatása az Azure Communication Service-hez
Ha szövegfelolvasási képességeket szeretne használni, akkor az Azure Cognitive Service-t az Azure Communication Service-hez kell csatlakoztatnia.
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását, ha többet szeretne megtudni a hívás indításáról, kövesse a rövid útmutatót. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
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);
Hang lejátszása
A hívás létrejötte után több lehetőség is van arra, hogy hogyan szeretné lejátszani a hangot. Lejátszhatja a hívást csatlakozó résztvevő hangját, vagy lejátszhatja a hívás összes résztvevőjének a hangját.
Lejátszási forrás – Hangfájl
Ha hangfájlokat szeretne lejátszani a résztvevőknek, meg kell győződnie arról, hogy a hangfájl WAV-fájl, mono és 16 KHz. A hangfájlok lejátszásához meg kell győződnie arról, hogy URI-t biztosít az Azure Communication Services számára egy olyan fájlhoz, amely egy olyan helyen található, ahol az Azure Communication Services hozzáférhet. Az SDK-ban található FileSource típussal hangfájlokat adhat meg a lejátszási művelethez.
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")) };
Lejátszás forrása – Szövegfelolvasás
Az Azure AI-szolgáltatásokon keresztüli szövegfelolvasással történő hanglejátszáshoz meg kell adnia a lejátszandó szöveget, valamint a SourceLocale-t és a VoiceKindet vagy a használni kívánt VoiceName-t. Az Azure AI-szolgáltatások által támogatott összes hangnevet támogatjuk, teljes listát itt talál.
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 } };
Lejátszás forrása – Szövegfelolvasás az SSML-vel
Ha még jobban testre szeretné szabni a Szövegfelolvasás kimenetét az Azure AI-szolgáltatásokkal, használhatja a Speech Synthesis Markup Language SSML-t , amikor meghívja a lejátszási műveletet a Call Automation használatával. Az SSML segítségével finomhangolhatja a hangmagasságot, szüneteltetheti, javíthatja a kiejtést, módosíthatja a beszéd sebességét, beállíthatja a hangerőt, és több hangot is hozzárendelhet.
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);
Egyéni hangmodellek
Ha jobban szeretné fokozni a kéréseket, és egyéni hangmodelleket is tartalmaz, a Szövegfelolvasás játékművelet mostantól támogatja ezeket az egyéni hangokat. Ez nagyszerű lehetőség, ha helyibb, személyre szabottabb élményt szeretne nyújtani az ügyfeleknek, vagy olyan helyzetekben, amikor az alapértelmezett modellek nem fedik le a kimondani kívánt szavakat és ékezeteket. Ha többet szeretne megtudni az egyéni modellek létrehozásáról és üzembe helyezéséről, olvassa el ezt az útmutatót.
Egyéni hangnevek normál szöveges exmaple
String textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointId to select custom voice.
var playSource = new TextSource(textToPlay)
{
VoiceName = "YourCustomVoiceName",
CustomVoiceEndpointId = "YourCustomEndpointId"
};
Egyéni hangnevek SSML-példa
var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");
Miután eldöntötte, hogy melyik playSource-t szeretné használni a hang lejátszásához, kiválaszthatja, hogy egy adott résztvevőnek vagy az összes résztvevőnek le szeretné-e játszani.
Hang lejátszása az összes résztvevőnek
Ebben az esetben a hang lejátszása a hívás összes résztvevője számára történik.
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playSource);
Az usge-in támogatása
Olyan helyzetekben, amikor az összes résztvevőnek hurokban játssza le a hangokat, például a várakozási előszobában, esetleg hangot játszik le az előszobában lévő résztvevőknek, és naprakészen tartja őket az üzenetsorban lévő számukon. Ha az usge-in támogatást használja, ez megszakítja a folyamatban lévő hangot, és lejátssza az új üzenetet. Ezután, ha folytatni szeretné az eredeti hang lejátszását, akkor egy másik lejátszási kérést kell tennie.
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);
*/
Hang lejátszása egy adott résztvevőnek
Ebben a forgatókönyvben a hang egy adott résztvevőnek lesz lejátszva.
var playTo = new List<CommunicationIdentifier> { targetParticipant };
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayAsync(playSource, playTo);
Több hangüzenet lejátszása
A lejátszási műveletek mindegyike támogatja, hogy egyetlen kéréssel több lejátszási forrást is küldjön. Ez azt jelenti, hogy a kérések egy-egy lépésben történő lejátszására vonatkozó kérések listáját küldi el ahelyett, hogy egyenként küldené el ezeket a kéréseket.
Hang lejátszása hurokban
A hurok beállítással lejátszhatja azokat a zenehallgatásokat, amelyek addig futnak, amíg az alkalmazás készen nem áll a hívó elfogadására. Vagy az alkalmazások üzleti logikája alapján folytassa a hívót a következő logikai lépésre.
var playOptions = new PlayToAllOptions(playSource)
{
Loop = true
};
var playResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.PlayToAllAsync(playOptions);
Hangfájlok gyorsítótárazásával történő lejátszás javítása
Ha ugyanazt a hangfájlt többször is lejátssza, az alkalmazás az Azure Communication Services számára a hangfájl forrásazonosítóját is megadhatja. Az Azure Communication Services 1 órán keresztül gyorsítótárazza ezt a hangfájlt.
Feljegyzés
A hangfájlok gyorsítótárazása nem megfelelő dinamikus kérésekhez. Ha módosítja az Azure Communication Servicesnek biztosított URL-címet, az nem frissíti azonnal a gyorsítótárazott URL-címet. A frissítés a meglévő gyorsítótár lejárata után következik be.
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);
A lejátszási művelet eseményfrissítéseinek kezelése
Az alkalmazás a hívás fogadásakor a Hívásautomatizálás szolgáltatásnak biztosított visszahívási URL-címen kapja meg a művelet életciklusának eseményfrissítéseit. Példa egy sikeres játékesemény-frissítésre.
Példa a PlayCompleted esemény deszerializálására:
if (acsEvent is PlayCompleted playCompleted)
{
logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext);
}
Példa a PlayStarted esemény deszerializálására:
if (acsEvent is PlayStarted playStarted)
{
logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext);
}
Példa a PlayFailed esemény deszerializálására:
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);
}
}
Az egyéb támogatott eseményekről a Call Automation áttekintési dokumentumában olvashat bővebben.
Lejátszási művelet megszakítása
Az összes médiaművelet megszakítása, az összes függőben lévő médiaművelet megszakítva. Ez a művelet a többi várólistán lévő lejátszási műveletet is megszakítja.
var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId)
.GetCallMedia()
.CancelAllMediaOperationsAsync();
Példa a PlayCanceled esemény deszerializálására:
if (acsEvent is PlayCanceled playCanceled)
{
logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext);
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál .
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- A Java Development Kit 8-os vagy újabb verziója.
- Apache Maven.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Új Java-alkalmazás létrehozása
A terminál vagy a parancsablakban lépjen arra a könyvtárra, ahol létre szeretné hozni a Java-alkalmazást. Futtassa az itt látható parancsot a Java-projekt létrehozásához a maven-archetype-quickstart sablonból.
mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Az előző parancs létrehoz egy olyan könyvtárat, amelynek neve megegyezik az argumentum nevével artifactId
. Ebben a könyvtárban src/main/java
a könyvtár tartalmazza a projekt forráskódját, src/test/java
a könyvtár pedig a tesztforrást.
Megfigyelheti, hogy a "létrehozás" lépés létrehozott egy olyan könyvtárat, amelynek a neve megegyezik az artifactId névvel. Ebben a könyvtárban src/main/java
a könyvtár forráskódot, src/test/java
a könyvtár teszteket tartalmaz, a pom.xml
fájl pedig a projekt projektobjektum-modellje vagy POM-ja.
Frissítse az alkalmazások POM-fájlját a Java 8 vagy újabb verziójára.
<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>
Csomaghivatkozások hozzáadása
A POM-fájlban adja hozzá a projekt alábbi hivatkozását.
azure-communication-callautomation
Az Azure Communication Services Call Automation SDK-csomagja lekérhető az Azure SDK dev feedből.
<dependency>
<groupId>com.azure</groupId>
<artifactId>azure-communication-callautomation</artifactId>
<version>1.0.0</version>
</dependency>
(Nem kötelező) Készítse elő a hangfájlt, ha hangfájlokat szeretne használni a lejátszási kérésekhez
Hozzon létre egy hangfájlt, ha még nem rendelkezik ilyen fájllal, amelyet a résztvevőknek küldött üzenetekkel és üzenetekkel játszhat le. A hangfájlt olyan helyen kell tárolni, amely a hitelesítés támogatásával elérhető az Azure Communication Services számára. Őrizze meg a hangfájl lejátszásának igénylésekor használni kívánt URL-cím másolatát. Az Azure Communication Services támogatja az MP3-fájlok mindkét fájltípusát ID3V2TAG - és WAV-fájlokkal, mono 16 bites PCM 16 KHz-es mintasebességgel. .
Saját hangfájl létrehozását tesztelheti a Beszédszintézis segítségével a Hangtartalom létrehozása eszközzel.
(Nem kötelező) Az Azure Cognitive Service csatlakoztatása az Azure Communication Service-hez
Ha szövegfelolvasási képességeket szeretne használni, akkor az Azure Cognitive Service-t az Azure Communication Service-hez kell csatlakoztatnia.
App.java frissítése kóddal
A választott szerkesztőben nyissa meg App.java fájlt, és frissítse az Update app.java kódszakaszban megadott kóddal.
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását, ha többet szeretne megtudni a hívás indításáról, kövesse a rövid útmutatót. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
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();
Hang lejátszása
A hívás létrejötte után több lehetőség is van arra, hogy hogyan szeretné lejátszani a hangot. Lejátszhatja a hívást csatlakozó résztvevő hangját, vagy lejátszhatja a hívás összes résztvevőjének a hangját.
Lejátszási forrás – Hangfájl
Ha hangfájlokat szeretne lejátszani a résztvevőknek, meg kell győződnie arról, hogy a hangfájl WAV-fájl, mono és 16 KHz. A hangfájlok lejátszásához meg kell győződnie arról, hogy URI-t biztosít az Azure Communication Services számára egy olyan fájlhoz, amely egy olyan helyen található, ahol az Azure Communication Services hozzáférhet. Az SDK-ban található FileSource típussal hangfájlokat adhat meg a lejátszási művelethez.
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);
*/
Lejátszás forrása – Szövegfelolvasás
Az Azure AI-szolgáltatásokon keresztüli szövegfelolvasással történő hanglejátszáshoz meg kell adnia a lejátszandó szöveget, valamint a SourceLocale-t és a VoiceKindet vagy a használni kívánt VoiceName-t. Az Azure AI-szolgáltatások által támogatott összes hangnevet támogatjuk, teljes listát itt talál.
// 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);
*/
Lejátszási forrás – Szövegfelolvasási 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);
Egyéni hangmodellek
Ha jobban szeretné fokozni a kéréseket, és egyéni hangmodelleket is tartalmaz, a Szövegfelolvasás játékművelet mostantól támogatja ezeket az egyéni hangokat. Ez nagyszerű lehetőség, ha helyibb, személyre szabottabb élményt szeretne nyújtani az ügyfeleknek, vagy olyan helyzetekben, amikor az alapértelmezett modellek nem fedik le a kimondani kívánt szavakat és ékezeteket. Ha többet szeretne megtudni az egyéni modellek létrehozásáról és üzembe helyezéséről, olvassa el ezt az útmutatót.
Egyéni hangnevek normál szöveges exmaple
// Provide VoiceName and to select a specific voice.
var playSource = new TextSource()
.setText(textToPlay)
.setCustomVoiceName("YourCustomVoiceName")
.setCustomVoiceEndpointId("YourCustomEndpointId");
Egyéni hangnevek SSML-példa
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");
Miután eldöntötte, hogy melyik playSource-t szeretné használni a hang lejátszásához, kiválaszthatja, hogy egy adott résztvevőnek vagy az összes résztvevőnek le szeretné-e játszani.
Hang lejátszása az összes résztvevőnek
Ebben az esetben a hang lejátszása a hívás összes résztvevője számára történik.
var playOptions = new PlayToAllOptions(playSource);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
log.info("Play result: " + playResponse.getStatusCode());
Az usge-in támogatása
Olyan helyzetekben, amikor az összes résztvevőnek hurokban játssza le a hangokat, például a várakozási előszobában, esetleg hangot játszik le az előszobában lévő résztvevőknek, és naprakészen tartja őket az üzenetsorban lévő számukon. Ha az usge-in támogatást használja, ez megszakítja a folyamatban lévő hangot, és lejátssza az új üzenetet. Ezután, ha folytatni szeretné az eredeti hang lejátszását, akkor egy másik lejátszási kérést kell tennie.
// 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);
*/
Hang lejátszása egy adott résztvevőnek
Ebben a forgatókönyvben a hang egy adott résztvevőnek lesz lejátszva.
var playTo = Arrays.asList(targetParticipant);
var playOptions = new PlayOptions(playSource, playTo);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playWithResponse(playOptions)
.block();
Hang lejátszása hurokban
A hurok beállítással lejátszhatja azokat a zenehallgatásokat, amelyek addig futnak, amíg az alkalmazás készen nem áll a hívó elfogadására. Vagy az alkalmazások üzleti logikája alapján folytassa a hívót a következő logikai lépésre.
var playOptions = new PlayToAllOptions(playSource)
.setLoop(true);
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.playToAllWithResponse(playOptions)
.block();
Hangfájlok gyorsítótárazásával történő lejátszás javítása
Ha ugyanazt a hangfájlt többször is lejátssza, az alkalmazás az Azure Communication Services számára a hangfájl forrásazonosítóját is megadhatja. Az Azure Communication Services 1 órán keresztül gyorsítótárazza ezt a hangfájlt.
Feljegyzés
A hangfájlok gyorsítótárazása nem megfelelő dinamikus kérésekhez. Ha módosítja az Azure Communication Servicesnek biztosított URL-címet, az nem frissíti azonnal a gyorsítótárazott URL-címet. A frissítés a meglévő gyorsítótár lejárata után következik be.
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();
A lejátszási művelet eseményfrissítéseinek kezelése
Az alkalmazás a hívás fogadásakor a Hívásautomatizálás szolgáltatásnak biztosított visszahívási URL-címen kapja meg a művelet életciklusának eseményfrissítéseit. Példa egy sikeres játékesemény-frissítésre.
Példa a PlayCompleted esemény deszerializálására:
if (acsEvent instanceof PlayCompleted) {
PlayCompleted event = (PlayCompleted) acsEvent;
log.info("Play completed, context=" + event.getOperationContext());
}
Példa a PlayStarted esemény deszerializálására:
if (acsEvent instanceof PlayStarted) {
PlayStarted event = (PlayStarted) acsEvent;
log.info("Play started, context=" + event.getOperationContext());
}
Példa a PlayFailed esemény deszerializálására:
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());
}
}
Az egyéb támogatott eseményekről a Call Automation áttekintési dokumentumában olvashat bővebben.
Lejátszási művelet megszakítása
Az összes médiaművelet megszakítása, az összes függőben lévő médiaművelet megszakítva. Ez a művelet a többi várólistán lévő lejátszási műveletet is megszakítja.
var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId)
.getCallMediaAsync()
.cancelAllMediaOperationsWithResponse()
.block();
log.info("Cancel result: " + cancelResponse.getStatusCode());
Példa a PlayCanceled esemény deszerializálására:
if (acsEvent instanceof PlayCanceled) {
PlayCanceled event = (PlayCanceled) acsEvent;
log.info("Play canceled, context=" + event.getOperationContext());
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál .
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Mentse az erőforráshoz tartozó kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- A Node.js telepítve van, a hivatalos webhelyről telepítheti.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Új JavaScript-alkalmazás létrehozása
Hozzon létre egy új JavaScript-alkalmazást a projektkönyvtárban. Inicializáljon egy új Node.js projektet az alábbi paranccsal. Ez létrehoz egy package.json fájlt a projekthez, amely a projekt függőségeinek kezelésére szolgál.
npm init -y
Az Azure Communication Services Hívásautomatizálási csomagjának telepítése
npm install @azure/communication-call-automation
Hozzon létre egy új JavaScript-fájlt a projektkönyvtárban, például nevezze el app.js. Ebben a fájlban meg kell írnia a JavaScript-kódot. Futtassa az alkalmazást Node.js a következő paranccsal. Ez a kód végrehajtja az Ön által írt JavaScript-kódot.
node app.js
(Nem kötelező) Készítse elő a hangfájlt, ha hangfájlokat szeretne használni a lejátszási kérésekhez
Hozzon létre egy hangfájlt, ha még nem rendelkezik ilyen fájllal, amelyet a résztvevőknek küldött üzenetekkel és üzenetekkel játszhat le. A hangfájlt olyan helyen kell tárolni, amely a hitelesítés támogatásával elérhető az Azure Communication Services számára. Őrizze meg a hangfájl lejátszásának igénylésekor használni kívánt URL-cím másolatát. Az Azure Communication Services támogatja az MP3-fájlok mindkét fájltípusát ID3V2TAG - és WAV-fájlokkal, mono 16 bites PCM 16 KHz-es mintasebességgel.
Saját hangfájl létrehozását tesztelheti a Beszédszintézis segítségével a Hangtartalom létrehozása eszközzel.
(Nem kötelező) Az Azure Cognitive Service csatlakoztatása az Azure Communication Service-hez
Ha szövegfelolvasási képességeket szeretne használni, akkor az Azure Cognitive Service-t az Azure Communication Service-hez kell csatlakoztatnia.
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását, ha többet szeretne megtudni a hívás indításáról, kövesse a rövid útmutatót. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" };
const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions);
Hang lejátszása
A hívás létrejötte után több lehetőség is van arra, hogy hogyan szeretné lejátszani a hangot. Lejátszhatja a hívást csatlakozó résztvevő hangját, vagy lejátszhatja a hívás összes résztvevőjének a hangját.
Lejátszási forrás – Hangfájl
Ha hangfájlokat szeretne lejátszani a résztvevőknek, meg kell győződnie arról, hogy a hangfájl WAV-fájl, mono és 16 KHz. A hangfájlok lejátszásához meg kell győződnie arról, hogy URI-t biztosít az Azure Communication Services számára egy olyan fájlhoz, amely egy olyan helyen található, ahol az Azure Communication Services hozzáférhet. Az SDK-ban található FileSource típussal hangfájlokat adhat meg a lejátszási művelethez.
const playSource: FileSource = { url: audioUri, kind: "fileSource" };
Lejátszás forrása – Szövegfelolvasás
Az Azure AI-szolgáltatásokon keresztüli szövegfelolvasással történő hanglejátszáshoz meg kell adnia a lejátszandó szöveget, valamint a SourceLocale-t és a VoiceKindet vagy a használni kívánt VoiceName-t. Az Azure AI-szolgáltatások által támogatott összes hangnevet támogatjuk, teljes listát itt talál.
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" };
Lejátszás forrása – Szövegfelolvasás az SSML-vel
Ha még jobban testre szeretné szabni a Szövegfelolvasás kimenetét az Azure AI-szolgáltatásokkal, használhatja a Speech Synthesis Markup Language SSML-t , amikor meghívja a lejátszási műveletet a Call Automation használatával. Az SSML segítségével finomhangolhatja a hangmagasságot, szüneteltetheti, javíthatja a kiejtést, módosíthatja a beszéd sebességét, beállíthatja a hangerőt, és több hangot is hozzárendelhet.
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" };
Egyéni hangmodellek
Ha jobban szeretné fokozni a kéréseket, és egyéni hangmodelleket is tartalmaz, a Szövegfelolvasás játékművelet mostantól támogatja ezeket az egyéni hangokat. Ez nagyszerű lehetőség, ha helyibb, személyre szabottabb élményt szeretne nyújtani az ügyfeleknek, vagy olyan helyzetekben, amikor az alapértelmezett modellek nem fedik le a kimondani kívánt szavakat és ékezeteket. Ha többet szeretne megtudni az egyéni modellek létrehozásáról és üzembe helyezéséről, olvassa el ezt az útmutatót.
Egyéni hangnevek normál szöveges exmaple
const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}
Egyéni hangnevek SSML-példa
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"};
Miután eldöntötte, hogy melyik playSource-t szeretné használni a hang lejátszásához, kiválaszthatja, hogy egy adott résztvevőnek vagy az összes résztvevőnek le szeretné-e játszani.
Hang lejátszása – Minden résztvevő
Ebben az esetben a hang lejátszása a hívás összes résztvevője számára történik.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ]);
Az usge-in támogatása
Olyan helyzetekben, amikor az összes résztvevőnek hurokban játssza le a hangokat, például a várakozási előszobában, esetleg hangot játszik le az előszobában lévő résztvevőknek, és naprakészen tartja őket az üzenetsorban lévő számukon. Ha az usge-in támogatást használja, ez megszakítja a folyamatban lévő hangot, és lejátssza az új üzenetet. Ezután, ha folytatni szeretné az eredeti hang lejátszását, akkor egy másik lejátszási kérést kell tennie.
// 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);
*/
Hang lejátszása – Adott résztvevő
Ebben a forgatókönyvben a hang egy adott résztvevőnek lesz lejátszva.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
Hang lejátszása hurokban
A hurok beállítással lejátszhatja azokat a zenehallgatásokat, amelyek addig futnak, amíg az alkalmazás készen nem áll a hívó elfogadására. Vagy az alkalmazások üzleti logikája alapján folytassa a hívót a következő logikai lépésre.
const playOptions: PlayOptions = { loop: true };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.playToAll([ playSource ], playOptions);
Hangfájlok gyorsítótárazásával történő lejátszás javítása
Ha ugyanazt a hangfájlt többször is lejátssza, az alkalmazás az Azure Communication Services számára a hangfájl forrásazonosítóját is megadhatja. Az Azure Communication Services 1 órán keresztül gyorsítótárazza ezt a hangfájlt.
Feljegyzés
A hangfájlok gyorsítótárazása nem megfelelő dinamikus kérésekhez. Ha módosítja az Azure Communication Servicesnek biztosított URL-címet, az nem frissíti azonnal a gyorsítótárazott URL-címet. A frissítés a meglévő gyorsítótár lejárata után következik be.
const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" };
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.play([ playSource ], [ targetParticipant ]);
A lejátszási művelet eseményfrissítéseinek kezelése
Az alkalmazás a hívás fogadásakor a Hívásautomatizálás szolgáltatásnak biztosított visszahívási URL-címen kapja meg a művelet életciklusának eseményfrissítéseit.
Példa a PlayCompleted esemény deszerializálására:
if (event.type === "Microsoft.Communication.PlayCompleted") {
console.log("Play completed, context=%s", eventData.operationContext);
}
Példa a PlayFailed esemény deszerializálására:
if (event.type === "Microsoft.Communication.PlayFailed") {
console.log("Play failed: data=%s", JSON.stringify(eventData));
}
Példa a PlayStarted esemény deszerializálására:
if (event.type === "Microsoft.Communication.PlayStarted") {
console.log("Play started: data=%s", JSON.stringify(eventData));
}
Az egyéb támogatott eseményekről a Call Automation áttekintési dokumentumában olvashat bővebben.
Lejátszási művelet megszakítása
Az összes médiaművelet megszakítása, az összes függőben lévő médiaművelet megszakítva. Ez a művelet a többi várólistán lévő lejátszási műveletet is megszakítja.
await callAutomationClient.getCallConnection(callConnectionId)
.getCallMedia()
.cancelAllOperations();
Példa a PlayCanceled esemény deszerializálására:
if (event.type === "Microsoft.Communication.PlayCanceled") {
console.log("Play canceled, context=%s", eventData.operationContext);
}
Előfeltételek
- Az aktív előfizetéssel rendelkező Azure-fiókról további információt a Fiók létrehozása ingyenesen című témakörben talál .
- Azure Communication Services-erőforrás. Lásd: Azure Communication Services-erőforrás létrehozása. Mentse az erőforráshoz tartozó kapcsolati sztring.
- Hozzon létre egy új webszolgáltatás-alkalmazást a Call Automation SDK használatával.
- A Python telepítve van, a hivatalos webhelyről telepítheti.
AI-funkciók esetén
- Azure AI-szolgáltatások létrehozása és csatlakoztatása az Azure Communication Services-erőforráshoz.
- Hozzon létre egy egyéni altartományt az Azure AI-szolgáltatások erőforrásához.
Új Python-alkalmazás létrehozása
Python virtuális környezet beállítása a projekthez
python -m venv play-audio-app
A virtuális környezet aktiválása
Windows rendszeren használja a következő parancsot:
.\ play-audio-quickstart \Scripts\activate
A Unixon használja a következő parancsot:
source play-audio-quickstart /bin/activate
Az Azure Communication Services Hívásautomatizálási csomagjának telepítése
pip install azure-communication-callautomation
Hozza létre az alkalmazásfájlt a projektkönyvtárban, például nevezze el app.py. A Python-kódot ebben a fájlban kell írnia.
Futtassa az alkalmazást a Python használatával a következő paranccsal a kód végrehajtásához.
python app.py
(Nem kötelező) Készítse elő a hangfájlt, ha hangfájlokat szeretne használni a lejátszási kérésekhez
Hozzon létre egy hangfájlt, ha még nem rendelkezik ilyen fájllal, amelyet a résztvevőknek küldött üzenetekkel és üzenetekkel játszhat le. A hangfájlt olyan helyen kell tárolni, amely a hitelesítés támogatásával elérhető az Azure Communication Services számára. Őrizze meg a hangfájl lejátszásának igénylésekor használni kívánt URL-cím másolatát. Az Azure Communication Services támogatja az MP3- és WAV-fájlok mindkét fájltípusát, a mono 16 bites PCM-et 16 KHz-es mintasebesség mellett. .
Saját hangfájl létrehozását tesztelheti a Beszédszintézis segítségével a Hangtartalom létrehozása eszközzel.
(Nem kötelező) Az Azure Cognitive Service csatlakoztatása az Azure Communication Service-hez
Ha szövegfelolvasási képességeket szeretne használni, akkor az Azure Cognitive Service-t az Azure Communication Service-hez kell csatlakoztatnia.
Hívás létrehozása
Ezen a ponton ismernie kell a hívások indítását, ha többet szeretne megtudni a hívás indításáról, kövesse a rövid útmutatót. Az itt megadott kódrészlet használatával is megértheti, hogyan fogadhatja a hívásokat.
call_automation_client.answer_call(
incoming_call_context="<Incoming call context>",
callback_url="<https://sample-callback-uri>",
cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)
Hang lejátszása
A hívás létrejötte után több lehetőség is van arra, hogy hogyan szeretné lejátszani a hangot. Lejátszhatja a hívást csatlakozó résztvevő hangját, vagy lejátszhatja a hívás összes résztvevőjének a hangját.
Lejátszási forrás – Hangfájl
Ha hangfájlokat szeretne lejátszani a résztvevőknek, meg kell győződnie arról, hogy a hangfájl WAV-fájl, mono és 16 KHz. A hangfájlok lejátszásához meg kell győződnie arról, hogy URI-t biztosít az Azure Communication Services számára egy olyan fájlhoz, amely egy olyan helyen található, ahol az Azure Communication Services hozzáférhet. Az SDK-ban található FileSource típussal hangfájlokat adhat meg a lejátszási művelethez.
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
# )
Lejátszás forrása – Szövegfelolvasás
Az Azure AI-szolgáltatásokon keresztüli szövegfelolvasással történő hanglejátszáshoz meg kell adnia a lejátszandó szöveget, valamint a SourceLocale-t és a VoiceKindet vagy a használni kívánt VoiceName-t. Az Azure AI-szolgáltatások által támogatott összes hangnevet támogatjuk, teljes listát itt talál.
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
#)
Lejátszás forrása – Szövegfelolvasás az SSML-vel
Ha még jobban testre szeretné szabni a Szövegfelolvasás kimenetét az Azure AI-szolgáltatásokkal, használhatja a Speech Synthesis Markup Language SSML-t , amikor meghívja a lejátszási műveletet a Call Automation használatával. Az SSML segítségével finomhangolhatja a hangmagasságot, szüneteltetheti, javíthatja a kiejtést, módosíthatja a beszéd sebességét, beállíthatja a hangerőt, és több hangot is hozzárendelhet.
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
)
Egyéni hangmodellek
Ha jobban szeretné fokozni a kéréseket, és egyéni hangmodelleket is tartalmaz, a Szövegfelolvasás játékművelet mostantól támogatja ezeket az egyéni hangokat. Ez nagyszerű lehetőség, ha helyibb, személyre szabottabb élményt szeretne nyújtani az ügyfeleknek, vagy olyan helyzetekben, amikor az alapértelmezett modellek nem fedik le a kimondani kívánt szavakat és ékezeteket. Ha többet szeretne megtudni az egyéni modellek létrehozásáról és üzembe helyezéséről, olvassa el ezt az útmutatót.
Egyéni hangnevek normál szöveges exmaple
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
)
Egyéni hangnevek SSML-példa
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
)
Miután eldöntötte, hogy melyik playSource-t szeretné használni a hang lejátszásához, kiválaszthatja, hogy egy adott résztvevőnek vagy az összes résztvevőnek le szeretné-e játszani.
Hang lejátszása – Minden résztvevő
Játsszon le egy előre felvett hangfájlt a hívás összes résztvevője számára.
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
)
Az usge-in támogatása
Olyan helyzetekben, amikor az összes résztvevőnek hurokban játssza le a hangokat, például a várakozási előszobában, esetleg hangot játszik le az előszobában lévő résztvevőknek, és naprakészen tartja őket az üzenetsorban lévő számukon. Ha az usge-in támogatást használja, ez megszakítja a folyamatban lévő hangot, és lejátssza az új üzenetet. Ezután, ha folytatni szeretné az eredeti hang lejátszását, akkor egy másik lejátszási kérést kell tennie.
# 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
#)
Hang lejátszása – Adott résztvevő
Előre rögzített hangfájl lejátszása a hívás adott résztvevőjének.
play_to = [target_participant]
call_automation_client.get_call_connection(call_connection_id).play_media(
play_source=play_source, play_to=play_to
)
Hang lejátszása hurokban
A hurok beállítással lejátszhatja azokat a zenehallgatásokat, amelyek addig futnak, amíg az alkalmazás készen nem áll a hívó elfogadására. Vagy az alkalmazások üzleti logikája alapján folytassa a hívót a következő logikai lépésre.
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
)
Hangfájlok gyorsítótárazásával történő lejátszás javítása
Ha ugyanazt a hangfájlt többször is lejátssza, az alkalmazás az Azure Communication Services számára a hangfájl forrásazonosítóját is megadhatja. Az Azure Communication Services 1 órán keresztül gyorsítótárazza ezt a hangfájlt.
Feljegyzés
A hangfájlok gyorsítótárazása nem megfelelő dinamikus kérésekhez. Ha módosítja az Azure Communication Servicesnek biztosított URL-címet, az nem frissíti azonnal a gyorsítótárazott URL-címet. A frissítés a meglévő gyorsítótár lejárata után következik be.
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
)
A lejátszási művelet eseményfrissítéseinek kezelése
Az alkalmazás a hívás fogadásakor a Hívásautomatizálás szolgáltatásnak biztosított visszahívási URL-címen kapja meg a művelet életciklusának eseményfrissítéseit.
Példa a PlayCompleted esemény deszerializálására:
if event.type == "Microsoft.Communication.PlayCompleted":
app.logger.info("Play completed, context=%s", event.data.get("operationContext"))
Példa a PlayStarted esemény deszerializálására:
if event.type == "Microsoft.Communication.PlayStarted":
app.logger.info("Play started, context=%s", event.data.get("operationContext"))
Példa a PlayFailed esemény deszerializálására:
if event.type == "Microsoft.Communication.PlayFailed":
app.logger.info("Play failed: data=%s", event.data)
Az egyéb támogatott eseményekről a Call Automation áttekintési dokumentumában olvashat bővebben.
Lejátszási művelet megszakítása
Az összes médiaművelet megszakítása, az összes függőben lévő médiaművelet megszakítva. Ez a művelet a többi várólistán lévő lejátszási műveletet is megszakítja.
call_automation_client.get_call_connection(
call_connection_id
).cancel_all_media_operations()
Példa a PlayCanceled esemény deszerializálására:
if event.type == "Microsoft.Communication.PlayCanceled":
app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))
Eseménykódok
Állapot | Kód | Alkód | Üzenet |
---|---|---|---|
PlayCompleted | 200 | 0 | A művelet sikeresen befejeződött. |
PlayCanceled | 400 | 8508 | A művelet nem sikerült, a művelet megszakítva. |
PlayFailed | 400 | 8535 | A művelet nem sikerült, a fájlformátum érvénytelen. |
PlayFailed | 400 | 8536 | A művelet nem sikerült, a fájl nem tölthető le. |
PlayFailed | 400 | 8565 | A művelet nem sikerült, hibás kérés érkezett az Azure AI-szolgáltatásokhoz. Ellenőrizze a bemeneti paramétereket. |
PlayFailed | 401 | 8565 | A művelet nem sikerült, az Azure AI-szolgáltatások hitelesítési hibája. |
PlayFailed | 403 | 8565 | A művelet sikertelen volt, tiltott kérés az Azure AI-szolgáltatásokhoz, a kérés által használt ingyenes előfizetés túllépte a kvótát. |
PlayFailed | 429 | 8565 | A művelet sikertelen volt, a kérések túllépték az Azure AI-szolgáltatások előfizetésére vonatkozó engedélyezett egyidejű kérések számát. |
PlayFailed | 408 | 8565 | A művelet sikertelen volt, az Azure AI-szolgáltatásokhoz való kérés időtúllépést vett igénybe. |
PlayFailed | 500 | 9999 | Ismeretlen belső kiszolgálóhiba |
PlayFailed | 500 | 8572 | A művelet a lejátszási szolgáltatás leállása miatt meghiúsult. |
Ismert korlátozások
- A szövegfelolvasási kérések legfeljebb 400 karaktert támogatnak, ha a kérés ennél hosszabb, javasoljuk az SSML használatát a szövegfelolvasáson alapuló lejátszási műveletekhez.
- Azokban az esetekben, amikor túllépi a Speech szolgáltatás kvótakorlátját, az itt ismertetett lépések végrehajtásával kérheti a lilmit növelését.
Az erőforrások eltávolítása
Ha törölni és eltávolítani szeretne egy Communication Services-előfizetést, törölheti az erőforrást vagy az erőforráscsoportot. Az erőforráscsoport törlése a hozzá társított egyéb erőforrásokat is törli. További információ az erőforrások tisztításáról.