Pratico: crea un'azione della guida TV per l'Assistente Google con Dialogflow e Actions on Google

1. Introduzione

Stai guardando la TV ma non riesci a trovare il telecomando o forse non vuoi visitare ogni canale TV per capire se c'è qualcosa di bello 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 un'esperienza di sviluppo cloud comune:

  1. Crea un agente Dialogflow v2
  2. Crea un'entità personalizzata
  3. Crea intent
  4. Configura un webhook con Firebase Functions
  5. Testa il chatbot
  6. Attivare l'integrazione dell'Assistente Google

Cosa creerai

Creeremo un agente chatbot interattivo della guida TV per l'Assistente Google. Puoi chiedere alla guida TV quali contenuti vengono attualmente trasmessi su un determinato canale. Ad esempio: "Cosa c'è su MTV?" L'azione della Guida TV ti dirà cosa è in riproduzione al momento e cosa ci aspetta in futuro.

Cosa imparerai a fare

  • 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 nell'Assistente Google con Actions on Google

Prerequisiti

  • Per creare un agente Dialogflow, avrai bisogno di un indirizzo Gmail o di identità Google.
  • Non è necessaria una conoscenza di base di JavaScript, ma può essere utile se vuoi modificare il codice di fulfillment webhook.

2. Preparazione

Attivare l'Attività web nel browser

  1. Fai clic su: http://myaccount.google.com/activitycontrols

  1. Assicurati che Web & L'impostazione Attività nelle app è attivata:

bf8d16b828d6f79a.png

Crea un agente Dialogflow

  1. Apri: https://console.dialogflow.com

  1. Nella barra a sinistra, proprio sotto il logo, seleziona "Create New Agent" (Crea nuovo agente). Se esistono già agenti, fai prima clic sul menu a discesa.

1d7c2b56a1ab95b8.png

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

35237b5c5c539ecc.png

  1. Come lingua predefinita scegli: Italiano - en
  2. Come fuso orario predefinito, scegli il fuso orario più vicino a te.
  3. Fai clic su Crea

Configurare Dialogflow

  1. Fai clic sull'icona dell'ingranaggio nel menu a sinistra, accanto al nome del progetto.

1d7c2b56a1ab95b8.png

  1. Inserisci la seguente descrizione agente: La mia guida TV

26f262d359c49075.png

  1. Scorri verso il basso fino a Impostazioni log e attiva entrambe le opzioni per registrare le interazioni di Dialogflow e registrare tutte le interazioni in Google Cloud Stackdriver. Ne avremo bisogno in un secondo momento, nel caso in cui volessimo eseguire il debug della nostra azione.

e80c17acc3cce993.png

  1. Fai clic su Salva.

Configurare Actions on Google

  1. Fai clic sul link Assistente Google nella sezione Scopri come funziona nell'Assistente Google nel riquadro a destra.

5a4940338fc351e3.png

Si aprirà: http://console.actions.google.com

Se non hai mai utilizzato Actions on Google, dovrai prima compilare questo modulo:

3fd4e594fa169072.png

  1. Prova ad aprire l'azione nel simulatore** facendo clic sul nome del progetto.**
  2. Seleziona Verifica nella barra dei menu.

6adb83ffb7adeb78.png

  1. Assicurati che il simulatore sia impostato su Inglese e fai clic su Parla con la mia app di prova.

L'azione ti accoglierà, con l'intent predefinito di Dialogflow. Ciò significa che la configurazione dell'integrazione con Action on Google ha funzionato.

3. Entità personalizzate

Le entità sono oggetti su cui l'app o il dispositivo esegue azioni. Considerali come parametri / variabili. Nella nostra Guida TV chiederemo: "Cosa c'è su MTV". MTV è l'entità e la variabile. Potrei richiedere anche altri canali, come "National Geographic" o "Comedy Central". L'entità raccolta verrà utilizzata come parametro nella richiesta al servizio web dell'API TV Guide.

Ecco maggiori informazioni sulle entità Dialogflow.

Creazione dell'entità del canale

  1. Fai clic nella console di Dialogflow sulla voce di menu: Entities.
  2. Fai clic su Crea entità.
  3. Nome entità: channel (assicurati che sia tutto minuscolo)
  4. Trasmetti il nome di un canale. (alcuni canali avranno bisogno di un sinonimo nel caso in cui l'Assistente Google capisca qualcos'altro). Puoi usare il tasto Tab e i tasti Invio durante la digitazione. Inserisci il numero del canale come valore di riferimento. I nomi dei canali come sinonimi, ad esempio:
  • 1 - 1, Net 1, Net Station 1

ee4e4955aa77232d.png

5**.** Passa alla modalità **Raw Edit** (Modifica non elaborata) facendo clic sul pulsante del menu accanto al pulsante blu di salvataggio.

e294b49b123e034f.png

  1. 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"

ed78514afd5badef.png

  1. Fai clic su Salva.

4. Intent

