Pas spraakaanwijzingen voor gebruikers aan met de afspeelactie.

Deze handleiding helpt u aan de slag te gaan met het afspelen van audiobestanden aan deelnemers met behulp van de afspeelactie die wordt geboden via de Azure Communication Services Call Automation SDK.

Vereiste voorwaarden

Voor AI-functies

  • Maak en verbind Foundry Tools met uw Azure Communication Services-resource.
  • Maak een persoonlijk subdomein voor je Azure AI-services resource.

Maak een nieuwe C#-toepassing aan

In het consolevenster van uw besturingssysteem kunt u de dotnet-opdracht gebruiken om een nieuwe webapplicatie te maken.

dotnet new web -n MyApplication

Installeer het NuGet-package

Het NuGet-pakket kan worden verkregen van hier, als u dat nog niet heeft gedaan.

(Optioneel) Bereid je audiobestand voor als je audiobestanden wilt gebruiken om prompts af te spelen.

Maak een audiobestand aan, als je er nog geen hebt, om te gebruiken voor het afspelen van aanwijzingen en berichten aan deelnemers. Het audiobestand moet worden gehost op een locatie die toegankelijk is voor Azure Communication Services met ondersteuning voor verificatie. Bewaar een kopie van de URL die u kunt gebruiken bij het aanvragen om het audiobestand af te spelen. Azure Communication Services ondersteunt zowel MP3-bestanden met ID3V2TAG als WAV-bestanden, mono 16-bit PCM met een samplefrequentie van 16 KHz. .

U kunt testen hoe u uw eigen geluidsbestand kunt maken met onze Spraaksynthese en Audio-inhoudcreatietool.

(Optioneel) Verbind uw Azure Cognitive Service met uw Azure Communication Service.

Als u de mogelijkheden voor spraak naar tekst wilt gebruiken, is het nodig om uw Azure Cognitive Service aan uw Azure Communication Service te koppelen.

Maak een oproep

Op dit punt moet u bekend zijn met het starten van oproepen, als u meer wilt weten over het maken van een gesprek, volgt u onze quickstart. U kunt ook het hier verstrekte codefragment gebruiken om te begrijpen hoe u een oproep kunt beantwoorden.

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); 

Audio afspelen

Zodra het gesprek tot stand is gebracht, zijn er meerdere opties voor hoe je de audio zou willen afspelen. Je kunt audio afspelen voor de deelnemer die het gesprek heeft aangesloten of audio afspelen voor alle deelnemers aan het gesprek.

Speel bron - Audiobestand

Om audio af te spelen voor deelnemers met behulp van audiobestanden, moet u ervoor zorgen dat het audiobestand een WAV-bestand is, mono en 16 KHz. Om audiobestanden af te spelen, moet u ervoor zorgen dat u Azure Communication Services voorziet van een URI naar een bestand dat u host op een locatie waar Azure Communication Services toegang toe heeft. Het FileSource-type in onze SDK kan worden gebruikt om audiobestanden op te geven voor de afspeelactie.

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")) };

Bron afspelen - Tekst-naar-spraak

Als u audio wilt afspelen met behulp van Text-To-Speech via Foundry Tools, moet u de tekst opgeven die u wilt afspelen, evenals de SourceLocale en VoiceKind of de VoiceName die u wilt gebruiken. We ondersteunen hier alle spraaknamen die worden ondersteund door Foundry Tools, volledige lijst.

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 } };

Bron afspelen - Text-To-Speech met SSML

Als u uw tekst-To-Speech uitvoer nog meer wilt aanpassen met Foundry Tools, kunt u Speech Synthesis Markup Language SSML gebruiken bij het aanroepen van uw afspeelactie via Call Automation. Met SSML kunt u de toonhoogte verfijnen, pauzes instellen, de uitspraak verbeteren, de spreeksnelheid wijzigen, het volume aanpassen en meerdere stemmen toewijzen.

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);

Aangepaste stemmodellen

Als je je prompts verder wilt verbeteren en aangepaste stemmodellen wilt opnemen, ondersteunt de speelactie Tekst-naar-spraak nu deze aangepaste stemmen. Deze zijn een geweldige optie als je klanten een meer lokale, persoonlijke ervaring wilt bieden of als er situaties zijn waarbij de standaardmodellen mogelijk niet de woorden en accenten dekken die je probeert uit te spreken. Om meer te leren over het maken en implementeren van aangepaste modellen, kunt u deze handleiding lezen.

Voorbeeld van aangepaste spraaknamen voor normale tekst

String textToPlay = "Welcome to Contoso"; 
 
// Provide VoiceName and CustomVoiceEndpointId to select custom voice. 
var playSource = new TextSource(textToPlay)
    {
        VoiceName = "YourCustomVoiceName",
        CustomVoiceEndpointId = "YourCustomEndpointId"
    };

