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:
- Przewodnik pojęć związanych z usługą Call Automation opisujący model programowania zdarzeń akcji i wywołania zwrotne zdarzeń.
- Dowiedz się więcej o identyfikatorach użytkowników, takich jak CommunicationUserIdentifier i PhoneNumberIdentifier używanych w tym przewodniku.
- 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.
W przypadku wszystkich przykładów kodu obiekt CallAutomationClient, client
który można utworzyć, jak pokazano, i callConnection
jest obiektem CallConnection 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 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);
}
Hold
Akcja blokady umożliwia deweloperom tymczasowe wstrzymanie konwersacji między uczestnikiem a systemem lub agentem. Może to być przydatne w scenariuszach, w których uczestnik musi zostać przeniesiony do innego agenta lub działu lub gdy agent musi skonsultować się z przełożonym w tle przed kontynuowaniem rozmowy. W tym czasie możesz wybrać odtwarzanie dźwięku uczestnikowi, który jest wstrzymany.
// 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);
*/
Wstrzymanie
Akcja wstrzymania umożliwia deweloperom wznowienie rozmowy między uczestnikiem a systemem lub agentem, który został wcześniej wstrzymany. Gdy uczestnik zostanie zdjęty z blokady, będzie mógł ponownie usłyszeć system lub agenta.
var unHoldOptions = new UnholdOptions(target)
{
OperationContext = "UnHoldPstnParticipant"
};
// Option 1
var UnHoldParticipant = await callMedia.UnholdAsync(unHoldOptions);
/*
// Option 2
var UnHoldParticipant = await callMedia.UnholdAsync(target);
*/
Przesyłanie strumieniowe audio (publiczna wersja zapoznawcza)
Przesyłanie strumieniowe audio umożliwia subskrybowanie strumieni audio w czasie rzeczywistym z trwającego połączenia. Aby uzyskać bardziej szczegółowe wskazówki dotyczące rozpoczynania pracy z przesyłaniem strumieniowym audio i informacjami o zdarzeniach wywołania zwrotnego przesyłania strumieniowego audio, zobacz tę stronę.
Transkrypcja w czasie rzeczywistym (publiczna wersja zapoznawcza)
Transkrypcja w czasie rzeczywistym umożliwia dostęp do transkrypcji na żywo dla dźwięku trwającego połączenia. Aby uzyskać bardziej szczegółowe wskazówki dotyczące rozpoczynania pracy z transkrypcją w czasie rzeczywistym i informacji o zdarzeniach zwrotnych transkrypcji w czasie rzeczywistym, zobacz tę stronę.
Tabela zgodności akcji multimediów
W poniższej tabeli przedstawiono, jakie operacje multimediów mogą być uruchamiane/kolejkowane, jeśli poprzednia operacja nadal jest uruchomiona/w kolejce.
Istniejąca operacja | Odwołuj nogę | Dozwolone | Niedozwolone |
---|---|---|---|
PlayToAll | Główne | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Brak |
Recognize(wywołanie niegrupowe) | Główne | PlayToAll, Recognize(Non-Group Call), PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Brak |
PlayTo | Sub | PlayToAll, Recognize(wywołanie niegrupowe) | PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition |
Recognize(Wywołanie grupy) | Sub | PlayToAll, Recognize(wywołanie niegrupowe) | PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition |
SendDTMF | Sub | PlayToAll, Recognize(wywołanie niegrupowe) | PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition |
StartContinuousDtmfRecognition | Sub | PlayToAll, Recognize(Non-Group Call),PlayTo, Recognize(Group Call), SendDTMF, StartContinuousDtmfRecognition | Brak |