Поделиться через


Передача контекстных данных между вызовами

Автоматизация вызовов позволяет разработчикам передавать пользовательские контекстные сведения при маршрутизации вызовов. Разработчики могут передавать метаданные о вызове, вызывающем объекте или любой другой информации, относящуюся к их приложению или бизнес-логике. Это позволяет предприятиям управлять и маршрутизировать вызовы между сетями, не беспокоясь о потере контекста.

Контекст передачи поддерживается путем указания пользовательских заголовков. Это необязательный список пар "ключ-значение", которые могут быть включены в состав AddParticipant или Transfer действия. Контекст можно получить позже в рамках полезных IncomingCall данных события.

Контекст пользовательского вызова также перенаправлен в протокол SIP, в том числе пользовательские заголовки freeform, а также стандартный заголовок SIP для пользователей и пользователей (UUI). При маршрутизации входящего вызова из телефонной сети набор данных из SBC в пользовательских заголовках и UUI также включается в IncomingCall полезные данные события.

Все пользовательские данные контекста непрозрачны для протоколов автоматизации вызовов или SIP, а его содержимое не связано с основными функциями.

Ниже приведены примеры по началу работы с пользовательскими заголовками контекста в службе автоматизации вызовов.

В качестве необходимых условий мы рекомендуем ознакомиться с этими статьями, чтобы получить большую часть этого руководства:

Для всех примеров client кода используется объект CallAutomationClient, который можно создать как показано и callConnection является объектом Call Подключение ion, полученным из ответа Answer или CreateCall. Вы также можете получить его из событий обратного вызова, полученных приложением.

Технические параметры

Служба автоматизации вызовов поддерживает до 5 пользовательских заголовков SIP и 1000 пользовательских заголовков VOIP. Кроме того, разработчики могут включать выделенный заголовок user-to-User в составе списка заголовков SIP.

Пользовательский ключ заголовка SIP должен начинаться с обязательного префикса X-MS-Custom-. Максимальная длина ключа заголовка SIP составляет 64 символов, включая префикс X-MS-Custom. Ключ заголовка SIP может состоять из буквенно-цифровых символов и нескольких выбранных символов, которые включают ., !, +%. ~-*_ Максимальная длина значения заголовка SIP составляет 256 символов. Те же ограничения применяются при настройке заголовков SIP в SBC. Значение заголовка SIP может состоять из буквенно-цифровых символов и нескольких выбранных символов, включая =, !;.%*_+~-

Максимальная длина ключа заголовка VOIP составляет 64 символов. Эти заголовки можно отправлять без префикса x-MS-Custom. Максимальная длина значения заголовка VOIP составляет 1024 символов.

Добавление пользовательского контекста при приглашении участника

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

Добавление пользовательского контекста во время передачи вызовов

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

Чтение пользовательского контекста из входящего события вызова

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

Дополнительные ресурсы