Aangepaste stemnamen SSML-voorbeeld


var playSource = new SsmlSource(ssmlToPlay,"YourCustomEndpointId");

Zodra je hebt besloten welke playSource je wilt gebruiken voor het afspelen van audio, kun je kiezen of je het wilt afspelen voor een specifieke deelnemer of voor alle deelnemers.

Speel audio af voor alle deelnemers

In dit scenario wordt audio naar alle deelnemers van het gesprek afgespeeld.

var playResponse = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayToAllAsync(playSource); 

Ondersteuning voor onderbreking van spraakherkenning

Tijdens scenario's waarin je audio in een lus afspeelt voor alle deelnemers, bijvoorbeeld in de wachtruimte, speel je mogelijk audio af voor de deelnemers in de wachtruimte en houd je hen op de hoogte van hun nummer in de wachtrij. Wanneer u de onderbrekingsondersteuning gebruikt, wordt het huidige audiofragment geannuleerd en wordt uw nieuwe bericht afgespeeld. Dan zou je, als je verder wilde gaan met het afspelen van je oorspronkelijke audio, een nieuwe afspeelverzoek moeten doen.

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);
*/

Audio afspelen voor een specifieke deelnemer

In deze situatie wordt geluid afgespeeld voor een specifieke deelnemer.

var playTo = new List<CommunicationIdentifier> { targetParticipant }; 
var playResponse = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayAsync(playSource, playTo); 

Meerdere audioberichten afspelen

De afspeelacties ondersteunen allemaal de mogelijkheid om meerdere afspeelbronnen met slechts één verzoek te verzenden. Dit betekent dat je een lijst met prompts in één keer verstuurt om af te spelen, in plaats van deze verzoeken afzonderlijk te doen.

Audio in een loop afspelen

Je kunt de lusoptie gebruiken om wachtmuziek te laten herhalen totdat je applicatie klaar is om de oproeper te accepteren. Of leid de beller naar de volgende logische stap op basis van de bedrijfslogica van je applicatie.

var playOptions = new PlayToAllOptions(playSource) 
{ 
    Loop = true 
}; 
var playResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .PlayToAllAsync(playOptions); 

Verbeter het afspelen met caching van audiobestanden

Als u hetzelfde audiobestand meerdere keren afspeelt, kan uw applicatie Azure Communication Services voorzien van de sourceID voor het audiobestand. Azure Communication Services slaat dit audiobestand 1 uur in de cache op.

Notitie

Het cachen van audiobestanden is niet geschikt voor dynamische prompts. Als je de URL wijzigt die aan Azure Communication Services is verstrekt, wordt de gecachte URL niet meteen bijgewerkt. De update zal plaatsvinden nadat de bestaande cache is verlopen.

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); 

Behandel afspeelactie gebeurtenisupdates

Uw toepassing ontvangt updates over de levenscyclus van acties op de callback-URL die aan de Call Automation-service is opgegeven op het moment dat de oproep werd beantwoord. Een voorbeeld van een geslaagde update van een speelgebeurtenis.

Voorbeeld van hoe je het PlayCompleted-evenement kunt deserialiseren:

if (acsEvent is PlayCompleted playCompleted) 
{ 
    logger.LogInformation("Play completed successfully, context={context}", playCompleted.OperationContext); 
} 

Een voorbeeld van hoe je het PlayStarted-evenement kunt deserialiseren:

if (acsEvent is PlayStarted playStarted) 
{ 
    logger.LogInformation("Play started successfully, context={context}", playStarted.OperationContext); 
} 

Voorbeeld van hoe u de PlayFailed gebeurtenis kunt deserialiseren.

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); 
    } 
} 

Ga naar het overzichtsdocument gespreksautomatisering voor meer informatie over andere ondersteunde gebeurtenissen.

Actie Afspelen annuleren

Annuleer alle media-operaties, alle lopende media-operaties zijn geannuleerd. Deze actie annuleert ook andere in de wachtrij geplaatste afspeelacties.

var cancelResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .CancelAllMediaOperationsAsync(); 

Voorbeeld van hoe u het PlayCanceled evenement kunt deserialiseren:

if (acsEvent is PlayCanceled playCanceled) 
{ 
    logger.LogInformation("Play canceled, context={context}", playCanceled.OperationContext); 
} 

Vereiste voorwaarden

Voor AI-functies

Maak een nieuwe Java-toepassing aan

Open in je terminal of opdrachtvenster en navigeer naar de map waar je je Java-toepassing wilt maken. Voer de hier getoonde opdracht uit om het Java-project te genereren vanuit de maven-archetype-quickstart template.

mvn archetype:generate -DgroupId=com.communication.quickstart -DartifactId=communication-quickstart -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

