Media-acties tijdens een oproep beheren met Belautomatisering

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 dit artikel worden de acties behandeld die beschikbaar zijn voor ontwikkelaars tijdens gesprekken, zoals SendDTMF en ContinuousDtmfRecognition. Acties worden vergezeld van voorbeeldcode voor het aanroepen van de specifieke actie.

Call Automation ondersteunt andere acties voor het beheren van gesprekken en opnamen die niet zijn opgenomen in dit artikel.

Note

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

Prerequisites

  • Lees het artikel over gespreksautomatiseringconcepten concepten waarin het actie-gebeurtenisprogrammeermodel en event callbacks worden beschreven.
  • Meer informatie over de gebruikers-id's zoals CommunicationUserIdentifier en PhoneNumberIdentifier die worden gebruikt in dit artikel.
  • 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 het CallAutomationClient object dat u kunt maken, zoals weergegeven en callConnection het CallConnection object is dat u ophaalt uit het Answer of CreateCall antwoord. U kunt deze ook verkrijgen via callback-gebeurtenissen die door uw toepassing worden ontvangen.

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

DTMF verzenden

U kunt DTMF-tonen naar een externe deelnemer verzenden. Deze mogelijkheid kan handig zijn wanneer u al in gesprek bent en een andere deelnemer moet uitnodigen die een toestelnummer heeft of een interactief spraakantwoordmenu gebruikt.

Note

Deze functie wordt alleen ondersteund voor externe deelnemers op openbare telefoonnetwerken 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.

Een voorbeeld van een SendDtmfTonesCompleted gebeurtenis:

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

Een voorbeeld van een SendDtmfTonesFailed gebeurtenis:

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

Voortdurende DTMF-herkenning

U kunt zich abonneren om doorlopende DTMF-tonen te ontvangen tijdens het gesprek. Uw toepassing ontvangt DTMF-tonen wanneer de beoogde deelnemer op een toets op het toetsenblok drukt. De 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, gebruikt u de StopContinuousDtmfRecognitionAsync methode 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 een 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

Een voorbeeld van hoe u een DTMF-toon kunt verwerken die succesvol is gedetecteerd.

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

Azure Communication Services biedt u SequenceId als onderdeel van het ContinuousDtmfRecognitionToneReceived evenement. Uw toepassing kan deze gebruiken om de volgorde te reconstrueren waarin de deelnemer de DTMF-tonen heeft ingevoerd.

Gebeurtenis ContinuousDtmfRecognitionFailed

Een voorbeeld van wat u moet doen wanneer DTMF-toondetectie mislukt.

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

ContinuousDtmfRecognitionStopped-gebeurtenis

Een voorbeeld van wat u moet doen wanneer continue DTMF-herkenning stopt. Misschien heeft uw toepassing de StopContinuousDtmfRecognitionAsync gebeurtenis aangeroepen of de aanroep beëindigd.

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

Hold

Met de pauzeeractie kunnen ontwikkelaars een gesprek tussen een deelnemer en een systeem of agent tijdelijk onderbreken. Deze mogelijkheid is handig in scenario's waarin de deelnemer moet worden overgedragen naar een andere agent of afdeling of wanneer de agent een supervisor moet raadplegen voordat het gesprek wordt voortgezet. Gedurende deze tijd 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);
*/

Unhold

Met de unhold-actie kunnen ontwikkelaars een gesprek hervatten tussen een deelnemer en een systeem of agent dat eerder gepauzeerd was. Wanneer de deelnemer van hold wordt gehaald, kan hij of zij 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

Met audiostreaming kunt u zich abonneren op realtime audiostreams vanuit een doorlopend gesprek. Zie Quickstart: Audiostreaming aan de serverkant voor meer informatie over het starten met audiostreaming en informatie over audiostreaming-callbackgebeurtenissen.

Realtime transcriptie

Door realtime transcriptie te gebruiken, hebt u toegang tot livetranscripties voor de audio van een doorlopend gesprek. Zie Realtimetranscriptie toevoegen aan uw toepassing voor meer informatie over realtime transcriptie en callback-events voor realtimetranscriptie.

Compatibiliteitstabel voor mediaacties

In de volgende tabel ziet u welke mediabewerkingen mogen worden uitgevoerd of in de wachtrij staan als een vorige bewerking nog steeds wordt uitgevoerd of in de wachtrij is geplaatst.

Bestaande bewerking Been bellen Allowed Disallowed
PlayToAll Main PlayToAll, Recognize(Non-Group Call)PlayTo, Recognize(Group Call), SendDTMFStartContinuousDtmfRecognition None
Recognize(Non-Group Call) Main PlayToAll, Recognize(Non-Group Call)PlayTo, Recognize(Group Call), SendDTMFStartContinuousDtmfRecognition None
PlayTo Sub PlayToAll, Recognize(Non-Group Call) PlayTo,Recognize(Group Call),SendDTMF,StartContinuousDtmfRecognition
Recognize(Group Call) Sub PlayToAll, Recognize(Non-Group Call) PlayTo,Recognize(Group Call),SendDTMF,StartContinuousDtmfRecognition
SendDTMF Sub PlayToAll, Recognize(Non-Group Call) PlayTo,Recognize(Group Call),SendDTMF,StartContinuousDtmfRecognition
StartContinuousDtmfRecognition Sub PlayToAll, ,Recognize(Non-Group Call)PlayTo , Recognize(Group Call)SendDTMFStartContinuousDtmfRecognition None