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:
- Guide för att anropa Automation-begrepp som beskriver programmeringsmodellen för åtgärdshändelser och återanrop till händelser.
- Lär dig mer om användaridentifierare som CommunicationUserIdentifier och PhoneNumberIdentifier som används i den här guiden.
- 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 CallConnection-objektet som hämtas 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);
}
Behåll
Med undantagsåtgärden kan utvecklare tillfälligt pausa en konversation mellan en deltagare och ett system eller en agent. Detta kan vara användbart i scenarier där deltagaren måste överföras till en annan agent eller avdelning eller när agenten behöver konsultera en övervakare i bakgrunden innan konversationen fortsätter. Under den här tiden kan du välja att spela upp ljud till deltagaren som är pausade.
// 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);
*/
Ta bort källskatt
Åtgärden unhold gör att utvecklare kan återuppta en konversation mellan en deltagare och ett system eller en agent som tidigare pausats. När deltagaren tas ur tjänst kommer de att kunna höra systemet eller agenten igen.
var unHoldOptions = new UnholdOptions(target)
{
OperationContext = "UnHoldPstnParticipant"
};
// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);
/*
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/
Ljuduppspelning (offentlig förhandsversion)
Med ljudströmning kan du prenumerera på realtidsljudströmmar från ett pågående samtal. Mer detaljerad vägledning om hur du kommer igång med ljudströmning och information om återanropshändelser för ljudströmning finns på den här sidan.
Transkription i realtid (offentlig förhandsversion)
Med transkription i realtid kan du få åtkomst till live-transkriptioner för ljudet från ett pågående samtal. Mer detaljerad vägledning om hur du kommer igång med transkription i realtid och information om återanropshändelser för transkription i realtid finns på den här sidan.
Kompatibilitetstabell för medieåtgärder
I följande tabell visas vilka medieåtgärder som tillåts köra/köa om en tidigare åtgärd fortfarande körs/köas.
Befintlig åtgärd | Ring upp ben | Tillåtet | Tillåts inte |
---|---|---|---|
PlayToAll | Huvud | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Ingen |
Recognize(Non-Group Call) | Huvud | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Ingen |
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), SendDTMF, StartContinuousDtmfRecognition | Ingen |