Delen via


Mediaacties voor middengesprekken beheren met Gespreksautomatisering

Aanroepautomatisering maakt gebruik van een REST API-interface voor het ontvangen van aanvragen voor acties en het verstrekken van antwoorden om te melden of de aanvraag is verzonden of niet. Vanwege de asynchrone aard van het aanroepen hebben de meeste acties overeenkomende gebeurtenissen die worden geactiveerd wanneer de actie is voltooid of mislukt. In deze handleiding worden de acties beschreven die beschikbaar zijn voor ontwikkelaars tijdens aanroepen, zoals DTMF en Continue DTMF-herkenning. Acties worden vergezeld van voorbeeldcode over het aanroepen van de genoemde actie.

Gespreksautomatisering ondersteunt verschillende andere acties voor het beheren van oproepen en opnemen die niet zijn opgenomen in deze handleiding.

Notitie

Gespreksautomatisering werkt momenteel niet samen met Microsoft Teams. Acties zoals het maken, omleiden van een oproep naar een Teams-gebruiker of het afspelen van audio naar een Teams-gebruiker met behulp van Gespreksautomatisering, worden niet ondersteund.

Als vereiste raden we u aan de onderstaande artikelen te lezen om optimaal gebruik te maken van deze handleiding:

  1. Handleiding voor aanroepautomatiseringsconcepten waarin het programmeermodel voor actiegebeurtenissen en callbacks voor gebeurtenissen wordt beschreven.
  2. Meer informatie over gebruikers-id's zoals CommunicationUserIdentifier en PhoneNumberIdentifier die in deze handleiding worden gebruikt.
  3. Meer informatie over het beheren en sturen van gesprekken met Gespreksautomatisering, waarmee u de basisbeginselen van het omgaan met een gesprek leert.

Voor alle codevoorbeelden client is CallAutomationClient-object dat kan worden gemaakt zoals weergegeven en callConnection het CallConnection-object is verkregen uit Answer of CreateCall-antwoord. U kunt deze ook verkrijgen via callbackgebeurtenissen die door uw toepassing zijn ontvangen.

var callAutomationClient = new CallAutomationClient("<Azure Communication Services connection string>");

DTMF verzenden

U kunt DTMF-tonen verzenden naar een externe deelnemer, wat handig kan zijn wanneer u al in gesprek bent en een andere deelnemer moet uitnodigen die een toestelnummer of een IVR-menu heeft om te navigeren.

Notitie

Dit wordt alleen ondersteund voor externe PSTN-deelnemers en ondersteunt het verzenden van maximaal 18 tonen tegelijk.

Methode SendDtmfAsync

Verzend een lijst met DTMF-tonen naar een externe deelnemer.

var tones = new DtmfTone[] { DtmfTone.One, DtmfTone.Two, DtmfTone.Three, DtmfTone.Pound }; 
var sendDtmfTonesOptions = new SendDtmfTonesOptions(tones, new PhoneNumberIdentifier(calleePhonenumber))
{ 
	OperationContext = "dtmfs-to-ivr" 
}; 

var sendDtmfAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId) 
	.GetCallMedia() 
        .SendDtmfTonesAsync(sendDtmfTonesOptions); 

Wanneer uw toepassing deze DTMF-tonen verzendt, ontvangt u gebeurtenisupdates. U kunt de SendDtmfTonesCompleted en SendDtmfTonesFailed gebeurtenissen gebruiken om bedrijfslogica in uw toepassing te maken om de volgende stappen te bepalen.

Voorbeeld van sendDtmfTonesCompleted-gebeurtenis

if (acsEvent is SendDtmfTonesCompleted sendDtmfCompleted) 
{ 
    logger.LogInformation("Send DTMF succeeded, context={context}", sendDtmfCompleted.OperationContext); 
} 

Voorbeeld van SendDtmfTonesFailed

if (acsEvent is SendDtmfTonesFailed sendDtmfFailed) 
{ 
    logger.LogInformation("Send dtmf failed: result={result}, context={context}", 
        sendDtmfFailed.ResultInformation?.Message, sendDtmfFailed.OperationContext); 
} 

Continue DTMF-herkenning

U kunt zich abonneren om doorlopende DTMF-tonen te ontvangen tijdens het gesprek. Uw toepassing ontvangt DTMF-tonen terwijl de beoogde deelnemer op een toets op het toetsenblok drukt. Deze tonen worden één voor één naar uw toepassing verzonden terwijl de deelnemer erop drukt.

Methode StartContinuousDtmfRecognitionAsync

Begin met het detecteren van DTMF-tonen die door een deelnemer zijn verzonden.

await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .StartContinuousDtmfRecognitionAsync(new PhoneNumberIdentifier(c2Target), "dtmf-reco-on-c2"); 

Wanneer uw toepassing geen DTMF-tonen meer van de deelnemer wil ontvangen, kunt u de StopContinuousDtmfRecognitionAsync methode gebruiken om Azure Communication Services te laten weten dat de DTMF-tonen niet meer worden gedetecteerd.

StopContinuousDtmfRecognitionAsync

Stop met het detecteren van DTMF-tonen die door de deelnemer zijn verzonden.

var continuousDtmfRecognitionOptions = new ContinuousDtmfRecognitionOptions(new PhoneNumberIdentifier(callerPhonenumber)) 
{ 
    OperationContext = "dtmf-reco-on-c2" 
}; 

var startContinuousDtmfRecognitionAsyncResult = await callAutomationClient.GetCallConnection(callConnectionId) 
    .GetCallMedia() 
    .StartContinuousDtmfRecognitionAsync(continuousDtmfRecognitionOptions); 

