Udostępnij za pośrednictwem


Jak kontrolować akcje multimediów w połowie wywołania za pomocą usługi Call Automation

Usługa Call Automation używa interfejsu API REST do odbierania żądań dotyczących akcji i dostarczania odpowiedzi w celu powiadomienia o tym, czy żądanie zostało pomyślnie przesłane, czy nie. Ze względu na asynchroniczny charakter wywoływania większość akcji ma odpowiednie zdarzenia, które są wyzwalane po pomyślnym zakończeniu akcji lub niepomyślnie. W tym przewodniku opisano akcje dostępne dla deweloperów podczas wywołań, takie jak Wysyłanie dtMF i ciągłe rozpoznawanie DTMF. Do akcji dołączony jest przykładowy kod dotyczący sposobu wywoływania tej akcji.

Usługa Call Automation obsługuje różne inne akcje do zarządzania wywołaniami i nagrywaniem, które nie są zawarte w tym przewodniku.

Uwaga

Obecnie usługa Call Automation nie współdziała z usługą Microsoft Teams. Akcje takie jak tworzenie, przekierowywanie wywołania do użytkownika usługi Teams lub odtwarzanie dźwięku użytkownikowi usługi Teams przy użyciu usługi Call Automation nie jest obsługiwane.

W ramach wymagań wstępnych zalecamy przeczytanie poniższych artykułów, aby jak najlepiej wykorzystać ten przewodnik:

  1. Przewodnik pojęć związanych z usługą Call Automation opisujący model programowania zdarzeń akcji i wywołania zwrotne zdarzeń.
  2. Dowiedz się więcej o identyfikatorach użytkowników, takich jak CommunicationUserIdentifier i Telefon NumberIdentifier używanych w tym przewodniku.
  3. Dowiedz się więcej o sposobie kontrolowania i kierowania wywołaniami za pomocą usługi Call Automation, która uczy cię o radzeniu sobie z podstawami radzenia sobie z wywołaniem.

Dla wszystkich przykładów kodu jest obiekt CallAutomationClient, client który można utworzyć, jak pokazano i callConnection jest obiektem Call Połączenie ion uzyskanym z odpowiedzi Answer lub CreateCall. Można go również uzyskać z zdarzeń wywołania zwrotnego odebranych przez aplikację.

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

Wyślij DTMF

Możesz wysłać ton DTMF do zewnętrznego uczestnika, co może być przydatne, gdy jesteś już na wezwanie i musisz zaprosić innego uczestnika, który ma numer rozszerzenia lub menu IVR, aby przejść.

Uwaga

Jest to obsługiwane tylko dla zewnętrznych uczestników PSTN i obsługuje wysyłanie maksymalnie 18 ton jednocześnie.

SendDtmfAsync, metoda

Wyślij listę tonów DTMF do uczestnika zewnętrznego.

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

Gdy aplikacja wysyła te dźwięki DTMF, otrzymujesz aktualizacje zdarzeń. Zdarzenia i SendDtmfTonesFailed umożliwiają SendDtmfTonesCompleted tworzenie logiki biznesowej w aplikacji w celu określenia następnych kroków.

Przykład zdarzenia SendDtmfTonesCompleted

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

Przykład sendDtmfTonesFailed

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

Ciągłe rozpoznawanie DTMF

Możesz subskrybować odbieranie ciągłych tonów DTMF w całym wywołaniu. Aplikacja otrzymuje ton DTMF, gdy docelowy uczestnik naciska na klawisz na klawiaturze. Te odcienie są wysyłane do aplikacji jeden po drugim, ponieważ uczestnik naciska na nie.

StartContinuousDtmfRecognitionAsync, metoda

Rozpocznij wykrywanie tonów DTMF wysłanych przez uczestnika.

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

Gdy aplikacja nie chce już otrzymywać od uczestnika tonów DTMF, możesz użyć StopContinuousDtmfRecognitionAsync metody , aby poinformować usługi Azure Communication Services, aby zatrzymać wykrywanie tonów DTMF.

StopContinuousDtmfRecognitionAsync

Zatrzymaj wykrywanie tonów DTMF wysłanych przez uczestnika.

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

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

Aplikacja odbiera aktualizacje zdarzeń, gdy te akcje kończą się powodzeniem lub niepowodzeniem. Za pomocą tych zdarzeń można utworzyć niestandardową logikę biznesową w celu skonfigurowania następnego kroku, który aplikacja musi wykonać po odebraniu tych aktualizacji zdarzeń.

ContinuousDtmfRecognitionToneReceived Event

Przykład pomyślnego wykrycia tonu DTMF.

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

Usługi Azure Communication Services udostępniają w SequenceId ramach ContinuousDtmfRecognitionToneReceived zdarzenia, którego aplikacja może użyć do odtworzenia kolejności, w której uczestnik wprowadził ton DTMF.

ContinuousDtmfRecognitionFailed Event

Przykład sposobu obsługi wykrywania tonu DTMF kończy się niepowodzeniem.

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

Zdarzenie ContinuousDtmfRecogntionStopped

Przykład sposobu obsługi zatrzymania ciągłego rozpoznawania DTMF może to być spowodowane tym, że aplikacja wywołała StopContinuousDtmfRecognitionAsync zdarzenie lub wywołanie zostało zakończone.

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