De vorige opdracht maakt een map aan met dezelfde naam als artifactId argument. Onder deze directory bevat de src/main/java-directory de broncode van het project en de src/test/java-directory de testbron.

Je merkt op dat de 'generate'-stap een map heeft aangemaakt met dezelfde naam als de artifactId. Onder deze map bevat de src/main/java map broncode, de src/test/java map bevat tests, en het pom.xml bestand is het Project Object Model van het project, oftewel POM.

Werk het POM-bestand van je applicaties bij om Java 8 of hoger te gebruiken.

<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>

Voeg pakketverwijzingen toe

In je POM-bestand, voeg de volgende referentie voor het project toe.

azure-communication-callautomation

Het Azure Communication Services Call Automation SDK-pakket wordt opgehaald uit de Azure SDK Dev Feed.

<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-communication-callautomation</artifactId>
  <version>1.0.0</version>
</dependency>

(Optioneel) Bereid je audiobestand voor als je audiobestanden wilt gebruiken om prompts af te spelen.

Maak een audiobestand aan, als je er nog geen hebt, om te gebruiken voor het afspelen van aanwijzingen en berichten aan deelnemers. Het audiobestand moet worden gehost op een locatie die toegankelijk is voor Azure Communication Services met ondersteuning voor verificatie. Bewaar een kopie van de URL die u kunt gebruiken bij het aanvragen om het audiobestand af te spelen. Azure Communication Services ondersteunt zowel MP3-bestanden met ID3V2TAG als WAV-bestanden, mono 16-bit PCM met een samplefrequentie van 16 KHz. .

U kunt testen hoe u uw eigen geluidsbestand kunt maken met onze Spraaksynthese en Audio-inhoudcreatietool.

(Optioneel) Verbind uw Azure Cognitive Service met uw Azure Communication Service.

Als u de mogelijkheden voor spraak naar tekst wilt gebruiken, is het nodig om uw Azure Cognitive Service aan uw Azure Communication Service te koppelen.

Werk App.java bij met code

In de editor van jouw keuze, open het bestand App.java en werk het bij met de code die wordt verstrekt in de Update app.java met code sectie.

Maak een oproep

Op dit punt moet u bekend zijn met het starten van oproepen, als u meer wilt weten over het maken van een gesprek, volgt u onze quickstart. U kunt ook het hier verstrekte codefragment gebruiken om te begrijpen hoe u een oproep kunt beantwoorden.

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(); 

Audio afspelen

Zodra het gesprek tot stand is gebracht, zijn er meerdere opties voor hoe je de audio zou willen afspelen. Je kunt audio afspelen voor de deelnemer die het gesprek heeft aangesloten of audio afspelen voor alle deelnemers aan het gesprek.

Speel bron - Audiobestand

Om audio af te spelen voor deelnemers met behulp van audiobestanden, moet u ervoor zorgen dat het audiobestand een WAV-bestand is, mono en 16 KHz. Om audiobestanden af te spelen, moet u ervoor zorgen dat u Azure Communication Services voorziet van een URI naar een bestand dat u host op een locatie waar Azure Communication Services toegang toe heeft. Het FileSource-type in onze SDK kan worden gebruikt om audiobestanden op te geven voor de afspeelactie.

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);
*/

Bron afspelen - Tekst-naar-spraak

Als u audio wilt afspelen met behulp van Text-To-Speech via Foundry Tools, moet u de tekst opgeven die u wilt afspelen, evenals de SourceLocale en VoiceKind of de VoiceName die u wilt gebruiken. We ondersteunen hier alle spraaknamen die worden ondersteund door Foundry Tools, volledige lijst.

// 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);
*/

Afspelen bron - Tekst naar spraak 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);

Aangepaste stemmodellen

Als je je prompts verder wilt verbeteren en aangepaste stemmodellen wilt opnemen, ondersteunt de speelactie Tekst-naar-spraak nu deze aangepaste stemmen. Deze zijn een geweldige optie als je klanten een meer lokale, persoonlijke ervaring wilt bieden of als er situaties zijn waarbij de standaardmodellen mogelijk niet de woorden en accenten dekken die je probeert uit te spreken. Om meer te leren over het maken en implementeren van aangepaste modellen, kunt u deze handleiding lezen.

Voorbeeld van aangepaste spraaknamen voor normale tekst

// Provide VoiceName and  to select a specific voice.
var playSource = new TextSource() 
    .setText(textToPlay) 
    .setCustomVoiceName("YourCustomVoiceName")
    .setCustomVoiceEndpointId("YourCustomEndpointId");

Aangepaste stemnamen SSML-voorbeeld

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");

Zodra je hebt besloten welke playSource je wilt gebruiken voor het afspelen van audio, kun je kiezen of je het wilt afspelen voor een specifieke deelnemer of voor alle deelnemers.

