1. Einführung
Du möchtest fernsehen, kannst aber die Fernbedienung nicht finden oder möchtest nicht jeden TV-Sender durchgehen, um herauszufinden, ob etwas Interessantes läuft? Fragen wir Google Assistant, was im Fernsehen läuft. In diesem Lab erstellen Sie mit Dialogflow eine einfache Action und erfahren, wie Sie sie in Google Assistant einbinden.
Die Reihenfolge der Übungen orientiert sich am üblichen Vorgehen bei der Cloud-Entwicklung:
- Dialogflow v2-Agent erstellen
- Benutzerdefinierte Entität erstellen
- Intents erstellen
- Webhook mit Firebase Functions einrichten
- Chatbot testen
- Google Assistant-Integration aktivieren
Überblick
Wir erstellen einen interaktiven TV-Guide-Chatbot-Agenten für Google Assistant. Du kannst den TV-Guide fragen, was gerade auf einem bestimmten Kanal läuft. Zum Beispiel: „Was läuft auf MTV?“ Die Aktion „TV Guide“ (TV-Programm) informiert dich darüber, was gerade läuft und was als Nächstes gesendet wird. |
|
Lerninhalte
- Chatbot mit Dialogflow v2 erstellen
- Benutzerdefinierte Entitäten mit Dialogflow erstellen
- Lineare Unterhaltung mit Dialogflow erstellen
- Webhooks zur Auftragsausführung mit Dialogflow und Firebase Functions einrichten
- Anwendung mit Actions on Google in Google Assistant einbinden
Vorbereitung
- Sie benötigen eine Google-Identität bzw. eine Gmail-Adresse, um einen Dialogflow-Agent zu erstellen.
- Grundkenntnisse in JavaScript sind nicht erforderlich, können aber hilfreich sein, wenn Sie den Webhook-Fulfillment-Code ändern möchten.
2. Einrichtung
Webaktivitäten in Ihrem Browser aktivieren
- Klicken Sie auf http://myaccount.google.com/activitycontrols.
- Prüfen Sie, ob die Web- & App-Aktivitäten aktiviert sind:

Dialogflow-Agent erstellen
- Öffnen Sie https://console.dialogflow.com.
- Wählen Sie in der linken Leiste direkt unter dem Logo die Option Create New Agent (Neuen Agent erstellen) aus. Wenn Sie bereits Agents haben, klicken Sie zuerst auf das Drop-down-Menü.

- Geben Sie einen Namen für den Agent an:
your-name-tvguide(verwenden Sie Ihren eigenen Namen).

- Wählen Sie als Standardsprache Englisch – en aus.
- Wählen Sie als Standardzeitzone die Zeitzone aus, die Ihnen am nächsten ist.
- Klicken Sie auf Erstellen.
Dialogflow konfigurieren
- Klicken Sie im linken Menü neben dem Namen Ihres Projekts auf das Zahnradsymbol.

- Geben Sie die folgende Beschreibung für den Agenten ein: My TV Guide

- Scrollen Sie nach unten zu Log Settings (Log-Einstellungen) und aktivieren Sie beide Schalter, um die Interaktionen von Dialogflow und alle Interaktionen in Google Cloud Stackdriver zu protokollieren. Wir benötigen diese später, falls wir unsere Aktion debuggen möchten.

- Klicken Sie auf Speichern.
Actions on Google konfigurieren
- Klicken Sie im rechten Bereich unter So funktioniert es in Google Assistant auf den Link Google Assistant.

Dadurch wird http://console.actions.google.com geöffnet.
Wenn Sie neu bei Actions on Google sind, müssen Sie zuerst dieses Formular ausfüllen:

- Versuchen Sie, Ihre Aktion im Simulator zu öffnen, indem Sie auf den Projektnamen klicken.
- Wählen Sie in der Menüleiste Testen aus.

- Achten Sie darauf, dass der Simulator auf Englisch eingestellt ist, und klicken Sie auf Sprich mit meiner Test-App.
Die Action begrüßt Sie mit dem grundlegenden Dialogflow-Standard-Intent. Das bedeutet, dass die Einrichtung der Integration mit Actions on Google funktioniert hat.
3. Benutzerdefinierte Entitäten
Entitäten sind Objekte, für die Ihre App oder Ihr Gerät Aktionen ausführt. Stellen Sie sich das wie Parameter oder Variablen vor. In unserer TV-Übersicht fragen wir: „Was läuft auf MTV?“ MTV ist die Einheit und Variable. Ich könnte auch nach anderen Sendern fragen, z. B. „National Geographic“ oder „Comedy Central“. Die gesammelte Entität wird als Parameter in meiner Anfrage an den TV Guide API-Webdienst verwendet.
Weitere Informationen zu Dialogflow-Entitäten
Channel-Entität erstellen
- Klicken Sie in der Dialogflow-Konsole auf den Menüpunkt Entitäten.
- Klicken Sie auf Entität erstellen.
- Name der Rechtspersönlichkeit:
channel(muss in Kleinbuchstaben geschrieben sein) - Übergeben Sie einen Kanalnamen. Bei einigen Sendern ist ein Synonym erforderlich, falls Google Assistant etwas anderes versteht. Sie können während der Eingabe die Tabulator- und die Eingabetaste verwenden. Geben Sie die Kanalnummer als Referenzwert ein. Und die Kanalnamen als Synonyme, z. B.:
1 - 1, Net 1, Net Station 1

