Fulfillment build (Dialogflow)

Fulfillment definisce l'interfaccia conversazionale che consente all'azione di ottenere l'input dell'utente e la logica per elaborare l'input e infine soddisfare l'azione.

Definisci la conversazione

Ora che hai definito le azioni, puoi creare la conversazione corrispondente per quelle Azioni. Per farlo devi creando intent Dialogflow che definiscono la grammatica o le esigenze degli utenti attivare l'intent e il fulfillment corrispondente per elaborare l'intent quando viene attivato.

Puoi creare tutti gli intent che vuoi per definire l'intera conversazione grammaticale.

Crea intent

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

  • Nome intent è il nome dell'intent visualizzato nell'IDE.
  • I contesti ti consentono di limitare l'attivazione dell'intenzione a casi specifici. Leggi la documentazione di Dialogflow su Contesti per ulteriori informazioni.
  • Gli eventi attivano gli intent senza che gli utenti debbano dire nulla. Uno. di esempio è l'evento GOOGLE_ASSISTANT_WELCOME, che consente alla all'assistente per richiamare l'azione. Questo evento viene utilizzato per l'evento Azione predefinita. Fai riferimento alla nostra documentazione per ulteriori informazioni sugli intent helper integrati.
  • Le frasi di addestramento definiscono ciò che gli utenti devono dire (la grammatica) per attivare l'intento. Digita qui (5-10) alcune frasi che indicano cosa possono dire gli utenti per attivare l'intento. Dialogflow gestisce automaticamente le variazioni naturali dell'esempio frasi che fornisci.
  • Azione e parametri definisce quali dati trasferire al fulfillment, se Il completamento è abilitato per questo intent. Sono inclusi i dati analizzati l'input utente e il nome che puoi utilizzare nel fulfillment per rilevare quali che è stato attivato. Utilizzerai questo nome in seguito per mappare il tuo intent al suo dalla logica di fulfillment corrispondente. Consulta Azioni e parametri nella documentazione di Dialogflow per ulteriori informazioni sulla definizione delle azioni.

  • Responses è il generatore di risposte di Dialogflow, in cui puoi definire a questo intent direttamente in Dialogflow, senza chiamare fulfillment. Questa funzionalità è utile per le risposte statiche che non richiedono fulfillment. Potresti utilizzarlo per fornire semplici messaggi di benvenuto o di addio. Tuttavia, probabilmente utilizzerai la distribuzione per rispondere agli utenti per la maggior parte intent.

  • Fulfillment specifica se vuoi chiamare o meno l'evasione degli ordini. quando questo intent viene attivato. Molto probabilmente attiverai questa opzione per la maggior parte nell'agente Dialogflow. Per vedere questo elemento nell'intent, devi Aver attivato il fulfillment per l'agente nel menu Fulfillment.

Creazione di risposte in Dialogflow

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

Nell'area Risposte, fornisci la risposta testuale a cui vuoi tornare utenti. Le risposte di testo predefinite sono semplici risposte testuali di sintesi vocale che possono funzionare di più integrazioni Dialogflow. Le risposte per l'Assistente Google sono descritte nella pagina Risposte.

Creazione di risposte di completamento

Il codice di fulfillment è ospitato nella logica di fulfillment webhook per un'Azione. Ad esempio, nell'esempio di Silly Name Maker, questa logica si trova in index.js per la funzione Cloud Functions for Firebase.

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

Ti consigliamo vivamente di utilizzare la libreria client Node.js per elaborare le richieste e restituire le risposte. Di seguito è riportata la procedura generale per utilizzare la libreria client:

  1. Inizializza l'oggetto Dialogflow. Questo oggetto gestisce automaticamente l'ascolto delle richieste e le analizza in modo in modo che tu possa elaborarli per l'evasione dell'ordine.
  2. Creare funzioni per gestire le richieste. Queste funzioni elaborano l'input dell'utente e altri componenti dell'intento. creare la risposta per tornare a Dialogflow.

Inizializza l'oggetto Dialogflow

Il seguente codice crea un'istanza di Dialogflow ed esegue un boilerplate Configurazione di 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 intento, riceverai una richiesta da Dialogflow: che gestisci con una funzione nel tuo fulfillment. In questo eseguirai le seguenti operazioni:

  1. Esegui tutte le logiche richieste per elaborare l'input dell'utente.
  2. Crea le tue risposte per rispondere agli intenti attivati. Tieni conto che gli utenti usano per creare risposte appropriate. Consulta superficie per maggiori informazioni su come adattare le risposte per piattaforme diverse.
  3. Chiama la funzione ask() con la tua risposta.
di Gemini Advanced.