Speel audio af voor alle deelnemers

In dit scenario wordt audio naar alle deelnemers van het gesprek afgespeeld.

var playOptions = new PlayToAllOptions(playSource); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playToAllWithResponse(playOptions) 
    .block(); 
log.info("Play result: " + playResponse.getStatusCode()); 

Ondersteuning voor onderbreking van spraakherkenning

Tijdens scenario's waarin je audio in een lus afspeelt voor alle deelnemers, bijvoorbeeld in de wachtruimte, speel je mogelijk audio af voor de deelnemers in de wachtruimte en houd je hen op de hoogte van hun nummer in de wachtrij. Wanneer je de doorbreekondersteuning gebruikt, zal dit de lopende audio annuleren en je nieuwe bericht afspelen. Dan zou je, als je verder wilde gaan met het afspelen van je oorspronkelijke audio, een nieuwe afspeelverzoek moeten doen.

// 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);
*/

Audio afspelen voor een specifieke deelnemer

In deze situatie wordt geluid afgespeeld voor een specifieke deelnemer.

var playTo = Arrays.asList(targetParticipant); 
var playOptions = new PlayOptions(playSource, playTo); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playWithResponse(playOptions) 
    .block(); 

Audio in een loop afspelen

Je kunt de lusoptie gebruiken om wachtmuziek te laten herhalen totdat je applicatie klaar is om de oproeper te accepteren. Of leid de beller naar de volgende logische stap op basis van de bedrijfslogica van je applicatie.

var playOptions = new PlayToAllOptions(playSource) 
    .setLoop(true); 
var playResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .playToAllWithResponse(playOptions) 
    .block(); 

Verbeter het afspelen met caching van audiobestanden

Als u hetzelfde audiobestand meerdere keren afspeelt, kan uw applicatie Azure Communication Services voorzien van de sourceID voor het audiobestand. Azure Communication Services slaat dit audiobestand 1 uur in de cache op.

Notitie

Het cachen van audiobestanden is niet geschikt voor dynamische prompts. Als je de URL wijzigt die aan Azure Communication Services is verstrekt, wordt de gecachte URL niet meteen bijgewerkt. De update zal plaatsvinden nadat de bestaande cache is verlopen.

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(); 

Behandel afspeelactie gebeurtenisupdates

Uw toepassing ontvangt updates over de levenscyclus van acties op de callback-URL die aan de Call Automation-service is opgegeven op het moment dat de oproep werd beantwoord. Een voorbeeld van een geslaagde update van een speelgebeurtenis.

Voorbeeld van hoe je het PlayCompleted-evenement kunt deserialiseren:

if (acsEvent instanceof PlayCompleted) { 
    PlayCompleted event = (PlayCompleted) acsEvent; 
    log.info("Play completed, context=" + event.getOperationContext()); 
} 

Een voorbeeld van hoe je het PlayStarted-evenement kunt deserialiseren:

if (acsEvent instanceof PlayStarted) { 
    PlayStarted event = (PlayStarted) acsEvent; 
    log.info("Play started, context=" + event.getOperationContext()); 
} 

Voorbeeld van hoe u de PlayFailed gebeurtenis kunt deserialiseren.

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()); 
    } 
} 

Ga naar het overzichtsdocument gespreksautomatisering voor meer informatie over andere ondersteunde gebeurtenissen.

Actie Afspelen annuleren

Annuleer alle media-operaties, alle lopende media-operaties zijn geannuleerd. Deze actie annuleert ook andere in de wachtrij geplaatste afspeelacties.

var cancelResponse = callAutomationClient.getCallConnectionAsync(callConnectionId) 
    .getCallMediaAsync() 
    .cancelAllMediaOperationsWithResponse() 
    .block(); 
log.info("Cancel result: " + cancelResponse.getStatusCode()); 

Voorbeeld van hoe u het PlayCanceled evenement kunt deserialiseren:

if (acsEvent instanceof PlayCanceled) { 
    PlayCanceled event = (PlayCanceled) acsEvent; 
    log.info("Play canceled, context=" + event.getOperationContext()); 
} 

Vereiste voorwaarden

Voor AI-functies

Maak een nieuwe JavaScript-applicatie

Maak een nieuwe JavaScript-toepassing in je projectmap. Start een nieuw Node.js-project met de volgende opdracht. Hiermee maakt u een package.json-bestand voor uw project, dat wordt gebruikt voor het beheren van de afhankelijkheden van uw project.

npm init -y

Installeer het Azure Communication Services Call Automation-pakket

npm install @azure/communication-call-automation

