Come controllare e gestire le chiamate con Automazione chiamate
Articolo
L'automazione delle chiamate usa un'interfaccia API REST per ricevere richieste di azioni e fornire risposte per notificare se la richiesta è stata inviata o meno correttamente. A causa della natura asincrona della chiamata, la maggior parte delle azioni ha eventi corrispondenti che vengono attivati quando l'azione viene completata correttamente o ha esito negativo. Questa guida illustra le azioni disponibili per le chiamate di spostamento, ad esempio CreateCall, Transfer, Redirect e gestione dei partecipanti. Le azioni sono accompagnate da codice di esempio su come richiamare l'azione e i diagrammi di sequenza che descrivono gli eventi previsti dopo aver richiamato un'azione. Questi diagrammi consentono di visualizzare come programmare l'applicazione di servizio con Automazione chiamate.
L'automazione delle chiamate supporta varie altre azioni per gestire i supporti di chiamata e la registrazione con guide separate.
Come prerequisito, è consigliabile leggere questi articoli per sfruttare al meglio questa guida:
Guida concettuale relativa all'automazione delle chiamate che descrive il modello di programmazione degli eventi action-event e i callback degli eventi.
Informazioni sugli identificatori utente come CommunicationUserIdentifier e PhoneNumberIdentifier usati in questa guida.
Per tutti gli esempi di codice, client è l'oggetto CallAutomationClient che può essere creato come illustrato e callConnection è l'oggetto CallConnection ottenuto dalla risposta Answer o CreateCall. È anche possibile ottenerlo dagli eventi di callback ricevuti dall'applicazione.
È possibile effettuare una chiamata individuale o di gruppo a un utente di comunicazione o a un numero di telefono (numero di proprietà di Servizi pubblici o di comunicazione).
Quando si chiama un endpoint PSTN, è necessario specificare anche un numero di telefono usato come ID chiamante di origine e visualizzato nella notifica di chiamata all'endpoint PSTN di destinazione.
Per effettuare una chiamata a un utente di Servizi di comunicazione, è necessario fornire un oggetto CommunicationUserIdentifier anziché PhoneNumberIdentifier.
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);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+18001234567"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite callInvite = new CallInvite(new PhoneNumberIdentifier("+16471234567"), callerIdNumber); // person to call
CreateCallResult response = client.createCall(callInvite, callbackUri).block();
const callInvite = {
targetParticipant: { phoneNumber: "+18008008800" }, // person to call
sourceCallIdNumber: { phoneNumber: "+18888888888" } // This is the Azure Communication Services provisioned phone number for the caller
};
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const response = await client.createCall(callInvite, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
caller_id_number = PhoneNumberIdentifier(
"+18001234567"
) # This is the Azure Communication Services provisioned phone number for the caller
call_invite = CallInvite(
target=PhoneNumberIdentifier("+16471234567"),
source_caller_id_number=caller_id_number,
)
call_connection_properties = client.create_call(call_invite, callback_uri)
Quando si effettua una chiamata di gruppo che include un numero di telefono, è necessario specificare un numero di telefono usato come numero ID chiamante all'endpoint PSTN.
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);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+18001234567"); // This is the Azure Communication Services provisioned phone number for the caller
List<CommunicationIdentifier> targets = new ArrayList<>(Arrays.asList(new PhoneNumberIdentifier("+16471234567"), new CommunicationUserIdentifier("<user_id_of_target>")));
CreateGroupCallOptions groupCallOptions = new CreateGroupCallOptions(targets, callbackUri);
groupCallOptions.setSourceCallIdNumber(callerIdNumber);
Response<CreateCallResult> response = client.createGroupCallWithResponse(createGroupCallOptions).block();
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const participants = [
{ phoneNumber: "+18008008800" },
{ communicationUserId: "<user_id_of_target>" }, //user id looks like 8:a1b1c1-...
];
const createCallOptions = {
sourceCallIdNumber: { phoneNumber: "+18888888888" }, // This is the Azure Communication Services provisioned phone number for the caller
};
const response = await client.createGroupCall(participants, callbackUri, createCallOptions);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
pstn_endpoint = PhoneNumberIdentifier("+18008008800")
voip_endpoint = CommunicationUserIdentifier(
"<user_id_of_target>"
) # user id looks like 8:a1b1c1-...
call_connection_properties = client.create_group_call(
target_participants=[voip_endpoint, pstn_endpoint],
callback_url=callback_uri,
source_caller_id_number=caller_id_number,
)
La risposta fornisce l'oggetto CallConnection che è possibile usare per eseguire altre azioni su questa chiamata dopo la connessione. Dopo aver risposto alla chiamata, due eventi vengono pubblicati nell'endpoint di callback fornito in precedenza:
Evento CallConnected che informa che la chiamata è stata stabilita con il chiamato.
Evento ParticipantsUpdated che contiene l'elenco più recente di partecipanti nella chiamata.
Nel caso in cui la chiamata non riesca, si riceverà un CallDisconnected evento e CreateCallFailed con codici di errore per ulteriori risoluzione dei problemi (vedere questa pagina per altre informazioni sui codici di errore).
Connettersi a una chiamata
L'azione di connessione consente al servizio di stabilire una connessione con una chiamata in corso e di eseguire azioni su di essa. Ciò è utile per gestire una chiamata Rooms o quando le applicazioni client hanno avviato una chiamata individuale o di gruppo di cui l'automazione delle chiamate non fa parte. La connessione viene stabilita usando la proprietà CallLocator e può essere di tipi: ServerCallLocator, GroupCallLocator e RoomCallLocator. Questi ID possono essere trovati quando la chiamata viene originariamente stabilita o viene creata una sala e pubblicata anche come parte di un evento CallStarted.
Per connettersi a qualsiasi chiamata di gruppo o individuale, usare ServerCallLocator. Se è stata avviata una chiamata usando GroupCallId, è anche possibile usare GroupCallLocator.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
CallLocator serverCallLocator = new ServerCallLocator("<ServerCallId>");
ConnectCallResult response = await client.ConnectCallAsync(serverCallLocator, callbackUri);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
CallLocator serverCallLocator = new ServerCallLocator("<ServerCallId>");
ConnectCallResult response = client.connectCall(serverCallLocator, callbackUri).block();
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const serverCallLocator = { kind: "serverCallLocator", id: "<serverCallId>" };
const response = await client.connectCall(serverCallLocator, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
server_call_locator = ServerCallLocator("<server_call_id>")
call_connection_properties = client.connect_call(call_locator=server_call_locator, callback_url=callback_uri)
Per connettersi a una chiamata Rooms, usare RoomCallLocator che accetta RoomId. Altre informazioni su Stanze e su come usare l'API di automazione delle chiamate per gestire le chiamate Stanze in corso.
Uri callbackUri = new Uri("https://<myendpoint>/Events"); //the callback endpoint where you want to receive subsequent events
CallLocator roomCallLocator = new RoomCallLocator("<RoomId>");
ConnectCallResult response = await client.ConnectCallAsync(roomCallLocator, callbackUri);
String callbackUri = "https://<myendpoint>/Events"; //the callback endpoint where you want to receive subsequent events
CallLocator roomCallLocator = new RoomCallLocator("<RoomId>");
ConnectCallResult response = client.connectCall(roomCallLocator, callbackUri).block();
const roomCallLocator = { kind: "roomCallLocator", id: "<RoomId>" };
const callbackUri = "https://<myendpoint>/Events"; // the callback endpoint where you want to receive subsequent events
const response = await client.connectCall(roomCallLocator, callbackUri);
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
room_call_locator = RoomCallLocator("<room_id>")
call_connection_properties = client.connect_call(call_locator=room_call_locator, callback_url=callback_uri)
Una risposta con esito positivo fornisce un oggetto CallConnection che è possibile usare per eseguire altre azioni su questa chiamata. Due eventi vengono pubblicati nell'endpoint di callback fornito in precedenza:
Evento CallConnected che informa che ci si connette correttamente alla chiamata.
Evento ParticipantsUpdated che contiene l'elenco più recente di partecipanti nella chiamata.
In qualsiasi momento dopo una connessione riuscita, se il servizio viene disconnesso da questa chiamata, si riceverà una notifica tramite un evento CallDisconected. L'errore di connessione alla chiamata in primo luogo genera l'evento ConnectFailed.
Rispondere a una chiamata in arrivo
Dopo aver effettuato la sottoscrizione per ricevere notifiche di chiamata in arrivo alla risorsa, si risponderà a una chiamata in arrivo. Quando si risponde a una chiamata, è necessario fornire un URL di callback. "Servizi di comunicazione" pubblica tutti gli eventi successivi relativi a questa chiamata a tale URL.
incoming_call_context = "<IncomingCallContext_From_IncomingCall_Event>"
callback_uri = "https://<myendpoint>/Events" # the callback endpoint where you want to receive subsequent events
call_connection_properties = client.answer_call(
incoming_call_context=incoming_call_context, callback_url=callback_uri
)
La risposta fornisce l'oggetto CallConnection che è possibile usare per eseguire altre azioni su questa chiamata dopo la connessione. Dopo aver risposto alla chiamata, due eventi vengono pubblicati nell'endpoint di callback fornito in precedenza:
Evento CallConnected che informa che la chiamata è stata stabilita con il chiamante.
Evento ParticipantsUpdated che contiene l'elenco più recente di partecipanti nella chiamata.
Nel caso in cui l'operazione di risposta non riesca, si riceverà un AnswerFailed evento con codici di errore per una risoluzione dei problemi più approfondita. Per altre informazioni sui codici di errore, vedere questa pagina .
Rifiutare una chiamata
È possibile scegliere di rifiutare una chiamata in ingresso, come illustrato di seguito. È possibile specificare un motivo di rifiuto: nessuno, occupato o negato. Se non viene specificato alcun elemento, nessuna viene scelta per impostazione predefinita.
Nessun evento viene pubblicato per l'azione di rifiuto.
Reindirizzare una chiamata
È possibile scegliere di reindirizzare una chiamata in ingresso a un altro endpoint senza rispondere. Il reindirizzamento di una chiamata rimuove la capacità dell'applicazione di controllare la chiamata usando l'automazione delle chiamate.
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);
String incomingCallContext = "<IncomingCallContext_From_IncomingCall_Event>";
CallInvite target = new CallInvite(new CommunicationUserIdentifier("<user_id_of_target>")); //user id looks like 8:a1b1c1-...
RedirectCallOptions redirectCallOptions = new RedirectCallOptions(incomingCallContext, target);
Response<Void> response = client.redirectCallWithResponse(redirectCallOptions).block();
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);
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite target = new CallInvite(new PhoneNumberIdentifier("+18001234567"), callerIdNumber);
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
call_invite = CallInvite(
target=PhoneNumberIdentifier("+16471234567"),
source_caller_id_number=caller_id_number,
)
Nessun evento viene pubblicato per il reindirizzamento. Se la destinazione è un utente di Servizi di comunicazione o un numero di telefono di proprietà della risorsa, genera un nuovo evento IncomingCall con il campo "to" impostato sulla destinazione specificata.
Trasferire un partecipante nella chiamata
Quando l'applicazione risponde a una chiamata o inserisce una chiamata in uscita a un endpoint, tale endpoint può essere trasferito a un altro endpoint di destinazione. Il trasferimento di una chiamata individuale rimuove l'applicazione dalla chiamata e quindi rimuove la possibilità di controllare la chiamata usando l'automazione delle chiamate. L'invito di chiamata alla destinazione visualizzerà l'ID chiamante dell'endpoint da trasferire. La fornitura di un ID chiamante personalizzato non è supportata.
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);
CommunicationIdentifier transferDestination = new CommunicationUserIdentifier("<user_id>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>"); // Sending event to a non-default endpoint.
// set customCallingContext
options.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
Quando l'applicazione risponde a una chiamata di gruppo o inserisce una chiamata di gruppo in uscita a un endpoint o ha aggiunto un partecipante a una chiamata individuale, un endpoint può essere trasferito dalla chiamata a un altro endpoint di destinazione, ad eccezione dell'endpoint di automazione delle chiamate. Il trasferimento di un partecipante in una chiamata di gruppo rimuove l'endpoint trasferito dalla chiamata. L'invito di chiamata alla destinazione visualizzerà l'ID chiamante dell'endpoint da trasferire. La fornitura di un ID chiamante personalizzato non è supportata.
// 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);
// Transfer User
CommunicationIdentifier transferDestination = new CommunicationUserIdentifier("<user_id>");
CommunicationIdentifier transferee = new CommunicationUserIdentifier("<transferee_user_id>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.setTransferee(transferee);
options.setOperationContext("<Your_context>");
options.setOperationCallbackUrl("<url_endpoint>");
// set customCallingContext
options.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
// Transfer Pstn User
CommunicationIdentifier transferDestination = new PhoneNumberIdentifier("<taget_phoneNumber>");
CommunicationIdentifier transferee = new PhoneNumberIdentifier("<transferee_phoneNumber>");
TransferCallToParticipantOptions options = new TransferCallToParticipantOptions(transferDestination);
options.setTransferee(transferee);
options.setOperationContext("<Your_context>");
options.setOperationCallbackUrl("<url_endpoint>");
// set customCallingContext
options.getCustomCallingContext().addSipUui("UUIvalue");
options.getCustomCallingContext().addSipX("sipHeaderName", "value");
Response<TransferCallResult> transferResponse = callConnectionAsync.transferToParticipantCallWithResponse(options).block();
# Transfer to user
transfer_destination = CommunicationUserIdentifier("<user_id>")
transferee = CommnunicationUserIdentifer("transferee_user_id")
call_connection_client = call_automation_client.get_call_connection("<call_connection_id_from_ongoing_call>")
# create custom context
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 to PSTN user
transfer_destination = PhoneNumberIdentifer("<target_phoneNumber>")
transferee = PhoneNumberIdentifer("transferee_phoneNumber")
# create custom context
sip_headers={}
sip_headers.add("X-MS-Custom-headerName", "headerValue")
sip_headers.add("User-To-User","uuivale")
call_connection_client = call_automation_client.get_call_connection("<call_connection_id_from_ongoing_call>")
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>"
)
Il diagramma di sequenza mostra il flusso previsto quando l'applicazione effettua una chiamata in uscita e quindi la trasferisce a un altro endpoint.
Aggiungere un partecipante a una chiamata
È possibile aggiungere un partecipante (utente o numero di telefono di Servizi di comunicazione) a una chiamata esistente. Quando si aggiunge un numero di telefono, è obbligatorio specificare un ID chiamante. Questo ID chiamante viene visualizzato nella notifica di chiamata al partecipante aggiunto.
// 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);
// Add user
CallInvite callInvite = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
// add custom calling context
callInvite.getCustomCallingContext().addVoip("voipHeaderName", "voipHeaderValue");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// Add PSTN user
PhoneNumberIdentifier callerIdNumber = new PhoneNumberIdentifier("+16044561234"); // This is the Azure Communication Services provisioned phone number for the caller
CallInvite callInvite = new CallInvite(new PhoneNumberIdentifier("+16041234567"), callerIdNumber);
// add custom calling context
callInvite.getCustomCallingContext().addSipUui("value");
callInvite.getCustomCallingContext().addSipX("header1", "customSipHeaderValue1");
AddParticipantOptions addParticipantOptions = new AddParticipantOptions(callInvite)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<AddParticipantResult> addParticipantResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
# Add user
voip_headers = {"voipHeaderName", "voipHeaderValue"}
target = CommunicationUserIdentifier("<acs_user_id>")
call_connection_client = call_automation_client.get_call_connection(
"<call_connection_id_from_ongoing_call>"
)
result = call_connection_client.add_participant(
target,
voip_headers=voip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>"
)
# Add PSTN user
caller_id_number = PhoneNumberIdentifier(
"+18888888888"
) # This is the Azure Communication Services provisioned phone number for the caller
sip_headers = {}
sip_headers["User-To-User"] = "value"
sip_headers["X-MS-Custom-headerName"] = "headerValue"
target = PhoneNumberIdentifier("+18008008800"),
call_connection_client = call_automation_client.get_call_connection(
"<call_connection_id_from_ongoing_call>"
)
result = call_connection_client.add_participant(
target,
sip_headers=sip_headers,
opration_context="Your context",
operationCallbackUrl="<url_endpoint>",
source_caller_id_number=caller_id_number
)
Per aggiungere un utente di Servizi di comunicazione, specificare CommunicationUserIdentifier anziché PhoneNumberIdentifier. L'ID chiamante non è obbligatorio in questo caso.
AddParticipant pubblica un evento AddParticipantSucceeded o AddParticipantFailed, assieme a ParticipantUpdated, che fornisce l'elenco più recente dei partecipanti nella chiamata.
// 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);
// Add user
CallInvite callInvite = new CallInvite(new CommunicationUserIdentifier("<user_id>"));
AddParticipantOperationOptions addParticipantOperationOptions = new AddParticipantOptions(callInvite);
Response<AddParticipantResult> addParticipantOperationResultResponse = callConnectionAsync.addParticipantWithResponse(addParticipantOptions).block();
// cancel the request
CancelAddParticipantOperationOptions cancelAddParticipantOperationOptions = new CancelAddParticipantOperationOptions(addParticipantResultResponse.invitationId)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
callConnectionAsync.cancelAddParticipantOperationWithResponse(cancelAddParticipantOperationOptions).block();
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);
CommunicationIdentifier removeThisUser = new CommunicationUserIdentifier("<user_id>");
RemoveParticipantOptions removeParticipantOptions = new RemoveParticipantOptions(removeThisUser)
.setOperationContext("<operation_context>")
.setOperationCallbackUrl("<url_endpoint>");
Response<RemoveParticipantResult> removeParticipantResultResponse = callConnectionAsync.removeParticipantWithResponse(removeParticipantOptions).block();
RemoveParticipant pubblicherà un evento RemoveParticipantSucceeded o RemoveParticipantFailed, assieme a ParticipantUpdated che fornisce l'elenco più recente dei partecipanti nella chiamata. Il partecipante rimosso viene omesso dall'elenco.
Interrompere una chiamata
L'azione Interrompi può essere usata per rimuovere l'applicazione dalla chiamata o per terminare una chiamata di gruppo impostando il parametro forEveryone su true. Per una chiamata individuale, l'azione Interrompi termina la chiamata con l'altro partecipante per impostazione predefinita.