Uw toepassing ontvangt gebeurtenisupdates wanneer deze acties slagen of mislukken. U kunt deze gebeurtenissen gebruiken om aangepaste bedrijfslogica te bouwen om de volgende stap te configureren die uw toepassing moet uitvoeren wanneer deze gebeurtenisupdates worden ontvangen.

ContinuousDtmfRecognitionToneReceived-gebeurtenis

Voorbeeld van hoe u een DTMF-toon kunt verwerken die is gedetecteerd.

if (acsEvent is ContinuousDtmfRecognitionToneReceived continuousDtmfRecognitionToneReceived) 
{ 
	logger.LogInformation("Tone detected: sequenceId={sequenceId}, tone={tone}", 
	continuousDtmfRecognitionToneReceived.SequenceId, 
        continuousDtmfRecognitionToneReceived.Tone); 
} 

Azure Communication Services biedt u een SequenceId onderdeel van het ContinuousDtmfRecognitionToneReceived evenement, dat uw toepassing kan gebruiken om de volgorde te reconstrueren waarin de deelnemer de DTMF-tonen heeft ingevoerd.

Gebeurtenis ContinuousDtmfRecognitionFailed

Voorbeeld van hoe u kunt omgaan met het detecteren van DTMF-toon.

if (acsEvent is ContinuousDtmfRecognitionToneFailed continuousDtmfRecognitionToneFailed) 
{ 
    logger.LogInformation("Start continuous DTMF recognition failed, result={result}, context={context}", 
        continuousDtmfRecognitionToneFailed.ResultInformation?.Message, 
        continuousDtmfRecognitionToneFailed.OperationContext); 
} 

ContinuousDtmfRecogntionStopped-gebeurtenis

Voorbeeld van het afhandelen wanneer continue DTMF-herkenning is gestopt, kan dit komen doordat de toepassing de StopContinuousDtmfRecognitionAsync gebeurtenis heeft aangeroepen of omdat de aanroep is beëindigd.

if (acsEvent is ContinuousDtmfRecognitionStopped continuousDtmfRecognitionStopped) 
{ 
    logger.LogInformation("Continuous DTMF recognition stopped, context={context}", continuousDtmfRecognitionStopped.OperationContext); 
} 

Houden

Met de bewaringsactie kunnen ontwikkelaars een gesprek tussen een deelnemer en een systeem of agent tijdelijk onderbreken. Dit kan handig zijn in scenario's waarin de deelnemer moet worden overgebracht naar een andere agent of afdeling of wanneer de agent een supervisor op de achtergrond moet raadplegen voordat het gesprek wordt voortgezet. Gedurende deze periode kunt u ervoor kiezen om audio af te spelen voor de deelnemer die in de wachtstand staat.

// Option 1: Hold without additional options
await callAutomationClient.GetCallConnection(callConnectionId)
    .GetCallMedia().HoldAsync(c2Target);

/*
// Option 2: Hold with play source
PlaySource playSource = /* initialize playSource */;
await callAutomationClient.GetCallConnection(callConnectionId)
    .GetCallMedia().HoldAsync(c2Target, playSource);

// Option 3: Hold with options
var holdOptions = new HoldOptions(target) 
{ 
    OperationCallbackUri = new Uri(""),
    OperationContext = "holdcontext"
};
await callMedia.HoldAsync(holdOptions);
*/

Uit de wacht halen

Met deze actie kunnen ontwikkelaars een gesprek hervatten tussen een deelnemer en een systeem of agent die eerder is onderbroken. Wanneer de deelnemer uit de wachtstand is gehaald, kunnen ze het systeem of de agent opnieuw horen.

var unHoldOptions = new UnholdOptions(target) 
{ 
    OperationContext = "UnHoldPstnParticipant" 
}; 

// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);

/* 
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/

Audiostreaming (openbare preview)

Met audiostreaming kunt u zich abonneren op realtime audiostreams vanuit een doorlopend gesprek. Zie deze pagina voor meer gedetailleerde richtlijnen over hoe u aan de slag gaat met audiostreaming en informatie over callback-gebeurtenissen voor audiostreaming.

Realtime transcriptie (openbare preview)

Met realtime transcriptie hebt u toegang tot livetranscripties voor de audio van een doorlopend gesprek. Zie deze pagina voor meer gedetailleerde richtlijnen over hoe u aan de slag gaat met realtimetranscriptie en informatie over callbackgebeurtenissen voor realtimetranscriptie.

Compatibiliteitstabel mediaactie

De volgende tabel illustreert de mediabewerkingen die mogen worden uitgevoerd/wachtrij als een vorige bewerking nog steeds wordt uitgevoerd/in de wachtrij wordt geplaatst.

Bestaande bewerking Been bellen Toegestaan Niet toegestaan
PlayToAll Hoofd PlayToAll, Recognize(niet-groepsoproep), PlayTo, Recognize(groepsoproep), SendDTMF, StartContinuousDtmfRecognition Geen
Recognize (niet-groepsoproep) Hoofd PlayToAll, Recognize(niet-groepsoproep), PlayTo, Recognize(groepsoproep), SendDTMF, StartContinuousDtmfRecognition Geen
PlayTo Sub PlayToAll, Recognize(niet-groepsoproep) PlayTo, Recognize(Groepsoproep), SendDTMF, StartContinuousDtmfRecognition
Recognize(Groepsoproep) Sub PlayToAll, Recognize(niet-groepsoproep) PlayTo, Recognize(Groepsoproep), SendDTMF, StartContinuousDtmfRecognition
SendDTMF Sub PlayToAll, Recognize(niet-groepsoproep) PlayTo, Recognize(Groepsoproep), SendDTMF, StartContinuousDtmfRecognition
StartContinuousDtmfRecognition Sub PlayToAll, Recognize(niet-groepsoproep),PlayTo, Recognize(groepsoproep), SendDTMF, StartContinuousDtmfRecognition Geen