# Integrare i dati di engagement

### Panoramica

Zoom Contact Center genera dati di coinvolgimento preziosi durante ogni interazione con il cliente, incluse registrazioni delle chiamate, trascrizioni, note degli agenti e disposizioni. Continua a leggere per scoprire come archiviare i dati di coinvolgimento in sistemi esterni (ad esempio CRM e altri sistemi di registrazione) per creare una visione unificata del cliente, abilitare un coaching efficace degli agenti o soddisfare requisiti di conformità quando si utilizza Zoom Contact Center.

Analizzeremo i diversi metodi di integrazione per aiutarti a scegliere l'approccio migliore in base a come i tuoi agenti possono lavorare con maggiore efficienza.

Il metodo migliore dipende principalmente da un fattore chiave: **l'applicazione in cui gli agenti gestiscono le loro interazioni**. Le due opzioni di cui parleremo sono:

1. Agenti che utilizzano il connettore ZCC CRM CTI pronto all'uso all'interno del CRM.
2. Agenti che lavorano nell'app Zoom Workplace, che richiede una soluzione personalizzata con le API e i Webhook di ZCC.

***

### Integrazione tramite CTI Connector CRM pronta all'uso

Questo è il metodo più semplice. Se i tuoi agenti utilizzano un connettore ZCC CRM CTI, la maggior parte dei dati di coinvolgimento può essere sincronizzata automaticamente tra la piattaforma Zoom e il CRM appropriato.

#### <mark style="color:blu;">Come funziona</mark>

Il CTI Connector incorpora l'interfaccia agente ZCC direttamente nel CRM. Quando un coinvolgimento termina, i dati come registrazioni, trascrizioni, note e disposizioni vengono salvati automaticamente all'interno di Zoom e collegati al record pertinente (ad esempio, un ticket o un contatto) nel tuo CRM.

#### <mark style="color:blu;">Requisiti di configurazione</mark>

La funzionalità che permette la sincronizzazione dei dati tra Zoom e il CRM è disponibile “out of the box”, ma richiede l'attivazione nel portale di amministrazione ZCC.

Completa i seguenti passaggi:

{% stepper %}
{% step %}
**Abilita nel portale di amministrazione ZCC**

Accedi al portale amministrativo di Zoom come Amministratore e vai a Contact Center Management > Integrations > Applications.

Trova l'integrazione CRM pertinente e abilita le impostazioni appropriate per consentire l'archiviazione dei dati nel tuo CRM.
{% endstep %}

{% step %}
**Autorizzazioni CRM**