Il seguente codice mostra come creare due risposte di sintesi vocale che gestiscono una intent di chiamata (input.welcome) e intent di dialogo (input.number) che dà il benvenuto all'utente nell'azione e fa eco a un numero per cui l'utente ha parlato 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 Input Number personalizzato per intent, che accompagna il codice riportato sopra, utilizza il parametro @sys.number per estrarre un numero dalle frasi dell'utente. L'intento quindi invia il parametro num, che contiene il numero dell'utente, alla funzione nel fulfillment.

Anziché avere gestori individuali per ogni intent, puoi in alternativa aggiungere una funzione di riserva. All'interno della funzione di riserva, controlla quale intent ha attivato e fai la cosa appropriata di conseguenza.

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();
}

Ripetizione senza corrispondenza

Quando Dialogflow non può corrispondere a nessuna delle grammatica di input definite nei tuoi intent Frasi di addestramento, attivano un intent di riserva. In genere per intent di riserva chiedere all'utente di fornire l'input necessario per l'Azione. Puoi fornire frasi di ripetizione specificandole nell'area Response di una l'intent di riserva oppure puoi utilizzare un webhook per fornire le risposte.

Quando la risposta di un utente non corrisponde alle frasi di addestramento dell'Azione, Google L'assistente tenta di gestire l'input. Questo comportamento consente agli utenti di cambiare Azioni durante una conversazione. Ad esempio, un utente chiede: "Che film ci sono questa settimana?" e poi cambia contesto durante la conversazione: "Che cos'è il meteo domani?" In questo esempio, perché "Com'è il tempo domani?" non è una risposta valida alla conversazione attivata dal prompt iniziale, L'assistente tenta automaticamente di gestire la corrispondenza e sposta l'utente in un conversazione appropriata.

Se l'assistente non riesce a trovare un'azione appropriata che corrisponde all'input dell'utente, l'utente viene restituito al contesto dell'azione.

Perché l'assistente potrebbe interrompere l'Azione per rispondere a una mancata corrispondenza valida non utilizzare gli intent di riserva come modo per rispondere alle query degli utenti. Tu Deve usare solo intent di riserva per richiedere all'utente un input valido.

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 un intent di riserva. (In alternativa, fai clic sul pulsante Riserva predefinito l'intenzione di modificarlo.
  3. Specifica le frasi di ripetizione da rispondere agli utenti. Queste frasi dovrebbero essere conversazionali ed essere il più utili possibile in base al contesto attuale dell'utente.

    Per eseguire questa operazione senza completamento: specifica le frasi nell'area Risposta dell'intento. Dialogflow sceglie casualmente le frasi da pronunciare in questo elenco agli utenti finché non viene attivato un intento più specifico.

    Per eseguire questa operazione con il fulfillment:

    1. Attiva/disattiva Abilita chiamata webhook per questo intent nella sezione Fulfillment dell'intent.
    2. Nella logica di fulfillment, gestisci l'intent di fallback come qualsiasi altro come descritto in Creare funzioni per gestire le richieste .

    Ad esempio, la seguente funzione utilizza l'oggetto conv.data (un arbitrario di dati che puoi usare per mantenere lo stato) libreria client Node.js per archiviare un contatore che tiene traccia di quante volte viene attivato un intent di riserva. Se si tratta di attivata più di una volta, l'azione viene chiusa. Sebbene non sia visibile nel del codice, dovresti impostare altri intent per reimpostare il contatore su 0. quando si attiva un intent non di riserva. (Vedi Esempio di Number Genie per informazioni dettagliate 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 intent di fallback solo in determinati in situazioni diverse. Ciò è utile se vuoi avere intent di riserva diversi diversi scenari di mancata corrispondenza.

  • Se non imposti contesti su un intent di riserva, viene considerato intent di fallback globale che Dialogflow attiva quando non viene eseguito nessun altro intent corrispondente. Devi definire solo uno di questi elementi se scegli di usarne uno.
  • Se imposti contesti di input su un intent di fallback, Dialogflow attiva questo l'intent di riserva quando si verificano le seguenti condizioni:

    • I contesti correnti dell'utente sono un soprainsieme di contesti definiti nel l'intento.
    • Nessun altro intent corrisponde.

    Ciò ti consente di utilizzare più intent di fallback con diversi contesti di input per personalizza la ripetizione senza corrispondenza per scenari specifici.

  • Se imposti un contesto di output per un intent di riserva, l'utente rimane nello stesso contesto dopo l'attivazione e l'elaborazione dell'intent di riserva.

Per ulteriori informazioni, consulta la sezione Contesti Dialogflow.

Ripetizione senza input

Per informazioni dettagliate su come fare, consulta la pagina Richieste ripetute. da gestire quando l'utente non fornisce ulteriori input su un dispositivo vocale come Google Home che richiede un'interazione continua.