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.
Questo articolo è destinato ai professionisti IT e agli amministratori di Teams che vogliono creare report cronologici personalizzati al di fuori di Power BI per Teams Agenti telefonici, Operatori automatici e Code chiamata.
Revisione della pianificazione e delle licenze
Pianificazione
- Panoramica dell'agente telefonico di Teams, dell'operatore automatico e della coda delle chiamate
- Utenti autorizzati
- Flussi di chiamata annidati
- Considerazioni sulla creazione di report
Licenze
Panoramica
Il servizio VAAC (Voice Applications Analytics Collector) consente di accedere a tutti i dati cronologici dell'agente telefonico di Teams, dell'operatore automatico e della coda delle chiamate con qualsiasi strumento che supporti la connessione agli endpoint HTTP.
Esistono tre passaggi:
- Autenticazione
- Creazione di una query valida
- Lettura del risultato
Passaggio 1 - Autenticazione
Un token di accesso deve essere recuperato e quindi inviato con tutte le richieste successive.
URL di autenticazione:
https://login.microsoftonline.com/{{tenantID}}/oauth2/token
Sostituire {{tenantID}} con l'ID tenant.
Il corpo della richiesta deve contenere quanto segue:
| Nome campo | Valore |
|---|---|
| client_id | |
| Ambito di applicazione | user_impersonation |
| Nome utente | Nome utente di Teams |
| Password | La password di Teams per il nome utente |
| grant_type | Password |
| risorsa | https://api.interfaces.records.teams.microsoft.com |
Passaggio 2 - Creazione di una query valida
Una query valida è costituita da diversi attributi in un oggetto JSON:
{
"Filters":[
{
"DataModelName":"Date",
"Value":"2022-04-01",
"Operand":4
},
{
"DataModelName":"Date",
"Value":"2022-04-30",
"Operand":6
}
],
"Dimensions":[
{
"DataModelName":"AutoAttendantIdentity"
},
{
"DataModelName":"AutoAttendantDirectorySearchMethod"
}
],
"Measurements":[
{
"DataModelName":"PSTNTotalMinutes"
},
{
"DataModelName":"TotalCallCount"
}
],
"Parameters":{
"UserAgent":"VAAC Custom Query"
},
"LimitResultRowsCount":100000
}
Campi obbligatori
-
Filtri: utilizzato per filtrare i dati restituiti da VAAC: qualsiasi dimensione in cui
Filters SupportpuòYessere filtrata- DataModelName deve essere una delle dimensioni supportate
- Il valore deve essere nel formato corretto (datetime, stringa, numero e così via)
-
Operandi:
- 0 - Uguale a
- 1 - Diverso da
- 2 - Contiene
- 3 - Inizia con
- 4 - Maggiore di
- 5 - Maggiore o uguale a
- 6 - Minore di
- 7 - Minore o uguale a
- 8 - Non contiene
- 9 - Non inizia con
-
Dimensioni:
- DataModelName deve essere una delle dimensioni Common, Auto Handler o Call Queue supportate.
-
Misure:
- DataModelName dovrebbe essere una delle misure supportate.
- Parametri: Attualmente è supportato solo UserAgent.
- LimitResultRowsCount: il numero massimo di righe restituite da VAAC
Nota
Quando si invia una query che esegue una ricerca in base a Datee i criteri di ricerca includono sia la data che l'ora (formato ISO 8601), la parte relativa all'ora viene ignorata.
Importante
Le richieste nel sistema vengono limitate in base all'indirizzo IP che effettua la chiamata, all'identità del tenant riconosciuta nell'intestazione auth e al servizio chiamante, per impedire a un singolo client, tenant o servizio di monopolizzare le risorse.
Comprimere la query JSON
L'API VAAC accetta solo stringhe compresse con GZIP o con codifica Base64 come input.
Usa qualsiasi sito Web in grado di comprimere il BLOB JSON usando GZIP o Base64. Ad esempio:
L'output GZIP dovrebbe essere simile a questo:
H4sIAAAAAAAACq2SQWsCMRCF7/6KkLNC3EoPe9u6FISuFbW9lB4GM9TQbEaSCSLif+9mV4uCBwXnMkze5L0vkH1PCCFfjWX0QeZfaWxqf+xJLIGhIo12CjXKPM0o+2cLn2BjEjKVZQM1Gqjhhfy+QQ9Oy3x0PDz0H5HypK6nPJ9SUv9uV2RpanTBkLvxiUVkKpjRaXA80ejY8E7eg3/hUBqPKya/WyD41bpCXpP+tzvjrBBC9NjA8o2ks8VyuiQGWxkXGcNdkO3FMVg7puj4GtAMfLPa/Y2Tk/wI6IufhjHl0xa9eJmIEsMv06Y16cLlm6kNzzFEy3Pahi4kH6pUvcMfrAhUU3oCAAA=
L'output Base64 dovrebbe essere simile a questo:
ew==
IkZpbHRlcnMiOls=
ew==
IkRhdGFNb2RlbE5hbWUiOiJEYXRlIiw=
IlZhbHVlIjoiMjAyMi0wNC0wMSIs
Ik9wZXJhbmQiOjQ=
fSw=
ew==
IkRhdGFNb2RlbE5hbWUiOiJEYXRlIiw=
IlZhbHVlIjoiMjAyMi0wNC0zMCIs
Ik9wZXJhbmQiOjY=
fQ==
XSw=
IkRpbWVuc2lvbnMiOls=
ew==
IkRhdGFNb2RlbE5hbWUiOiJBdXRvQXR0ZW5kYW50SWRlbnRpdHki
fSw=
ew==
IkRhdGFNb2RlbE5hbWUiOiJBdXRvQXR0ZW5kYW50RGlyZWN0b3J5U2VhcmNoTWV0aG9kIg==
fQ==
XSw=
Ik1lYXN1cmVtZW50cyI6Ww==
ew==
IkRhdGFNb2RlbE5hbWUiOiJQU1ROVG90YWxNaW51dGVzIg==
fSw=
ew==
IkRhdGFNb2RlbE5hbWUiOiJUb3RhbENhbGxDb3VudCI=
fQ==
XSw=
IlBhcmFtZXRlcnMiOns=
IlVzZXJBZ2VudCI6IlBvd2VyIEJJIERlc2t0b3Ai
fSw=
IkxpbWl0UmVzdWx0Um93c0NvdW50IjoxMDAwMDA=
fQ==
URL-Encode la query JSON compressa
La query JSON compressa GZIP o Base64 deve essere codificata in URL.
L'output codificato dell'URL GZIP è simile al seguente:
H4sIAAAAAAAACq2SQWsCMRCF7%2F6KkLNC3EoPe9u6FISuFbW9lB4GM9TQbEaSCSLif%2B9mV4uCBwXnMkze5L0vkH1PCCFfjWX0QeZfaWxqf%2BxJLIGhIo12CjXKPM0o%2B2cLn2BjEjKVZQM1Gqjhhfy%2BQQ9Oy3x0PDz0H5HypK6nPJ9SUv9uV2RpanTBkLvxiUVkKpjRaXA80ejY8E7eg3%2FhUBqPKya%2FWyD41bpCXpP%2BtzvjrBBC9NjA8o2ks8VyuiQGWxkXGcNdkO3FMVg7puj4GtAMfLPa%2FY2Tk%2FwI6IufhjHl0xa9eJmIEsMv06Y16cLlm6kNzzFEy3Pahi4kH6pUvcMfrAhUU3oCAAA%3D
L'output codificato URL Base64 è simile al seguente:
%0Aew%3D%3D%0AIkZpbHRlcnMiOls%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJEYXRlIiw%3D%0AIlZhbHVlIjoiMjAyMi0wNC0wMSIs%0AIk9wZXJhbmQiOjQ%3D%0AfSw%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJEYXRlIiw%3D%0AIlZhbHVlIjoiMjAyMi0wNC0zMCIs%0AIk9wZXJhbmQiOjY%3D%0AfQ%3D%3D%0AXSw%3D%0AIkRpbWVuc2lvbnMiOls%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJBdXRvQXR0ZW5kYW50SWRlbnRpdHki%0AfSw%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJBdXRvQXR0ZW5kYW50RGlyZWN0b3J5U2VhcmNoTWV0aG9kIg%3D%3D%0AfQ%3D%3D%0AXSw%3D%0AIk1lYXN1cmVtZW50cyI6Ww%3D%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJQU1ROVG90YWxNaW51dGVzIg%3D%3D%0AfSw%3D%0Aew%3D%3D%0AIkRhdGFNb2RlbE5hbWUiOiJUb3RhbENhbGxDb3VudCI%3D%0AfQ%3D%3D%0AXSw%3D%0AIlBhcmFtZXRlcnMiOns%3D%0AIlVzZXJBZ2VudCI6IlBvd2VyIEJJIERlc2t0b3Ai%0AfSw%3D%0AIkxpbWl0UmVzdWx0Um93c0NvdW50IjoxMDAwMDA%3D%0AfQ%3D%3D
L'URL della richiesta finale sarà simile al seguente:
https://api.interfaces.records.teams.microsoft.com/Teams.VoiceAnalytics/getanalytics?query=H4sIAAAAAAAACq2SQWsCMRCF7%2F6KkLNC3EoPe9u6FISuFbW9lB4GM9TQbEaSCSLif%2B9mV4uCBwXnMkze5L0vkH1PCCFfjWX0QeZfaWxqf%2BxJLIGhIo12CjXKPM0o%2B2cLn2BjEjKVZQM1Gqjhhfy%2BQQ9Oy3x0PDz0H5HypK6nPJ9SUv9uV2RpanTBkLvxiUVkKpjRaXA80ejY8E7eg3%2FhUBqPKya%2FWyD41bpCXpP%2BtzvjrBBC9NjA8o2ks8VyuiQGWxkXGcNdkO3FMVg7puj4GtAMfLPa%2FY2Tk%2FwI6IufhjHl0xa9eJmIEsMv06Y16cLlm6kNzzFEy3Pahi4kH6pUvcMfrAhUU3oCAAA%3D
Passaggio 3: lettura del risultato
Dopo aver inviato il tuo input, ci sono un paio di possibili risultati:
Se l'input non è valido, viene restituito un messaggio di errore con il motivo effettivo
Se l'input è valido, il risultato sarà simile al seguente:
In questo caso, i dati si trovano nel campo "dataResult" nello stesso ordine richiesto negli attributi di dimensione e misure della query.
Dimensioni e misure disponibili
Sono disponibili le seguenti dimensioni e misure.
Dimensioni comuni
Queste dimensioni sono comuni sia agli operatori automatici che alle code di chiamata:
| Nome (tipo) | Valori possibili | Supporto filtri | Descrizione |
|---|---|---|---|
| ID conferenza (Testo) |
GUID | S | Identificatore chiamata |
| Data (DateTime) |
S | Data della chiamata (UTC) | |
| DialogId (Testo) |
GUID | S | Identificatore chiamata |
| ID documento (Testo) |
GUID | S | Identificatore chiamata |
| Durata (Numero intero) |
S | Durata della chiamata, in secondi | |
| Ora di fine (DateTime) |
S | Tempo chiamata terminata (UTC) | |
| FirstIsCaller (Booleano) |
S | Primo e secondo endpoint di classificazione | |
| FirstUPN (Testo) |
N | Nome dell'entità utente (UPN) dell'utente del primo endpoint | |
| FirstUserObjectId (Testo) |
GUID | S | ID oggetto del FirstUPN |
| Hour (Testo) |
S | Chiamata di un'ora iniziata (UTC) | |
| Minute (Testo) |
S | Minuto di chiamata iniziata (UTC) | |
| PSTNCallDuration (Numero intero) |
S | Durata della chiamata | |
| PSTNCallType (Testo) |
S | ||
| Esterno | La chiamata proviene dall'esterno del tenant | ||
| Interno | La chiamata proviene dall'interno del tenant | ||
| PSTNConnectivityType (Testo) |
S | ||
| Piano di chiamata | La chiamata è arrivata con un numero del Piano per chiamate | ||
| DirectRouting | La chiamata è arrivata su un numero di instradamento diretto | ||
| TeamsPhoneMobile | La chiamata è arrivata su un numero di cellulare di Teams Phone | ||
| Chiamata ACS | La chiamata è arrivata dal web (Click2Call su report) | ||
| Second (Testo) |
S | Seconda chiamata iniziata (UTC) | |
| SecondUPN (Testo) |
N | Nome dell'entità utente (UPN) dell'utente del secondo endpoint | |
| SecondUserObjectId (Testo) |
GUID | S | ID oggetto del secondUPN |
| Data e ora (DateTime) |
S | È stata scritta la registrazione dell'ora (UTC) | |
| UserStartTimeUTC (DateTime) |
S | Chiamata a tempo iniziata (UTC) |
Dimensioni dell'operatore automatico
| Nome (tipo) | Valori possibili | Supporto filtri | Descrizione |
|---|---|---|---|
| AutoAttendantCallFlow (Testo) |
S | Incapsula i diversi stati della chiamata dell'operatore automatico | |
| abs_search | È stata eseguita una ricerca per nome | ||
| Annuncio | È stato riprodotto un annuncio | ||
| automatic_menu | Instradamento delle chiamate predefinito | ||
| call_termination | La chiamata è stata terminata, vedere AutoAttendantCallResult | ||
| call_transfer | La chiamata è stata trasferita, vedere AutoAttendantCallResult | ||
| first_level_menu | Stato di transizione - può essere ignorato | ||
| main_menu | Il messaggio di benvenuto è stato riprodotto | ||
| speech_input_confirmation | Il chiamante ha usato l'input vocale | ||
| user_selection | Il chiamante ha usato l'immissione di tasti a toni | ||
| AutoAttendantCallResult (Testo) |
S | Risultato finale della chiamata | |
| failed_to_establish_media | Non è stato possibile stabilire la parte multimediale della chiamata | ||
| failover_to_operator | Chiamata trasferita all'operatore in genere a causa di un errore di sistema | ||
| oaa_chain_too_long | Troppe gambe nell'AA | ||
| oaa_session_too_long | La sessione AA è durata troppo a lungo | ||
| service_declined | AA non ha accettato la chiamata | ||
| service_terminated | La configurazione AA disconnette la chiamata o la chiamata riagganciata | ||
| terminated_automatic_selection | La configurazione AA disconnette le chiamate | ||
| terminated_no_operator | Chiamata terminata a causa di un errore - nessun operatore definito | ||
| terminated_transfer_failed | Chiamata terminata come trasferimento non riuscito, in genere a un numero esterno | ||
| transfer_in_progress | Trasferimento AA-AA> | ||
| transferred_to_operator | La chiamata è stata trasferita all'operatore | ||
| transferred_to_cq | La chiamata è stata trasferita a Coda delle chiamate | ||
| transferred_to_receptionist | Uguale a transferred_to_operator | ||
| transferred_to_self | La chiamata è stata ripristinata all'inizio dell'AA | ||
| transferred_to_shared_voicemail | La chiamata è stata trasferita alla segreteria telefonica condivisa | ||
| transferred_to_user | La chiamata è stata trasferita a un utente | ||
| sconosciuto | Si è verificata una condizione sconosciuta | ||
| user_terminated | Il chiamante ha riattaccato | ||
| AutoAttendantCallerActionCounts (Numero intero) |
S | Numero di azioni eseguite dal chiamante (tasto a toni o voci vocali) | |
| AutoAttendantChainDurationInSecs (Numero reale) |
S | Il numero di secondi per cui la chiamata è rimasta in questa parte del flusso di chiamata | |
| AutoAttendantChainIndex (Numero intero) |
S | ||
| AutoAttendantChainStartTime (DateTime) |
S | L'ora di inizio di questa parte del flusso di chiamata | |
| AutoAttendantCount (Numero intero) |
S | Numero di operatori automatici attraverso il quale è stata eseguita la transizione della chiamata | |
| AutoAttendantDirectorySearchMethod (Testo) |
S | Metodo di ricerca della directory | |
| abs_search_dtmf | Tono a toni | ||
| abs_search_voice | Opzioni vocali | ||
| AutoAttendantId (Testo) |
S | GUID operatore automatico | |
| AutoAttendantIdentity (Testo) |
N | URI dell'account di risorsa su cui è arrivata la chiamata | |
| AutoAttendantTransferAction (Testo) |
S | Tipo di destinazione Trasferimento di chiamata | |
| AA | Trasferito a un AA | ||
| CQ | Trasferito a un CQ | ||
| external_pstn | Trasferito a un numero esterno | ||
| Segreteria telefonica condivisa | Trasferito alla segreteria telefonica condivisa | ||
| Sconosciuto | Azione sconosciuta | ||
| HasAA (Booleano) |
S | AA è coinvolto nella chiamata |
Dimensioni coda di chiamata
| Nome (tipo) | Valori possibili | Supporto filtri | Descrizione |
|---|---|---|---|
| CallQueueAgentCount (Numero intero) |
S | Numero di agenti nella coda delle chiamate | |
| CallQueueAgentOptInCount (Numero intero) |
S | Numero di agenti che hanno acconsentito esplicitamente a chiamare la coda | |
| CallQueueCallResult (Testo) |
S | Coda di chiamata, stato finale chiamata | |
| agent_joined_conference | Risposta a chiamata - modalità conferenza CQ | ||
| callback_call_timed_out | Richiamata: timeout | ||
| rifiutato | |||
| Disconnesso | |||
| errore | |||
| fallito | |||
| non valido | |||
| sorvolato | Condizione di overflow soddisfatta | ||
| timed_out | Condizione di timeout soddisfatta | ||
| no_agent | Nessuna condizione agente soddisfatta | ||
| transferred_to_agent | Risposta alla chiamata - modalità di trasferimento CQ | ||
| transferred_to_callback_caller | Richiamata a richiamata con risposta da parte dell'agente | ||
| CallQueueDurationSeconds (Numero reale) |
S | Durata chiamata nella coda delle chiamate | |
| CallQueueFinalStateAction (Testo) |
S | Azione finale della coda di chiamata | |
| disconnetti | time_out chiamate | ||
| disconnect_with_busy | Chiamate sorvolate | ||
| failed_to_accept_call | La coda delle chiamate non è riuscita ad accettare la chiamata | ||
| Inoltra | La chiamata è stata inoltrata a una persona dell'organizzazione o esternamente | ||
| shared_voicemail | La chiamata è stata inviata alla segreteria telefonica condivisa | ||
| altro | Si è verificata un'altra condizione | ||
| segreteria telefonica | La chiamata è stata inviata alla segreteria telefonica personale | ||
| CallQueueId (Testo) |
S | GUID coda di chiamata | |
| CallQueueIdentity (Testo) |
N | URI dell'account di risorsa su cui è arrivata la chiamata | |
| CallQueueTargetType (Testo) |
S | Destinazione reindirizzamento chiamata | |
| ApplicationEndpoint | Un'altra applicazione vocale | ||
| Cassetta postale | Segreteria telefonica condivisa | ||
| Other | Si è verificata un'altra condizione | ||
| Telefono | Trasferimento esterno | ||
| Utente | Utente nel tenant | ||
| HasCQ (Booleano) |
S | CQ è coinvolto nella chiamata | |
| TransferredFromCallQueueId (Testo) |
S | La chiamata GUID della coda delle chiamate è stata trasferita da | |
| TransferredFromCallQueueIdentity (Testo) |
N | URI dell'account di risorsa da cui è stata trasferita la chiamata |
Misure
| Nome (tipo) | Valori possibili | Descrizione |
|---|---|---|
| AvgAutoAttendantChainDurationSeconds (Numero reale) |
La durata media delle chiamate all'interno di ogni parte del flusso di chiamata dell'operatore automatico | |
| AvgCallDuration (Numero reale) |
Durata media di una chiamata in secondi | |
| AvgCallQueueDurationSeconds (Numero reale) |
Durata media della coda delle chiamate in secondi | |
| PSTNTotalMinutes (Numero reale) |
Durata totale delle chiamate in minuti | |
| TotalAudioStreamDuration (Numero reale) |
Durata totale del flusso audio in minuti | |
| TotalCallCount (Numero intero) |
Numero totale di chiamate |
Esempio
Qualsiasi applicazione in grado di accedere ai servizi Web RESTful può utilizzare l'API VAAC per recuperare i dati cronologici. Nell'esempio seguente viene utilizzato Postman .
Preparazione
Scarica e installa Postman.
Scaricare ed espandere il filepostman.zip .
Importare la cartella
postmanin Postman.
Accesso a VAAC tramite Postman
Selezionare VAAC - msit in alto a destra nell'elenco a discesa Nessun ambiente .
Seleziona Ambienti nel menu della barra a sinistra.
Selezionare VAAC - msit in Globali.
Sostituire userName, password e tenantId con le credenziali applicabili.
Seleziona Reimposta tutto nell'angolo in alto a destra.
Selezionare Salva.
Seleziona Raccolte nel menu della barra a sinistra.
Selezionare Config API Access Token - prod e passare alla scheda Corpo .
Seleziona Invia.
Viene restituito un token di accesso.
Se non viene restituito un token di accesso, controllare le credenziali per assicurarsi che dispongano delle autorizzazioni necessarie.
Selezionare VAAC ConfigAPI Prod e passare alla scheda Params .
- Comprimere la query come descritto
- URL codificare il risultato compresso come descritto
Compilare la stringa di query .
Seleziona Invia.