Compartir vía


Cómo pasar datos contextuales entre llamadas

La automatización de llamadas permite a los desarrolladores pasar información contextual personalizada al enrutar llamadas. Los desarrolladores pueden pasar metadatos sobre la llamada, el destinatario o cualquier otra información relevante para su aplicación o lógica de negocios. Esto permite a las empresas administrar y enrutar llamadas entre redes sin tener que preocuparse por perder el contexto.

Se admite el paso de contexto especificando encabezados personalizados. Se trata de una lista opcional de pares clave-valor que se pueden incluir como parte de acciones de AddParticipant o Transfer. El contexto se puede recuperar más adelante como parte de la carga del evento IncomingCall.

El contexto de llamada personalizado también se reenvía al protocolo SIP, lo que incluye los encabezados personalizados de forma libre, así como el encabezado SIP estándar de información de usuario a usuario (UUI). Al enrutar una llamada entrante desde la red de telefonía, el conjunto de datos del SBC en los encabezados personalizados y UUI se incluye de forma similar en la carga del evento IncomingCall.

Todos los datos de contexto personalizados son opacos para la automatización de llamadas o protocolos SIP y su contenido no está relacionado con ninguna función básica.

A continuación se muestran ejemplos sobre cómo empezar a usar encabezados de contexto personalizados en Automatización de llamadas.

Como requisito previo, se recomienda leer estos artículos para sacar el máximo partido a esta guía:

  • Guía de conceptos de la automatización de llamadas que describe el modelo de programación de eventos de acción y las devoluciones de llamada de evento.
  • Obtenga información sobre los identificadores de usuario, como CommunicationUserIdentifier y PhoneNumberIdentifier, que se usan en esta guía.

Para todos los ejemplos de código, client es el objeto CallAutomationClient que se puede crear tal como se muestra y callConnection es el objeto CallConnection que se obtiene de la respuesta Answer o CreateCall. También se puede obtener de los eventos de devolución de llamada que recibe la aplicación.

Parámetros técnicos

Automatización de llamadas admite hasta 5 encabezados SIP personalizados y 1000 encabezados VOIP personalizados. Además, los desarrolladores pueden incluir un encabezado de usuario a usuario dedicado como parte de la lista de encabezados SIP.

La clave de encabezado SIP personalizada debe comenzar con un prefijo obligatorio "X-MS-Custom-". La longitud máxima de una clave de encabezado SIP es de 64 caracteres, incluido el prefijo "X-MS-Custom-". La clave de encabezado SIP puede constar de caracteres alfanuméricos y algunos símbolos seleccionados, entre los que se incluye: ., !, %, *, _, +, ~, -. La longitud máxima del valor del encabezado SIP es de 256 caracteres. Se aplican las mismas limitaciones al configurar los encabezados SIP en el SBC. El valor de encabezado SIP puede constar de caracteres alfanuméricos y algunos símbolos seleccionados, entre los que se incluye: =, ;, ., !, %, *, _, +, ~, -.

La longitud máxima de una clave de encabezado VOIP es de 64 caracteres. Estos encabezados se pueden enviar sin el prefijo "X-MS-Custom-". La longitud máxima del valor del encabezado VOIP es de 1024 caracteres.

Agregar contexto personalizado al invitar a un participante

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

Agregar contexto personalizado durante la transferencia de llamadas

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

Lectura del contexto personalizado desde un evento de llamada entrante

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

Recursos adicionales