Definisci la conversazione per l'azione con fulfillment, di cui è stato eseguito il deployment come webhook contenente il codice dell'agente Dialogflow. della logica di conversazione. Il completamento indica all'azione cosa fare quando gli utenti effettuano richieste.
Per Interactive Canvas, il completamento comunica anche informazioni sul tuo
un'app web all'assistente. Puoi usare un HtmlResponse
per dire all'assistente di
eseguire il rendering dell'app web. Un HtmlResponse
può anche fornire aggiornamenti a data
, che
la logica personalizzata dell'app web utilizzata per apportare modifiche all'app web.
Questa pagina illustra come utilizzare HtmlResponse
in evasione degli ordini e informazioni generali
linee guida per l'uso di questo tipo di risposta.
Risposte HTML
Per inoltrare all'assistente informazioni sulla tua app web, devi includere un
HtmlResponse
nel completamento specifico dell'intento. Un elemento HtmlResponse
può contenere l'URL
dell'app web e i dati che la aggiornano. Quando invii
HtmlResponse
, si verificano i seguenti passaggi:
- Il completamento dell'intent abbinato invia un
HtmlResponse
al dispositivo. - Il dispositivo utilizza l'URL nel
HtmlResponse
per caricare l'app web. - Il payload JSON
data
viene passato all'app web in un callback. L'azione conversazionale invia un nuovo
HtmlResponse
per inviare aggiornamenti o per caricare nuovi stati.
Fulfillment campione
Il seguente estratto dall'esempio
il codice di evasione degli ordini mostra come implementare HtmlResponse
:
const functions = require('firebase-functions');
const {dialogflow, HtmlResponse} = require('actions-on-google');
const app = dialogflow({debug: true});
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
// map of human speakable colors to color values
const tints = {
red: 0xFF0000,
green: 0x00FF00,
blue: 0x0000FF,
};
app.intent('color', (conv, {color}) => {
if (color in tints) {
conv.ask(`Ok, I changed my color to ${color}. What else?`);
conv.ask(new HtmlResponse({
data: {
tint: tints[color],
},
}));
return;
}
conv.ask(`Sorry, I don't know that color. What else?`);
conv.ask(new HtmlResponse({
data: {
query: conv.query,
},
}));
});
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
app.intent('pause', (conv) => {
conv.ask(`Ok, I paused spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: false,
},
}));
});
app.intent('restart game', (conv) => {
conv.ask(new HtmlResponse({
data: {
command: 'RESTART_GAME',
},
}));
});
exports.conversation = functions.https.onRequest(app);
welcome
intent
Nello snippet riportato sopra, il completamento per l'intent welcome
invia un
HtmlResponse
con l'URL dell'app web. L'assistente riceve questo
e carica il codice HTML e JavaScript a quell'indirizzo.
...
app.intent('welcome', (conv) => {
conv.ask('Welcome! Do you want me to change color or pause spinning?');
conv.ask(new HtmlResponse({
url: 'https://your-web-app.com',
}));
});
...
Altri intent
Il HtmlResponse
nel fulfillment per altri intent trasmette i valori delle variabili
(tint
o spin
nell'esempio) all'app web. La logica personalizzata per il web
l'app utilizza questi valori per aggiornare gli elementi (animazioni, colore e così via):
...
app.intent('start', (conv) => {
conv.ask(`Ok, I'm spinning. What else?`);
conv.ask(new HtmlResponse({
data: {
spin: true,
},
}));
});
...
Linee guida e limitazioni
Tieni presenti le seguenti linee guida e limitazioni per HtmlResponse
quando crei il tuo fulfillment:
- Ogni intent nel tuo fulfillment deve includere un
HtmlResponse
. Se un intent non include unHtmlResponse
, la tua app web si chiude. - Devi includere l'URL dell'app web solo nel primo intent che invii a
l'utente (in genere è l'intent
Welcome
). HtmlResponse
deve avere una dimensione massima di 50 kB.