Udostępnij za pośrednictwem


Jak przekazywać dane kontekstowe między wywołaniami

Usługa Call Automation umożliwia deweloperom przekazywanie niestandardowych informacji kontekstowych podczas routingu wywołań. Deweloperzy mogą przekazywać metadane dotyczące wywołania, wywoływania lub innych informacji, które są istotne dla ich aplikacji lub logiki biznesowej. Dzięki temu firmy mogą zarządzać i kierować połączenia między sieciami bez konieczności martwienia się o utratę kontekstu.

Przekazywanie kontekstu jest obsługiwane przez określenie nagłówków niestandardowych. Są to opcjonalna lista par klucz-wartość, które można uwzględnić w ramach AddParticipant akcji lub Transfer . Kontekst można później pobrać jako część ładunku IncomingCall zdarzenia.

Niestandardowy kontekst wywołania jest również przekazywany do protokołu SIP. Obejmuje to zarówno nagłówki niestandardowe freeform, jak i standardowy nagłówek SIP user-to-User Information (UUI). Podczas routingu wywołania przychodzącego z sieci telefonii zestaw danych z SBC w nagłówkach niestandardowych i interfejsie użytkownika jest podobnie uwzględniony w ładunku IncomingCall zdarzenia.

Wszystkie niestandardowe dane kontekstowe są nieprzezroczyste do protokołów Call Automation lub SIP, a jego zawartość nie jest powiązana z żadnymi podstawowymi funkcjami.

Poniżej przedstawiono przykłady dotyczące rozpoczynania pracy z niestandardowymi nagłówkami kontekstu w usłudze Call Automation.

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

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ę.

Parametry techniczne

Usługa Call Automation obsługuje maksymalnie 5 niestandardowych nagłówków SIP i 1000 niestandardowych nagłówków VOIP. Ponadto deweloperzy mogą dołączać dedykowany nagłówek User-To-User jako część listy nagłówków SIP.

Niestandardowy klucz nagłówka SIP musi zaczynać się od obowiązkowego prefiksu "X-MS-Custom-". Maksymalna długość klucza nagłówka SIP wynosi 64 znaki, w tym prefiks X-MS-Custom. Klucz nagłówka SIP może składać się z znaków alfanumerycznych i kilku wybranych symboli, w tym ., , _!~%+*-. Maksymalna długość wartości nagłówka SIP wynosi 256 znaków. Te same ograniczenia mają zastosowanie podczas konfigurowania nagłówków SIP na SBC. Wartość nagłówka SIP może składać się z znaków alfanumerycznych i kilku wybranych symboli, które obejmują =, , ;, *%+!_., . ~-

Maksymalna długość klucza nagłówka VOIP wynosi 64 znaki. Te nagłówki można wysyłać bez prefiksu "x-MS-Custom". Maksymalna długość wartości nagłówka VOIP to 1024 znaki.

Dodawanie kontekstu niestandardowego podczas zapraszania uczestnika

// Invite a communication services user and include one VOIP header
var addThisPerson = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
addThisPerson.CustomCallingContext.AddVoip("myHeader", "myValue");
AddParticipantsResult result = await callConnection.AddParticipantAsync(addThisPerson);
// Invite a PSTN user and set UUI and custom SIP headers
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); 
var addThisPerson = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);

// Set custom UUI header. This key is sent on SIP protocol as User-to-User
addThisPerson.CustomCallingContext.AddSipUui("value");

// This provided key will be automatically prefixed with X-MS-Custom on SIP protocol, such as 'X-MS-Custom-{key}'
addThisPerson.CustomCallingContext.AddSipX("header1", "customSipHeaderValue1");
AddParticipantsResult result = await callConnection.AddParticipantAsync(addThisPerson);

Dodawanie kontekstu niestandardowego podczas transferu połączeń

//Transfer to communication services user and include one VOIP header
var transferDestination = new CommunicationUserIdentifier("<user_id>"); 
var transferOption = new TransferToParticipantOptions(transferDestination);   
var transferOption = new TransferToParticipantOptions(transferDestination) {
    OperationContext = "<Your_context>",
    OperationCallbackUri = new Uri("<uri_endpoint>") // Sending event to a non-default endpoint.
};
transferOption.CustomCallingContext.AddVoip("customVoipHeader1", "customVoipHeaderValue1");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);

//Transfer a PSTN call to phone number and set UUI and custom SIP headers
var transferDestination = new PhoneNumberIdentifier("<target_phoneNumber>");
var transferOption = new TransferToParticipantOptions(transferDestination);
transferOption.CustomCallingContext.AddSipUui("uuivalue");
transferOption.CustomCallingContext.AddSipX("header1", "headerValue");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption)

Odczytywanie kontekstu niestandardowego ze zdarzenia połączenia przychodzącego

AcsIncomingCallEventData incomingEvent = <incoming call event from Event Grid>;
// Retrieve incoming call custom context
AcsIncomingCallCustomContext callCustomContext = incomingEvent.CustomContext;

// Inspect dictionary with key/value pairs
var voipHeaders = callCustomContext.VoipHeaders;
var sipHeaders = callCustomContext.SipHeaders;

// Get SIP UUI header value
var userToUser = sipHeaders["user-To-User"]

// Proceed to answer or reject call as usual

Dodatkowe zasoby

  • Aby uzyskać przykładowy ładunek połączenia przychodzącego, zapoznaj się z tym przewodnikiem.

  • Dowiedz się więcej o szczegółach protokołu SIP na potrzeby routingu bezpośredniego.