1. Introduzione
Stai guardando la TV, ma non riesci a trovare il telecomando o magari non vuoi visitare ogni canale TV per capire se c'è qualcosa di interessante in televisione? Chiediamo all'Assistente Google cosa c'è in TV. In questo lab creerai un'azione semplice utilizzando Dialogflow e imparerai a integrarla con l'Assistente Google.
L'ordine degli esercizi rispecchia l'esperienza di un Cloud Developer comune:
- Crea un agente Dialogflow v2
- Crea un'entità personalizzata
- Creare intent
- Configurare un webhook con Firebase Functions
- Testare il chatbot
- Attivare l'integrazione dell'Assistente Google
Cosa creerai
Creeremo un agente chatbot interattivo della guida TV per l'Assistente Google. Puoi chiedere la guida TV, cosa viene trasmesso attualmente su un determinato canale. Ad esempio, puoi dire "Che cosa c'è su MTV?". L'azione Guida TV ti dirà cosa viene trasmesso al momento e cosa verrà trasmesso in seguito. |
|
Cosa imparerai a fare
- Come creare un chatbot con Dialogflow v2
- Come creare entità personalizzate con Dialogflow
- Come creare una conversazione lineare con Dialogflow
- Come configurare i fulfillment webhook con Dialogflow e Firebase Functions
- Come portare la tua applicazione sull'Assistente Google con Actions on Google
Prerequisiti
- Per creare un agente Dialogflow, avrai bisogno di un'identità Google / un indirizzo Gmail.
- Non è richiesta una conoscenza di base di JavaScript, ma può essere utile se vuoi modificare il codice di fulfillment del webhook.
2. Preparazione
Attivare l'attività web nel browser
- Fai clic su: http://myaccount.google.com/activitycontrols
- Assicurati che l'Attività web e app sia attivata:

Crea un agente Dialogflow
- Nella barra a sinistra, subito sotto il logo, seleziona "Crea nuovo agente". Se hai agenti esistenti, fai prima clic sul menu a discesa.

- Specifica un nome agente:
your-name-tvguide(utilizza il tuo nome)

- Come lingua predefinita, scegli: Inglese - en
- Come fuso orario predefinito, scegli quello più vicino a te.
- Fai clic su Crea
Configurare Dialogflow
- Fai clic sull'icona a forma di ingranaggio nel menu a sinistra, accanto al nome del progetto.

- Inserisci la seguente descrizione dell'agente: My TV Guide

- Scorri verso il basso fino a Impostazioni log e attiva entrambi i pulsanti per registrare le interazioni di Dialogflow e tutte le interazioni in Google Cloud Stackdriver. Ne avremo bisogno in un secondo momento, nel caso in cui volessimo eseguire il debug dell'azione.

- Fai clic su Salva.
Configurare Actions on Google
- Fai clic sul link Assistente Google in Scopri come funziona nell'Assistente Google nel riquadro a destra.

Si aprirà la pagina http://console.actions.google.com.
Se non hai mai utilizzato Azioni su Google, devi compilare prima questo modulo:

- Prova ad aprire l'azione nel simulatore facendo clic sul nome del progetto.
- Seleziona Test nella barra dei menu.

- Assicurati che il simulatore sia impostato su Inglese e fai clic su Parla con la mia app di test.
L'azione ti saluterà con l'intent predefinito di base di Dialogflow. Ciò significa che la configurazione dell'integrazione con Azioni su Google è andata a buon fine.
3. Entità personalizzate
Le entità sono oggetti su cui la tua app o il tuo dispositivo esegue azioni. Considerali come parametri / variabili. Nella nostra Guida TV ti chiederemo: "Che cosa c'è su MTV?" MTV è l'entità e la variabile. Potrei chiedere anche altri canali, ad esempio "National Geographic" o "Comedy Central". L'entità raccolta verrà utilizzata come parametro nella mia richiesta al servizio web dell'API TV Guide.
Scopri di più sulle entità Dialogflow.
Creare l'entità Canale
- Nella console di Dialogflow, fai clic sulla voce di menu Entità.
- Fai clic su Crea entità.
- Nome dell'entità:
channel(assicurati che sia tutto in minuscolo) - Inserisci un nome del canale. (alcuni canali avranno bisogno di un sinonimo nel caso in cui l'Assistente Google comprenda qualcos'altro). Puoi utilizzare i tasti Tab e Invio durante la digitazione. Inserisci il numero del canale come valore di riferimento. e i nomi dei canali come sinonimi, ad esempio:
1 - 1, Net 1, Net Station 1

