Gesprekken beheren en sturen met Gespreksautomatisering

Aanroepautomatisering maakt gebruik van een REST API-interface voor het ontvangen van aanvragen voor acties en het verstrekken van antwoorden om te melden of de aanvraag is verzonden of niet. Vanwege de asynchrone aard van het aanroepen hebben de meeste acties overeenkomende gebeurtenissen die worden geactiveerd wanneer de actie is voltooid of mislukt. In deze handleiding worden de acties beschreven die beschikbaar zijn voor het sturen van oproepen, zoals CreateCall, Transfer, Redirect en het beheren van deelnemers. Acties worden vergezeld van voorbeeldcode over het aanroepen van de genoemde actie en sequentiediagrammen die de verwachte gebeurtenissen beschrijven nadat een actie is aangeroepen. Met deze diagrammen kunt u visualiseren hoe u uw servicetoepassing kunt programmeren met Gespreksautomatisering.

Call Automation ondersteunt verschillende andere acties voor het beheren van oproepmedia en -opname met afzonderlijke handleidingen.

Notitie

Gespreksautomatisering biedt momenteel geen ondersteuning voor chatgesprekken .

Als vereiste raden we u aan deze artikelen te lezen om optimaal gebruik te maken van deze handleiding:

  1. Handleiding voor aanroepautomatiseringsconcepten waarin het programmeermodel voor actiegebeurtenissen en callbacks voor gebeurtenissen wordt beschreven.
  2. 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.

var client = new CallAutomationClient("<resource_connection_string>"); 

Een uitgaande oproep maken

U kunt een oproep van 1:1 of een groepsgesprek plaatsen naar een communicatiegebruiker of telefoonnummer (openbaar nummer of het nummer van Communication Services dat eigendom is van Communication Services). Wanneer u een PSTN-eindpunt aanroept, moet u ook een telefoonnummer opgeven dat wordt gebruikt als de bronaanroeper-id en wordt weergegeven in de oproepmelding naar het PSTN-doeleindpunt. Als u een aanroep naar een Communication Services-gebruiker wilt plaatsen, moet u een CommunicationUserIdentifier-object opgeven in plaats van Telefoon NumberIdentifier.

Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events 
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller  
var callThisPerson = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber); // person to call
CreateCallResult response = await client.CreateCallAsync(callThisPerson, callbackUri);

Wanneer u een groepsgesprek voert dat een telefoonnummer bevat, moet u een telefoonnummer opgeven dat wordt gebruikt als nummer van een beller-id voor het PSTN-eindpunt.

Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events 
var pstnEndpoint = new PhoneNumberIdentifier("+16041234567");
var voipEndpoint = new CommunicationUserIdentifier("<user_id_of_target>"); //user id looks like 8:a1b1c1-...
var groupCallOptions = new CreateGroupCallOptions(new List<CommunicationIdentifier>{ pstnEndpoint, voipEndpoint }, callbackUri)
{
    SourceCallerIdNumber = new PhoneNumberIdentifier("+16044561234"), // This is the Azure Communication Services provisioned phone number for the caller
};
CreateCallResult response = await client.CreateGroupCallAsync(groupCallOptions);

Het antwoord biedt u het aanroep Verbinding maken ionobject dat u kunt gebruiken om verdere acties uit te voeren voor deze aanroep zodra het is verbonden. Zodra de oproep is beantwoord, worden twee gebeurtenissen gepubliceerd naar het callback-eindpunt dat u eerder hebt opgegeven:

  1. CallConnected gebeurtenis die aangeeft dat de oproep is ingesteld bij de aanroep.
  2. ParticipantsUpdated gebeurtenis die de meest recente lijst met deelnemers in het gesprek bevat. Sequence diagram for placing an outbound call.

Een inkomende oproep beantwoorden

Zodra u zich hebt geabonneerd om binnenkomende oproepmeldingen naar uw resource te ontvangen, beantwoordt u een inkomende oproep. Wanneer u een oproep beantwoordt, moet u een callback-URL opgeven. Communication Services plaatst alle volgende gebeurtenissen over deze aanroep naar die URL.

string incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>"; 
Uri callBackUri = new Uri("https://<myendpoint_where_I_want_to_receive_callback_events"); 

var answerCallOptions = new AnswerCallOptions(incomingCallContext, callBackUri);  
AnswerCallResult answerResponse = await client.AnswerCallAsync(answerCallOptions);
CallConnection callConnection = answerResponse.CallConnection; 

