Předávání kontextových dat mezi voláními

Automatizace volání umožňuje vývojářům předávat vlastní kontextové informace při směrování volání. Vývojáři můžou předávat metadata o volání, volaný nebo jakékoli jiné informace, které jsou relevantní pro aplikaci nebo obchodní logiku. To umožňuje firmám spravovat a směrovat hovory napříč sítěmi, aniž by se museli starat o ztrátu kontextu.

Předávání kontextu je podporováno zadáním vlastních hlaviček. Jedná se o volitelný seznam párů klíč-hodnota, které lze zahrnout jako součást AddParticipant nebo Transfer akce. Kontext lze později načíst jako součást IncomingCall datové části události.

Kontext vlastního volání se také přesměruje do protokolu SIP. To zahrnuje jak vlastní hlavičky freeformu, tak standardní hlavičku SIP (User-to-User Information). Při směrování příchozího volání z telefonní sítě se datová sada z vašeho SBC ve vlastních hlavičkách a UUI podobně zahrne do IncomingCall datové části události.

Všechna vlastní kontextová data jsou neprůzná pro volání automatizace nebo protokoly SIP a jejich obsah nesouvisí s žádnými základními funkcemi.

Níže jsou uvedeny ukázky, jak začít používat vlastní kontextové hlavičky v automatizaci volání.

Jako předpoklad doporučujeme, abyste si přečetli tyto články, které vám pomůžou maximálně využít tohoto průvodce:

  • Průvodce koncepty automatizace volání, který popisuje programovací model akcí a zpětné volání událostí.
  • Seznamte se s identifikátory uživatelů, jako jsou CommunicationUserIdentifier a Telefon NumberIdentifier používané v této příručce.

Pro všechny ukázky kódu je CallAutomationClient objekt, client který lze vytvořit, jak je znázorněno, a callConnection jedná se o Call Připojení ion objekt získaný z odpovědi Answer nebo CreateCall odpovědi. Můžete ho také získat z událostí zpětného volání přijatých vaší aplikací.

Technické parametry

Automatizace volání podporuje až 5 vlastních hlaviček SIP a 1000 vlastních hlaviček VOIP. Vývojáři mohou navíc jako součást seznamu hlaviček SIP zahrnout vyhrazenou hlavičku User-To-User.

Vlastní klíč hlavičky SIP musí začínat povinnou předponou X-MS-Custom-. Maximální délka klíče hlavičky SIP je 64 znaků včetně předpony X-MS-Custom. Klíč záhlaví SIP se může skládat z alfanumerických znaků a několika vybraných symbolů, mezi které patří , , , , *, _+, , ~. -%!. Maximální délka hodnoty hlavičky SIP je 256 znaků. Stejná omezení platí při konfiguraci hlaviček SIP ve vašem SBC. Hodnota záhlaví SIP se může skládat z alfanumerických znaků a několika vybraných symbolů, které zahrnují , , , , _. +-!~%*.;=

Maximální délka klíče hlavičky VOIP je 64 znaků. Tyto hlavičky lze odeslat bez předpony x-MS-Custom. Maximální délka hodnoty záhlaví VOIP je 1024 znaků.

Přidání vlastního kontextu při pozvání účastníka

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

Přidání vlastního kontextu během přenosu hovorů

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

Čtení vlastního kontextu z události příchozího hovoru

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

Další materiály