Maak een nieuw JavaScript-bestand in je projectdirectory, bijvoorbeeld door het app.js te noemen. Je schrijft je JavaScript-code in dit bestand. Voer uw applicatie uit met Node.js met de volgende opdracht. Deze code voert de JavaScript-code uit die je hebt geschreven.

node app.js

(Optioneel) Bereid je audiobestand voor als je audiobestanden wilt gebruiken om prompts af te spelen.

Maak een audiobestand aan, als je er nog geen hebt, om te gebruiken voor het afspelen van aanwijzingen en berichten aan deelnemers. Het audiobestand moet worden gehost op een locatie die toegankelijk is voor Azure Communication Services met ondersteuning voor verificatie. Bewaar een kopie van de URL die u kunt gebruiken bij het aanvragen om het audiobestand af te spelen. Azure Communication Services ondersteunt zowel MP3-bestanden met ID3V2TAG als WAV-bestanden, mono 16-bit PCM met een samplefrequentie van 16 KHz.

U kunt testen hoe u uw eigen geluidsbestand kunt maken met onze Spraaksynthese en Audio-inhoudcreatietool.

(Optioneel) Verbind uw Azure Cognitive Service met uw Azure Communication Service.

Als je gebruik wilt maken van de tekst-naar-spraakfuncties, dan is het vereist dat je je Azure Cognitive Service aansluit op je Azure Communication Service.

Maak een oproep

Op dit punt moet u bekend zijn met het starten van oproepen, als u meer wilt weten over het maken van een gesprek, volgt u onze quickstart. U kunt ook het hier verstrekte codefragment gebruiken om te begrijpen hoe u een oproep kunt beantwoorden.

const callIntelligenceOptions: CallIntelligenceOptions = { "<https://sample-callback-uri>" }; 
        const answerCallOptions: AnswerCallOptions = { callIntelligenceOptions: callIntelligenceOptions };
  
await acsClient.answerCall("<Incoming call context>", "<https://sample-callback-uri>", answerCallOptions); 

Audio afspelen

Zodra het gesprek tot stand is gebracht, zijn er meerdere opties voor hoe je de audio zou willen afspelen. Je kunt audio afspelen voor de deelnemer die het gesprek heeft aangesloten of audio afspelen voor alle deelnemers aan het gesprek.

Speel bron - Audiobestand

Om audio af te spelen voor deelnemers met behulp van audiobestanden, moet u ervoor zorgen dat het audiobestand een WAV-bestand is, mono en 16 KHz. Om audiobestanden af te spelen, moet u ervoor zorgen dat u Azure Communication Services voorziet van een URI naar een bestand dat u host op een locatie waar Azure Communication Services toegang toe heeft. Het FileSource-type in onze SDK kan worden gebruikt om audiobestanden op te geven voor de afspeelactie.

const playSource: FileSource = { url: audioUri, kind: "fileSource" };

Bron afspelen - Tekst-naar-spraak

Als u audio wilt afspelen met behulp van Text-To-Speech via Foundry Tools, moet u de tekst opgeven die u wilt afspelen, evenals de SourceLocale en VoiceKind of de VoiceName die u wilt gebruiken. We ondersteunen hier alle spraaknamen die worden ondersteund door Foundry Tools, volledige lijst.

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" }; 

Bron afspelen - Text-To-Speech met SSML

Als u uw tekst-To-Speech uitvoer nog meer wilt aanpassen met Foundry Tools, kunt u Speech Synthesis Markup Language SSML gebruiken bij het aanroepen van uw afspeelactie via Call Automation. Met SSML kunt u de toonhoogte verfijnen, pauzes instellen, de uitspraak verbeteren, de spreeksnelheid wijzigen, het volume aanpassen en meerdere stemmen toewijzen.

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" }; 

Aangepaste stemmodellen

Als je je prompts verder wilt verbeteren en aangepaste stemmodellen wilt opnemen, ondersteunt de speelactie Tekst-naar-spraak nu deze aangepaste stemmen. Deze zijn een geweldige optie als je klanten een meer lokale, persoonlijke ervaring wilt bieden of als er situaties zijn waarbij de standaardmodellen mogelijk niet de woorden en accenten dekken die je probeert uit te spreken. Om meer te leren over het maken en implementeren van aangepaste modellen, kunt u deze handleiding lezen.

Voorbeeld van aangepaste spraaknamen voor normale tekst

const textToPlay = "Welcome to Contoso";
// Provide VoiceName and CustomVoiceEndpointID to play your custom voice
const playSource: TextSource = { text: textToPlay, voiceName: "YourCustomVoiceName", customVoiceEndpointId: "YourCustomEndpointId"}

Aangepaste stemnamen SSML-voorbeeld

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"}; 

Zodra je hebt besloten welke playSource je wilt gebruiken voor het afspelen van audio, kun je kiezen of je het wilt afspelen voor een specifieke deelnemer of voor alle deelnemers.