5**.** Wechseln Sie in den Modus **Rohbearbeitung**, indem Sie neben der blauen Schaltfläche „Speichern“ auf die Menüschaltfläche klicken.

- Kopieren Sie die anderen Entitäten und fügen Sie sie im CSV-Format ein:
"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"

- Klicken Sie auf Speichern.
4. Intents
Dialogflow verwendet Intents, um die Absichten eines Nutzers zu kategorisieren. Intents haben Trainingsformulierungen, die Beispiele dafür sind, was ein Nutzer dem Agent sagen könnte. Ein Nutzer, der wissen möchte, was im Fernsehen läuft, könnte beispielsweise fragen: „Was läuft heute im Fernsehen?“ „Was läuft gerade?“ oder einfach „Fernsehprogramm“.
Wenn ein Nutzer etwas schreibt oder sagt, was als Nutzeräußerung bezeichnet wird, ordnet Dialogflow die Nutzeräußerung dem geeignetsten Intent in Ihrem Agent zu. Die Zuordnung eines Intents wird auch als Intent-Klassifizierung bezeichnet.
Weitere Informationen zu Dialogflow-Intents
Standard-Begrüßungs-Intent ändern
Wenn Sie einen neuen Dialogflow-Agent erstellen, werden automatisch zwei Standard-Intents erstellt. Der Standard-Begrüßungs-Intent ist der erste Ablauf, den Sie sehen, wenn Sie eine Unterhaltung mit dem Agent beginnen. Der Standard-Fallback-Intent ist der Ablauf, den Sie erhalten, wenn der Agent Sie nicht versteht oder keinen Intent mit dem, was Sie gerade gesagt haben, abgleichen kann.
- Klicken Sie auf Standard-Begrüßungs-Intent.
Bei Google Assistant wird er automatisch mit dem Standard-Begrüßungs-Intent gestartet. Das liegt daran, dass Dialogflow auf das Welcome-Ereignis wartet. Sie können den Intent jedoch auch aufrufen, indem Sie eine der eingegebenen Trainingsformulierungen sagen.

Dies ist die Begrüßungsnachricht für den Standard-Begrüßungs-Intent:
Nutzer | Agentenmodus |
„Ok Google, sprich mit [Name]-TV-Guide.“ | „Hallo, ich bin der Kundenservicemitarbeiter für die YouTube TV-Programmübersicht. Ich kann dir sagen, was gerade auf einem Fernsehsender läuft. Du kannst mich zum Beispiel fragen: „Was läuft auf MTV?“ |
- Scrollen Sie nach unten zu Antworten.
- Alle Textantworten löschen
- Erstellen Sie eine neue Textantwort mit der folgenden Begrüßung:
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?

- Klicken Sie auf Speichern.
Temporäre Testabsicht erstellen
Zu Testzwecken erstellen wir einen temporären Test-Intent, damit wir den Webhook später testen können.
- Klicken Sie noch einmal auf den Menüpunkt Intents.
- Klicken Sie auf Create Intent (Intent erstellen).
- Geben Sie den Intent-Namen ein:
Test IntentAchten Sie darauf, dass Sie ein großes T und ein großes I verwenden. – Wenn Sie die Intention anders schreiben, funktioniert der Backend-Dienst nicht.

- Klicken Sie auf Trainingsformulierungen hinzufügen.
Test my agentTest intent

- Klicken Sie auf Fulfillment > Fulfillment aktivieren.

Dieses Mal wird keine Antwort fest codiert. Die Antwort stammt von einer Cloud-Funktion.
- Stellen Sie den Schalter Enable Webhook call for this intent auf „Ein“.

