Widget web

Il widget web è un client basato sul web che puoi utilizzare nelle tue applicazioni web e mobile per consentire agli utenti di interagire con la tua applicazione agente tramite chat o voce. Questa guida fornisce una panoramica e le istruzioni di configurazione.

Una volta aperto, il widget può essere visualizzato come finestra di dialogo mobile nell'angolo in basso a destra, come riquadro accanto ai contenuti principali o in modalità di dialogo espansa per una conversazione mirata.

Diagramma dell'architettura

Limitazioni

Al momento, le risposte con contenuti avanzati supportano solo l'inglese.

Configura il widget web

Per incorporare il widget nel tuo sito web:

  1. Fai clic su Esegui il deployment nella parte superiore di Agent Builder.
  2. Fai clic su Crea canale o Nuovo canale.
  3. Seleziona il tipo di canale Widget web.
  4. Inserisci un nome per il canale.
  5. Seleziona o crea una versione dell'applicazione dell'agente.
  6. Configura altre preferenze, come il tema cromatico e il tipo di esperienza (chat, chiamata o mista).
  7. Fai clic su Crea canale per generare il codice di deployment.
  8. Aggiungi il codice di deployment al codice HTML del tuo sito web.
  9. Configura l'autenticazione per gli utenti finali. Il widget mostra un avviso se utilizzi il codice di incorporamento non modificato senza configurare l'autenticazione. Per maggiori dettagli sulle opzioni e sulla configurazione, consulta la sezione Configura l'autenticazione.

Incorpora il widget nel tuo sito web

Per aggiungere il widget al tuo sito web, devi aggiungere i seguenti snippet HTML.

Lo snippet riportato di seguito include uno script obbligatorio per reCAPTCHA. Se nel widget viene utilizzato reCAPTCHA, nella parte inferiore del widget verrà visualizzato un avviso che indica che il sito è protetto da Google e che si applicano le Norme sulla privacy di Google e i Termini di servizio di Google. Puoi anche nascondere il badge reCAPTCHA.

Per supportare i layout adattabili, puoi anche caricare chat-messenger-layout.css. Il file chat-messenger-layout.css viene utilizzato per lo stile di adattabilità e per far scorrere il messenger dentro e fuori dalla visualizzazione quando utilizzi render-mode="slide-in" o render-mode="slide-over". Poiché applica lo stile a body, potrebbe influire sul tuo sito web. Pertanto, puoi scegliere di non caricare chat-messenger-layout.css o di copiarne i contenuti e integrarli nel tuo CSS.

Per un rendimento ottimale e per garantire layout adattabili, segui questi posizionamenti:

Nella sezione <header>:

<header>
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <script defer src="https://www.gstatic.com/chat-messenger/sdk/prod/latest/chat-messenger.js"></script>

  <!-- Chat Messenger CSS -->
  <link rel="stylesheet" href="https://www.gstatic.com/chat-messenger/sdk/prod/latest/themes/chat-messenger-default.css">

  <!-- Optional responsive styling  -->
  <!-- <link rel="stylesheet" href="https://www.gstatic.com/chat-messenger/sdk/prod/latest/themes/chat-messenger-layout.css"> -->

  <!-- CSS customization -->
  <style>
    chat-messenger {
      z-index: 999;
      position: fixed;
      <!-- Your CSS customization goes here if needed -->
    }
  </style>
</header>

Nella sezione <body>:


<body>
  <!-- Your website's main content goes here -->

  <script>
    window.addEventListener("chat-messenger-loaded", () => {
      chatSdk.registerContext(
        chatSdk.prebuilts.ces.createContext({
          deploymentName: "projects/YOUR_PROJECT_ID/locations/YOUR_REGION/apps/YOUR_APP_ID/deployments/YOUR_DEPLOYMENT_ID",
          tokenBroker: {
            enableTokenBroker: true,
            // If you enabled reCAPTCHA for the token broker, set enableRecaptcha to true.
            // enableRecaptcha: true,
          },
          // Automatically prompt the agent to start the conversation with a greeting.
          enableWelcomeEvent: true,
        }),
      );
    });
  </script>

  <!-- Messenger component -->
  <chat-messenger
    language-code="en"
    max-query-length="-1">
    <chat-messenger-chat-bubble
      chat-title="${your-chat-title}">
    </chat-messenger-chat-bubble>
  </chat-messenger>

  <!-- Page content continues -->
