Megosztás a következőn keresztül:


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

Ú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

AI-funkciók esetén

Ú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

Ú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

Ú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

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.

Következő lépések

  • További információ a Hívásautomatizálásról
  • További információ a felhasználói bemenetek hívásban való gyűjtéséről