Entrega de compilación (Dialogflow)

La entrega define la interfaz conversacional para que obtenga tu acción. las entradas del usuario y la lógica para procesar las entradas y, finalmente, cumplirlas la acción.

Define la conversación

Ahora que has definido las acciones, puedes crear la conversación correspondiente para esas Acciones. Para hacer esto, Crear intents de Dialogflow que definan la gramática o lo que necesiten los usuarios que active el intent y la entrega correspondiente que se procese el intent cuando se activa.

Puedes crear tantos intents como desees para definir la dirección de tu conversación y la gramática.

Crea intents

Haz clic en el signo + del elemento de menú Intents en Dialogflow barra de navegación izquierda. Aparecerá el editor de intents, donde podrás ingresar la siguiente información:

  • El nombre del intent es el nombre del intent que se muestra en el IDE.
  • Los contextos te permiten definir el alcance de la activación del intent a casos específicos. Lee la documentación de Dialogflow sobre contextos. para obtener más información.
  • Los eventos activan intents sin la necesidad de que los usuarios digan nada. Uno de ejemplo es el evento GOOGLE_ASSISTANT_WELCOME, que permite a la API Asistente para invocar tu acción. Este evento se usa para el flujo de Action default. Consulta nuestra documentación para obtener más información sobre los intents auxiliares integrados.
  • Las frases de entrenamiento definen lo que los usuarios deben decir (la gramática) para activar el intent. Escribe algunas frases aquí (entre 5 y 10) de lo que los usuarios pueden decir para activar el intent. Dialogflow controla automáticamente las variaciones naturales del ejemplo las frases que proporcionas.
  • Action and parameters define qué datos se pasarán a la entrega, si esté habilitada la entrega para este intent. Esto incluye datos analizados desde la entrada del usuario y el nombre que puedes usar en tu entrega para detectar qué se activó el intent. Más adelante, usarás este nombre para asignar tu intent a su la lógica de entrega correspondiente. Consulta Acciones y parámetros. en la documentación de Dialogflow para obtener más información sobre cómo definir Actions.

  • Responses es el compilador de respuestas de Dialogflow, donde puedes definir respuesta a este intent directamente en Dialogflow, sin llamar la entrega de datos. Esta función es útil para respuestas estáticas que no requieren la entrega de datos. Puedes usarlo para brindar mensajes simples de bienvenida o despedida. Sin embargo, es probable que uses entregas para responder a los usuarios en la mayoría de los casos .

  • Entrega especifica si deseas llamar a la entrega o no. cuando se activa este intent. Lo más probable es que habilites esta opción para la mayoría de en tu agente de Dialogflow. Para ver este elemento en el intent, debes tener la entrega habilitada para el agente en el menú Entrega

Compila respuestas en Dialogflow

Para algunos intents, es posible que no necesites que tu entrega muestre una respuesta. En estos casos, puedes usar el compilador de respuestas en Dialogflow para crear de respuestas ante incidentes.

En el área Respuestas, proporciona la respuesta textual a la que deseas regresar. usuarios. Las respuestas de texto predeterminadas son respuestas de texto con TTS simples que pueden utilizarse varias integraciones de Dialogflow. Se describen las respuestas para Asistente de Google en la página Respuestas.

Cómo compilar respuestas de entrega

Tu código de entrega se aloja en la lógica de entrega de webhook para una acción. Por ejemplo, en la muestra Silly Name Maker, esta lógica se encuentra en index.js para Cloud Function para Firebase.

Cuando se activa un intent que usa una entrega, recibes una solicitud de Dialogflow, que contiene información sobre el intent Luego, debes responder al a través del procesamiento del intent y la devolución de una respuesta. Esta solicitud y a través del webhook de Dialogflow.

Te recomendamos que uses la biblioteca cliente de Node.js para procesar las solicitudes y devolver respuestas. Este es el proceso general para usar la biblioteca cliente:

  1. Inicializa el objeto de Dialogflow. Este objeto controla automáticamente la escucha de solicitudes y su análisis que puedas procesarlos en tu entrega.
  2. Crea funciones para manejar las solicitudes. Estas funciones procesan la entrada del usuario y otros componentes del intent y compilar la respuesta que se mostrará a Dialogflow.

Inicializa el objeto Dialogflow.

En el siguiente código, se crea una instancia de Dialogflow y se realiza código estándar Configuración de Node.js para 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
    // ...
  }
.

Crea funciones para manejar las solicitudes

Cuando los usuarios pronuncian una frase que activa un intent, recibes una solicitud de Dialogflow que controlas con una función en tu entrega. En este generalmente harás lo siguiente:

  1. Lleva a cabo cualquier lógica necesaria para procesar la entrada del usuario.
  2. Compila respuestas para responder a los intents activados. Ten en cuenta las que tus usuarios usan para construir respuestas adecuadas. Consulta de interfaz de usuario para más información sobre cómo responder a las diferentes plataformas.
  3. Llama a la función ask() con tu respuesta.