</body>

Avvia automaticamente la conversazione

Per impostazione predefinita, il widget di chat attende che l'utente invii il primo messaggio. Per chiedere all'agente di avviare automaticamente la conversazione con un saluto, imposta enableWelcomeEvent: true nella funzione chatSdk.prebuilts.ces.createContext.

Quando questa opzione è attiva, il widget invia automaticamente un evento welcome all'agente quando viene inizializzata la sessione di chat. L'agente risponde a questo evento con il saluto configurato.

Considerazioni sulla sicurezza

Quando incorpori il widget come elemento personalizzato (<chat-messenger>) direttamente nel tuo sito web, il widget viene eseguito in un shadow DOM nella pagina host. Per impostazione predefinita, non applica un sandboxing rigoroso (come un iframe).

Poiché il widget condivide l'origine della finestra con la tua applicazione:

  • Accesso allo spazio di archiviazione condiviso: tutti gli script in esecuzione all'interno del componente personalizzato del widget hanno accesso a window.sessionStorage e window.localStorage della pagina host. Sono inclusi i token di autenticazione o i dati sensibili della sessione archiviati dal widget stesso.
  • Cross-Site Scripting (XSS): se il codice del componente personalizzato o i payload dei contenuti avanzati contengono input non sanitizzati, possono essere sfruttati per eseguire JavaScript arbitrario nel contesto dell'applicazione principale.

