Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Questa funzionalità di Servizi di comunicazione di Azure è attualmente in anteprima. Le funzionalità in anteprima sono disponibili pubblicamente e possono essere usate da tutti i clienti Microsoft nuovi ed esistenti.
Questa versione di anteprima viene fornita senza contratto di servizio, pertanto se ne sconsiglia l’uso per i carichi di lavoro in ambienti di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero essere vincolate.
Per altre informazioni, vedere le Condizioni supplementari per l'uso delle anteprime di Microsoft Azure.
Questo articolo descrive come un fornitore di software indipendente (ISV) può effettuare il provisioning di Teams Phone per l'ambito dell'estendibilità del telefono di Teams.This article describe how an independent software vendor (ISV) can provisioning Teams Phone for the scope of Teams Phone extensibility (TPE). Questo articolo descrive anche come un ISV può guidare i clienti perché esistono operazioni in Teams che un tenant deve implementare.
Presunzioni
- Il cliente isv ha accesso all'interfaccia di amministrazione di Teams.
- Il cliente isv ha accesso all'interfaccia di amministrazione di Microsoft 365.
- ISV ha accesso per modificare le impostazioni delle risorse di Servizi di comunicazione di Azure.
- Si concede l'accesso al tenant di Teams a un servizio CCaaS per l'utilizzo dell'API Graph.
- ISV usa .NET ACS Call Automation SDK versione 1.5.0-beta.1.
- ISV usa JavaScript ACS Call Automation SDK versione 1.5.0-beta.2.
- ISV usa JavaScript ACS Client SDK versione 1.36.1-beta.1.
Avvio rapido
Il resto di questo articolo descrive le guide introduttive per due diversi utenti: CCaaS Developer e Teams Tenant. Lo sviluppatore CCaaS è l'ISV che compila il servizio CCaaS usando Servizi di comunicazione di Azure. Il tenant di Teams è l'utente che è un cliente dell'ISV che amministra Teams Phone.
Sviluppatore CCaaS: configura l'ID App (ID applicazione)
Prima di poter creare un bot, è necessario registrare un ID applicazione.
Nel portale di Azure aprire Registrazioni app.
Seleziona Nuova registrazione.
Completare i campi obbligatori e fare clic su Registra.
Una volta completata la risorsa nel portale, fare clic su Vai alla risorsa.
Registrare i valori per l'ID applicazione (client) e l'ID directory (tenant).
Aprire Certificati e segreti. Creare un nuovo segreto client e registrare i valori di certificato e ID segreto.
Per altre informazioni, vedere Registrazione di un bot chiamante.
CCaaS Developer: Creare il bot
Dopo aver creato il AppID
, il sistema telefonico Teams usa anche il processo corrente come definito per Graph per creare un bot.
In alternativa, è possibile completare i passaggi seguenti per creare solo il bot dopo aver creato un ID applicazione usando l'interfaccia della riga di comando di Azure.
Scarica Azure CLI.
Accedere con l'account Azure usato per la registrazione dell'app precedente:
az login
Se non è già installato, installare
Az.BotService
:Install-Module Az.BotService -AllowClobber
Effettuare il provisioning del bot usando il comando seguente. Per altre informazioni, vedere Pubblicare un bot con Azure PowerShell - Servizio Azure AI Bot - Servizio Bot:
Se è già stato effettuato il provisioning dell'ambiente, ignorare i passaggi seguenti.
Connect-AzAccount
Install-Module Az.Resources
Register-AzResourceProvider -ProviderNamespace Microsoft.BotService
Obbligatorio:
New-AzBotService -ResourceGroupName <your RG name here> -Name "<name of Teams Phone bot>" -ApplicationId <your Application/ClientID from Entra> -Location <bot location> -Sku S1 -Description "<description of bot>"
Esempio:
New-AzBotService -ResourceGroupName teamsphonetest-rg -Name "teamsPhoneBot" -ApplicationId aa123456-1234-1234-1234-aaa123456789 -Location "global" -Sku S1 -Description "My Teams Phone Test Bot"
Per questo passaggio, quando si configura Teams, il webhook può essere qualsiasi URL. Immettere un URL valido, ad esempio https://mycompanydomain.com
.
Annotazioni
In futuro, si prevede di rimuovere questa dipendenza dall'URL.
Amministratore di Teams: Effettuare il provisioning dell'account risorsa
L'amministratore di Teams deve eseguire i cmdlet seguenti. L'amministratore di Teams deve effettuare il provisioning di un account di risorse di Teams per l'estendibilità del telefono di Teams tramite i cmdlet. L'interfaccia di amministrazione di Teams non rientra nell'ambito, richiedendo PowerShell 6.1.1 o versione successiva.
Accedere a Teams PowerShell e aggiornare la versione più recente eseguendo questo comando:
Esempio:
Connect-MicrosoftTeams
Update-Module MicrosoftTeams
Usare il cmdlet New-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) per creare un account di risorsa. In questo comando non sono state apportate modifiche all'estendibilità del telefono di Teams. Il parametro ApplicationId è l'ID del bot di terze parti. Non usare gli ID applicazione di prima persona di Teams definiti in Set-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) perché non funzionano per l'estendibilità di Teams Phone. Spetta allo sviluppatore CCaaS come comunicare l'ID applicazione al tenant di Teams.
Esempio:
New-CsOnlineApplicationInstance -UserPrincipalName myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -DisplayName "My Teams Phone Resource Account"
Usa il comando aggiornato Set-CSonlineApplicationInstance per assegnare l'Account delle Risorse alla risorsa dei Servizi di comunicazione di Azure. Questo comando instrada le chiamate alla risorsa di Servizi di comunicazione di Azure. Spetta allo sviluppatore CCaaS come comunicare ACSResourceID
con il tenant di Teams.
Esempio:
Set-CsOnlineApplicationInstance -Identity myteamsphoneresourceaccount@contoso.com -ApplicationId aa123456-1234-1234-1234-aaa123456789 -AcsResourceId bb567890-1234-1234-1234-bbb123456789
Usare il comando Sync-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) aggiornato per sincronizzare l'account risorsa con il servizio di provisioning dell'agente. Questo comando instrada le chiamate alla risorsa di Servizi di comunicazione di Azure. In questo comando non sono state apportate modifiche all'estendibilità del telefono di Teams.
Esempio:
Sync-CsOnlineApplicationInstance -ObjectId cc123456-5678-5678-1234-ccc123456789 -ApplicationId aa123456-1234-1234-1234-aaa123456789
Facoltativamente, è possibile usare il cmdlet Get-CsOnlineApplicationInstance (MicrosoftTeamsPowerShell) per restituire l'account risorsa di cui è stato effettuato il provisioning.
Amministratore di Teams: acquisire e assegnare un numero di telefono all'account risorsa
È necessario assegnare un numero PSTN (Public Switched Telephone Network) all'account risorsa (RA) per effettuare una chiamata a questo endpoint. Effettuare il provisioning di un numero di telefono di Teams e assegnarlo all'account risorse di Teams di cui è stato effettuato il provisioning di recente.
Passare all'interfaccia di amministrazione di Teams.
Accedere con le credenziali dell'utente amministratore di Teams.
Passa alla sezione Numero di telefono e effettua il provisioning del tipo di servizio di numero di telefono di Teams di tua scelta. Per ulteriori informazioni, consulta Ottieni numeri di telefono del servizio per i piani di chiamata - Microsoft Teams. Dopo il provisioning, è necessario assegnare il numero di telefono all'account risorsa.
Eseguire i comandi seguenti per assegnare il numero di telefono di Teams all'account risorsa:
Set-CsPhoneNumberAssignment -Identity <your-TeamsResourceAccount> -PhoneNumber <acquired-number> -PhoneNumberType <DirectRouting|CallingPlan|OperatorConnect>
Se non si è certi dei dettagli del numero di telefono, eseguire il cmdlet seguente
get
per ottenere i dettagli del numero di telefono:Get-CsPhoneNumberAssignment -TelephoneNumber <acquired-number>
Il portale di Teams ti ha avvisato dell'assenza di una licenza appropriata? In tal caso, è necessario assegnare una licenza appropriata all'account risorsa.
- Passare all'interfaccia di amministrazione di Microsoft 365.
- Passare a Licenzee assegnare l'account risorsa telefono di Microsoft Teams all'account risorsa.
Inoltre, se si prevede di effettuare chiamate PSTN in uscita usando il numero di telefono assegnato agli account di risorse, ora è un buon momento per assegnare un piano per chiamate di Microsoft Teams.
Sviluppatore CCaaS: Ottenere informazioni sull'account risorsa
Stiamo introducendo una nuova API di Graph per ottenere un elenco di account risorsa e di numeri di telefono a cui sono stati assegnati. L'API Graph supporta un filtro facoltativo per la prima parte di Microsoft EntraapplicationID
/ clientId
.
Autenticazione:
L'API Graph supporta l'autenticazione delegata come attualmente definita in Autenticazione graph.
Autorizzazione:
L'applicazione Microsoft Entra ID deve richiedere le autorizzazioni di Microsoft Graph di riferimento a TeamsResourceAccount.Read.All. Per assegnare tale autorizzazione, seguire la procedura descritta in Come assegnare autorizzazioni graph delegate.
L'applicazione Microsoft Entra richiede anche il consenso dell'amministratore.
Dopo aver concesso all'applicazione Microsoft Entra le autorizzazioni appropriate per Graph, è necessario assegnare l'utente a tale applicazione. Seguire la procedura descritta in Gestire l'assegnazione di utenti e gruppi a un'applicazione.
L'amministratore CCaaS necessita anche di autorizzazioni elevate per accedere alle informazioni sull'account risorse di Teams. L'API Graph ottiene informazioni sull'account risorse di Teams e queste informazioni sono un asset di proprietà dell'amministratore di Teams, quindi richiede l'accesso con privilegi come amministratore di Teams. Per altre informazioni, vedere Autorizzazioni per la gestione degli account delle risorse.
Definizione di query:
https://graph.microsoft.com/beta/admin/teams/resourceAccounts
URI di richiesta di esempio (RURI) per ottenere gli account di risorsa con un filtro in appId:
GET https://graph.microsoft.com/beta/admin/teams/resourceAccounts?$filter=appid eq 'aa123456-1234-1234-1234-aaa123456789'
Risposta riuscita:
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#admin/teams/resourceAccounts",
"value": [
{
"id": "cc123456-5678-5678-1234-ccc123456789",
"userPrincipalName": "myteamsphoneresourceaccount@contoso.com",
"appId": "aa123456-1234-1234-1234-aaa123456789",
"displayName": "My RA Name",
"phoneNumber": "tel:+1234567890",
"acsResourceId": "bb567890-1234-1234-1234-bbb123456789"
}]
}
CCaaS Developer: ricezione e risposta di chiamata in arrivo
I passaggi seguenti illustrano come ricevere e rispondere a una chiamata di Teams in arrivo.
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Creare un account gratuito.
- Una risorsa di Servizi di comunicazione distribuita. Creare una risorsa di Servizi di comunicazione.
- Un endpoint di Event Grid configurato: Concetti relativi alle chiamate in ingresso - Un documento concettuale di Servizi di comunicazione di Azure | Microsoft Learn.
- Numero di telefono di Teams assegnato all'account della risorsa.
- Un account risorsa di Teams che è stato configurato per inviare chiamate alla risorsa di Servizi di comunicazione di Azure.
- Un account di risorse di Teams di cui è stato effettuato il provisioning con un piano per chiamate.
- Una risorsa di Servizi di comunicazione di Azure con l'autorizzazione per ricevere una chiamata dall'account risorsa di Teams.
- Creare e ospitare un tunnel di sviluppo.
- (Facoltativo) Creare un utente di Microsoft Teams con una licenza telefonica abilitata per la voce. La licenza di Teams Phone è necessaria per aggiungere gli utenti di Teams alla chiamata. Altre informazioni sulle opzioni aziendali di Microsoft Teams. Per altre informazioni, vedere Configurare Teams Phone nell'organizzazione.
- Completare il consenso client e server come definito in Accedere al telefono di Teams di un utente separato dal client Teams.
Annotazioni
Per la risorsa di Servizi di comunicazione di Azure, assicurarsi che la posizione dei dati corrisponda alla posizione del tenant di Teams per rispettare le normative sui limiti dei dati. È possibile recuperare i dettagli a livello di codice sull'organizzazione tenant tramite Get organization
Configurare e ospitare i tunnel di sviluppo di Azure
I tunnel di sviluppo di Azure consentono di condividere i servizi Web locali ospitati su Internet. Eseguire i comandi per connettere l'ambiente di sviluppo locale alla rete Internet pubblica. I tunnel di sviluppo creano un URL dell'endpoint permanente e consentono l'accesso anonimo. Questo endpoint viene usato per notificare all'applicazione gli eventi di chiamata dal servizio Di automazione delle chiamate di Servizi di comunicazione di Azure.
devtunnel create --allow-anonymous
devtunnel port create -p 8080
devtunnel host
In alternativa, seguire le istruzioni per configurare i tunnel di sviluppo di Azure in Visual Studio.
Gestire gli eventi di callback di automazione delle chiamate
app.MapPost("/api/callbacks", async (CloudEvent[] cloudEvents, ILogger < Program > logger) => {
foreach(var cloudEvent in cloudEvents) {
logger.LogInformation($"Event received: {JsonConvert.SerializeObject(cloudEvent)}");
CallAutomationEventBase parsedEvent = CallAutomationEventParser.Parse(cloudEvent);
logger.LogInformation($"{parsedEvent?.GetType().Name} parsedEvent received for call connection id: {parsedEvent?.CallConnectionId}");
var callConnection = callAutomationClient.GetCallConnection(parsedEvent.CallConnectionId);
var callMedia = callConnection.GetCallMedia();
if (parsedEvent is CallConnected) {
//Handle Call Connected Event
}
}
});
Gestire l'evento di chiamata in arrivo e rispondere
app.MapPost("/api/incomingCall", async (
[FromBody] EventGridEvent[] eventGridEvents,
ILogger<Program> logger) =>
{
foreach (var eventGridEvent in eventGridEvents)
{
// Handle system events
if (eventGridEvent.TryGetSystemEventData(out object eventData))
{
// Handle the subscription validation event.
if (eventData is SubscriptionValidationEventData subscriptionValidationEventData)
{
var responseData = new SubscriptionValidationResponse
{
ValidationResponse = subscriptionValidationEventData.ValidationCode
};
return Results.Ok(responseData);
}
}
var jsonObject = Helper.GetJsonObject(eventGridEvent.Data);
var fromPhoneNumber = new PhoneNumberIdentifier(Helper.GetFrom(jsonObject));
var toPhoneNumber = new PhoneNumberIdentifier(Helper.GetTo(jsonObject));
var incomingCallContext = Helper.GetIncomingCallContext(jsonObject);
var callbackUri = new Uri(new Uri(devTunnelUri), $"/api/callbacks");
var options = new AnswerCallOptions(incomingCallContext, callbackUri);
AnswerCallResult answerCallResult = await callAutomationClient.AnswerCallAsync(options);
logger.LogInformation($"Answered call for connection id: {answerCallResult.CallConnection.CallConnectionId}");
//Use EventProcessor to process CallConnected event
var answer_result = await answerCallResult.WaitForEventProcessorAsync();
if (answer_result.IsSuccess)
{
logger.LogInformation($"Call connected event received for connection id: {answer_result.SuccessResult.CallConnectionId}");
var callConnectionMedia = answerCallResult.CallConnection.GetCallMedia();
}
}
return Results.Ok();
});
La notifica chiamata in arrivo è formattata come segue. Non sono state apportate modifiche allo schema. Tuttavia, ora to:rawid
riflette l'identità del GUID dell'account di risorse di Teams:
Esempio di evento di chiamata in ingresso con l'identificatore dell'account di risorsa di Teams e il contesto personalizzato (VoIP e SIP):
{
"to": {
"kind": "unknown",
"rawId": "28:orgid:cc123456-5678-5678-1234-ccc123456789"
},
"from": {
"kind": "phoneNumber",
"rawId": "4:+12065551212",
"phoneNumber": {
"value": "+12065551212"
}
},
"serverCallId": "aHR0cHM6Ly9hcGkuZmxpZ2h0cHJveHkudGVhbXMubWljcm9zb2Z0LmNvbS9hcGkvdjIvZXAvY29udi11c3dlLTAyLXNkZi1ha3MuY29udi5za3lwZS5jb20vY29udi9fVERMUjZVS3BrT05aTlRMOHlIVnBnP2k9MTAtNjAtMTMtMjE2JmU9NjM4NTMwMzUzMjk2MjI3NjY1",
"callerDisplayName": "+12065551212",
"customContext":
{
"voipHeaders":
{
"X-myCustomVoipHeaderName": "myValue"
},
"incomingCallContext": "<CALL_CONTEXT VALUE>",
"correlationId": "2e0fa6fe-bf3e-4351-9beb-568add4f5315"
}
CCaaS Developer: Come accedere direttamente ai contenuti multimediali
Se le opzioni integrate PlayTo, riconoscimento e registrazione fornite con Call Automation SDK non soddisfano le esigenze del servizio CCaaS, lo sviluppatore CCaaS può accedere direttamente ai media. È possibile accedere ai supporti per le chiamate tramite i meccanismi di notifica REST + Websocket quando si crea un'istanza dell'oggetto AnswerCallOptions
. Una volta stabilita la chiamata, il flusso multimediale avviene tramite notifiche WebSocket all'URL fornito nell'oggetto MediaStreamingOptions
. Vedere il frammento di codice di esempio seguente:
Le opzioni seguenti non sono specifiche dell'estendibilità di Teams Phone e sono disponibili anche per i flussi di estendibilità non di Teams Phone.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://mywebsocket.azure.com/client/hubs/media?accesstoken={access_token}"),
MediaStreamingTransport.WebSocket,
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
);
var answerCallOptions = new AnswerCallOptions(incomingCallContext, callbackUri: new Uri(callConfiguration.AppCallbackUrl)) {
MediaStreamingOptions = mediaStreamingOptions
};
var response = await callingServerClient.AnswerCallAsync(answerCallOptions);
Il codice seguente è una definizione dello schema di un oggetto dati di streaming. I pacchetti audio sono codificati in base64 e CCaaS deve decodificare il valore nell'attributo data
per ottenere i byte PCM (Pulse-Code Modulation).
{
"kind": <string>, // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioData":{
"data": <string>, // Base64 Encoded audio buffer data
"timestamp": <string>, // In ISO 8601 format (yyyy-mm-ddThh:mm:ssZ)
"participantRawID": <string>,
"silent": <boolean> // Indicates if the received audio buffer contains only silence.
}
}
CCaaS Client Developer: Come eseguire l'autenticazione come doppio utente
Lo sviluppatore deve acquisire l'ID tenant di Teams e l'ID client. Lo sviluppatore deve implementare questa acquisizione. Dopo che l'applicazione client acquisisce l'ID tenant e l'ID client, lo sviluppatore implementa il mezzo per richiedere all'utente. Per altre informazioni, vedere Classe InteractiveBrowserCredential (Azure.Identity).
Una volta completata l'interazione dell'utente e l'autenticazione ha esito positivo, viene restituito un token e passato alla classe AzureCommunicationTokenCredential per restituire un token di Servizi di comunicazione di Azure.
Analizzare il token di Azure Communication Services per ottenere l'interfaccia CommunicationUserIdentifier | Microsoft Learn.
Vedere l'esempio di codice definito in Creare credenziali in grado di ottenere un token utente di Microsoft Entra.
CCaaS Client Developer: Come costruire l'agente di estendibilità telefono teams
Lo sviluppatore crea un'istanza di un client chiamante, quindi chiama il metodo createTeamsCallAgent. Per altre informazioni, vedere Classe CallClient.
...
//Auth and get token
...
this._teamsCallAgent = await this._callClient.createTeamsCallAgent(this.tokenCredential);
CCaaS Client Developer: Come effettuare una chiamata OBO in uscita
Gli sviluppatori devono ottenere l'account di risorsa per conto dell'identità OBO (ID) di cui deve essere effettuata la chiamata per conto di. Gli articoli seguenti descrivono come effettuare una chiamata OBO in uscita.
Dopo aver acquisito l'identità OBO, è necessario impostare onBehalfOfOptions
nel metodo StartTeamsGroupCallOptions()
o StartTeamsCallOptions()
. Per altre informazioni, vedere Interfaccia StartTeamsGroupCallOptions o interfaccia StartTeamsCallOptions.
Dopo aver impostato le opzioni di chiamata, usare il startCall()
metodo nell'interfaccia TeamsCallAgent.
...
...
const isMultipleParticipants = Array.isArray(userIds) && userIds.length > 1;
this._previousTeamsCall = this._currentTeamsCall;
var onBehalfOfOptions: SDK.OnBehalfOfOptions | undefined;
if (this.elements.onBehalfOfUserInput.value !== null && this.elements.onBehalfOfUserInput.value !== "" ) {
var onBehalfOfUser = myFunctionToGetIdofResourceAccount();
if (isMicrosoftTeamsAppIdentifier(onBehalfOfUser)) {
onBehalfOfOptions = onBehalfOfUser ? { userId: onBehalfOfUser } : undefined;
if (onBehalfOfOptions) {
console.log("OBO options provided with app Id: " + (onBehalfOfUser as MicrosoftTeamsAppIdentifier).teamsAppId);
}
} else {
console.error("OBO option ignored, MicrosoftTeamsAppIdentifier type expected");
}
}
if (isMultipleParticipants) {
const participants = userIds as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier)[];
(this._placeCallOptions as SDK.StartTeamsGroupCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participants, this._placeCallOptions as SDK.StartTeamsGroupCallOptions);
} else {
const participant = userIds[0] as (MicrosoftTeamsUserIdentifier | PhoneNumberIdentifier | MicrosoftTeamsAppIdentifier | UnknownIdentifier);
(this._placeCallOptions as SDK.StartTeamsCallOptions).onBehalfOfOptions = onBehalfOfOptions;
call = this._teamsCallAgent.startCall(participant, this._placeCallOptions as SDK.StartTeamsCallOptions);
}
...
...
Sviluppatore CCaaS: come gestire un agente di chiamata di estendibilità di Teams Phone da un server
Dopo aver eseguito l'accesso come agente con un'identità a doppia persona, è possibile aggiungere l'agente della chiamata estendibile di Teams Phone a una chiamata esistente utilizzando l'identità a doppia persona.
L'esempio seguente illustra una richiesta di aggiungere un agente di chiamata di estendibilità di Teams Phone con l'identificatore Microsoft Entra ID 0269be4d-5be0-4770-bf9c-a1bf50ee78d5
nel tenant 87d349ed-44d7-43e1-9a83-5f2406dee5bd
con ambito risorsa di Servizi di comunicazione di Azure e5b7f628-ea94-4fdc-b3d9-1af1fe231111
.
//Call is already established
...
...
var target = new TeamsExtensionUserIdentifier("0269be4d-5be0-4770-bf9c-a1bf50ee78d5", "87d349ed-44d7-43e1-9a83-5f2406dee5bd","e5b7f628-ea94-4fdc-b3d9-1af1fe231111");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
Sviluppatore CCaaS: come aggiungere un utente PSTN a una chiamata di estendibilità telefonica di Teams da un server
Dopo aver stabilito una chiamata di estendibilità telefonica di Teams, è possibile aggiungere un utente PSTN alla chiamata usando un numero di telefono.
Nell'esempio seguente viene illustrata una richiesta per aggiungere un utente PSTN a una chiamata di estensione di Teams Phone con il numero di telefono +12065551212
.
//Call is already established
...
...
var target = new PhoneNumberIdentifier("+12065551212");
await callConnection.AddParticipantAsync(new AddParticipantOptions(new CallInvite(target, null))
{
InvitationTimeoutInSeconds = 60,
OperationContext = "addParticipantAsync"
});
...
...
Sviluppatore CCaaS: come trasferire una chiamata di estendibilità telefonica di Teams da un server a un endpoint PSTN
Dopo aver stabilito una chiamata di estendibilità telefonica di Teams, è possibile trasferirla a un utente PSTN specificando un numero di telefono.
Nell'esempio seguente viene illustrata una richiesta di trasferimento di una chiamata stabilita a un utente PSTN con numero di +12065551212
telefono .
//Call is already established
...
...
var target = new PhoneNumberIdentifier("+12065551212");
await callConnection.TransferCallToParticipantAsync(new TransferToParticipantOptions(target)
{
OperationContext = "transferParticipantAsync"
});
...
...
Sviluppatore CCaaS: Come avviare la registrazione della sessione con StartRecordingOptions
Per l'estendibilità del telefono di Teams, è necessario usare il "CallConnectionId" ricevuto durante l'inizio della chiamata, all'inizio della sessione di registrazione.
- Usare RecordingContent per passare il tipo di contenuto di registrazione. Usa AUDIO.
- Usare RecordingChannel per passare il tipo di canale di registrazione. Usare MIXED o UNMIXED.
- Utilizzare RecordingFormat per passare il formato della registrazione. Usare WAV.
CallAutomationClient callAutomationClient = new CallAutomationClient("<ACSConnectionString>");
StartRecordingOptions recordingOptions = new StartRecordingOptions("<callConnectionId>")
{
RecordingContent = RecordingContent.Audio,
RecordingChannel = RecordingChannel.Unmixed,
RecordingFormat = RecordingFormat.Wav,
RecordingStateCallbackUri = new Uri("<CallbackUri>");
};
Response<RecordingStateResult> response = await callAutomationClient.GetCallRecording()
.StartAsync(recordingOptions);
Annotazioni
La registrazione con l'ID connessione viene avviata in modo asincrono (codice di risposta 204) e lo stato della registrazione viene aggiornato tramite l'evento di callback Microsoft.Communication.RecordingStateChanged
ricevuto su RecordingStateCallbackUri
.
Inoltre, qualsiasi errore di avvio della registrazione viene segnalato tramite un nuovo evento Microsoft.Communication.StartRecordingFailed
di callback ricevuto su RecordingStateCallbackUri
.
SDK alfa
- Chiamare Automation C# SDK
- SDK Java per l'automazione delle chiamate
- Automazione delle chiamate Python SDK
- SDK JavaScript per l'Automazione delle Chiamate
- Client SDK