Partilhar via


Como passar dados contextuais entre chamadas

A automação de chamadas permite que os desenvolvedores passem informações contextuais personalizadas ao rotear chamadas. Os desenvolvedores podem passar metadados sobre a chamada, o destinatário ou qualquer outra informação que seja relevante para seu aplicativo ou lógica de negócios. Isso permite que as empresas gerenciem e encaminhem chamadas entre redes sem ter que se preocupar em perder o contexto.

A passagem de contexto é suportada pela especificação de cabeçalhos personalizados. Estas são uma lista opcional de pares chave-valor que podem ser incluídos como parte ou AddParticipant Transfer ações. O contexto pode ser recuperado posteriormente como parte da carga útil do IncomingCall evento.

O contexto de chamada personalizada também é encaminhado para o protocolo SIP, isso inclui os cabeçalhos personalizados de forma livre, bem como o cabeçalho SIP padrão de Informações do Usuário para Usuário (UUI). Ao rotear uma chamada de entrada da sua rede de telefonia, o conjunto de dados do seu SBC nos cabeçalhos personalizados e UUI é incluído de forma semelhante na carga útil do IncomingCall evento.

Todos os dados de contexto personalizados são opacos para protocolos Call Automation ou SIP e seu conteúdo não está relacionado a nenhuma função básica.

Abaixo estão exemplos sobre como começar a usar cabeçalhos de contexto personalizados na Automação de Chamadas.

Como pré-requisito, recomendamos que leia estes artigos para tirar o máximo partido deste guia:

  • Guia de conceitos de automação de chamadas que descreve o modelo de programação de eventos de ação e retornos de chamada de eventos.
  • Saiba mais sobre identificadores de usuário como CommunicationUserIdentifier e PhoneNumberIdentifier usados neste guia.

Para todos os exemplos de código, client é o objeto CallAutomationClient que pode ser criado conforme mostrado e callConnection é o objeto CallConnection obtido da resposta Answer ou CreateCall. Você também pode obtê-lo de eventos de retorno de chamada recebidos pelo seu aplicativo.

Parâmetros técnicos

A automação de chamadas suporta até 5 cabeçalhos SIP personalizados e 1000 cabeçalhos VOIP personalizados. Além disso, os desenvolvedores podem incluir um cabeçalho User-To-User dedicado como parte da lista de cabeçalhos SIP.

A chave de cabeçalho SIP personalizada deve começar com um prefixo obrigatório 'X-MS-Custom-'. O comprimento máximo de uma chave de cabeçalho SIP é de 64 caracteres, incluindo o prefixo X-MS-Custom. A chave de cabeçalho SIP pode consistir em caracteres alfanuméricos e alguns símbolos selecionados que incluem , , , , *, _, +, ~. -%!. O comprimento máximo do valor do cabeçalho SIP é de 256 caracteres. As mesmas limitações se aplicam ao configurar os cabeçalhos SIP no SBC. O valor do cabeçalho SIP pode consistir em caracteres alfanuméricos e alguns símbolos selecionados que incluem =, ;, ., , !, %, *_, +, ~. -

O comprimento máximo de uma chave de cabeçalho VOIP é de 64 caracteres. Esses cabeçalhos podem ser enviados sem o prefixo 'x-MS-Custom'. O comprimento máximo do valor do cabeçalho VOIP é de 1024 caracteres.

Adicionar contexto personalizado ao convidar um 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);

Adicionar contexto personalizado durante a transferência de chamadas

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

Lendo contexto personalizado de um evento de chamada de entrada

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 adicionais