Het antwoord biedt u het aanroep Verbinding maken ionobject dat u kunt gebruiken om verdere acties uit te voeren voor deze aanroep zodra het is verbonden. Zodra de oproep is beantwoord, worden twee gebeurtenissen gepubliceerd naar het callback-eindpunt dat u eerder hebt opgegeven:

  1. CallConnected gebeurtenis die aangeeft dat de oproep tot stand is gebracht met de beller.
  2. ParticipantsUpdated gebeurtenis die de meest recente lijst met deelnemers in het gesprek bevat.

Sequence diagram for answering an incoming call.

Een oproep weigeren

U kunt ervoor kiezen om een inkomende oproep te weigeren, zoals hieronder wordt weergegeven. U kunt een weigeringsreden opgeven: geen, bezet of verboden. Als er niets wordt opgegeven, wordt er standaard geen gekozen.

string incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>"; 
var rejectOption = new RejectCallOptions(incomingCallContext); 
rejectOption.CallRejectReason = CallRejectReason.Forbidden; 
_ = await client.RejectCallAsync(rejectOption); 

Er worden geen gebeurtenissen gepubliceerd voor de weigeringsactie.

Een oproep omleiden

U kunt ervoor kiezen om een binnenkomende oproep om te leiden naar een ander eindpunt zonder deze te beantwoorden. Als u een oproep omleidt, wordt de mogelijkheid van uw toepassing om het gesprek te beheren met behulp van Gespreksautomatisering verwijderd.

string incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>"; 
var target = new CallInvite(new CommunicationUserIdentifier("<user_id_of_target>")); //user id looks like 8:a1b1c1-... 
_ = await client.RedirectCallAsync(incomingCallContext, target); 

Als u de oproep naar een telefoonnummer wilt omleiden, maakt u de doel- en nummerweergave met Telefoon Nummeridentifier.

var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
var target = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);

Er worden geen gebeurtenissen gepubliceerd voor omleiding. Als het doel een Communication Services-gebruiker of een telefoonnummer is dat eigendom is van uw resource, wordt er een nieuwe IncomingCall-gebeurtenis gegenereerd met het veld 'aan' ingesteld op het doel dat u hebt opgegeven.

Een deelnemer in gesprek doorschakelen

Wanneer uw toepassing een oproep beantwoordt of een uitgaande aanroep naar een eindpunt plaatst, kan dat eindpunt worden overgedragen naar een ander doeleindpunt. Als u een oproep van 1:1 overdraagt, wordt uw toepassing verwijderd uit de oproep en wordt de mogelijkheid om het gesprek te beheren met behulp van Gespreksautomatisering verwijderd. De oproepnodiging voor het doel geeft de nummerweergave weer van het eindpunt dat wordt overgedragen. Het opgegeven van een aangepaste nummerweergave wordt niet ondersteund.

var transferDestination = new CommunicationUserIdentifier("<user_id>"); 
var transferOption = new TransferToParticipantOptions(transferDestination) {
    OperationContext = "<Your_context>",
    OperationCallbackUri = new Uri("<uri_endpoint>") // Sending event to a non-default endpoint.
};
// adding customCallingContext
transferOption.CustomCallingContext.AddVoip("customVoipHeader1", "customVoipHeaderValue1");
transferOption.CustomCallingContext.AddVoip("customVoipHeader2", "customVoipHeaderValue2");

TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);

Wanneer uw toepassing een groepsoproep beantwoordt of een uitgaande groepsoproep naar een eindpunt plaatst of een deelnemer aan een oproep van 1:1 heeft toegevoegd, kan een eindpunt worden overgebracht van de oproep naar een ander doeleindpunt, met uitzondering van het eindpunt voor gespreksautomatisering. Als u een deelnemer overdraagt in een groepsgesprek, wordt het eindpunt dat wordt overgedragen uit de oproep verwijderd. De oproepnodiging voor het doel geeft de nummerweergave weer van het eindpunt dat wordt overgedragen. Het opgegeven van een aangepaste nummerweergave wordt niet ondersteund.

// Transfer User
var transferDestination = new CommunicationUserIdentifier("<user_id>");
var transferee = new CommunicationUserIdentifier("<transferee_user_id>"); 
var transferOption = new TransferToParticipantOptions(transferDestination);
transferOption.Transferee = transferee;

// adding customCallingContext
transferOption.CustomCallingContext.AddVoip("customVoipHeader1", "customVoipHeaderValue1");
transferOption.CustomCallingContext.AddVoip("customVoipHeader2", "customVoipHeaderValue2");

transferOption.OperationContext = "<Your_context>";
transferOption.OperationCallbackUri = new Uri("<uri_endpoint>");
TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);

// Transfer PSTN User
var transferDestination = new PhoneNumberIdentifier("<target_phoneNumber>");
var transferee = new PhoneNumberIdentifier("<transferee_phoneNumber>"); 
var transferOption = new TransferToParticipantOptions(transferDestination);
transferOption.Transferee = transferee;