Audio afspelen - Alle deelnemers

In dit scenario wordt audio naar alle deelnemers van het gesprek afgespeeld.

await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .playToAll([ playSource ]);

Ondersteuning voor onderbreking van spraakherkenning

Tijdens scenario's waarin je audio in een lus afspeelt voor alle deelnemers, bijvoorbeeld in de wachtruimte, speel je mogelijk audio af voor de deelnemers in de wachtruimte en houd je hen op de hoogte van hun nummer in de wachtrij. Wanneer je de doorbreekondersteuning gebruikt, zal dit de lopende audio annuleren en je nieuwe bericht afspelen. Dan zou je, als je verder wilde gaan met het afspelen van je oorspronkelijke audio, een nieuwe afspeelverzoek moeten doen.

// 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); 
*/

Audio afspelen - Specifieke deelnemer

In deze situatie wordt geluid afgespeeld voor een specifieke deelnemer.

await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .play([ playSource ], [ targetParticipant ]); 

Audio in een loop afspelen

Je kunt de lusoptie gebruiken om wachtmuziek te laten herhalen totdat je applicatie klaar is om de oproeper te accepteren. Of leid de beller naar de volgende logische stap op basis van de bedrijfslogica van je applicatie.

const playOptions: PlayOptions = { loop: true }; 
await callAutomationClient.getCallConnection(callConnectionId) 
    .getCallMedia() 
    .playToAll([ playSource ], playOptions); 

Verbeter het afspelen met caching van audiobestanden

Als u hetzelfde audiobestand meerdere keren afspeelt, kan uw applicatie Azure Communication Services voorzien van de sourceID voor het audiobestand. Azure Communication Services slaat dit audiobestand 1 uur in de cache op.

Notitie

Het cachen van audiobestanden is niet geschikt voor dynamische prompts. Als je de URL wijzigt die aan Azure Communication Services is verstrekt, wordt de gecachte URL niet meteen bijgewerkt. De update zal plaatsvinden nadat de bestaande cache is verlopen.

const playSource: FileSource = { url: audioUri, playsourcacheid: "<playSourceId>", kind: "fileSource" }; 
await callAutomationClient.getCallConnection(callConnectionId) 
.getCallMedia() 
.play([ playSource ], [ targetParticipant ]);

Behandel afspeelactie gebeurtenisupdates

Uw toepassing ontvangt updates over de levenscyclus van acties op de callback-URL die aan de Call Automation-service is opgegeven op het moment dat de oproep werd beantwoord.

Voorbeeld van hoe je het PlayCompleted-evenement kunt deserialiseren:

if (event.type === "Microsoft.Communication.PlayCompleted") { 
    console.log("Play completed, context=%s", eventData.operationContext); 
} 

Voorbeeld van hoe u de PlayFailed gebeurtenis kunt deserialiseren.

if (event.type === "Microsoft.Communication.PlayFailed") { 
    console.log("Play failed: data=%s", JSON.stringify(eventData)); 
} 

Een voorbeeld van hoe je het PlayStarted-evenement kunt deserialiseren:

if (event.type === "Microsoft.Communication.PlayStarted") { 
    console.log("Play started: data=%s", JSON.stringify(eventData)); 
} 

Ga naar het overzichtsdocument gespreksautomatisering voor meer informatie over andere ondersteunde gebeurtenissen.

Actie Afspelen annuleren

Annuleer alle media-operaties, alle lopende media-operaties zijn geannuleerd. Deze actie annuleert ook andere in de wachtrij geplaatste afspeelacties.

await callAutomationClient.getCallConnection(callConnectionId) 
.getCallMedia() 
.cancelAllOperations();

Voorbeeld van hoe u het PlayCanceled evenement kunt deserialiseren:

if (event.type === "Microsoft.Communication.PlayCanceled") {
    console.log("Play canceled, context=%s", eventData.operationContext);
}

Vereiste voorwaarden

Voor AI-functies

Maak een nieuwe Python-applicatie

Stel een Python virtuele omgeving in voor uw project.

python -m venv play-audio-app

Activeer je virtuele omgeving

Op Windows gebruik je het volgende commando:

.\ play-audio-quickstart \Scripts\activate

Op Unix, gebruik het volgende commando:

source play-audio-quickstart /bin/activate

Installeer het Azure Communication Services Call Automation-pakket

pip install azure-communication-callautomation

Maak je applicatiebestand aan in je projectmap, bijvoorbeeld door het app.py te noemen. Je schrijft je Python-code in dit bestand.

Voer uw applicatie uit met Python met de volgende opdracht om de code uit te voeren.

python app.py

(Optioneel) Bereid je audiobestand voor als je audiobestanden wilt gebruiken om prompts af te spelen.