El siguiente código muestra cómo crear dos respuestas de TTS que controlan un intent de invocación (input.welcome) y un intent de diálogo (input.number) que Le da la bienvenida al usuario a tu Action y repite un número que el usuario ha hablado. un intent de Dialogflow con el nombre:

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

El número de entrada del intent personalizado, que acompaña al código anterior, usa el elemento @sys.number para extraer un número de las declaraciones del usuario. Luego, el intent envía el parámetro num, que contiene el número del usuario, al en la entrega.

En lugar de tener controladores individuales para cada intent, también puedes agregar una función de resguardo. Dentro de la función de resguardo, verifica qué intent activó y hacer lo correcto en consecuencia.

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

Nueva solicitud sin coincidencias

Cuando Dialogflow no puede coincidir con ninguna de las gramáticas de entrada definidas en tus intents Frases de entrenamiento, activa un intent de resguardo. Por lo general, los intents de resguardo Volver a pedirle al usuario que proporcione la entrada necesaria para tu acción Puedes proporcionar frases con nuevas instrucciones especificándolas en el área Response de una de resguardo, o puedes usar un webhook para proporcionar respuestas.

Cuando la respuesta del usuario no coincide con las frases de entrenamiento de tu acción, Asistente intentará procesar la entrada. Este comportamiento facilita que los usuarios cambien Acciones en medio de una conversación Por ejemplo, un usuario pregunta: "¿Qué películas están jugando esta semana?” y, luego, cambia el contexto en medio de la conversación: "¿Qué es el tiempo mañana?". En este ejemplo, porque "¿Cómo estará el clima mañana?". no sea una respuesta válida a la conversación que se activó con el mensaje inicial, Asistente intenta automáticamente manejar la coincidencia y mover al usuario a un la conversación apropiada.

Si Asistente no encuentra una Acción adecuada que coincida con la entrada del usuario el usuario regresa al contexto de tu Acción.

Porque Asistente puede interrumpir tu Acción para responder a un error de no coincidencia válido no uses intents de resguardo como una forma de cumplir con las consultas de los usuarios. Tú solo se deben usar intents de resguardo para solicitarle al usuario una entrada válida.

Para crear un intent de resguardo, haz lo siguiente:

  1. Haz clic en Intents, en el menú de navegación de Dialogflow.
  2. Haz clic en ⋮ junto a Create Intent y selecciona Crea un intent de resguardo. (De manera alternativa, haz clic en el botón Default Fallback Intent de editarlo).
  3. Especifica frases que se vuelvan a solicitar para que se les diga a los usuarios. Estas frases deben ser coloquial y sea lo más útil posible para el contexto actual del usuario.

    Para hacer esto sin entrega: Especifica frases en el área Respuesta. del intent. Dialogflow elige de forma aleatoria frases de esta lista para hablar a los usuarios hasta que se activa un intent más específico.

    Para hacer esto con entregas:

    1. Activa o desactiva la opción Enable webhook call for this intent (Habilitar llamadas de webhook para este intent) en la sección Fulfillment (Entrega) del intent.
    2. En tu lógica de entrega, controla el intent de resguardo como cualquier otro como se describe en Crea funciones para controlar solicitudes sección.

    Por ejemplo, la siguiente función usa el objeto conv.data (una carga útil de datos arbitraria que puedes usar para mantener el estado) desde el biblioteca cliente de Node.js para almacenar un contador que hace un seguimiento de cuántas veces se activa un intent de resguardo. Si es si se activa más de una vez, se cierra la acción. Si bien no se muestra en el código, debes hacer que otros intents restablezcan este contador a 0 cuando se activa un intent sin resguardo. (Consulta la Muestra de Number Genie para obtener detalles sobre cómo implementar esto).

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

Cómo usar contextos

Usa contextos si quieres que Dialogflow active intents de resguardo solo en ciertos situaciones. Esto es útil si quieres tener diferentes intents de resguardo para diferentes situaciones sin coincidencias.

  • Si no estableces contextos en un intent de resguardo, se considera que intent de resguardo global que Dialogflow activa cuando no hay otro intent coincide. Solo deberías tener definido uno de estos si decides utilizar uno.
  • Si configuras contextos de entrada en un intent de resguardo, Dialogflow activa este intent de resguardo cuando se cumple lo siguiente:

    • Los contextos actuales del usuario son un superconjunto de los contextos definidos en el .
    • No coincide ningún otro intent.

    Esto te permite usar múltiples intents de resguardo con diferentes contextos de entrada para personalizar el mensaje sin coincidencias en situaciones específicas

  • Si estableces un contexto de salida en un intent de resguardo, mantienes al usuario en mismo contexto después de que se activa y procesa el intent de resguardo.

Consulta Contextos de Dialogflow para obtener más información.

Volver a preguntar sin entrada

Consulta la página Reprompts para obtener más información sobre cómo hacerlo. para manejar cuando el usuario no proporciona más entradas en un dispositivo de voz, como un Google Home que requiera interacción continua.