- Klicken Sie auf Speichern.
Channel-Intent erstellen
Der Channel-Intent enthält diesen Teil der Unterhaltung:
Nutzer | Agentenmodus |
„Was gibt es auf Comedy Central?“ | ""Auf Comedy Central läuft gerade ab 18:00 Uhr die Serie ‚Die Simpsons‘. Danach, um 19:00 Uhr, beginnt Family Guy.“ |
- Klicken Sie noch einmal auf den Menüpunkt Intents.
- Klicken Sie auf Create Intent (Intent erstellen).
- Geben Sie den Intent-Namen ein:
Channel Intent(achten Sie darauf, dass Sie ein großes T und ein großes I verwenden). – Wenn Sie die Intention anders schreiben, funktioniert der Backend-Dienst nicht. - Klicken Sie auf Trainingsformulierungen hinzufügen und fügen Sie Folgendes hinzu:
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

- Scrollen Sie nach unten zu Aktion und Parameter.

Beachten Sie die Entitäten @channel und @sys.time, die Dialogflow bekannt sind. Später in Ihrem Webhook werden der Parametername und der Parameterwert an Ihren Webdienst gesendet. Beispiel:
channel=8
time=2020-01-29T19:00:00+01:00
- Channel als erforderlich markieren
Wenn Sie sich mit dem TV Guide-Agent unterhalten, müssen Sie immer den Slot-Parameter channel ausfüllen. Wenn der Channelname zu Beginn des Gesprächs nicht erwähnt wurde, fragt Dialogflow weiter, bis alle Parameterslots ausgefüllt sind. 
Geben Sie als Prompt Folgendes ein:
For which TV channel do you want to hear the tv guide information?In which TV channel are you interested?

- Der Zeitparameter wird nicht wie erforderlich festgelegt.
Die Angabe der Zeit ist optional. Wenn keine Zeit angegeben ist, gibt der Webdienst die aktuelle Zeit zurück.
- Klicken Sie auf Ausführung.
Dieses Mal wird keine Antwort fest codiert. Die Antwort kommt von der Cloud-Funktion. Stellen Sie den Schalter Enable Webhook call for this intent (Webhook-Aufruf für diesen Intent aktivieren) auf „Ein“.
- Klicken Sie auf Speichern.
5. Webhook-Fulfillment
Wenn Sie für Ihren Agent Aktionen und Antworten benötigen, die über statische Intent-Antworten hinausgehen, müssen Sie Ihren Webdienst mithilfe der Auftragsausführung mit dem Agent verbinden. Wenn Sie Ihren Webdienst verbinden, können Sie auf Nutzerausdrücke abgestimmte Aktionen ausführen und dynamische Antworten an die Nutzer zurücksenden. Wenn ein Nutzer beispielsweise den TV-Plan für MTV erhalten möchte, kann Ihr Webdienst in Ihrer Datenbank nachsehen und dem Nutzer den Plan für MTV senden.
- Klicken Sie im Hauptmenü auf Fulfillment (Auftragsausführung).
- Aktivieren Sie den Schalter Inline-Editor.

Für einfaches Testen und Implementieren von Webhooks können Sie den Inline-Editor verwenden. Dabei werden serverlose Cloud Functions for Firebase verwendet.
- Klicken Sie im Editor auf den Tab index.js und kopieren Sie diesen JavaScript-Code für 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);
});

- Klicken Sie im Editor auf den Tab package.json und kopieren Sie diesen JSON-Code, mit dem alle NPM-Bibliotheken (Node.js Package Manager) importiert werden:
{
"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"
}
}

- Klicken Sie auf die Schaltfläche Bereitstellen. Das dauert einen Moment, da Ihre serverlose Funktion bereitgestellt wird. Unten auf dem Bildschirm wird ein Pop-up mit Ihrem Status angezeigt.
- Testen wir den Webhook, um zu sehen, ob der Code funktioniert. Geben Sie im Simulator auf der rechten Seite Folgendes ein:
Test my agent.
Wenn alles richtig ist, wird „Dies ist eine Testnachricht“ angezeigt.
- Lass uns die Channel-Intention testen. Stelle nun die Frage:
What's on MTV?
Wenn alles korrekt ist, wird Folgendes angezeigt:
„Ab 16:30 Uhr läuft auf MTV ‚MTV Unplugged‘. Danach beginnt um 17:30 Uhr „RuPaul’s Drag Race“.
Optionale Schritte – Firebase
Wenn Sie dies mit einem anderen Channel testen, werden Sie feststellen, dass die TV-Ergebnisse gleich sind. Das liegt daran, dass die Cloud-Funktion noch nicht von einem echten Webserver abgerufen wird.
Dazu müssen wir eine ausgehende Netzwerkverbindung herstellen.
Wenn Sie diese Anwendung mit einem Webdienst testen möchten, führen Sie ein Upgrade Ihres Firebase-Tarifs auf Blaze durch. Hinweis: Diese Schritte sind optional. Sie können auch mit den nächsten Schritten dieses Labs fortfahren, um Ihre Anwendung in Actions on Google zu testen.
- Rufen Sie die Firebase Console unter https://console.firebase.google.com auf.
- Drücken Sie unten auf dem Bildschirm die Schaltfläche Upgrade.