Dialogflow utilizza gli intent per classificare le intenzioni di un utente. Gli intent contengono frasi di addestramento, che sono esempi di ciò che un utente potrebbe dire all'agente. Ad esempio, un utente che vuole sapere cosa viene trasmesso in TV potrebbe chiedere: "Cosa c'è oggi in TV?". "Cosa sto ascoltando?" oppure di' semplicemente "tvguide".

Quando un utente scrive o dice qualcosa, noto come espressione utente, Dialogflow associa l'espressione utente all'intento migliore nel tuo agente. La corrispondenza di un intent è nota anche come classificazione dell'intent.

Ecco ulteriori informazioni sugli intent Dialogflow.

Modifica dell'intent di benvenuto predefinito

Quando crei un nuovo agente Dialogflow, vengono creati automaticamente due intent predefiniti. L'intent di benvenuto predefinito è il primo flusso a cui accedi quando inizi una conversazione con l'agente. L'intent di riserva predefinito è il flusso che segui quando l'agente non è in grado di capirti o non riesce ad associare un intent a ciò che hai appena detto.

  1. Fai clic su Intent di benvenuto predefinito.

Nel caso dell'Assistente Google, l'intent di benvenuto predefinito si avvierà automaticamente. Questo perché Dialogflow è in ascolto dell'evento di benvenuto. Tuttavia, puoi anche richiamare l'intent dicendo una delle frasi di addestramento inserite.

6beee64e8910b85d.png

Ecco il messaggio di benvenuto per l'intent di benvenuto predefinito:

Utente

Agente

"Hey Google, parla con tuo-nome-tvguide."

"Ti diamo il benvenuto, sono l'agente TV Guide. Posso dirti cosa è attualmente in riproduzione su un canale TV. Ad esempio, puoi chiedermi: Cosa c'è su MTV".

  1. Scorri verso il basso fino a Risposte.
  2. Cancella tutte le risposte testuali.
  3. Crea una nuova risposta di testo che contenga 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?

84a1110a7f7edba2.png

  1. Fai clic su Salva.

Creare un intent di test temporaneo

A scopo di test, creeremo un intent di test temporaneo per poter testare il webhook in un secondo momento.

  1. Fai di nuovo clic sulla voce di menu Intent.
  2. Fai clic su Crea intent
  3. Inserisci il nome dell'intent: Test Intent (assicurati di usare la T maiuscola e la I maiuscola. - Se si scrive l'intent in modo diverso, il servizio di backend non funzionerà.)

925e02caa4de6b99.png

  1. Fai clic su Aggiungi frasi di addestramento.
  • Test my agent
  • Test intent

2e44ddb2fae3c841.png

  1. Fai clic su Fulfillment > Attiva fulfillment

7eb73ba04d76140e.png

Questa volta non intendiamo applicare l'hardcoded di una risposta. La risposta proverrà da una funzione Cloud Functions.

  1. Sposta l'opzione Abilita chiamata webhook per questo intent.

748a82d9b4d7d253.png

  1. Fai clic su Salva.

Creare l'intent del canale

L'intent del canale conterrà questa parte della conversazione:

Utente

Agente

"Cosa c'è su Comedy Central?"

""Al momento su Comedy Central dalle 18:00 c'è The Simpsons. Poi alle 19:00 inizierà Family Guy."

  1. Fai di nuovo clic sulla voce di menu Intent.
  2. Fai clic su Crea intent
  3. Inserisci il nome dell'intent: Channel Intent (assicurati di usare la T maiuscola e la I maiuscola). - Se si scrive l'intent in modo diverso, il servizio di backend non funzionerà.)
  4. 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

6eee02db02831397.png

  1. Scorri verso il basso fino ad Azione e parametri

b7e917026760218a.png

Osserva @channel e Entità @sys.time note a Dialogflow. Più avanti nel webhook, il nome e il valore del parametro verranno inviati al servizio web. Ad esempio:

channel=8

time=2020-01-29T19:00:00+01:00

  1. Contrassegna il canale come richiesto

Durante una conversazione con l'agente TV Guide, devi sempre inserire il nome del parametro dello slot channel. Se il nome del canale non è stato menzionato all'inizio della conversazione, Dialogflow chiederà ulteriore assistenza fino a quando non avrà compilato tutti gli slot di parametri. 6f36973fd789c182.png

Come prompt inserisci:

  • For which TV channel do you want to hear the tv guide information?
  • In which TV channel are you interested?

cdb5601ead9423f8.png

  1. Non impostare il parametro temporale come richiesto.

L'ora sarà facoltativa. Se non viene specificata alcuna ora, il servizio web restituirà l'ora corrente.

  1. Fai clic su Completamento.

Questa volta non intendiamo applicare l'hardcoded di una risposta. La risposta proverrà dalla funzione Cloud Functions. Aziona quindi l'opzione Abilita chiamata webhook per questo intent.

  1. Fai clic su Salva.

5. Evasione del webhook

Se l'agente ha bisogno di più di risposte di intent statiche, devi utilizzare fulfillment per collegare il tuo servizio web all'agente. La connessione del servizio web ti consente di eseguire azioni basate sulle espressioni dell'utente 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 nel tuo database e rispondere all'utente, ovvero la programmazione di MTV.

  1. Fai clic su Fulfillment nel menu principale.
  2. Attiva l'opzione Editor incorporato