Maak een audiobestand aan, als je er nog geen hebt, om te gebruiken voor het afspelen van aanwijzingen en berichten aan deelnemers. Het audiobestand moet worden gehost op een locatie die toegankelijk is voor Azure Communication Services met ondersteuning voor verificatie. Bewaar een kopie van de URL die u kunt gebruiken bij het aanvragen om het audiobestand af te spelen. Azure Communication Services ondersteunt beide bestandstypen van MP3 en WAV-bestanden, mono 16-bit PCM bij een samplefrequentie van 16 kHz. .

U kunt testen hoe u uw eigen geluidsbestand kunt maken met onze Spraaksynthese en Audio-inhoudcreatietool.

(Optioneel) Verbind uw Azure Cognitive Service met uw Azure Communication Service.

Als u de mogelijkheden voor spraak naar tekst wilt gebruiken, is het nodig om uw Azure Cognitive Service aan uw Azure Communication Service te koppelen.

Maak een oproep

Op dit punt moet u bekend zijn met het starten van oproepen, als u meer wilt weten over het maken van een gesprek, volgt u onze quickstart. U kunt ook het hier verstrekte codefragment gebruiken om te begrijpen hoe u een oproep kunt beantwoorden.

call_automation_client.answer_call(
    incoming_call_context="<Incoming call context>",
    callback_url="<https://sample-callback-uri>",
    cognitive_services_endpoint=COGNITIVE_SERVICE_ENDPOINT,
)

Audio afspelen

Zodra het gesprek tot stand is gebracht, zijn er meerdere opties voor hoe je de audio zou willen afspelen. Je kunt audio afspelen voor de deelnemer die het gesprek heeft aangesloten of audio afspelen voor alle deelnemers aan het gesprek.

Speel bron - Audiobestand

Om audio af te spelen voor deelnemers met behulp van audiobestanden, moet u ervoor zorgen dat het audiobestand een WAV-bestand is, mono en 16 KHz. Om audiobestanden af te spelen, moet u ervoor zorgen dat u Azure Communication Services voorziet van een URI naar een bestand dat u host op een locatie waar Azure Communication Services toegang toe heeft. Het FileSource-type in onze SDK kan worden gebruikt om audiobestanden op te geven voor de afspeelactie.

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
# )

Bron afspelen - Tekst-naar-spraak

Als u audio wilt afspelen met behulp van Text-To-Speech via Foundry Tools, moet u de tekst opgeven die u wilt afspelen, evenals de SourceLocale en VoiceKind of de VoiceName die u wilt gebruiken. We ondersteunen hier alle spraaknamen die worden ondersteund door Foundry Tools, volledige lijst.

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
#)

Bron afspelen - Text-To-Speech met SSML

Als u uw tekst-To-Speech uitvoer nog meer wilt aanpassen met Foundry Tools, kunt u Speech Synthesis Markup Language SSML gebruiken bij het aanroepen van uw afspeelactie via Call Automation. Met SSML kunt u de toonhoogte verfijnen, pauzes instellen, de uitspraak verbeteren, de spreeksnelheid wijzigen, het volume aanpassen en meerdere stemmen toewijzen.

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
)

Aangepaste stemmodellen

Als je je prompts verder wilt verbeteren en aangepaste stemmodellen wilt opnemen, ondersteunt de speelactie Tekst-naar-spraak nu deze aangepaste stemmen. Deze zijn een geweldige optie als je klanten een meer lokale, persoonlijke ervaring wilt bieden of als er situaties zijn waarbij de standaardmodellen mogelijk niet de woorden en accenten dekken die je probeert uit te spreken. Om meer te leren over het maken en implementeren van aangepaste modellen, kunt u deze handleiding lezen.

Voorbeeld van aangepaste spraaknamen voor normale tekst

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
)

Aangepaste stemnamen SSML-voorbeeld

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
)

Zodra je hebt besloten welke playSource je wilt gebruiken voor het afspelen van audio, kun je kiezen of je het wilt afspelen voor een specifieke deelnemer of voor alle deelnemers.

Audio afspelen - Alle deelnemers

Speel een vooraf opgenomen audiobestand af voor alle deelnemers aan het gesprek.

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
)

Ondersteuning voor onderbreking van spraakherkenning

Tijdens scenario's waarin je audio in een lus afspeelt voor alle deelnemers, bijvoorbeeld in de wachtruimte, speel je mogelijk audio af voor de deelnemers in de wachtruimte en houd je hen op de hoogte van hun nummer in de wachtrij. Wanneer je de doorbreekondersteuning gebruikt, zal dit de lopende audio annuleren en je nieuwe bericht afspelen. Dan zou je, als je verder wilde gaan met het afspelen van je oorspronkelijke audio, een nieuwe afspeelverzoek moeten doen.

