Conversational Actions will be deprecated on June 13, 2023. For more information, see Conversational Actions sunset.

Evasione delle build (Dialogflow)

Stay organized with collections Save and categorize content based on your preferences.

Fulfillment definisce l'interfaccia di conversazione per la tua azione per ottenere l'input dell'utente e la logica per elaborare l'input e infine completare l'azione.

Definisci la conversazione

Ora che hai definito le azioni, puoi creare la conversazione corrispondente per tali azioni. A questo scopo, crea gli intent Dialogflow che definiscono la grammatica o ciò che gli utenti hanno detto per attivare l'intent e il corrispondente fulfillment per elaborare l'intent quando viene attivato.

Puoi creare tutti gli intent che vuoi definire la grammatica dell'intera conversazione.

Crea intent

Fai clic sul segno + accanto alla voce di menu Intent nella barra di navigazione sinistra di Dialogflow. Viene visualizzato l'editor Intent in cui puoi inserire le seguenti informazioni:

  • Nome intent è il nome dell'intent visualizzato nell'IDE.
  • I contesti consentono di definire l'ambito dell'attivazione dell'intent per casi specifici. Per ulteriori informazioni, leggi la documentazione di Dialogflow in Contexts.
  • Gli eventi attivano gli intent senza che gli utenti debbano dire nulla. Un esempio di evento è l'evento GOOGLE_ASSISTANT_WELCOME, che consente all'Assistente Google di richiamare la tua azione. Questo evento viene utilizzato per l'azione predefinita dell'azione. Per saperne di più, consulta la nostra documentazione sugli intent integrati di supporto.
  • Le frasi di addestramento definiscono ciò che gli utenti devono dire (la grammatica) per attivare l'intent. Digita qui alcune frasi (5-10) di ciò che gli utenti possono dire per attivare l'intent. Dialogflow gestisce automaticamente le varianti naturali delle frasi di esempio fornite.
  • Azioni e parametri definiscono i dati da passare all'evasione, se l'evasione è abilitata per questo intent. Sono inclusi i dati analizzati dall'input utente e il nome che puoi utilizzare nel fulfillment per rilevare quale intento è stato attivato. Questo nome verrà utilizzato in seguito per mappare il tuo intento alla logica di evasione degli ordini corrispondente. Per ulteriori informazioni sulla definizione delle azioni, consulta la sezione Azioni e parametri nella documentazione di Dialogflow.

  • Risposte è il Builder di risposte in Dialogflow, in cui puoi definire la risposta a questo intent direttamente all'interno di Dialogflow, senza richiamare l'evasione. Questa funzionalità è utile per le risposte statiche che non richiedono il fulfillment. Puoi usarla per fornire messaggi di benvenuto o saluti semplici. Tuttavia, è probabile che utilizzerai il fulfillment per rispondere agli utenti per la maggior parte degli intent.

  • Fulfillment specifica se vuoi o meno chiamare il tuo fulfillment quando questo intento viene attivato. Molto probabilmente lo attiverai per la maggior parte degli intent nel tuo agente Dialogflow. Per visualizzare questo elemento nell'intent, devi avere attivato il fulfillment per l'agente nel menu Fulfillment.

Creazione di risposte in Dialogflow

Per alcuni intent, potrebbe non essere necessario che il fulfillment restituisca una risposta. In questi casi, puoi utilizzare il generatore di risposte in Dialogflow per creare le risposte.

Nell'area Risposte, fornisci la risposta testuale che vuoi restituire agli utenti. Le risposte di testo predefinite sono risposte di testo TTS semplici che possono funzionare su più integrazioni Dialogflow. Le risposte relative all'Assistente Google sono descritte nella pagina Risposte.

Creazione delle risposte di evasione degli ordini

Il codice di evasione degli ordini è ospitato nella logica di evasione dei webhook per un'azione. Ad esempio, nell'esempio di Silly Name Maker, questa logica si trova in index.js per la funzione Cloud Functions per Firebase.

Quando viene attivato un intent che utilizza il fulfillment, ricevi una richiesta da Dialogflow che contiene informazioni sull'intent. Risponderemo alla richiesta elaborando l'intent e restituendo una risposta. Questa richiesta e risposta è definita dal webhook Dialogflow.

Ti consigliamo vivamente di utilizzare la libreria client Node.js per elaborare le richieste e restituire le risposte. Ecco la procedura generale per l'utilizzo della libreria client:

  1. Inizializza l'oggetto Dialogflow. Questo oggetto gestisce automaticamente l'ascolto delle richieste e le analizza per consentirti di elaborarle durante l'evasione degli ordini.
  2. Creare funzioni per gestire le richieste. Queste funzioni elaborano l'input utente e altri componenti dell'intent e creano la risposta per tornare a Dialogflow.

Inizializza l'oggetto Dialogflow

Il codice riportato di seguito crea l'istanza Dialogflow ed esegue la configurazione di boilerplate Node.js per Google Cloud Functions:

Node.js
'use strict';

const {dialogflow} = require('actions-on-google');
const functions = require('firebase-functions');

const app = dialogflow({debug: true});

app.intent('Default Welcome Intent', (conv) => {
  // Do things
});
exports.yourAction = functions.https.onRequest(app);
Java
public class DfFulfillment extends DialogflowApp {
  private static final Logger LOGGER = LoggerFactory.getLogger(DfFulfillment.class);

  @ForIntent("Default Welcome Intent")
  public ActionResponse welcome(ActionRequest request) {
    // Do things
    // ...
  }

Creare funzioni per gestire le richieste

Quando gli utenti pronunciano una frase che attiva un intent, ricevi una richiesta da Dialogflow che gestisci con una funzione nel tuo fulfillment. Con questa funzione, solitamente esegui le operazioni seguenti:

  1. Eseguire le logiche necessarie per elaborare l'input utente.
  2. Crea le risposte per rispondere agli intent attivati. Tenete conto della superficie utilizzata dagli utenti per creare risposte appropriate. Consulta le funzionalità di superficie per ulteriori informazioni su come gestire le risposte per le diverse piattaforme.
  3. Chiama la funzione ask() con la risposta.

Il seguente codice mostra come creare due risposte TTS che gestiscono un intent di chiamata (input.welcome) e un intent di finestra di dialogo (input.number) che accolgono l'utente nella tua azione e richiama un numero che un utente ha pronunciato per un intent Dialogflow con il nome:

Node.js
const app = dialogflow();
app.intent('Default Welcome Intent', (conv) => {
conv.ask('Welcome to number echo! Say a number.');
});
app.intent('Input Number', (conv, {num}) => {
// extract the num parameter as a local string variable
conv.close(`You said ${num}`);
});
Java
@ForIntent("Default Welcome Intent")
public ActionResponse defaultWelcome(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  rb.add("Welcome to number echo! Say a number.");
  return rb.build();
}

@ForIntent("Input Number")
public ActionResponse inputNumber(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  Integer number = (Integer) request.getParameter("num");
  rb.add("You said " + number.toString());
  return rb.endConversation().build();
}

Il numero di input personalizzato per intenzione, che accompagna il codice riportato sopra, utilizza l'entità @sys.number per estrarre un numero dalle frasi utente. L'intent invia poi il parametro num, che contiene il numero dell'utente, alla funzione nel fulfillment.

Invece di avere singoli gestori per ogni intent, in alternativa puoi aggiungere una funzione di riserva. All'interno della funzione di riserva, verifica quale intento lo ha attivato e di conseguenza esegui le azioni appropriate.

Node.js
const WELCOME_INTENT = 'Default Welcome Intent';
const NUMBER_INTENT = 'Input Number';
const NUMBER_PARAMETER = 'num';
// you can add a fallback function instead of a function for individual intents
app.fallback((conv) => {
 // intent contains the name of the intent
 // you defined in the Intents area of Dialogflow
 const intent = conv.intent;
 switch (intent) {
   case WELCOME_INTENT:
     conv.ask('Welcome! Say a number.');
     break;
   case NUMBER_INTENT:
     const num = conv.parameters[NUMBER_PARAMETER];
     conv.close(`You said ${num}`);
     break;
 }
});
Java
// you can add a fallback function instead of a function for individual intents
@ForIntent("Default Fallback Intent")
public ActionResponse fallback(ActionRequest request) {
  final String WELCOME_INTENT = "Default Welcome Intent";
  final String NUMBER_INTENT = "Input Number";
  final String NUMBER_ARGUMENT = "num";
  // intent contains the name of the intent
  // you defined in the Intents area of Dialogflow
  ResponseBuilder rb = getResponseBuilder(request);
  String intent = request.getIntent();
  switch (intent) {
    case WELCOME_INTENT:
      rb.add("Welcome! Say a number.");
      break;
    case NUMBER_INTENT:
      Integer num = (Integer) request.getParameter(NUMBER_ARGUMENT);
      rb.add("You said " + num).endConversation();
      break;
  }
  return rb.build();
}

Richiesta di mancata corrispondenza

Quando Dialogflow non può corrispondere a nessuna delle grammatica grammaticali definite nelle frasi di addestramento degli intent, attiva un intent di riserva. In genere, i intent di riserva indicano all'utente di fornire l'input necessario per l'azione. Puoi fornire le frasi richieste specificandole nell'area Risposta di un intent di riserva oppure puoi utilizzare un webhook per fornire risposte.

Quando la risposta di un utente non corrisponde alle frasi di addestramento dell'azione, l'Assistente Google tenta di gestire l'input. Questo comportamento permette agli utenti di modificare le azioni nel corso di una conversazione. Ad esempio, un utente chiede "Quali film sono in programmazione questa settimana?" e poi modifica il contesto durante la conversazione: "Che tempo farà domani?". In questo esempio, perché "Che tempo farà domani?" non è una risposta valida alla conversazione attivata dal messaggio iniziale, l'assistente tenta automaticamente di gestire la corrispondenza e di spostare l'utente in una conversazione appropriata.

Se l'assistente non riesce a trovare un'azione appropriata corrispondente all'input dell'utente, quest'ultimo torna nel contesto dell'azione.

Poiché l'assistente potrebbe interrompere la tua azione per rispondere a uno scenario senza corrispondenza valido, non utilizzare intent di riserva come mezzo per rispondere alle query degli utenti. Devi utilizzare gli intent di riserva solo per chiedere l'input valido dell'utente.

Per creare un intent di riserva:

