Met Call Automation kunnen ontwikkelaars aangepaste contextuele informatie doorgeven bij het routeren van oproepen. Ontwikkelaars kunnen metagegevens doorgeven over de aanroep, oproep of andere informatie die relevant is voor hun toepassing of bedrijfslogica. Hierdoor kunnen bedrijven oproepen via netwerken beheren en routeren zonder dat ze zich zorgen hoeven te maken over het verliezen van context.
Het doorgeven van context wordt ondersteund door aangepaste headers op te geven. Dit is een optionele lijst met sleutel-waardeparen die kunnen worden opgenomen als onderdeel van AddParticipant of Transfer acties. De context kan later worden opgehaald als onderdeel van de nettolading van de IncomingCall gebeurtenis.
Aangepaste oproepcontext wordt ook doorgestuurd naar het SIP-protocol, dit omvat zowel de aangepaste freeform-headers als de standaard UUI SIP-header (User-to-User Information). Bij het routeren van een inkomende oproep vanuit uw telefonienetwerk, wordt de gegevensset van uw SBC in de aangepaste headers en UUI op dezelfde manier opgenomen in de nettolading van de IncomingCall gebeurtenis.
Alle aangepaste contextgegevens zijn ondoorzichtig voor call automation- of SIP-protocollen en de inhoud ervan is niet gerelateerd aan alle basisfuncties.
Hieronder ziet u voorbeelden voor het gebruik van aangepaste contextheaders in Gespreksautomatisering.
Als vereiste raden we u aan deze artikelen te lezen om optimaal gebruik te maken van deze handleiding:
Meer informatie over gebruikers-id's zoals CommunicationUserIdentifier en Telefoon NumberIdentifier die in deze handleiding worden gebruikt.
Voor alle codevoorbeelden client is CallAutomationClient-object dat kan worden gemaakt zoals weergegeven en callConnection het object Call Verbinding maken ion is verkregen uit answer of CreateCall-antwoord. U kunt deze ook verkrijgen via callbackgebeurtenissen die door uw toepassing zijn ontvangen.
Technische parameters
Call Automation ondersteunt maximaal 5 aangepaste SIP-headers en 1000 aangepaste VOIP-headers. Daarnaast kunnen ontwikkelaars een speciale user-to-user-header opnemen als onderdeel van de SIP-headerslijst.
De aangepaste SIP-headersleutel moet beginnen met een verplicht voorvoegsel 'X-MS-Custom-'. De maximale lengte van een SIP-headersleutel is 64 tekens, inclusief het X-MS-Custom-voorvoegsel. De SIP-headersleutel kan bestaan uit alfanumerieke tekens en enkele geselecteerde symbolen, waaronder ., , !%, *, , _, +, , ~. - De maximale lengte van de SIP-headerwaarde is 256 tekens. Dezelfde beperkingen gelden voor het configureren van de SIP-headers op uw SBC. De SIP-headerwaarde kan bestaan uit alfanumerieke tekens en enkele geselecteerde symbolen, waaronder =, , ;., !, , %, *, _, , , +, , . ~-
De maximale lengte van een VOIP-headersleutel is 64 tekens. Deze headers kunnen worden verzonden zonder voorvoegsel 'x-MS-Custom'. De maximale lengte van VOIP-headerwaarde is 1024 tekens.
Aangepaste context toevoegen bij het uitnodigen van een deelnemer
// 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);
// Invite a communication services user and include one VOIP header
CallInvite callInvite = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
callInvite.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite);
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// Invite a PSTN user and set UUI and custom SIP headers
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+16044561234");
CallInvite callInvite = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
callInvite.getCustomCallingContext().addSipUui("value");
callInvite.getCustomCallingContext().addSipX("header1", "customSipHeaderValue1");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite);
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// Invite a communication services user and include one VOIP header
const customCallingContext: CustomCallingContext = [];
customCallingContext.push({ kind: "voip", key: "voipHeaderName", value: "voipHeaderValue" })
const addThisPerson = {
targetParticipant: { communicationUserId: "<acs_user_id>" },
customCallingContext: customCallingContext,
};
const addParticipantResult = await callConnection.addParticipant(addThisPerson);
// Invite a PSTN user and set UUI and custom SIP headers
const callerIdNumber = { phoneNumber: "+16044561234" };
const customCallingContext: CustomCallingContext = [];
customCallingContext.push({ kind: "sipuui", key: "", value: "value" });
customCallingContext.push({ kind: "sipx", key: "headerName", value: "headerValue" })
const addThisPerson = {
targetParticipant: { phoneNumber: "+16041234567" },
sourceCallIdNumber: callerIdNumber,
customCallingContext: customCallingContext,
};
const addParticipantResult = await callConnection.addParticipant(addThisPerson);
#Invite a communication services user and include one VOIP header
voip_headers = {"voipHeaderName", "voipHeaderValue"}
target = CommunicationUserIdentifier("<acs_user_id>")
result = call_connection_client.add_participant(
target,
voip_headers=voip_headers
)
#Invite a PSTN user and set UUI and custom SIP headers
caller_id_number = PhoneNumberIdentifier("+16044561234")
sip_headers = {}
sip_headers["User-To-User"] = "value"
sip_headers["X-MS-Custom-headerName"] = "headerValue"
target = PhoneNumberIdentifier("+16041234567")
result = call_connection_client.add_participant(
target,
sip_headers=sip_headers,
source_caller_id_number=caller_id_number
)
Aangepaste context toevoegen tijdens het doorschakelen van oproepen
//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)
//Transfer to communication services user and include one VOIP header
CommunicationIdentifier transferDestination = new CommunicationUserIdentifier("<user_id>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
//Transfer a PSTN call to phone number and set UUI and custom SIP headers
CommunicationIdentifier transferDestination = new PhoneNumberIdentifier("<taget_phoneNumber>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.getCustomCallingContext().addSipUui("UUIvalue");
options.getCustomCallingContext().addSipX("sipHeaderName", "value");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
//Transfer to communication services user and include one VOIP header
const transferDestination = { communicationUserId: "<user_id>" };
const transferee = { communicationUserId: "<transferee_user_id>" };
const options = { transferee: transferee, operationContext: "<Your_context>", operationCallbackUrl: "<url_endpoint>" };
const customCallingContext: CustomCallingContext = [];
customCallingContext.push({ kind: "voip", key: "customVoipHeader1", value: "customVoipHeaderValue1" })
options.customCallingContext = customCallingContext;
const result = await callConnection.transferCallToParticipant(transferDestination, options);
//Transfer a PSTN call to phone number and set UUI and custom SIP headers
const transferDestination = { phoneNumber: "<taget_phoneNumber>" };
const transferee = { phoneNumber: "<transferee_phoneNumber>" };
const options = { transferee: transferee, operationContext: "<Your_context>", operationCallbackUrl: "<url_endpoint>" };
const customCallingContext: CustomCallingContext = [];
customCallingContext.push({ kind: "sipuui", key: "", value: "uuivalue" });
customCallingContext.push({ kind: "sipx", key: "headerName", value: "headerValue" })
options.customCallingContext = customCallingContext;
const result = await callConnection.transferCallToParticipant(transferDestination, options);
#Transfer to communication services user and include one VOIP header
transfer_destination = CommunicationUserIdentifier("<user_id>")
transferee = CommnunicationUserIdentifer("transferee_user_id")
voip_headers = {"customVoipHeader1", "customVoipHeaderValue1"}
result = call_connection_client.transfer_call_to_participant(
target_participant=transfer_destination,
transferee=transferee,
voip_headers=voip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
#Transfer a PSTN call to phone number and set UUI and custom SIP headers
transfer_destination = PhoneNumberIdentifer("<target_phoneNumber>")
transferee = PhoneNumberIdentifer("transferee_phoneNumber")
sip_headers={}
sip_headers["X-MS-Custom-headerName"] = "headerValue"
sip_headers["User-To-User"] = "uuivalue"
result = call_connection_client.transfer_call_to_participant(
target_participant=transfer_destination,
transferee=transferee,
sip_headers=sip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
Overdracht van een VoIP-oproep naar een telefoonnummer wordt momenteel niet ondersteund.
Aangepaste context lezen vanuit een gebeurtenis voor binnenkomende oproepen