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


Передача данных пользователь-пользователь (UUI) в заголовке

В этой статье описывается, как передавать информацию пользователь-пользователь (UUI) в заголовке при маршрутизации вызовов с помощью SDK для звонков служб коммуникации Azure. Эта возможность позволяет пользователям передавать метаданные о вызове, адресате вызова или любой другой информации, относящиеся к их приложениям или бизнес-логике.

Пакет SDK webJS служб коммуникации Azure позволяет разработчикам включать пользовательские контекстные данные (включенные в заголовок для вызывающего объекта) при перенаправлении и маршрутизации вызовов от одного человека к другому. Эта информация, также известная как информация "от пользователя к пользователю" (данные UUI) или данные управления вызовом UUI, представляет собой небольшой объем данных, вставляемый приложением, инициирующим вызов. Данные UUI непрозрачны для конечных пользователей, выполняющих вызов.

Контекстная информация, которая поддерживается, включает как произвольные пользовательские заголовки, так и стандартный SIP-заголовок UUI. Кроме того, при получении входящего вызова настраиваемые заголовки и UUI включаются в incomingCall полезные данные.

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

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

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

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

Внимание

Чтобы передать данные UUI с помощью вызова WebJS SDK, необходимо использовать версию GA или общедоступную предварительную версию 1.29.1 или более позднюю.

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

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

Максимальная длина ключа заголовка SIP составляет 64 символов, включая префикс X-MS-Custom. При добавлении заголовка SIP в вызывающий пакет SDK он автоматически добавляет X-MS-Custom- префикс, который можно увидеть, проверяя заголовок SIP с помощью инспектора пакетов.

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

Максимальная длина ключа заголовка VOIP составляет 64 символов. Максимальная длина значения заголовка VOIP составляет 1024 символов.

При добавлении этих пользовательских заголовков в качестве разработчика можно добавить только заголовки SIP, только заголовки VoIP или и те, и другие.

Примечание.

При отправке заголовков SIP рекомендуется URL-кодирование значений заголовков. Даже если значения содержат только допустимые символы, промежуточные операторы могут не анализировать их правильно, если они не закодированы URL-адресом.

Примечание.

В настоящее время добавление пользовательских заголовков информации пользователь-пользователь поддерживается только при инициировании 1:1 видеозвонка. Пересылка заголовков информации о пользователе в групповых вызовах в настоящее время не поддерживается. Чтобы обойти это ограничение после запуска вызова 1:1, вы можете добавить участников при сохранении сведений о пользователях в рамках вызовов.

Дополнительные сведения об API интерфейса пользовательского контекста см. в ресурсе Custom Context API.

Совершите вызов с данными User-to-User Information (UUI)

// Setting custom context UUI Headers
const callOptions = {
    customContext: {
        voipHeaders: [
            {key: 'voip-key-1', value: 'voip-value-1'},
            {key: 'voip-key-2', value: 'voip-value-2'}
        ],

        sipHeaders: [
            {key: 'sip-key-1', value: 'sip-value-1'},
            {key: 'sip-key-2', value: 'sip-value-2'}
        ],
        userToUser: 'userToUserHeader',
    },
};
});

Чтение и анализ заголовков информации от пользователя к пользователю в вызове

Экземпляр callAgent создает событие incomingCall, когда зарегистрированный в системе идентификатор принимает входящий вызов. Чтобы прослушивать это событие и извлекать контекстные сведения, подпишитесь с помощью одного из следующих параметров:

let info = '';
 
callAgent.on("incomingCall", (args) => {
    const incomingCall = args.incomingCall;
    if (incomingCall.customContext) {
        if (incomingCall.customContext.userToUser) {
            info += `userToUser: '${incomingCall.customContext.userToUser}'\n`;
        }
        if (incomingCall.customContext.sipHeaders) {
            incomingCall.customContext.sipHeaders.forEach(header => info += `sip: ${header.key}: '${header.value}'\n`);
        }
        if (incomingCall.customContext.voipHeaders) {
            incomingCall.customContext.voipHeaders.forEach(header => info += `voip: ${header.key}: '${header.value}'\n`);
        }
    }
});

Следующие шаги