# 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
#)

Audio afspelen - Specifieke deelnemer

Speel een vooraf opgenomen audiobestand af voor een specifieke deelnemer in het gesprek.

play_to = [target_participant]

call_automation_client.get_call_connection(call_connection_id).play_media(
    play_source=play_source, play_to=play_to
)

Audio in een loop afspelen

Je kunt de lusoptie gebruiken om wachtmuziek te laten herhalen totdat je applicatie klaar is om de oproeper te accepteren. Of leid de beller naar de volgende logische stap op basis van de bedrijfslogica van je applicatie.

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
)

Verbeter het afspelen met caching van audiobestanden

Als u hetzelfde audiobestand meerdere keren afspeelt, kan uw applicatie Azure Communication Services voorzien van de sourceID voor het audiobestand. Azure Communication Services slaat dit audiobestand 1 uur in de cache op.

Notitie

Het cachen van audiobestanden is niet geschikt voor dynamische prompts. Als je de URL wijzigt die aan Azure Communication Services is verstrekt, wordt de gecachte URL niet meteen bijgewerkt. De update zal plaatsvinden nadat de bestaande cache is verlopen.

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
)

Behandel afspeelactie gebeurtenisupdates

Uw toepassing ontvangt updates over de levenscyclus van acties op de callback-URL die aan de Call Automation-service is opgegeven op het moment dat de oproep werd beantwoord.

Voorbeeld van hoe je het PlayCompleted-evenement kunt deserialiseren:

if event.type == "Microsoft.Communication.PlayCompleted":

    app.logger.info("Play completed, context=%s", event.data.get("operationContext"))

Een voorbeeld van hoe je het PlayStarted-evenement kunt deserialiseren:

if event.type == "Microsoft.Communication.PlayStarted":

    app.logger.info("Play started, context=%s", event.data.get("operationContext"))

Voorbeeld van hoe u de PlayFailed gebeurtenis kunt deserialiseren.

if event.type == "Microsoft.Communication.PlayFailed":

    app.logger.info("Play failed: data=%s", event.data)

Ga naar het overzichtsdocument gespreksautomatisering voor meer informatie over andere ondersteunde gebeurtenissen.

Actie Afspelen annuleren

Annuleer alle media-operaties, alle lopende media-operaties zijn geannuleerd. Deze actie annuleert ook andere in de wachtrij geplaatste afspeelacties.

call_automation_client.get_call_connection(
    call_connection_id
).cancel_all_media_operations()

Voorbeeld van hoe u het PlayCanceled evenement kunt deserialiseren:

if event.type == "Microsoft.Communication.PlayCanceled":

    app.logger.info("Play canceled, context=%s", event.data.get("operationContext"))

Gebeurteniscodes

Toestand Code Subcode Bericht
PlayCompleted 200 0 Actie succesvol voltooid.
SpeelGeannuleerd 400 8508 De actie is mislukt, de bewerking is geannuleerd.
Afspelen Mislukt 400 8535 De actie is mislukt, de bestandsindeling is ongeldig.
Afspelen Mislukt 400 8536 Actie mislukt, bestand kon niet worden gedownload.
Afspelen Mislukt 400 8565 Actie mislukt, onjuiste aanvraag naar Azure AI-services. Controleer invoerparameters.
Afspelen Mislukt 401 8565 Actie mislukt, authenticatiefout bij Azure AI-services.
Afspelen Mislukt 403 8565 Actie mislukt, verboden verzoek naar Azure AI-diensten, gratis abonnement gebruikt door het verzoek heeft zijn limiet bereikt.
Afspelen Mislukt 429 8565 Actie mislukt, verzoeken overschreden het aantal toegestane gelijktijdige verzoeken voor het Azure AI-services abonnement.
Afspelen Mislukt 408 8565 Actie mislukt, verzoek aan Azure AI-diensten verliep.
Afspelen Mislukt 500 9999 Onbekende interne serverfout
Afspelen Mislukt 500 8572 De actie is mislukt door het afsluiten van de Play Service.

Bekende beperkingen

  • Tekst-naar-spraakprompts ondersteunen maximaal 4000 tekens. Als uw prompt langer is dan deze limiet, raden we u aan om SSML te gebruiken voor op tekst-naar-spraak gebaseerde afspeelacties.
  • HD Voices van Microsoft Foundry worden niet officieel ondersteund. Dit resulteert in time-outs als deze worden gebruikt.
  • Quotumverhogingen voor speech-services kunnen worden aangevraagd als u de quotumlimiet overschrijdt. Volg de stappen die hier worden beschreven om een verhoging aan te vragen.

Ruim middelen op

Als u een Communication Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle andere resources verwijderd die eraan zijn gekoppeld. Meer informatie over het opruimen van middelen.

Volgende stappen