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 Telefon NumberIdentifier 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 jedná se o Call Připojení ion objekt získaný z odpovědi Answer nebo CreateCall odpovědi. 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); 
}