Ří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:
- Průvodce koncepty automatizace volání, který popisuje programovací model akcí a zpětné volání událostí.
- Seznamte se s identifikátory uživatelů, jako jsou CommunicationUserIdentifier a PhoneNumberIdentifier používané v této příručce.
- 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é |