Wählen Sie im Pop-up-Fenster den Blaze-Tarif aus.
- Nachdem wir wissen, dass der Webhook funktioniert, können wir fortfahren und den Code von
index.jsdurch den folgenden Code ersetzen. So können Sie sicherstellen, dass Sie Programminformationen vom Webdienst anfordern können:
'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. Actions on Google
Actions on Google ist eine Entwicklerplattform für Google Assistant. Sie ermöglicht die Entwicklung von „Actions“ durch Drittanbieter – Applets für Google Assistant, die erweiterte Funktionen bieten.
Sie müssen eine Google-Aktion aufrufen, indem Sie Google bitten, eine App zu öffnen oder mit einer App zu sprechen.
Dadurch wird Ihre Aktion geöffnet, die Stimme geändert und Sie verlassen den „nativen“ Google Assistant-Bereich. Das bedeutet, dass alles, was Sie Ihren Agenten ab diesem Zeitpunkt fragen, von Ihnen erstellt werden muss. Sie können Google Assistant nicht plötzlich nach Google-Wetterinformationen fragen, wenn Sie das möchten. Sie müssen zuerst den Bereich Ihrer Aktion (Ihre App) verlassen (schließen).
Aktion im Google Assistant-Simulator testen
Testen wir die folgende Unterhaltung:
Nutzer | Google Assistant |
„Hey Google, sprich mit your-name-tv-guide.“ | „Gerne. Ich rufe your-name-tv-guide auf.“ |
Nutzer | Your-Name-TV-Guide Agent |
- | „Hallo, ich bin die YouTube TV-Programmübersicht…“ |
Meinen Agenten testen | „Das ist eine Testnachricht. Wenn Sie diese sehen, hat Ihr Webhook-Fulfillment funktioniert.“ |
Was läuft auf MTV? | Auf MTV läuft ab 16:30 Uhr MTV Unplugged. Danach, um 17:30 Uhr, beginnt RuPaul’s Drag Race. |
- Zurück zum Google Assistant-Simulator wechseln
Öffnen Sie https://console.actions.google.com.
- Klicken Sie auf das Mikrofonsymbol und fragen Sie:

Talk to my test agentTest my agent
Google Assistant sollte antworten:

- Fragen wir uns nun:
What's on Comedy Central?
In diesem Fall sollte Folgendes zurückgegeben werden:
Auf Comedy Central läuft gerade ab 18:00 Uhr die Serie „Die Simpsons“. Danach beginnt um 19:00 Uhr Family Guy.
7. Glückwunsch
Sie haben Ihre erste Google Assistant-Aktion mit Dialogflow erstellt. Herzlichen Glückwunsch!
Wie du vielleicht bemerkt hast, wurde deine Aktion im Testmodus ausgeführt, der mit deinem Google-Konto verknüpft ist. Wenn Sie sich auf Ihrem Nest-Gerät oder in der Google Assistant App auf Ihrem iOS- oder Android-Smartphone mit demselben Konto anmelden. Sie können Ihre Aktion auch testen.
Das ist eine Workshop-Demo. Wenn Sie jedoch Anwendungen für Google Assistant entwickeln, können Sie Ihre Action zur Genehmigung einreichen. Weitere Informationen finden Sie in diesem Leitfaden.
Behandelte Themen
- Chatbot mit Dialogflow v2 erstellen
- Benutzerdefinierte Entitäten mit Dialogflow erstellen
- Lineare Unterhaltung mit Dialogflow erstellen
- Webhooks zur Auftragsausführung mit Dialogflow und Firebase Functions einrichten
- Anwendung mit Actions on Google in Google Assistant einbinden
Nächste Schritte
Hat Ihnen dieses Codelab gefallen? Sehen Sie sich diese Labs an.
Setzen Sie dieses Codelab fort, indem Sie es für Google Chat integrieren:
Google Chat-TV-Guide mit G Suite und Dialogflow erstellen
- Actions für Google Assistant mit Dialogflow erstellen (Stufe 1)
- Actions für Google Assistant mit Dialogflow erstellen (Stufe 2)
- Actions für Google Assistant mit Dialogflow erstellen (Stufe 3)
- Auftragsausführung durch Integration von Dialogflow in Google Kalender
- Google Cloud Vision API in Dialogflow einbinden