Rivedi e segui le [guide di configurazione dell'integrazione CRM](https://support.zoom.com/) per verificare che l'utente dell'integrazione CRM disponga delle autorizzazioni di scrittura necessarie per tutti gli oggetti rilevanti.
{% endstep %}
{% endstepper %}

#### <mark style="color:blu;">Piattaforme CRM supportate</mark>

Questa funzionalità è accessibile tramite il connettore ZCC CRM CTI quando gli agenti utilizzano i seguenti CRM:

* Salesforce
* Zendesk
* ServiceNow
* Microsoft Dynamics
* HubSpot

Con i connettori CRM CTI non è richiesta alcuna configurazione speciale e l'integrazione salverà i dati di coinvolgimento nel CRM per impostazione predefinita.

***

### Integrazione personalizzata tramite API

Se i tuoi agenti utilizzano l'app native Zoom Workplace o ZCC Smart Embed, avrai bisogno di una soluzione personalizzata per trasferire i dati di coinvolgimento. Il modo principale per farlo è tramite le API di Zoom Contact Center.

Ci sono due approcci principali per accedere ai dati di coinvolgimento tramite l'API:

* **Polling:** Interrogare periodicamente l'API di Zoom per verificare se sono disponibili nuovi dati di coinvolgimento.
* **Webhooks:** Ricevere una notifica in tempo reale da Zoom non appena una trascrizione è pronta.

Esiste anche un terzo approccio, **integrazione Flow Events**, che funziona per alcuni tipi di dati.

#### <mark style="color:blu;">Interrogare le API di Zoom Contact Center</mark>

Per scaricare i dati di coinvolgimento, è necessario interrogare gli endpoint API ZCC appropriati. È importante notare che diversi tipi di dati provengono da API diverse, quindi probabilmente dovrai implementare una logica di polling per ciascun endpoint rilevante.

| Per ottenere questi dati...                                              | Interroga questa API...                                                                                                                                                                                                                                                                                                                                            | Usando questo campo... | Note:                                                                                   |
| ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------- | --------------------------------------------------------------------------------------- |
| <p>File multimediale della registrazione</p><p>(Canale voce e video)</p> | <p><a href="https://developers.zoom.us/docs/api/contact-center/#tag/recordings/GET/contact_center/recordings">Elenca le registrazioni</a> o</p><p>Elenca le registrazioni della coda</p>                                                                                                                                                                           | `download_url`         | Richiede che la registrazione delle chiamate sia abilitata per la coda.                 |
| <p>Trascrizione della registrazione</p><p>(Canale voce e video)</p>      | [Elenca i coinvolgimenti](https://developers.zoom.us/docs/api/contact-center/#tag/engagements/GET/contact_center/engagements)                                                                                                                                                                                                                                      | `transcript_url`       | Richiede che la registrazione delle chiamate con trascrizione sia abilitata.            |
| <p>Trascrizione</p><p>(Canale di messaggistica)</p>                      | [Elenca i coinvolgimenti](https://developers.zoom.us/docs/api/contact-center/#tag/engagements/GET/contact_center/engagements)                                                                                                                                                                                                                                      | `transcript_url`       | La trascrizione è abilitata per impostazione predefinita per i canali di messaggistica. |
| <p>Esiti</p><p>(Tutti i canali)</p>                                      | [Elenca i coinvolgimenti](https://developers.zoom.us/docs/api/contact-center/#tag/engagements/GET/contact_center/engagements)                                                                                                                                                                                                                                      | `dispositions`         | Un array di oggetti disposizione.                                                       |
| <p>Note</p><p>(Tutti i canali)</p>                                       | [Elenca i coinvolgimenti](https://developers.zoom.us/docs/api/contact-center/#tag/engagements/GET/contact_center/engagements)                                                                                                                                                                                                                                      | `notes`                | Un array di oggetti nota.                                                               |
| <p>File multimediale della segreteria</p><p><br><br></p>                 | <p><a href="https://developers.zoom.us/docs/api/contact-center/#tag/inboxes/GET/contact_center/inboxes/messages">Elenca i messaggi in arrivo di un account</a> <strong>o</strong></p><p><a href="https://developers.zoom.us/docs/api/contact-center/#tag/inboxes/GET/contact_center/inboxes/{inboxId}/messages">Elenca i messaggi di una casella in arrivo</a></p> | `download_url`         | Per i messaggi vocali lasciati in una casella del Contact Center.                       |
| Trascrizione della segreteria                                            | <p><a href="https://developers.zoom.us/docs/api/contact-center/#tag/inboxes/GET/contact_center/inboxes/messages">Elenca i messaggi in arrivo di un account</a> <strong>o</strong></p><p><a href="https://developers.zoom.us/docs/api/contact-center/#tag/inboxes/GET/contact_center/inboxes/{inboxId}/messages">Elenca i messaggi di una casella in arrivo</a></p> | `transcript_url`       | Richiede che la trascrizione sia abilitata per la casella in arrivo.                    |

{% hint style="danger" %}
**Avviso**

Gli URL di download (`download_url`, `transcript_url`, `playback_url`, e così via) forniti da queste API Zoom sono **è** link pubblici. Sono progettati per l'accesso programmatico e richiedono l'autenticazione API (ad esempio, token di accesso nell'intestazione Authorization) per scaricare il file associato.

Questo significa:

* Non puoi salvare direttamente questi URL in un CRM per consentire a un utente di cliccarli. Un utente che clicca il link nel proprio browser non sarà autenticato e il download fallirà.
* Il metodo corretto è che il tuo servizio backend usi l'URL per recuperare il file. Il tuo servizio può quindi archiviare il file nel tuo sistema (come Amazon S3, Azure Blob Storage o lo storage file del tuo CRM) e fornire da lì agli utenti un link sicuro.
  {% endhint %}

{% hint style="warning" %}
**Attenzione**

**Ritardi di elaborazione - Registrazioni voce e video:**

Questi dati non sono disponibili istantaneamente quando termina una chiamata. L'audio deve essere elaborato e caricato prima, operazione che può richiedere diversi minuti per chiamate lunghe. Per assicurarti di non perdere registrazioni, imposta il `query_date_type` parametro su `recording_end_time` quando interroghi l'API List recordings. Questo recupera i dati in base a quando è terminata l'elaborazione, non quando è terminata la chiamata.
{% endhint %}

Per maggiori informazioni sulle API di Zoom Contact Center, vedi [documentazione Contact Center APIs](https://developers.zoom.us/docs/api/contact-center/) .

#### <mark style="color:blu;">Usa i Webhook per eventi in tempo reale</mark>

Per un approccio più immediato e guidato dagli eventi, puoi iscriverti ai webhook ZCC. Questo è il metodo più efficiente per un'integrazione quasi in tempo reale.

**Come funziona**

1. Iscriviti agli eventi appropriati nel Marketplace delle app di Zoom.
2. Quando si verifica un evento, Zoom invia una notifica al tuo URL webhook (o alla tua connessione Websocket).
3. Il payload dell'evento contiene i dati di cui hai bisogno, direttamente o come URL/ID per una chiamata API di follow-up.

**Eventi Webhook comuni per i dati di coinvolgimento**

* **Registrazione voce/video:** contact\_center.recording\_completed (fornisce un `download_url`)
* **Trascrizione voce/video:** contact\_center.recording\_transcript\_completed (fornisce una `transcript_url`)
* **Trascrizione messaggistica:** contact\_center.engagement\_messaging\_transcript\_completed (fornisce una `transcript_url`)
* **Note:** contact\_center.engagement\_note\_added (fornisce un `note` campo con i dati della nota)
* **Disposizione:** contact\_center.engagement\_disposition\_added (fornisce un `disposition_name` campo con i dati della disposizione)

{% hint style="warning" %}
**Attenzione**

* **Fai attenzione a eventi multipli:** Il `note_added` che `disposition_added` eventi possono essere attivati più volte per un singolo coinvolgimento (ad esempio, se un agente salva più note o se una chiamata viene trasferita). La logica della tua applicazione deve essere in grado di gestire questo.
* **Costruisci ridondanza:** La consegna degli eventi non è sempre garantita al 100% (ad esempio, il tuo endpoint o la connessione websocket potrebbero essere temporaneamente non disponibili).
* **Strategia di backup:** Raccomandiamo di eseguire uno script di riconciliazione notturno utilizzando le API di polling per recuperare gli eventi persi.
  {% endhint %}

Per maggiori informazioni sugli eventi Webhook/Websocket di Zoom Contact Center, vedi [Contact Center Webhooks](https://developers.zoom.us/docs/api/contact-center/events/) .

#### <mark style="color:blu;">Integrazione Flow Events</mark>

Per alcuni tipi di dati, puoi inviare i dati direttamente a un sistema esterno dall'editor di Flow di ZCC utilizzando uno JavaScript Event Script.

**Dati supportati e limitazioni:**

* **Disposizione:** Possono essere accessibili su tutti i tipi di canali di coinvolgimento in ingresso utilizzando la `variabile global_system.Engagement.disposition` .
* **Trascrizione:** Accessibile solo per coinvolgimenti di messaggistica in ingresso (ad esempio, Web Chat) utilizzando la `variabile global_system.Engagement.transcript` .
* **.** Flussi multipli: `Quando si lavora con più Flow nella tua configurazione, in particolare quando un Flow utilizza il` widget RouteTo

per connettersi a un altro Flow, è essenziale assicurarsi che Event Script identici e trigger siano configurati correttamente in tutti i Flow.

**Questo metodo è più potente in un Flow di messaggistica, dove puoi combinare sia la trascrizione che la disposizione in un singolo evento.**

Passaggi di configurazione

{% stepper %}
{% step %}
**Segui questi passaggi per configurare il tuo flow:**

Aggiungi uno Event Script

Nel tuo Flow ZCC (ad esempio, un flow di Web Chat), clicca sul widget Start.

<div align="left"><figure><img src="https://2272214008-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FctBXUMeBy4rtLMmMkKRG%2Fuploads%2Fgit-blob-608a0caccf5697f0cda911a59ba832b2f5cf3fd6%2Fimage.png?alt=media" alt="Flow screen showing a welcome message and events."><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Individua Event Scripts e aggiungi uno Event Script per eventi come Engagement Closed e/o Disposition Saved.**

Aggiungi il tuo JavaScript personalizzato

```javascript
L'esempio seguente recupera sia la disposizione che la trascrizione, quindi le invia insieme a un'API esterna. 
  async function main () {
    try {
    // Ottieni l'oggetto disposizione dalla sua variabile
    
    const disposition_data = var_get()['global_system.Engagement.disposition'];
    // Ottieni l'oggetto trascrizione completo

    const transcript_data = await req.get(var_get()['global_system.Engagement.transcript']);
    // Prepara un payload con tutti i dati che vuoi inviare
      const payload_to_send = {
      disposition: disposition_data.data.result,
    };

    transcript: transcript_data.data.result.transcript
    // Definisci la destinazione per i tuoi dati
    
    const external_api_url = '<replace-with-your-api-endpoint>';
  	// Invia i dati combinati al tuo sistema esterno
    
    const response = await req.post(external_api_url, payload_to_send);
    // Registra la risposta dal sistema esterno per il troubleshooting
    
  log.debug("External API response: " + JSON.stringify(response.data));
    } catch (error) {
  }
}
```

{% endstep %}
{% endstepper %}

***

### log.debug("Si è verificato un errore nello script dell'evento di trascrizione: " + error);

Riepilogo e raccomandazioni

| Scegli il metodo di integrazione che si allinea meglio con il flusso di lavoro dei tuoi agenti e le risorse tecniche. | Se i tuoi agenti usano...                                            | Allora la tua opzione migliore è...                                                                                                                      |
| --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Il connettore ZCC CTI in un CRM supportato                                                                            | L'integrazione incorporata                                           | <ul><li>Percorso più semplice</li><li>Nessun codice richiesto</li><li>La sincronizzazione dei dati di coinvolgimento è integrata</li></ul>               |
| L'app Zoom Workplace o Smart Embed                                                                                    | API Webhook con un lavoro di polling notturno per la riconciliazione | <ul><li>Soluzione personalizzata più robusta</li><li>Fornisce dati quasi in tempo reale con un processo di backup affidabile</li></ul>                   |
| Un Flow di messaggistica in ingresso (e la necessità di inviare dati)                                                 | Flow Event Scripts                                                   | <ul><li>Di nicchia, ma potente</li><li>Richiede JavaScript</li><li>Funziona meglio per l'invio di trascrizioni di messaggistica e disposizioni</li></ul> |

Comprendendo questi diversi percorsi, puoi costruire un'integrazione robusta e affidabile che ti dia una visione completa delle tue interazioni con i clienti.
