Så här styr du medieåtgärder mitt i anropet med Samtalsautomation

Call Automation använder ett REST API-gränssnitt för att ta emot begäranden om åtgärder och ge svar för att meddela om begäran har skickats eller inte. På grund av anropets asynkrona karaktär har de flesta åtgärder motsvarande händelser som utlöses när åtgärden slutförs eller misslyckas. Den här guiden beskriver de åtgärder som är tillgängliga för utvecklare under anrop, till exempel Skicka DTMF och Kontinuerlig DTMF-igenkänning. Åtgärder åtföljs av exempelkod om hur du anropar åtgärden.

Samtalsautomation stöder olika andra åtgärder för att hantera anrop och inspelning som inte ingår i den här guiden.

Kommentar

Samtalsautomation samverkar för närvarande inte med Microsoft Teams. Åtgärder som att göra, omdirigera ett anrop till en Teams-användare eller spela upp ljud till en Teams-användare med hjälp av Samtalsautomation stöds inte.

Som en förutsättning rekommenderar vi att du läser artiklarna nedan för att få ut det mesta av den här guiden:

  1. Guide för att anropa Automation-begrepp som beskriver programmeringsmodellen för åtgärdshändelser och återanrop till händelser.
  2. Lär dig mer om användaridentifierare som CommunicationUserIdentifier och Telefon NumberIdentifier som används i den här guiden.
  3. Läs mer om hur du styr och styr samtal med Call Automation, som lär dig hur du hanterar grunderna i att hantera ett samtal.

För alla kodexempel client är det CallAutomationClient-objekt som kan skapas som det visas och callConnection är objektet Call Anslut ion som hämtats från Svar eller CreateCall-svar. Du kan också hämta den från motringningshändelser som tas emot av ditt program.

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

Skicka DTMF

Du kan skicka DTMF-toner till en extern deltagare, vilket kan vara användbart när du redan är i ett samtal och behöver bjuda in en annan deltagare som har ett tilläggsnummer eller en IVR-meny för att navigera.

Kommentar

Detta stöds endast för externa PSTN-deltagare och stöder sändning av högst 18 toner i taget.

SendDtmfAsync-metod

Skicka en lista med DTMF-toner till en extern deltagare.

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

När ditt program skickar dessa DTMF-toner får du händelseuppdateringar. Du kan använda SendDtmfTonesCompleted händelserna och SendDtmfTonesFailed för att skapa affärslogik i ditt program för att fastställa nästa steg.

Exempel på SendDtmfTonesCompleted-händelse

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

Exempel på SendDtmfTonesFailed

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

Kontinuerlig DTMF-igenkänning

Du kan prenumerera för att få kontinuerliga DTMF-toner under hela samtalet. Ditt program får DTMF-toner när den målinriktade deltagaren trycker på en nyckel på deras knappsats. Dessa toner skickas till ditt program en i taget när deltagaren trycker på dem.

StartContinuousDtmfRecognitionAsync-metod

Börja identifiera DTMF-toner som skickats av en deltagare.

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

När ditt program inte längre vill ta emot DTMF-toner från deltagaren längre kan du använda StopContinuousDtmfRecognitionAsync metoden för att låta Azure Communication Services veta för att sluta identifiera DTMF-toner.

StopContinuousDtmfRecognitionAsync

Sluta identifiera DTMF-toner som skickats av deltagaren.

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

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

Programmet får händelseuppdateringar när dessa åtgärder antingen lyckas eller misslyckas. Du kan använda dessa händelser för att skapa anpassad affärslogik för att konfigurera nästa steg som programmet måste ta när det tar emot dessa händelseuppdateringar.

ContinuousDtmfRecognitionToneReceived-händelse

Exempel på hur du kan hantera en DTMF-ton har identifierats.

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

Azure Communication Services ger dig en som en SequenceId del av ContinuousDtmfRecognitionToneReceived händelsen, som ditt program kan använda för att rekonstruera den ordning som deltagaren angav DTMF-toner i.

ContinuousDtmfRecognitionFailed-händelse

Exempel på hur du kan hantera när DTMF-tonidentifiering misslyckas.

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

ContinuousDtmfRecogntionStopad händelse

Exempel på hur du hanterar när den kontinuerliga DTMF-igenkänningen har stoppats kan bero på att programmet anropade StopContinuousDtmfRecognitionAsync händelsen eller att anropet har avslutats.

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