  1. Fai clic su Intent nel menu di navigazione di Dialogflow.
  2. Fai clic su ⋮ accanto a Crea intent e seleziona Crea intent di riserva. In alternativa, fai clic su Intent di riserva predefinito per modificarlo.
  3. Specifica le frasi di ripetizione per far parlare gli utenti. Queste frasi devono essere conversazionali e essere il più utili possibile nel contesto attuale dell'utente.

    Per farlo senza evasione: specifica le frasi nell'area Risposta dell'intent. Dialogflow sceglie le frasi in modo casuale dall'elenco per comunicare agli utenti finché non viene attivato un intent più specifico.

    Per farlo con l'evasione ordini:

    1. Attiva l'opzione Attiva la chiamata webhook per questo intent nella sezione Fulfillment dell'intent.
    2. Nella logica di fulfillment, gestisci l'intent di riserva come qualsiasi altro intento, come descritto nella sezione Creare funzioni per gestire le richieste.

    Ad esempio, la seguente funzione utilizza l'oggetto conv.data (un payload di dati arbitrario che puoi utilizzare per mantenere lo stato) dalla libreria client Node.js per archiviare un contatore che monitora il numero di volte in cui viene attivato un intent di riserva. Se viene attivato più di una volta, l'azione si chiude. Sebbene non sia visibile nel codice, devi fare in modo che altri intent reimpostino questo contatore su 0 quando viene attivato un intent non di riserva. (vedi l'esempio di Genie numero per i dettagli su come implementarlo).

    Node.js
    app.intent('Default Fallback Intent', (conv) => {
     conv.data.fallbackCount++;
     // Provide two prompts before ending game
     if (conv.data.fallbackCount === 1) {
       conv.contexts.set(DONE_YES_NO_CONTEXT, 5);
       conv.ask('Are you done playing Number Genie?');
     } else {
       conv.close(`Since I'm still having trouble, so I'll stop here. ` +
         `Let's play again soon.`);
     }
    });
    Java
    @ForIntent("Default Fallback Intent")
    public ActionResponse defaultFallback(ActionRequest request) {
      final String DONE_YES_NO_CONTEXT = "done_yes_no_context";
      ResponseBuilder rb = getResponseBuilder(request);
    
      int fallbackCount =
          request.getConversationData().get("fallbackCount") == null
              ? 0
              : (Integer) request.getConversationData().get("fallbackCount");
      fallbackCount++;
      request.getConversationData().put("fallbackCount", fallbackCount);
    
      if (fallbackCount == 1) {
        rb.add(new ActionContext(DONE_YES_NO_CONTEXT, 5));
        rb.add("Are you done playing Number Genie?");
      } else {
        rb.add("Since I'm still having trouble, so I'll stop here. Let's play again soon")
            .endConversation();
      }
      return rb.build();
    }

Utilizzo dei contesti

Utilizza i contesti se vuoi che Dialogflow attivi gli intent di riserva solo in determinate situazioni. Questo è utile se vuoi avere intent di riserva diversi per scenari di mancata corrispondenza diversi.

  • Se non imposti i contesti su un intent di riserva, viene considerato come un'intenzione di riserva globale che Dialogflow attiva quando nessun altro intent ha una corrispondenza. È necessario definirne uno solo se scegli di utilizzarne uno.
  • Se imposti i contesti di input per un intent di riserva, Dialogflow attiva questo intent di riserva quando si verificano le seguenti condizioni:

    • I contesti attuali dell'utente sono un soprainsieme dei contesti definiti nell'intent.
    • Nessun altro intent corrisponde.

    In questo modo puoi utilizzare più intent di riserva con contesti di input diversi per personalizzare la mancata corrispondenza a seconda degli scenari specifici.

  • Se imposti un contesto di output per un intent di riserva, mantieni lo stesso contesto dopo che l'intent di riserva è stato attivato ed elaborato.

Per ulteriori informazioni, vedi Contesto di Dialogflow.

Registrazione senza input

Consulta la pagina Suggerimenti per informazioni dettagliate su come gestire i casi in cui l'utente non fornisce ulteriori input su un dispositivo vocale come Google Home che richiede un'interazione continua.