// adding customCallingContext
transferOption.CustomCallingContext.AddSipUui("uuivalue");
transferOption.CustomCallingContext.AddSipX("header1", "headerValue");

transferOption.OperationContext = "<Your_context>";

// Sending event to a non-default endpoint.
transferOption.OperationCallbackUri = new Uri("<uri_endpoint>");

TransferCallToParticipantResult result = await callConnection.TransferCallToParticipantAsync(transferOption);

Het sequentiediagram toont de verwachte stroom wanneer uw toepassing een uitgaande aanroep plaatst en deze vervolgens overdraagt naar een ander eindpunt.

Sequence diagram for placing a 1:1 call and then transferring it.

Een deelnemer toevoegen aan een gesprek

U kunt een deelnemer (Communication Services-gebruiker of telefoonnummer) toevoegen aan een bestaand gesprek. Wanneer u een telefoonnummer toevoegt, is het verplicht om een nummerweergave op te geven. Deze nummerweergave wordt weergegeven bij oproepmelding aan de deelnemer die wordt toegevoegd.

// Add user
var addThisPerson = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
// add custom calling context
addThisPerson.CustomCallingContext.AddVoip("myHeader", "myValue");
AddParticipantsResult result = await callConnection.AddParticipantAsync(addThisPerson);

// Add PSTN user
var callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
var addThisPerson = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
// add custom calling context
addThisPerson.CustomCallingContext.AddSipUui("value");
addThisPerson.CustomCallingContext.AddSipX("header1", "customSipHeaderValue1");

// Use option bag to set optional parameters
var addParticipantOptions = new AddParticipantOptions(new CallInvite(addThisPerson))
{
    InvitationTimeoutInSeconds = 60,
    OperationContext = "operationContext",
    OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
};

AddParticipantsResult result = await callConnection.AddParticipantAsync(addParticipantOptions); 

Als u een Communication Services-gebruiker wilt toevoegen, geeft u een CommunicationUserIdentifier op in plaats van Telefoon NumberIdentifier. Nummerweergave is in dit geval niet verplicht.

AddParticipant publiceert een AddParticipantSucceeded of AddParticipantFailed gebeurtenis, samen met de ParticipantUpdated meest recente lijst met deelnemers aan het gesprek.

Sequence diagram for adding a participant to the call.

Een aanvraag voor een deelnemer toevoegen annuleren

// add a participant
var addThisPerson = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
var addParticipantResponse = await callConnection.AddParticipantAsync(addThisPerson);

// cancel the request with optional parameters
var cancelAddParticipantOperationOptions = new CancelAddParticipantOperationOptions(addParticipantResponse.Value.InvitationId)
{
    OperationContext = "operationContext",
    OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
}
await callConnection.CancelAddParticipantOperationAsync(cancelAddParticipantOperationOptions);

Een deelnemer uit een gesprek verwijderen

var removeThisUser = new CommunicationUserIdentifier("<user_id>"); 

// remove a participant from the call with optional parameters
var removeParticipantOptions = new RemoveParticipantOptions(removeThisUser)
{
    OperationContext = "operationContext",
    OperationCallbackUri = new Uri("uri_endpoint"); // Sending event to a non-default endpoint.
}

RemoveParticipantsResult result = await callConnection.RemoveParticipantAsync(removeParticipantOptions);

RemoveParticipant publiceert een RemoveParticipantSucceeded of RemoveParticipantFailed gebeurtenis, samen met een ParticipantUpdated gebeurtenis die de meest recente lijst met deelnemers aan het gesprek biedt. De verwijderde deelnemer wordt weggelaten uit de lijst.
Sequence diagram for removing a participant from the call.

Een gesprek ophangen

De actie Ophangen kan worden gebruikt om uw toepassing uit de aanroep te verwijderen of om een groepsoproep te beëindigen door de parameter ForEveryone in te stellen op true. Voor een oproep van 1:1 beëindigt ophangen de oproep standaard met de andere deelnemer.

_ = await callConnection.HangUpAsync(forEveryone: true); 

De gebeurtenis CallDisconnected wordt gepubliceerd zodra de hangUp-actie is voltooid.

Informatie over een gespreksdeelnemer ophalen

CallParticipant participantInfo = await callConnection.GetParticipantAsync(new CommunicationUserIdentifier("<user_id>"));

Informatie over alle gespreksdeelnemers

List<CallParticipant> participantList = (await callConnection.GetParticipantsAsync()).Value.ToList(); 

Ontvang de meest recente informatie over een gesprek

CallConnectionProperties callConnectionProperties = await callConnection.GetCallConnectionPropertiesAsync();