5**.** Passa alla modalità **Modifica grezza** facendo clic sul pulsante del menu accanto al pulsante blu Salva.

- Copia e incolla le altre entità in formato CSV:
"2","2","Net 2, Net Station 2"
"3","3","Net 3, Net Station 3"
"4","4","RTL 4"
"5","5","Movie Channel"
"6","6","Sports Channel"
"7","7","Comedy Central"
"8","8","Cartoon Network"
"9","9","National Geographic"
"10","10","MTV"

- Fai clic su Salva.
4. Intent
Dialogflow utilizza gli intent per classificare le intenzioni di un utente. Gli intent hanno frasi di addestramento, che sono esempi di ciò che un utente potrebbe dire al tuo agente. Ad esempio, un utente che vuole sapere cosa c'è in TV potrebbe chiedere "Cosa c'è in TV oggi?". "Cosa sto guardando?" oppure semplicemente "guida TV".
Quando un utente scrive o dice qualcosa, chiamato espressione utente, Dialogflow associa l'espressione utente all'intent migliore nell'agente. La corrispondenza di un intento è nota anche come classificazione dell'intent.
Scopri di più sugli intent di Dialogflow.
Modificare l'intent di benvenuto predefinito
Quando crei un nuovo agente Dialogflow, vengono creati automaticamente due intent predefiniti. L'intent di benvenuto predefinito è il primo flusso che visualizzi quando avvii una conversazione con l'agente. L'intent di riserva predefinito è il flusso che riceverai quando l'agente non riesce a capirti o ad associare un intent a ciò che hai appena detto.
- Fai clic su Intent di benvenuto predefinito.
Nel caso dell'Assistente Google, si avvierà automaticamente con l'intent di benvenuto predefinito. Questo perché Dialogflow è in ascolto dell'evento di benvenuto. Tuttavia, puoi anche richiamare l'intent pronunciando una delle frasi di addestramento inserite.

Ecco il messaggio di benvenuto per l'intent di benvenuto predefinito:
Utente | Agent |
"Hey Google, parla con [nome] Guida TV". | "Benvenuto, sono l'agente della Guida TV. Posso dirti cosa c'è in riproduzione su un canale TV. Ad esempio, puoi chiedermi: "Cosa c'è su MTV?" |
- Scorri verso il basso fino a Risposte.
- Cancella tutte le risposte di testo.
- Crea una nuova risposta di testo contenente il seguente saluto:
Welcome, I am the TV Guide agent. I can tell you what's currently playing on a TV channel. For example, you can ask me: What's on MTV?

