Compartilhar via


Como transmitir dados contextuais entre chamadas

A Automação de Chamadas permite que os desenvolvedores transmitam informações contextuais personalizadas ao rotear chamadas. Os desenvolvedores podem passar metadados sobre a chamada, o receptor ou qualquer outra informação relevante para o aplicativo ou a lógica de negócios. Isso permite que as empresas gerenciem e roteiem chamadas entre redes sem precisar se preocupar com a perda de contexto.

A especificação de cabeçalhos personalizados oferece suporte ao contexto de transmissão. Essa é uma lista opcional de pares chave-valor que podem ser incluídos como parte das ações de AddParticipant ou Transfer. O contexto pode ser recuperado posteriormente como parte da carga do evento IncomingCall.

O contexto de chamada personalizada também é encaminhado para o protocolo SIP, incluindo os cabeçalhos personalizados de forma livre, bem como o cabeçalho SIP padrão de UUI (informação de usuário para usuário). Ao rotear uma chamada de entrada da rede de telefonia, o conjunto de dados do SBC nos cabeçalhos personalizados e na UUI é incluído da mesma forma na carga do evento IncomingCall.

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

Veja abaixo exemplos de como começar a usar cabeçalhos de contexto personalizados na Automação de Chamadas.

Como pré-requisito, recomendamos que você leia estes artigos para aproveitar ao máximo este guia:

  • Guia de conceitos da Automação de Chamadas que descreve o modelo de programação de eventos de ação e os retornos de chamada de eventos.
  • Saiba mais sobre os 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 dos eventos de retorno de chamada recebidos pelo aplicativo.

Parâmetros técnicos

A Automação de Chamadas dá suporte a até 5 cabeçalhos SIP personalizados e 1.000 cabeçalhos VOIP personalizados. Além disso, os desenvolvedores podem incluir um cabeçalho dedicado de usuário para usuário 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, incluindo ., !, %, *, _, +, ~, -. 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 em seu SBC. O valor do cabeçalho SIP pode consistir em caracteres alfanuméricos e alguns símbolos selecionados, incluindo =, ;, ., !, %, *, _, +, ~, -.

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 chamada

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

Leitura do 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