Sdílet prostřednictvím


Řízení akcí médií uprostřed volání pomocí automatizace volání

Automatizace volání používá rozhraní REST API k příjmu požadavků na akce a poskytnutí odpovědí, které upozorňují, jestli byl požadavek úspěšně odeslán nebo ne. Vzhledem k asynchronní povaze volání má většina akcí odpovídající události, které se aktivují, když se akce úspěšně dokončí nebo selže. Tato příručka popisuje akce dostupné vývojářům během volání, jako je odesílání DTMF a průběžné rozpoznávání DTMF. Akce jsou doprovázeny ukázkovým kódem o tom, jak vyvolat zmíněné akce.

Automatizace volání podporuje různé další akce pro správu hovorů a nahrávání, které nejsou součástí této příručky.

Poznámka:

Automatizace hovorů v současné době nespolupracuje s Microsoft Teams. Akce, jako je provádění, přesměrování hovoru na uživatele Teams nebo přehrávání zvuku na uživatele Teams pomocí automatizace hovorů se nepodporuje.

Jako předpoklad doporučujeme přečíst si následující články, které vám povedou na maximum z tohoto průvodce:

  1. Průvodce koncepty automatizace volání, který popisuje programovací model akcí a zpětné volání událostí.
  2. Seznamte se s identifikátory uživatelů, jako jsou CommunicationUserIdentifier a PhoneNumberIdentifier používané v této příručce.
  3. Přečtěte si další informace o tom, jak řídit a řídit volání pomocí automatizace volání, která vás naučí o práci se základy práce s voláním.

Pro všechny ukázky kódu je CallAutomationClient objekt, client který lze vytvořit, jak je znázorněno a callConnection je CallConnection objekt získaný z odpovědi Answer nebo CreateCall. Můžete ho také získat z událostí zpětného volání přijatých vaší aplikací.

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

Odeslat DTMF

Můžete posílat tóny DTMF externímu účastníkovi, což může být užitečné, když už jste na hovoru a potřebujete pozvat jiného účastníka, který má číslo linky nebo nabídku IVR pro navigaci.

Poznámka:

To se podporuje jenom u externích účastníků veřejné telefonní sítě a podporuje odesílání maximálně 18 tónů najednou.

SendDtmfAsync – metoda

Pošlete externímu účastníkovi seznam tónů DTMF.

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

Když vaše aplikace odešle tyto tóny DTMF, obdržíte aktualizace událostí. Pomocí událostí a SendDtmfTonesFailed událostí můžete SendDtmfTonesCompleted ve své aplikaci vytvořit obchodní logiku a určit další kroky.

Příklad události SendDtmfTonesCompleted

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

Příklad SendDtmfTonesFailed

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

Průběžné rozpoznávání DTMF

Můžete se přihlásit k odběru nepřetržitých tónů DTMF během hovoru. Vaše aplikace obdrží tóny DTMF, protože cílový účastník stiskne na klávesu na klávesnici. Tyto tóny se posílají do aplikace jeden po druhém, protože je účastník stiskne.

StartContinuousDtmfRecognitionAsync – metoda

Začněte zjišťovat tóny DTMF odeslané účastníkem.

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

Pokud už vaše aplikace nechce od účastníka přijímat tóny DTMF, můžete pomocí StopContinuousDtmfRecognitionAsync této metody dát službě Azure Communication Services vědět, aby se zastavilo zjišťování tónů DTMF.

StopContinuousDtmfRecognitionAsync

Přestaňte zjišťovat tóny DTMF odeslané účastníkem.

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

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

Když tyto akce proběhnou úspěšně nebo selžou, vaše aplikace obdrží aktualizace událostí. Tyto události můžete použít k vytvoření vlastní obchodní logiky pro konfiguraci dalšího kroku, který vaše aplikace potřebuje, když obdrží tyto aktualizace událostí.

Událost ContinuousDtmfRecognitionToneReceived

Příklad úspěšného zjištění tónu DTMF

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

Služba Azure Communication Services poskytuje SequenceId v rámci ContinuousDtmfRecognitionToneReceived události, kterou vaše aplikace může použít k rekonstrukci pořadí, ve kterém účastník vstoupil do tónů DTMF.

Událost ContinuousDtmfRecognitionFailed

Příklad, jak můžete zpracovat, když detekce tónu DTMF selže.

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

Událost ContinuousDtmfRecogntionStopped

Příklad, jak zpracovat, když je zastaveno průběžné rozpoznávání DTMF, může to být proto, že aplikace vyvolala StopContinuousDtmfRecognitionAsync událost nebo protože volání skončilo.

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

Hold

Akce blokování umožňuje vývojářům dočasně pozastavit konverzaci mezi účastníkem a systémem nebo agentem. To může být užitečné ve scénářích, kdy je nutné převést účastníka na jiného agenta nebo oddělení nebo v případě, že agent musí před pokračováním konverzace konzultovat vedoucího na pozadí. Během této doby se můžete rozhodnout přehrát zvuk účastníkovi, který je přidržený.

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

Nezdržovat

Akce nezdržování umožňuje vývojářům pokračovat v konverzaci mezi účastníkem a systémem nebo agentem, který byl dříve pozastaven. Když se účastník oddrží, bude moct znovu slyšet systém nebo agenta.

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

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

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

Streamování zvuku (Public Preview)

Streamování zvuku umožňuje přihlásit se k odběru zvukových streamů v reálném čase z probíhajícího hovoru. Podrobnější pokyny, jak začít se streamováním zvuku a informacemi o událostech zpětného volání streamování zvuku, najdete na této stránce.

Přepis v reálném čase (Public Preview)

Přepis v reálném čase umožňuje přístup k živým přepisům zvuku probíhajícího hovoru. Podrobnější pokyny k tomu, jak začít s přepisem v reálném čase a informacemi o událostech zpětného volání přepisu v reálném čase, najdete na této stránce.

Tabulka kompatibility akcí médií

Následující tabulka ukazuje, jaké operace médií se můžou spouštět nebo zařadit do fronty, pokud je předchozí operace stále spuštěná nebo zařazená do fronty.

Existující operace Volat nohu Povoleno Zakázané
PlayToAll Hlavní PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition Nic
Recognize (neskupovaný hovor) Hlavní PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition Nic
PlayTo Sub PlayToAll, Recognize (neskupovací volání) PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition
Recognize(skupinový hovor) Sub PlayToAll, Recognize (neskupovací volání) PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition
SendDTMF Sub PlayToAll, Recognize (neskupovací volání) PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition
StartContinuousDtmfRecognition Sub PlayToAll, Recognize(Non-Group Call),PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition Žádné