- Fai clic su Salva.
Creare un intent di test temporaneo
A scopo di test, creeremo un intent di test temporaneo, in modo da poter testare il webhook in un secondo momento.
- Fai di nuovo clic sulla voce di menu Intent.
- Fai clic su Crea intent.
- Inserisci il nome dell'intent:
Test Intent(assicurati di utilizzare una T maiuscola e una I maiuscola. - Se scrivi l'intent in modo diverso, il servizio di backend non funzionerà.

- Fai clic su Aggiungi frasi di addestramento.
Test my agentTest intent

- Fai clic su Evasione > Attiva evasione.

Questa volta non codifichiamo una risposta. La risposta arriverà da una funzione cloud.
- Attiva l'opzione Abilita chiamata webhook per questo intent.

- Fai clic su Salva.
Creare l'intent del canale
L'intent del canale conterrà questa parte della conversazione:
Utente | Agent |
"Cosa c'è su Comedy Central?" | ""Su Comedy Central dalle 18:00 è in onda I Simpson. Dopodiché, alle 19:00 inizierà I Griffin."" |
- Fai di nuovo clic sulla voce di menu Intent.
- Fai clic su Crea intent.
- Inserisci il nome dell'intent:
Channel Intent(assicurati di utilizzare una T maiuscola e una I maiuscola). - Se scrivi l'intent in modo diverso, il servizio di backend non funzionerà. - Fai clic su Aggiungi frasi di addestramento e aggiungi quanto segue:
What's on MTV?What's playing on Comedy Central?What show will start at 8 PM on National Geographic?What is currently on TV?What is airing now.Anything airing on Net Station 1 right now?What can I watch at 7 PM?What's on channel MTV?What's on TV?Please give me the tv guide.Tell me what is on television.What's on Comedy Central from 10 AM?What will be on tv at noon?Anything on National Geographic?TV Guide

- Scorri verso il basso fino ad Azione e parametri.

Nota le entità @channel e @sys.time note a Dialogflow. Successivamente, nel webhook, il nome e il valore del parametro verranno inviati al tuo servizio web. Ad esempio:
channel=8
time=2020-01-29T19:00:00+01:00
- Contrassegna canale come obbligatorio
Quando conversi con l'agente della Guida TV, devi sempre compilare il nome del parametro slot channel. Se il nome del canale non è stato menzionato all'inizio della conversazione, Dialogflow continuerà a chiedere finché non avrà compilato tutti gli slot dei parametri. 
Come prompt, inserisci:
For which TV channel do you want to hear the tv guide information?In which TV channel are you interested?

- Non impostare il parametro temporale come obbligatorio.
L'ora sarà facoltativa. Se non viene specificata un'ora, il servizio web restituirà l'ora corrente.
- Fai clic su Esecuzione.
Questa volta non codifichiamo una risposta. La risposta arriverà dalla funzione cloud. Quindi, attiva l'opzione Abilita chiamata webhook per questo intent.
- Fai clic su Salva.
5. Webhook Fulfillment
Se il tuo agente ha bisogno di risposte agli intent più che statiche, devi utilizzare l'evasione per connettere il tuo servizio web all'agente. Il collegamento del tuo servizio web ti consente di intraprendere azioni in base alle espressioni degli utenti e di inviare risposte dinamiche all'utente. Ad esempio, se un utente vuole ricevere il programma TV di MTV, il tuo servizio web può controllare il tuo database e rispondere all'utente con il programma di MTV.
- Fai clic su Fulfillment nel menu principale.
- Attiva l'opzione Editor in linea.

Per test e implementazione semplici dei webhook, puoi utilizzare l'editor in linea. Utilizza Cloud Functions for Firebase serverless.
- Fai clic sulla scheda index.js nell'editor e copia e incolla questo snippet di codice JavaScript per Node.js:
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const {
dialogflow,
BasicCard,
Button,
Image,
List
} = require('actions-on-google');
const functions = require('firebase-functions');
const moment = require('moment');
const TVGUIDE_WEBSERVICE = 'https://tvguide-e4s5ds5dsa-ew.a.run.app/channel';
const { WebhookClient } = require('dialogflow-fulfillment');
var spokenText = '';
var results = null;
/* When the Test Intent gets invoked. */
function testHandler(agent) {
let spokenText = 'This is a test message, when you see this, it means your webhook fulfillment worked!';
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new BasicCard({
title: `Test Message`,
subTitle: `Dialogflow Test`,
image: new Image({
url: 'https://dummyimage.com/600x400/000/fff',
alt: 'Image alternate text',
}),
text: spokenText,
buttons: new Button({
title: 'This is a button',
url: 'https://assistant.google.com/',
}),
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/* When the Channel Intent gets invoked. */
function channelHandler(agent) {
var jsonResponse = `{"ID":10,"Listings":[{"Title":"Catfish Marathon","Date":"2018-07-13","Time":"11:00:00"},{"Title":"Videoclips","Date":"2018-07-13","Time":"12:00:00"},{"Title":"Pimp my ride","Date":"2018-07-13","Time":"12:30:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"13:00:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"13:30:00"},{"Title":"Daria","Date":"2018-07-13","Time":"13:45:00"},{"Title":"The Real World","Date":"2018-07-13","Time":"14:00:00"},{"Title":"The Osbournes","Date":"2018-07-13","Time":"15:00:00"},{"Title":"Teenwolf","Date":"2018-07-13","Time":"16:00:00"},{"Title":"MTV Unplugged","Date":"2018-07-13","Time":"16:30:00"},{"Title":"Rupauls Drag Race","Date":"2018-07-13","Time":"17:30:00"},{"Title":"Ridiculousness","Date":"2018-07-13","Time":"18:00:00"},{"Title":"Punk'd","Date":"2018-07-13","Time":"19:00:00"},{"Title":"Jersey Shore","Date":"2018-07-13","Time":"20:00:00"},{"Title":"MTV Awards","Date":"2018-07-13","Time":"20:30:00"},{"Title":"Beavis & Butthead","Date":"2018-07-13","Time":"22:00:00"}],"Name":"MTV"}`;
var results = JSON.parse(jsonResponse);
var listItems = {};
spokenText = getSpeech(results);
for (var i = 0; i < results['Listings'].length; i++) {
listItems[`SELECT_${i}`] = {
title: `${getSpokenTime(results['Listings'][i]['Time'])} - ${results['Listings'][i]['Title']}`,
description: `Channel: ${results['Name']}`
}
}
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new List({
title: 'TV Guide',
items: listItems
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/**
* Return a text string to be spoken out by the Google Assistant
* @param {object} JSON tv results
*/
var getSpeech = function(tvresults) {
let s = "";
if(tvresults['Listings'][0]) {
let channelName = tvresults['Name'];
let currentlyPlayingTime = getSpokenTime(tvresults['Listings'][0]['Time']);
let laterPlayingTime = getSpokenTime(tvresults['Listings'][1]['Time']);
s = `On ${channelName} from ${currentlyPlayingTime}, ${tvresults['Listings'][0]['Title']} is playing.
Afterwards at ${laterPlayingTime}, ${tvresults['Listings'][1]['Title']} will start.`
}
return s;
}
/**
* Return a natural spoken time
* @param {string} time in 'HH:mm:ss' format
* @returns {string} spoken time (like 8 30 pm i.s.o. 20:00:00)
*/
var getSpokenTime = function(time){
let datetime = moment(time, 'HH:mm:ss');
let min = moment(datetime).format('m');
let hour = moment(datetime).format('h');
let partOfTheDay = moment(datetime).format('a');
if (min == '0') {
min = '';
}
return `${hour} ${min} ${partOfTheDay}`;
};
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
var agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
let channelInput = request.body.queryResult.parameters.channel;
let requestedTime = request.body.queryResult.parameters.time;
let url = `${TVGUIDE_WEBSERVICE}/${channelInput}`;
var intentMap = new Map();
intentMap.set('Test Intent', testHandler);
intentMap.set('Channel Intent', channelHandler);
agent.handleRequest(intentMap);
});

- Fai clic sulla scheda package.json nell'editor e copia e incolla questo frammento di codice JSON, che importa tutte le librerie di Node.js Package Manager (NPM):
{
"name": "tvGuideFulfillment",
"description": "Requesting TV Guide information from a web service.",
"version": "1.0.0",
"private": true,
"license": "Apache Version 2.0",
"author": "Google Inc.",
"engines": {
"node": "8"
},
"scripts": {
"start": "firebase serve --only functions:dialogflowFirebaseFulfillment",
"deploy": "firebase deploy --only functions:dialogflowFirebaseFulfillment"
},
"dependencies": {
"actions-on-google": "^2.2.0",
"firebase-admin": "^5.13.1",
"firebase-functions": "^2.0.2",
"request": "^2.85.0",
"request-promise": "^4.2.5",
"moment" : "^2.24.0",
"dialogflow-fulfillment": "^0.6.1"
}
}

- Fai clic sul pulsante Esegui il deployment. Ci vorrà un attimo, perché è in corso il deployment della funzione serverless. Nella parte inferiore dello schermo verrà visualizzato un popup che indica lo stato.
- Testiamo il webhook per vedere se il codice funziona. Nel simulatore a destra, digita:
Test my agent.
Se tutto è corretto, dovresti visualizzare il messaggio "Questo è un messaggio di test".
- Testiamo l'intent del canale. Ora poni la domanda:
What's on MTV?
Quando tutto è corretto, dovresti visualizzare:
"Su MTV dalle 16:30 è in onda MTV Unplugged. Dopodiché, alle 17:30 inizierà RuPaul's Drag Race".
Passaggi facoltativi - Firebase
Se esegui il test con un altro canale, noterai che i risultati della TV sono gli stessi. Questo perché la funzione cloud non recupera ancora i dati da un server web reale.
Per farlo, dovremo stabilire una connessione di rete in uscita.
Se vuoi testare questa applicazione con un servizio web, esegui l'upgrade del piano Firebase a Blaze. Nota: questi passaggi sono facoltativi. Puoi anche passare ai passaggi successivi di questo lab per continuare a testare la tua applicazione in Actions on Google.
- Vai alla console Firebase: https://console.firebase.google.com
- Nella parte inferiore dello schermo, premi il pulsante Esegui l'upgrade.

Seleziona il piano Blaze nel popup.
- Ora che sappiamo che il webhook funziona, possiamo continuare e sostituire il codice di
index.jscon il codice riportato di seguito. In questo modo, potrai richiedere informazioni sulla guida TV dal servizio web:
'use strict';
process.env.DEBUG = 'dialogflow:debug';
const {
dialogflow,
BasicCard,
Button,
Image,
List
} = require('actions-on-google');
const functions = require('firebase-functions');
const moment = require('moment');
const { WebhookClient } = require('dialogflow-fulfillment');
const rp = require('request-promise');
const TVGUIDE_WEBSERVICE = 'https://tvguide-e4s5ds5dsa-ew.a.run.app/channel';
var spokenText = '';
var results = null;
/* When the Test Intent gets invoked. */
function testHandler(agent) {
let spokenText = 'This is a test message, when you see this, it means your webhook fulfillment worked!';
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new BasicCard({
title: `Test Message`,
subTitle: `Dialogflow Test`,
image: new Image({
url: 'https://dummyimage.com/600x400/000/fff',
alt: 'Image alternate text',
}),
text: spokenText,
buttons: new Button({
title: 'This is a button',
url: 'https://assistant.google.com/',
}),
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/* When the Channel Intent gets invoked. */
function channelHandler(agent) {
var listItems = {};
spokenText = getSpeech(results);
for (var i = 0; i < results['Listings'].length; i++) {
listItems[`SELECT_${i}`] = {
title: `${getSpokenTime(results['Listings'][i]['Time'])} - ${results['Listings'][i]['Title']}`,
description: `Channel: ${results['Name']}`
}
}
if (agent.requestSource === agent.ACTIONS_ON_GOOGLE) {
let conv = agent.conv();
conv.ask(spokenText);
conv.ask(new List({
title: 'TV Guide',
items: listItems
}));
// Add Actions on Google library responses to your agent's response
agent.add(conv);
} else {
agent.add(spokenText);
}
}
/**
* Return a text string to be spoken out by the Google Assistant
* @param {object} JSON tv results
*/
var getSpeech = function(tvresults) {
let s = "";
if(tvresults && tvresults['Listings'][0]) {
let channelName = tvresults['Name'];
let currentlyPlayingTime = getSpokenTime(tvresults['Listings'][0]['Time']);
let laterPlayingTime = getSpokenTime(tvresults['Listings'][1]['Time']);
s = `On ${channelName} from ${currentlyPlayingTime}, ${tvresults['Listings'][0]['Title']} is playing.
Afterwards at ${laterPlayingTime}, ${tvresults['Listings'][1]['Title']} will start.`
}
return s;
}
/**
* Return a natural spoken time
* @param {string} time in 'HH:mm:ss' format
* @returns {string} spoken time (like 8 30 pm i.s.o. 20:00:00)
*/
var getSpokenTime = function(time){
let datetime = moment(time, 'HH:mm:ss');
let min = moment(datetime).format('m');
let hour = moment(datetime).format('h');
let partOfTheDay = moment(datetime).format('a');
if (min == '0') {
min = '';
}
return `${hour} ${min} ${partOfTheDay}`;
};
exports.dialogflowFirebaseFulfillment = functions.https.onRequest((request, response) => {
var agent = new WebhookClient({ request, response });
console.log('Dialogflow Request headers: ' + JSON.stringify(request.headers));
console.log('Dialogflow Request body: ' + JSON.stringify(request.body));
let channelInput = request.body.queryResult.parameters.channel;
let requestedTime = request.body.queryResult.parameters.time;
let url = `${TVGUIDE_WEBSERVICE}/${channelInput}`;
if (requestedTime) {
console.log(requestedTime);
let offsetMin = moment().utcOffset(requestedTime)._offset;
console.log(offsetMin);
let time = moment(requestedTime).utc().add(offsetMin,'m').format('HH:mm:ss');
url = `${TVGUIDE_WEBSERVICE}/${channelInput}/${time}`;
}
console.log(url);
var options = {
uri: encodeURI(url),
json: true
};
// request promise calls an URL and returns the JSON response.
rp(options)
.then(function(tvresults) {
console.log(tvresults);
// the JSON response, will need to be formatted in 'spoken' text strings.
spokenText = getSpeech(tvresults);
results = tvresults;
})
.catch(function (err) {
console.error(err);
})
.finally(function(){
// kick start the Dialogflow app
// based on an intent match, execute
var intentMap = new Map();
intentMap.set('Test Intent', testHandler);
intentMap.set('Channel Intent', channelHandler);
agent.handleRequest(intentMap);
});
});
6. Azioni su Google
Actions on Google è una piattaforma di sviluppo per l'Assistente Google. Consente lo sviluppo di "azioni" di terze parti, ovvero applet per l'Assistente Google che forniscono funzionalità estese.
Dovrai richiamare un'Azione Google chiedendo a Google di aprire un'app o di parlare con un'app.
Verrà aperta l'azione, la voce verrà modificata e uscirai dall'ambito "nativo" dell'Assistente Google. Ciò significa che tutto ciò che chiedi al tuo agente da questo momento in poi deve essere creato da te. Non puoi chiedere improvvisamente all'Assistente Google informazioni meteo di Google, se è quello che vuoi; devi prima uscire (chiudere) l'ambito dell'azione (la tua app).
Testare l'azione nel simulatore dell'Assistente Google
Proviamo la seguente conversazione:
Utente | Assistente Google |
"Hey Google, parla con your-name-tv-guide." | "Certo. Fammi recuperare your-name-tv-guide." |
Utente | Your-Name-TV-Guide Agent |
- | "Benvenuto, sono la guida TV…" |
Testa il mio agente | "Questo è un messaggio di test. Quando lo vedi, significa che il completamento del webhook ha funzionato." |
Cosa c'è su MTV? | Su MTV dalle 16:30, c'è MTV Unplugged. Alle 17:30 inizierà Rupaul's Drag Race. |
- Tornare al simulatore dell'Assistente Google
Apri: https://console.actions.google.com
- Fai clic sull'icona del microfono e chiedi quanto segue:

Talk to my test agentTest my agent
L'Assistente Google dovrebbe rispondere con:

- Ora chiediamoci:
What's on Comedy Central?
La query dovrebbe restituire:
Al momento su Comedy Central dalle 18:00, sono in onda I Simpson. Dopodiché, alle 19:00 inizierà I Griffin.
7. Complimenti
Hai creato la tua prima azione per l'Assistente Google con Dialogflow. Ottimo lavoro.
Come avrai notato, l'azione è stata eseguita in modalità di test, che è collegata al tuo Account Google. Se accedi al tuo dispositivo Nest o all'app Assistente Google sul tuo smartphone iOS o Android con lo stesso account. Puoi anche testare l'azione.
Ora questa è una demo del workshop. Tuttavia, quando crei applicazioni per l'Assistente Google per davvero, puoi inviare la tua Azione per l'approvazione. Per saperne di più, leggi questa guida.
Argomenti trattati
- Come creare un chatbot con Dialogflow v2
- Come creare entità personalizzate con Dialogflow
- Come creare una conversazione lineare con Dialogflow
- Come configurare i fulfillment webhook con Dialogflow e Firebase Functions
- Come portare la tua applicazione sull'Assistente Google con Actions on Google
Passaggi successivi
Ti è piaciuto questo codelab? Dai un'occhiata a questi fantastici lab.
Continua questo codelab integrando Google Chat:
Creare una guida TV Google Chat con G Suite e Dialogflow
- Build Actions for the Google Assistant with Dialogflow (livello 1)
- Crea azioni per l'Assistente Google con Dialogflow (livello 2)
- Build Actions for the Google Assistant with Dialogflow (livello 3)
- Informazioni sull'evasione integrando Dialogflow con Google Calendar
- Integra l'API Google Cloud Vision con Dialogflow