Per mantenere la sicurezza della tua applicazione e dei dati dei tuoi utenti, devi:

  1. Sanitizza il codice personalizzato:assicurati che tutto il codice JavaScript e HTML personalizzato utilizzato nei componenti o nei payload personalizzati sia rigorosamente sanitizzato.
  2. Convalida gli input: tratta tutti i dati passati al widget da fonti esterne (incluse le risposte dell'agente) come non attendibili.
  3. Gestisci l'isolamento: se i tuoi requisiti di sicurezza impongono un isolamento rigoroso tra il widget di chat e i dati della tua applicazione, devi implementare il tuo sandboxing (ad esempio, inserendo il componente del widget in un container che controlli e isoli).

Configura l'handoff ad agenti umani

Prima di configurare il widget, assicurati che siano state create le risorse necessarie e che il deployment del proxy WebChat sia stato completato.

  1. Configura il numero di escalation.
    1. Crea una risorsa PhoneNumber per il tuo progetto.
      1. Utilizza un profilo di conversazione valido configurato per l'applicazione dell'agente.
      2. Associa il profilo di conversazione al numero di telefono per consentire al sistema di gestire l'escalation umana.
    2. Segui le istruzioni per configurare WebChat Proxy.
  2. Configurazione del client di chat web:

    1. Imposta l'attributo da WebChat Proxy per attivare la funzionalità di passaggio ad agenti umani. Esempio di snippet di codice:

      <chat-messenger service='{"name":"ces","deployment-id":"projects/YOUR_PROJECT_ID/locations/YOUR_REGION/apps/YOUR_APP_ID/deployments/YOUR_DEPLOYMENT_ID"}'
        liveHandoff="true"
      escalationNumber="projects/YOUR_PROJECT_ID/locations/global/phoneNumbers/YOUR_PHONE_NUMBER_ID"
        url-allowlist="*"
      >
        </chat-messenger>
      

Personalizzazione HTML

Puoi personalizzare vari aspetti dell'aspetto e del comportamento della finestra di dialogo della chat. L'elemento HTML chat-messenger e chat-messenger-container ha i seguenti attributi:

Attributo Attribuzione dei componenti Valore (facoltativo) Effetto
servizio chat-messenger Il nome del servizio richiesto per il servizio di backend connesso.
url-allowlist chat-messenger * (elenco separato da virgole di domini di immagini
logging-level chat-messenger DEBUG <OMIT>
enable-audio-input-only chat-messenger-container Modalità solo voce
start-with-recording chat-messenger-container Richiede la modalità Solo voce. La modalità Solo voce si avvia nel momento in cui viene eseguito il rendering del container chat-messenger-container
enable-audio-input chat-messenger-container Aggiunge un pulsante per consentire la chat multimodale
enable-file-upload chat-messenger-container Abilita i caricamenti di immagini
bot-writing-image chat-messenger-container string URL dell'immagine visualizzata durante l'elaborazione del bot
chat-title-icon chat-messenger-container string URL dell'immagine visualizzata nella parte superiore della chat (immagine di brand)
chat-title chat-messenger-container string Testo del titolo della chat
render-mode chat-messenger stringa ("slide-in" o "slide-over") La modalità di rendering della finestra di dialogo della chat rispetto al resto della pagina. Le opzioni sono "slide-over" o "slide-in". Se non specificato, il posizionamento può essere specificato dal client. Gli stili sono obbligatori per supportare la modalità di rendering. chat-messenger-layout.css può essere utilizzato come base di riferimento.

Personalizzazione CSS

La personalizzazione dell'aspetto del widget viene gestita tramite un sistema di token CSS. Modificando questi token, puoi assicurarti che l'interfaccia della chat sia coerente con il tuo brand, mantenendo al contempo l'integrità e l'accessibilità del layout.

Token di colore

Questi token definiscono la tavolozza dei colori per le superfici dei widget, gli elementi interattivi, il testo e gli stati.

Proprietà Descrizione Tema chiaro predefinito Tema scuro predefinito
Contenitori / superfici
--chat-messenger-color--surface Il colore di sfondo principale per il corpo della chat e l'area del piè di pagina. #F8FAFD #1B1B1B
--chat-messenger-color--surface-container Il colore di sfondo dei contenitori dei widget (ad esempio, schede prodotto e caroselli) nidificati all'interno della chat. #FFFFFF #131314
--chat-messenger-color--surface-container-high Uno sfondo ad alta enfasi per gli elementi all'interno dei widget (ad esempio i campi di immissione) #F0F4F9 #1E1F20
Brand / Decorazione
--chat-messenger-color--primary Colore principale del brand utilizzato per i riempimenti ad alta enfasi e i pulsanti principali. #303030 #E3E3E3
--chat-messenger-color--primary-container Colore di sfondo in evidenza per i componenti chiave, come i fumetti dei messaggi dell'utente. #E9EEF6 #282A2C
--chat-messenger-color--secondary Colore per gli elementi interattivi secondari, come il pulsante "Invia" o i pulsanti tonali. #DDE3EA #333537
Testo e icone
--chat-messenger-color--on-surface Colore principale per il testo e le icone visualizzati su sfondi di superficie standard. #1F1F1F #E3E3E3
--chat-messenger-color--on-surface-variant Colore con enfasi minore per il testo secondario e le icone decorative. #444746 #C4C7C5
--chat-messenger-color--on-primary Colore per il testo e le icone posizionati sopra gli sfondi principali del brand. #F2F2F2 #303030
--chat-messenger-color--on-primary-container Colore per il testo e le icone posizionati sopra gli sfondi del contenitore principale. #1F1F1F #E3E3E3
--chat-messenger-color--on-secondary Colore per il testo e le icone posizionati sopra gli sfondi del brand secondari. #444746 #C4C7C5
Stati
--chat-messenger-color--state-layer-on-surface L'overlay traslucido utilizzato per indicare gli stati di passaggio del mouse o di selezione su superfici standard. Il riempimento per i componenti disattivati. #1F1F1F 8% #E3E3E3 8%
--chat-messenger-color--state-layer-on-primary L'overlay traslucido utilizzato per gli stati di interazione sopra gli elementi di colore primario. #FFFFFF 8% #062E6F 8%
--chat-messenger-color--state-layer-on-secondary L'overlay traslucido utilizzato per gli stati di interazione sopra gli elementi di colore secondario. #1F1F1F 8% #E3E3E3 8%
--chat-messenger-color--state-on-surface-mute Colore per testo e icone disattivati. #444746 (38%) #C4C7C5 (38%)
Utilità
--chat-messenger-color--outline Colore per bordi generali, divisori e contorni decorativi. #C4C7C5 #444746
--chat-messenger-color--outline-variant Colore per i bordi sottili (ad esempio, la cornice esterna dei widget) #747775 al 16% #8E918F al 16%
--chat-messenger-color--outline-active Colore del bordo per i campi di immissione e i menu a discesa quando sono selezionati o attivi. #747775 #8E918F
--chat-messenger-color--error Colore accattivante rispetto alla superficie per riempimenti, icone e testo, che indica urgenza. #B3261E #F2B8B5
--chat-messenger-color--error-container Colore di riempimento dello sfondo per i banner di errore o i contenitori di avvisi interattivi. #F9DEDC #8C1D18
--chat-messenger-color--on-error-container Testo e icone posizionati sullo sfondo del container di errore. #8C1D18 #F9DEDC
--chat-messenger-color--link Colore utilizzato per i link ipertestuali cliccabili all'interno di messaggi o descrizioni. #0B57D0 #A8C7FA

Token di forma ed elevazione

Questi token controllano il raggio degli angoli e la profondità visiva (ombre) dei componenti della chat.

Proprietà Descrizione Predefinito
--chat-messenger-shape--corner-value-small Raggio dell'angolo per piccoli elementi nidificati all'interno dei widget (ad esempio, miniature delle immagini dei prodotti) 8 px
--chat-messenger-shape--corner-value-medium Raggio dell'angolo per gli elementi nidificati all'interno dei widget (ad esempio campi di immissione, immagini) 16 px
--chat-messenger-shape--corner-value-large Raggio dell'angolo per i contenitori nidificati all'interno dei widget (ad esempio, schede carosello, schede di azioni rapide) 20 px
--chat-messenger-shape--corner-value-extra-large Raggio dell'angolo per la finestra di chat principale e i container dei widget. 28 px
--chat-messenger-shape--corner-fully-rounded Utilizzato per pulsanti ed elementi interattivi a forma di pillola per garantire un'estremità completamente circolare. 100px
--chat-messenger-elevation L'ombra della casella applicata agli elementi mobili e al componente principale della chat. 0 1px 2px 0 rgba(0,0,0,0.3), 0 2px 6px 2px rgba(0,0,0,0.15)

Token di tipografia

Questi token definiscono il carattere tipografico e la scala specifica (dimensioni, spessore, spaziatura) utilizzati nell'interfaccia.

Proprietà Uso previsto Predefinito
--chat-messenger-font-family Famiglia di caratteri principale Google Sans
Titolo grande Intestazioni in evidenza
--chat-messenger-typescale--title-large-font-size 18 px
--chat-messenger-typescale--title-large-font-weight 400
--chat-messenger-typescale--title-large-line-height 24 px
--chat-messenger-typescale--title-large-letter-spacing 0
Title medium Intestazioni di sezione all'interno dei widget.
--chat-messenger-typescale--title-medium-font-size 16 px
--chat-messenger-typescale--title-medium-font-weight 500
--chat-messenger-typescale--title-medium-line-height 24 px
--chat-messenger-typescale--title-medium-letter-spacing 0
Title small
--chat-messenger-typescale--title-small-font-size Sottotitoli o titoli all'interno di schede più piccole. 14px
--chat-messenger-typescale--title-small-font-weight 500
--chat-messenger-typescale--title-small-line-height 20 px
--chat-messenger-typescale--title-small-letter-spacing 0
Corpo grande Descrizioni grandi.
--chat-messenger-typescale--body-large-font-size 16 px
--chat-messenger-typescale--body-large-font-weight 400
--chat-messenger-typescale--body-large-line-height 24 px
--chat-messenger-typescale--body-large-letter-spacing 0
Body medium Testo UI standard
--chat-messenger-typescale--body-medium-font-size 14px
--chat-messenger-typescale--body-medium-font-weight 400
--chat-messenger-typescale--body-medium-line-height 20 px
--chat-messenger-typescale--body-medium-letter-spacing 0
Corpo, Piccolo Metadati e descrizioni secondari.
--chat-messenger-typescale--body-small-font-size 12 px
--chat-messenger-typescale--body-small-font-weight 400
--chat-messenger-typescale--body-small-line-height 16 px
--chat-messenger-typescale--body-small-letter-spacing 0,1
Etichetta grande Testo all'interno di pulsanti e chip di azione principali.
--chat-messenger-typescale--label-large-font-size 14px
--chat-messenger-typescale--label-large-font-weight 500
--chat-messenger-typescale--label-large-line-height 20 px
--chat-messenger-typescale--label-large-letter-spacing 0
Etichetta media Testo dei pulsanti secondari ed etichette dei campi
--chat-messenger-typescale--label-medium-font-size 12 px
--chat-messenger-typescale--label-medium-font-weight 500
--chat-messenger-typescale--label-medium-line-height 16 px
--chat-messenger-typescale--label-medium-letter-spacing 0,1
Label small Microetichette e testo dei badge
--chat-messenger-typescale--label-small-font-size 11px
--chat-messenger-typescale--label-small-font-weight 500
--chat-messenger-typescale--label-small-line-height 16 px
--chat-messenger-typescale--label-small-letter-spacing 0,1

Token di spaziatura

Questi token mantengono una densità di layout coerente, definendo margini, spaziatura interna e spazi tra gli elementi.

Proprietà Predefinito
--chat-messenger-spacing--half 4 px
--chat-messenger-spacing--one 8 px
--chat-messenger-spacing--one-and-half 12 px
--chat-messenger-spacing--two 16 px
--chat-messenger-spacing--two-and-half 20 px
--chat-messenger-spacing--three 24 px
--chat-messenger-spacing--three-and-half 28 px
--chat-messenger-spacing--four 32 px

Eventi JavaScript

Messenger attiva una serie di eventi per i quali puoi creare listener di eventi. Il target di questi eventi è l'elemento chat-messenger.

Per aggiungere un listener di eventi per l'elemento chat-messenger, aggiungi il seguente codice JavaScript, dove event-type è uno dei nomi evento descritti in questa sezione


const chatMessenger = document.querySelector('chat-messenger');
chatMessenger.addEventListener('event-type', function (event) {
  // Handle event
  ...
});

Sono supportati i seguenti tipi di eventi:

  • chat-messenger-loaded: questo evento viene attivato quando l'elemento chat-messenger è completamente caricato e inizializzato.

  • chat-messenger-close

  • chat-messenger-error: questo evento si verifica quando l'agente CES invia un codice di stato di errore. La struttura dell'evento è simile alla seguente:

    eventId= `chat-messenger-error-v2`
    event.details {
      message: string;
      code: number | undefined;
      status: number | string;
    }
    
  • df-update-cart-count: questo evento si verifica quando "Aggiungi al carrello", "Modifica la quantità dell'articolo", "Elimina articolo" si verificano negli elementi dei contenuti avanzati product_carousel, product_detail, product_comparison. La struttura dell'evento è simile alla seguente:

    {
      "detail": {
        "count": <cart_item_count>,
      }
    }
    

Funzioni JavaScript

L'elemento chat-messenger fornisce funzioni che puoi chiamare per influenzarne il comportamento.

renderCustomText

Questa funzione visualizza un messaggio di testo, come se provenisse dall'applicazione dell'agente come risposta di testo.

Ad esempio:

const chatMessenger = document.querySelector('chat-messenger');
chatMessenger.renderCustomText('Custom text');

renderCustomCard

Questa funzione esegue il rendering di una scheda personalizzata, come se provenisse dall'applicazione dell'agente come messaggio di risposta avanzata. Il formato della risposta del payload personalizzato è definito nella sezione Messaggi di risposta avanzata.

Ad esempio:

const chatMessenger = document.querySelector('chat-messenger');
const payload = [
  {
    "type": "info",
    "title": "Info item title",
    "subtitle": "Info item subtitle",
    "image": {
      "src": {
        "rawUrl": "https://example.com/images/logo.png"
      }
    },
    "actionLink": "https://example.com"
  }];
chatMessenger.renderCustomCard(payload);

Configura l'autenticazione

Tutte le richieste API effettuate dal widget web ai servizi di backend di Google devono essere autenticate. A questo scopo, viene utilizzato un token di accesso OAuth 2.0 di breve durata.

L'identità associata a questo token, che si tratti di un utente finale o di un account di servizio, deve disporre delle autorizzazioni IAM necessarie per interagire con l'agente.

Le sottosezioni rimanenti descrivono i modi in cui puoi configurare l'autenticazione.

Configura un broker di token

Un broker di token è un servizio web che viene eseguito nel tuo progetto Google Cloud e genera un token di accesso per conto di un account di servizio di tua proprietà. Il widget web può chiamare automaticamente l'URL del tuo broker di token all'inizio di una conversazione per ottenere un nuovo token da utilizzare durante la comunicazione con l'API CX Agent Studio.

Puoi configurare un broker di token in due modi: ospitato da Google o self-hosted.

ospitato da Google

Utilizza il broker di token fornito da Google per consentire l'accesso pubblico al widget di chat:

  • Quando crei la configurazione del deployment e del widget, abilita l'accesso pubblico e, facoltativamente, i controlli dell'origine e di reCAPTCHA (consigliati per prevenire lo spoofing e l'abuso).
  • Il widget di chat richiederà un token con ambito di sessione dal broker di token fornito da Google e lo utilizzerà per le sessioni di chat.

Self-hosted

Per configurare un broker di token in hosting autonomo, segui questi passaggi:

  • Crea un account di servizio nel tuo progetto e concedigli il ruolo Client Customer Engagement Suite.
  • Esegui il deployment di una funzione Cloud Run Functions con il codice campione del broker di token che forniamo.

Consulta le istruzioni passo passo dettagliate nel repository open source.

Configura OAuth2

Un client OAuth2 consente al widget web di avviare un flusso di autenticazione per l'utente finale. In genere, questo significa che viene aperta una finestra di dialogo in cui l'utente accede al proprio Account Google (o ad altri provider) e il widget web riceve un token per operare per conto dell'utente.

Scegli questa opzione per richiedere agli utenti finali di accedere prima di utilizzare l'agente, dove le credenziali utente vengono utilizzate per l'accesso all'applicazione dell'agente.

Ecco i passaggi principali da seguire:

  • Nella console Google Cloud , vai alla piattaforma di autenticazione di Google e seleziona Client.
  • Fai clic su Crea client.
  • Seleziona Applicazione web come tipo di client.
  • Inserisci un nome per il nuovo client.
  • Aggiungi l'URL del tuo sito web sia alle origini JavaScript autorizzate sia agli URI di reindirizzamento autorizzati.
  • Fai clic su Crea e attendi 5 minuti prima di continuare.

Dopo aver seguito i passaggi, riceverai un ID client nel formato:

123456789012-abcdefghijklmnopqrstuvwxyz.apps.googleusercontent.com

Fornisci questo valore nell'attributo oauth-client-id del componente web chat-messenger.

Crea la tua API di autenticazione

Crea la tua API per gestire l'autenticazione e l'autorizzazione dell'utente finale, che restituisce un token di accesso Google o un JWT firmato con l'autorizzazione per chiamare runSession nella tua app.

Per informazioni sull'utilizzo dell'API CX Agent Studio, consulta Accesso all'API.