In Dialogflow ansehen
Klicken Sie auf Continue (Weiter), um unser Beispiel für Unterhaltungs-Exits in Dialogflow zu importieren. Führen Sie dann die folgenden Schritte aus, um das Beispiel bereitzustellen und zu testen:
- Geben Sie einen Agent-Namen ein und erstellen Sie einen neuen Dialogflow-Agent für das Beispiel.
- Nachdem der Agent importiert wurde, klicken Sie auf Zum Agent.
- Klicken Sie im Hauptnavigationsmenü auf Fulfillment (Auftragsausführung).
- Aktivieren Sie den Inline-Editor und klicken Sie dann auf Bereitstellen. Der Editor enthält den Beispielcode.
- Klicken Sie im Hauptnavigationsmenü auf Integrations (Integrationen) und dann auf Google Assistant.
- Aktivieren Sie im angezeigten modalen Fenster die Option Änderungen automatisch in der Vorschau anzeigen und klicken Sie auf Testen, um den Actions-Simulator zu öffnen.
- Geben Sie im Simulator
Talk to my test app
ein, um das Beispiel zu testen.
Wenn Nutzer mitten in einer Unterhaltung die Unterhaltung beenden möchten, können sie beispielsweise Folgendes sagen:
- "exit"
- "abbrechen"
- "stop"
- „Abbrechen“
- "Auf Wiedersehen"
Standardmäßig beendet Assistant Ihre Unterhaltung und spielt ein Earcon ab.
Um dieses Verhalten zu überschreiben, können Sie den Empfang einer letzten Anfrage aktivieren, mit der Sie Ihre Auftragsausführungslogik bereinigen und ein letztes Mal dem Nutzer antworten können.
Die endgültige Antwort muss eine einzelne einfache Antwort mit einer Zeichenbeschränkung von 60 Zeichen für die Werte textToSpeech
und displayText
sein.
Die maximal zulässige Ausführungszeit für Anfragen zum Beenden von Unterhaltungen beträgt 2 Sekunden. Wenn keine Antwort eingeht, endet die Unterhaltung mit dem standardmäßigen Exit-Earcon. Wenn Ihre benutzerdefinierte Antwort zum Abbrechen fehlschlägt (z. B. wegen einer Zeichenbeschränkung oder eines falschen Antworttyps), endet die Unterhaltung auch mit dem standardmäßigen Exit-Earcon.
Dialogflow
So erhalten Sie Ereignisse zum Beenden von Unterhaltungen:
- Klicken Sie im linken Navigationsbereich neben dem Menüpunkt Intents auf das Symbol +.
- Geben Sie dem Intent einen Namen (z. B.
Exit Conversation
) und klicken Sie auf den Abschnitt Events (Ereignisse). - Geben Sie
actions_intent_CANCEL
in das Feld Ereignis hinzufügen ein. - Geben Sie entweder unter Antwort eine Antwort an oder richten Sie im Webhook-Code eine eigene Antwort für diesen Intent ein.
- Aktivieren Sie Diesen Intent als Ende der Unterhaltung festlegen.
- Klicken Sie auf Speichern.
- Klicken Sie im linken Navigationsmenü auf Integrations (Integrationen).
- Wählen Sie Google Assistant aus und klicken Sie auf Entwurf aktualisieren und dann auf Testen, um zu prüfen, ob die Änderungen für Ihr Projekt übernommen wurden.
Wenn ein Nutzer einen Exit der Unterhaltung anfordert, wird der von Ihnen erstellte Intent ausgelöst und Ihre Antwort an den Nutzer zurückgegeben. Im Folgenden finden Sie beispielsweise Auftragsausführungscode, der die Clientbibliothek verwendet, um einen Abbruch-Intent zu verarbeiten und eine Antwort zurückzugeben.
Node.js
const {dialogflow} = require('actions-on-google'); const functions = require('firebase-functions'); const app = dialogflow({debug: true}); app.intent('Exit Conversation', (conv) => { conv.close(`Okay, talk to you next time!`); }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Java
package com.example; import com.google.actions.api.ActionRequest; import com.google.actions.api.ActionResponse; import com.google.actions.api.DialogflowApp; import com.google.actions.api.ForIntent; import com.google.actions.api.response.ResponseBuilder; public class MyActionsApp extends DialogflowApp { @ForIntent("Exit Conversation") public ActionResponse exit(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Okay, talk to you next time!"); responseBuilder.endConversation(); return responseBuilder.build(); } }
JSON anfordern
Der folgende JSON-Code beschreibt eine Webhook-Anfrage.
{ "responseId": "e0c9d47f-aa99-4d03-bd48-a64c79e9c2a2-712767ed", "queryResult": { "queryText": "actions_intent_CANCEL", "parameters": {}, "allRequiredParamsPresent": true, "fulfillmentText": "Webhook failed for intent: Exit Conversation", "fulfillmentMessages": [ { "text": { "text": [ "Webhook failed for intent: Exit Conversation" ] } } ], "outputContexts": [ { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_audio_output" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_media_response_audio" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_account_linking" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_screen_output" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_capability_web_browser" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/google_assistant_input_type_keyboard" }, { "name": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0/contexts/actions_intent_cancel" } ], "intent": { "name": "projects/df-exits-kohler/agent/intents/b506991f-ad7a-4c4b-8adc-5e6c62727381", "displayName": "Exit Conversation" }, "intentDetectionConfidence": 1, "languageCode": "en" }, "originalDetectIntentRequest": { "source": "google", "version": "2", "payload": { "user": { "locale": "en-US", "userVerificationStatus": "VERIFIED" }, "conversation": { "conversationId": "ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0", "type": "ACTIVE", "conversationToken": "[]" }, "inputs": [ { "intent": "actions.intent.CANCEL", "rawInputs": [ { "inputType": "KEYBOARD", "query": "cancel" } ] } ], "surface": { "capabilities": [ { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.MEDIA_RESPONSE_AUDIO" }, { "name": "actions.capability.ACCOUNT_LINKING" }, { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] }, "availableSurfaces": [ { "capabilities": [ { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" }, { "name": "actions.capability.AUDIO_OUTPUT" } ] } ] } }, "session": "projects/df-exits-kohler/agent/sessions/ABwppHGVnlRtMz1RhGGmDOSlCFAbc2QaM12xYtw0raWvv-R5GYM6tkqiVOpIOexm_LTBCvmARwpbZ_onRuX0" }
Antwort (JSON)
Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.
{ "payload": { "google": { "expectUserResponse": false, "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Okay, talk to you next time!" } } ] } } } }
Actions SDK
So erhalten Sie Exit-Intents von Unterhaltungen:
-
Deklarieren Sie in einem
conversations
-Objekt innerhalb Ihres Aktionspakets, dass Sie den Intentactions.intent.CANCEL
immer dann erhalten möchten, wenn ein Nutzer mitten in der Unterhaltung möchte.{ "actions": [ { "description": "Default Welcome Intent", "name": "MAIN", "fulfillment": { "conversationName": "conversation_1" }, "intent": { "name": "actions.intent.MAIN" } } ], "conversations": { "conversation_1": { "name": "conversation_1", "url": "YOUR_ENDPOINT_URL", "inDialogIntents": [ { "name": "actions.intent.CANCEL" } ] } } }
-
Wenn Sie eine Anfrage mit dem Intent
actions.intent.CANCEL
erhalten, bereinigen Sie die gewünschte Auftragsausführungslogik und geben Sie eine entsprechende Exit-Anweisung an den Nutzer zurück. Hier ist beispielsweise ein Auftragsausführungscode, der die Clientbibliothek verwendet, um einen Abbruch-Intent zu verarbeiten.Node.js
const {actionssdk} = require('actions-on-google'); const functions = require('firebase-functions'); const app = actionssdk({debug: true}); app.intent('actions.intent.MAIN', (conv) => { conv.ask(`Hi! Try saying 'exit' or 'cancel'`); }); app.intent('actions.intent.TEXT', (conv, input) => { conv.ask(`You said ${input}`); conv.ask(`Try saying 'exit' or 'cancel'`); }); app.intent('actions.intent.CANCEL', (conv) => { conv.close(`Okay, talk to you next time!`); }); exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
Java
package com.example; import com.google.actions.api.ActionRequest; import com.google.actions.api.ActionResponse; import com.google.actions.api.ActionsSdkApp; import com.google.actions.api.ConstantsKt; import com.google.actions.api.ForIntent; import com.google.actions.api.response.ResponseBuilder; import com.google.actions.api.response.helperintent.Confirmation; import com.google.actions.api.response.helperintent.DateTimePrompt; import com.google.actions.api.response.helperintent.Permission; import com.google.actions.api.response.helperintent.Place; import com.google.api.services.actions_fulfillment.v2.model.DateTime; import com.google.api.services.actions_fulfillment.v2.model.Location; public class MyActionsApp extends ActionsSdkApp { @ForIntent("actions.intent.MAIN") public ActionResponse welcome(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Hi! Try saying 'exit' or 'cancel'"); return responseBuilder.build(); } @ForIntent("actions.intent.TEXT") public ActionResponse fallback(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("You said " + request.getRawInput().getQuery()); responseBuilder.add("Try saying 'exit' or 'cancel'"); return responseBuilder.build(); } @ForIntent("actions.intent.CANCEL") public ActionResponse exit(ActionRequest request) { ResponseBuilder responseBuilder = getResponseBuilder(request); responseBuilder.add("Okay, talk to you next time!"); responseBuilder.endConversation(); return responseBuilder.build(); } }
JSON anfordern
Der folgende JSON-Code beschreibt eine Webhook-Anfrage.
{ "user": { "locale": "en-US", "userVerificationStatus": "VERIFIED" }, "conversation": { "conversationId": "ABwppHEtH6XptryyLGWDBOVnLgy8EkOclTPETd4lcLh_f6ghQAzzg0seUuq3YocyFT8B17N6AGD6YPPjQw5CXBM", "type": "NEW" }, "inputs": [ { "intent": "actions.intent.CANCEL", "rawInputs": [ { "inputType": "KEYBOARD", "query": "exit" } ] } ], "surface": { "capabilities": [ { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.ACCOUNT_LINKING" }, { "name": "actions.capability.MEDIA_RESPONSE_AUDIO" }, { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] }, "availableSurfaces": [ { "capabilities": [ { "name": "actions.capability.AUDIO_OUTPUT" }, { "name": "actions.capability.SCREEN_OUTPUT" }, { "name": "actions.capability.WEB_BROWSER" } ] } ] }
Antwort (JSON)
Beachten Sie, dass der folgende JSON-Code eine Webhook-Antwort beschreibt.
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Okay, talk to you next time!" } } ] } } }