Per inoltrare informazioni alla tua app web, devi inviare una risposta Canvas
dalla tua logica di conversazione. Una risposta Canvas
può eseguire una delle seguenti operazioni:
- Visualizza l'app web a schermo intero sul dispositivo dell'utente
- Trasmetti i dati per aggiornare l'app web
Le sezioni seguenti descrivono come restituire una risposta di Canvas per ogni in questo scenario.
Attiva canvas interattivo
Per utilizzare il canvas interattivo, devi configurare l'azione in un modo specifico.
La creazione di un'azione che utilizza Interactive Canvas richiede
configurazione nella console Actions (e, per l'SDK Actions, le modifiche
il tuo file settings.yaml
). Per vedere la procedura completa per creare
configurazione di un'azione Canvas interattiva con l'SDK Actions, consulta
Crea un progetto.
Quando usi Actions Builder, segui questi passaggi aggiuntivi per attivare la modalità interattiva Tela:
- Se non hai selezionato la scheda Gioco nella sezione Che tipo di azione, vuoi creare la build?, fai clic su Esegui il deployment nella barra di navigazione in alto. Nella sezione Informazioni aggiuntive, seleziona la casella Giochi e divertente. Fai clic su Salva.
- Fai clic su Sviluppo nella barra di navigazione superiore della console di Actions.
- Fai clic su Canvas interattivo nel riquadro di navigazione a sinistra.
- In Vuoi che l'azione utilizzi Canvas interattivo?, seleziona una delle
le seguenti:
- .
- Abilita Canvas interattivo con il completamento del webhook server. Questa opzione
si basa sul webhook per accedere a determinate funzionalità e utilizza spesso
onUpdate()
per trasmettere i dati all'app web. Se l'opzione è attivata, le corrispondenze di intent vengono gestito in scene e puoi scegliere di chiamare il webhook prima della transizione a un'altra scena o alla fine della conversazione. - Attiva Interactive Canvas con il completamento del cliente. Questa opzione consente
di spostare la logica di fulfillment webhook nell'app web e limitare
chiamate webhook solo alle funzionalità conversazionali che lo richiedono,
come il collegamento degli account. Quando l'opzione è attiva, puoi usare
expect()
per gestori di intent di registrazione sul lato client.
- Abilita Canvas interattivo con il completamento del webhook server. Questa opzione
si basa sul webhook per accedere a determinate funzionalità e utilizza spesso
- Facoltativo: inserisci l'URL dell'app web nel campo Imposta l'URL dell'app web predefinita.
. Questa azione aggiunge una risposta
Canvas
predefinita con il campo URL a la chiamata principale. - Fai clic su Salva.
Se usi l'SDK Actions, segui questi passaggi aggiuntivi per attivare la modalità interattiva Tela:
- Imposta il campo
category
del filesettings.yaml
suGAMES_AND_TRIVIA
per descrivere al meglio l'Azione e aiutare gli utenti a scoprire l'Azione. - Imposta il campo
usesInteractiveCanvas
del filesettings.yaml
sutrue
.
Verifica la capacità della superficie
Il framework Interactive Canvas funziona solo sui dispositivi con l'assistente che forniscono
un'interfaccia visiva, quindi l'Azione deve controllare il INTERACTIVE_CANVAS
funzionalità sul dispositivo dell'utente. Quando definisci i prompt in Actions Builder,
puoi specificare un elenco delle funzionalità del dispositivo nel campo selector
della
Oggetto candidates
. Il selettore di prompt seleziona il candidato del prompt più adatto
appropriato per le funzionalità del dispositivo dell'utente.
Per restituire una risposta Canvas
, la logica dell'azione dovrebbe procedere nel seguente modo:
- Verifica che il dispositivo dell'utente supporti la funzionalità
INTERACTIVE_CANVAS
. Se invia all'utente una rispostaCanvas
. - Se la funzionalità Canvas interattivo non è disponibile, controlla se la funzionalità
dispositivo supporta la funzionalità
RICH_RESPONSE
. In tal caso, invia all'utente uno una risposta avanzata. - Se la funzionalità di risposta avanzata non è disponibile, invia all'utente un risposta semplice.
I seguenti snippet restituiscono la risposta appropriata in base alle funzionalità del dispositivo dell'utente:
YAML
candidates: - selector: surface_capabilities: capabilities: - INTERACTIVE_CANVAS canvas: url: 'https://example.web.app' - selector: surface_capabilities: capabilities: - RICH_RESPONSE content: card: title: Card title text: Card Content image: url: 'https://example.com/image.png' alt: Alt text button: name: Link name open: url: 'https://example.com/' - first_simple: variants: - speech: Example simple response.
JSON
{ "candidates": [ { "selector": { "surface_capabilities": { "capabilities": [ "INTERACTIVE_CANVAS" ] } }, "canvas": { "url": "https://example.web.app" } }, { "selector": { "surface_capabilities": { "capabilities": [ "RICH_RESPONSE" ] } }, "content": { "card": { "title": "Card title", "text": "Card Content", "image": { "url": "https://example.com/image.png", "alt": "Alt text" }, "button": { "name": "Link name", "open": { "url": "https://example.com/" } } } } }, { "first_simple": { "variants": [ { "speech": "Example simple response." } ] } } ] }
Node.js
const supportsRichResponse = conv.device.capabilities.includes("RICH_RESPONSE"); const supportsInteractiveCanvas = conv.device.capabilities.includes("INTERACTIVE_CANVAS"); if (supportsInteractiveCanvas) { // Respond with a Canvas response conv.add(new Canvas({ url: 'https://example.web.app', })); } else if (supportsRichResponse) { // Respond with a rich response conv.add(new Card({ title: 'Card title', image: new Image({ url: 'https://example.com/image.png', alt: 'Alt text', }), button: new Link({ name: 'Link name', open: { url: 'https://example.com/', }, }), })); } else { // Respond with a simple response conv.add('Example simple response.'); }
Visualizza l'app web
Un'azione che utilizza il canvas interattivo include un'app web con immagini che invii agli utenti in risposta. Dopo il rendering dell'app web, gli utenti continuerà a interagire con il dispositivo tramite comandi vocali, SMS o tocco finché conversazione terminata.
La prima risposta Canvas
deve contenere l'URL dell'app web. Questo tipo di
La risposta di Canvas
indica all'Assistente Google di eseguire il rendering dell'app web all'indirizzo indicato
sul dispositivo dell'utente. In genere, invii la prima Canvas
risposta
subito dopo che l'utente richiama l'azione. Quando viene caricata l'app web,
Viene caricata la libreria Canvas interattiva e l'app web registra un gestore di callback
con l'API Interactive Canvas.
Puoi specificare l'URL della tua app web in Actions Builder, come mostrato in il seguente screenshot:
Se crei un prompt che include una risposta Canvas
dopo aver specificato
l'URL dell'app web, Actions Builder compila automaticamente il campo URL della risposta Canvas
. Per ulteriori informazioni
informazioni sull'impostazione dell'URL dell'app web nella console, consulta
Attiva Canvas interattivo.
I seguenti snippet mostrano come creare risposte Canvas
da visualizzare
nell'app web sia in Actions Builder sia nel webhook:
YAML
candidates: - first_simple: variants: - speech: >- Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later. canvas: url: 'https://your-web-app.com'
JSON
{ "candidates": [ { "first_simple": { "variants": [ { "speech": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later." } ] }, "canvas": { "url": "https://your-web-app.com" } } ] }
Node.js
app.handle('welcome', (conv) => { conv.add('Welcome! Do you want me to change color or pause spinning? ' + 'You can also tell me to ask you later.'); conv.add(new Canvas({ url: `https://your-web-app.com`, })); });
JSON
{ "session": { "id": "session_id", "params": {} }, "prompt": { "override": false, "firstSimple": { "speech": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later.", "text": "Welcome! Do you want me to change color or pause spinning? You can also tell me to ask you later." }, "canvas": { "data": [], "suppressMic": false, "url": "https://your-web-app.com" } } }
Trasmetti i dati per aggiornare l'app web
Dopo aver inviato la risposta iniziale di Canvas
, puoi utilizzare altri Canvas
risposte per fornire aggiornamenti a data
, che la logica personalizzata della tua app web utilizza
per apportare modifiche alla tua app web. Quando invii una risposta Canvas
che supera
all'app web, si verificano i seguenti passaggi:
- Quando l'intent trova una corrispondenza all'interno di una scena, attiva un evento e una risposta
Canvas
contenente un campodata
con un payload JSON viene quindi rinviato come risposta. - Il campo
data
viene passato a un callbackonUpdate
e utilizzato per aggiornare il nell'app web di Google. L'azione conversazionale può inviare una nuova risposta
Canvas
e fornire informazioni in il campodata
per inviare nuovi aggiornamenti o caricare nuovi stati.
Puoi trasmettere i dati alla tua app web in due modi:
- Con Actions Builder. Actions Builder compila automaticamente il campo
data
in la rispostaCanvas
con i metadati necessari per aggiornare l'app web. - Con un webhook. Se hai un webhook, puoi configurare dati personalizzati
per aggiornare l'app web nella risposta
Canvas
.
Le seguenti sezioni descrivono come trasferire dati tramite Actions Builder e un webhook.
Usare Actions Builder per trasmettere dati
Con Actions Builder, non è necessario definire un webhook per gestire i metadati
inviato alla tua applicazione web. Quando configuri il gestore di intent in
nell'interfaccia utente di Actions Builder, puoi includere una risposta Canvas
. R
Il campo data
viene compilato automaticamente con i metadati necessari da aggiornare
nell'app web, ad esempio il nome dell'intent, gli eventuali parametri acquisiti dall'input dell'utente
e la scena attuale.
Ad esempio, il seguente gestore di intent Guess
indica che vuoi includere un elemento Canvas
risposta:
YAML
candidates: - canvas: send_state_data_to_canvas_app: true
JSON
{ "candidates": [ { "canvas": { "send_state_data_to_canvas_app": true } } ] }
Facoltativamente, puoi aggiungere il seguente snippet al gestore di intent per inviare un Messaggio di sintesi vocale:
...
- first_simple:
variants:
- speech: Optional message.
Actions Builder estende automaticamente la risposta Canvas
con metadati a
aggiorna l'app web, come mostrato negli snippet che seguono. In questo caso, l'utente
ha indovinato la lettera "a" in un gioco di indovinelli:
YAML
candidates: - canvas: data: - google: intent: params: letter: resolved: a original: a name: guess scene: Game sendStateDataToCanvasApp: true
JSON
{ "candidates": [ { "canvas": { "data": [ { "google": { "intent": { "params": { "letter": { "resolved": "a", "original": "a" } }, "name": "guess" }, "scene": "Game" } } ], "sendStateDataToCanvasApp": true } } ] }
Questa risposta aggiorna la tua app web con la risposta dell'utente e passa al la scena appropriata.
Utilizzare il webhook per trasmettere i dati
Puoi configurare manualmente il campo data
di Canvas
risposte nel tuo webhook
con le informazioni sullo stato necessarie per aggiornare la tua app web. Questo approccio è
consigliato se devi includere un payload data
personalizzato in una risposta Canvas
anziché trasmettere solo i metadati tipici necessari per aggiornare l'app web.
I seguenti snippet mostrano come trasferire i dati in una risposta Canvas
nel tuo
webhook:
Node.js
app.handle('start_spin', (conv) => { conv.add(`Ok, I'm spinning. What else?`); conv.add(new Canvas({ data: { command: 'SPIN', spin: true, }, })); });
JSON
{ "session": { "id": "session_id", "params": {} }, "prompt": { "override": false, "firstSimple": { "speech": "Ok, I'm spinning. What else?", "text": "Ok, I'm spinning. What else?" }, "canvas": { "data": { "command": "SPIN", "spin": true }, "suppressMic": false, "url": "" } } }
Linee guida e limitazioni
Tieni presenti le seguenti linee guida e limitazioni per le risposte di Canvas
quando crei l'Azione:
- Ogni gestore webhook nel fulfillment deve includere
Canvas
. Se il webhook la risposta non includeCanvas
, la tua app web si chiude. - Devi includere solo l'URL dell'app web nella prima risposta (
Canvas
) che invii all'utente. - L'URL di risposta
Canvas
deve essere valido e il protocollo deve essere https. - La risposta
Canvas
deve avere una dimensione massima di 50 kB.