cc84351f0d03ab6f.png

Per semplice test e implementazione del webhook, puoi utilizzare l'editor in linea. Utilizza Cloud Functions for Firebase serverless.

  1. Fai clic sulla scheda index.js nell'editor e copia e incolla questa porzione di JavaScript per il codice 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);
});

cc84351f0d03ab6f.png

  1. Fai clic sulla scheda package.json nell'editor e copia e incolla questa porzione di codice JSON che importa tutte le librerie di gestione di pacchetti di Node.js (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"
  }
}

af01460c2a023e68.png

  1. Fai clic sul pulsante Esegui il deployment. Ci vorrà qualche istante, perché verrà eseguito il deployment della tua funzione serverless. Nella parte inferiore dello schermo, vedrai un popup che indica il tuo stato.
  2. Eseguiamo il test del webhook per vedere se il codice funziona. Nel simulatore sul lato destro, digita:

Test my agent.

Quando è tutto corretto, dovrebbe apparire: "Questo è un messaggio di prova".

  1. Proviamo l'intenzione del canale. Ora poni la domanda:

What's on MTV?

Se è tutto corretto, dovresti vedere:

"Su MTV dalle 16 e 30, è in riproduzione MTVUNplugged. Dopodiché, alle 17:30, inizierà la Rupauls Drag Race".

Passaggi facoltativi - Firebase

Se effettui il test con un altro canale, noterai che i risultati relativi alla TV sono gli stessi. Questo perché la funzione Cloud Functions non sta ancora eseguendo il recupero da un server web reale.

Per farlo, dovremo creare 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 andare ai passaggi successivi di questo lab per continuare a testare la tua applicazione in Azioni su Google.

  1. Vai alla console Firebase: https://console.firebase.google.com

  1. Nella parte inferiore dello schermo, premi il pulsante Aggiorna.

ad38bc6d07462abf.png

Seleziona il piano Blaze nel popup.

  1. Ora che sappiamo che il webhook funziona, possiamo continuare e sostituire il codice di index.js con quello riportato di seguito. In questo modo avrai la certezza di poter richiedere informazioni sulla guida TV al 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

Azioni su Google è una piattaforma di sviluppo per l'Assistente Google. Consente lo sviluppo di "azioni" di terze parti, ossia app per l'Assistente Google che offrono funzionalità estese.

Dovrai richiamare un'azione Google chiedendo a Google di aprire o parlare con un'app.

Si aprirà l'azione, cambierà la voce e lasci lo stato "nativo" Ambito dell'Assistente Google. Il che significa che devi creare tutto ciò che chiedi all'agente fin qui. All'improvviso non puoi chiedere all'Assistente Google informazioni sul meteo di Google, se è quello che vuoi: devi prima chiudere l'ambito dell'azione (la tua app).

Testare l'azione nel simulatore dell'Assistente Google

Proviamo a testare la seguente conversazione:

Utente

Assistente Google

"Hey Google, parla con your-name-tv-guide."

"Certo. Fammi prendere your-name-tv-guide."

Utente

Tuo-nome-TV-Guide

-

"Ti diamo il benvenuto, sono la guida della TV..."

Testa l'agente

"Questo è un messaggio di prova. Se viene visualizzato, significa che il completamento del webhook ha funzionato."

Cosa c'è su MTV?

Su MTV dalle 16 e 30, è in riproduzione MTVUNplugged. Dopodiché, alle 17:30, inizierà la Rupauls Drag Race.

  1. Tornare al simulatore dell'Assistente Google

Apri: https://console.actions.google.com

  1. Fai clic sull'icona del microfono e chiedi:

c3b200803c7ba95e.png

  • Talk to my test agent
  • Test my agent

L'Assistente Google dovrebbe rispondere con:

5d93c6d037c8c8eb.png

  1. Ora chiediamo:
  • What's on Comedy Central?

Dovrebbe essere restituito:

Al momento su Comedy Central dalle 18:00 c'è I Simpsons. Poi alle 19:00 inizierà Family Guy.

7. Complimenti

Hai creato la tua prima azione dell'Assistente Google con Dialogflow. Ottimo lavoro.

Come forse avrai notato, l'azione era in esecuzione in modalità di test associata al tuo Account Google. Se esegui l'accesso sul dispositivo Nest o nell'app Assistente Google sul tuo smartphone iOS o Android, con lo stesso account. Puoi anche testare l'azione.

Questa è una demo del workshop. Tuttavia, quando crei applicazioni per l'Assistente Google in modo reale, potresti inviare l'azione per l'approvazione. Leggi questa guida per saperne di più.

Argomenti trattati

  • 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 nell'Assistente Google con Actions on Google

Passaggi successivi

Ti è piaciuto questo codelab? Dai un'occhiata a questi fantastici lab!

Continua questo codelab integrandolo per Google Chat:

Creare una guida TV di Google Chat con G Suite e Dialogflow