Actualizaciones diarias (Dialogflow)

Un usuario que se suscribe a las actualizaciones diarias de una Acción en su teléfono

Si tu Acción proporciona valor a los usuarios todos los días, configura las actualizaciones diarias para darles un recordatorio para usarla. Cuando un usuario se suscribe a las actualizaciones diarias de tu Acción, recibe una notificación push que puede presionar para invocar uno de los intents de tu Acción.

La experiencia de los usuarios de estas actualizaciones es la siguiente:

  1. El usuario invoca uno de los intents de tu Acción que hayas configurado como actualización diaria.
  2. El usuario sigue un mensaje para suscribirse a actualizaciones diarias. Este mensaje se proporciona en medio de la conversación o como un chip de sugerencias cuando esta finaliza.
  3. El usuario programa una hora del día en la que desea recibir la actualización diaria y registra la actualización con Asistente de Google.
  4. Todos los días a la hora programada, el usuario recibe una notificación de Asistente en su dispositivo móvil.
  5. Cuando el usuario abre esta notificación, invoca el intent que configuraste como actualización diaria y, luego, interactúa con tu acción.

De forma predeterminada, el mensaje de registro de actualizaciones diarias aparece como un chip de sugerencias cuando el usuario sale de tu acción de forma correcta. También puedes agregar un mensaje de registro en medio de las conversaciones o personalizar las actualizaciones del usuario.

Casos de uso

Las actualizaciones diarias pueden ser una herramienta de participación útil, pero no deben incorporarse en todas las acciones. Ten en cuenta estas sugerencias cuando decidas si quieres agregar suscripciones de actualización diarias a una acción:

  • Asegúrate de que las actualizaciones diarias permitan que el usuario vea información diferente y útil todos los días. Si, cuando presionas una actualización diaria, aparece el mismo mensaje cada vez, es probable que el usuario anule la suscripción después de un par de días.
  • Asegúrate de que el diálogo tenga sentido para el usuario si salta directamente al intent de tu actualización diaria. El usuario no necesariamente comenzará desde el principio de la conversación, por lo que no se debería esperar que tengan mucho contexto.
  • Muéstrale al usuario el beneficio de la acción antes de solicitarle que se registre para recibir actualizaciones diarias. El usuario debería pensar "Quiero este contenido todos los días" cuando tenga la opción de suscribirse.
  • No abrumes al usuario con sugerencias repetidas para registrarse. Ofrece una suscripción de actualización diaria justo después de mostrarle al usuario a qué se suscribiría y evita repetir la oferta en otros contextos.
  • Mantén la conversación breve después de que se active el intent de actualización. La mayoría de las actualizaciones diarias deben consistir en una sola respuesta y, luego, cerrarse sin requerir la entrada del usuario.

Cómo configurar actualizaciones diarias

Explorar en Dialogflow

Haz clic en Continuar para importar nuestra muestra de actualizaciones diarias en Dialogflow. Luego, sigue los pasos que se indican a continuación para implementar y probar la muestra:

  1. Ingresa un nombre de agente y crea un agente de Dialogflow nuevo para la muestra.
  2. Una vez que el agente termine de importar, haz clic en Ir al agente (Go to agent).
  3. En el menú de navegación principal, ve a Entrega.
  4. Habilita el Editor intercalado y, luego, haz clic en Implementar. El editor contiene el código de muestra.
  5. En el menú de navegación principal, ve a Integraciones y, luego, haz clic en Asistente de Google.
  6. En la ventana modal que aparece, habilita Auto-preview changes y haz clic en Test para abrir el simulador de Actions.
  7. En el simulador, ingresa Talk to my test app para probar la muestra.
Continuar

Si deseas configurar uno de los intents de tu Acción para las actualizaciones diarias, sigue estas instrucciones:

1. Cómo preparar un intent de actualización

Configura uno de los intents de tu Acción como un intent de activación. Este intent permite que se envíe una actualización diaria a los usuarios. Cuando un usuario abre su notificación de actualización diaria, el intent se activa y la conversación continúa desde allí.

Para definir un intent de activación en Dialogflow, haz lo siguiente:

  1. En la consola de Dialogflow, haz clic en Integraciones.
  2. En la sección Asistente de Google, haz clic en Configuración de integración.
  3. En Descubrimiento > Invocación implícita, haz clic en Agregar intent y selecciona el intent de activación si aún no está ahí.
  4. Activa la opción Vista previa automática si aún no está habilitada.
  5. Haz clic en Close.

En el SDK de Actions, define tu intent de actualización como un intent de activación en el paquete de Acciones.

2. Habilitar actualizaciones

Para activar las actualizaciones diarias de tu intent de activación, haz lo siguiente:

  1. En la Consola de Actions, navega hasta Develop > Actions.
  2. Selecciona el intent de activación. Si tu intent no aparece en la lista, asegúrate de que esté configurado como intent de activación y que la integración del Asistente de Dialogflow esté configurada para obtener una vista previa automática de los cambios.
  3. Desplázate hacia abajo hasta la sección Participación de los usuarios y activa ¿Quieres ofrecer actualizaciones diarias a los usuarios?
  4. Ingresa un Título del contenido.
  5. Haz clic en Guardar.

Ya configuraste tu acción a fin de que ofrezca suscripciones de actualización diarias para un intent. Ahora puedes probar las actualizaciones diarias en tu propio dispositivo móvil.

Personalizar el registro de actualizaciones (opcional)

Además del chip de sugerencias y el flujo de registro de actualizaciones diarias que controla Asistente, suscribe a los usuarios a actualizaciones diarias con tu propio diálogo y mensaje de registro.

Para ver un ejemplo completo de una acción que controla las funciones opcionales de actualización diaria, consulta los ejemplos de participación de los usuarios de Actions on Google (Node.js y Java).

Para agregar un mensaje personalizado de registro de actualización diaria a la conversación, sigue estas instrucciones:

1. Agregar mensaje de registro

Agrega un diálogo y un chip de sugerencias a la conversación cuando desees pedirles a los usuarios que se suscriban a las actualizaciones diarias. Ofrece estos mensajes después de que el usuario interactúe con tu intent de actualización para que comprenda el contenido de las actualizaciones diarias.

En el siguiente código de ejemplo, se le solicita a un usuario que se suscriba a las actualizaciones diarias que ofrecen la temperatura más baja esperada cada día:

Node.js
app.intent('Daily Lowest Temperature', (conv, params) => {
  const today = DAYS[new Date().getDay()];
  const lowestTemperature = lowestTemperatures[today];
  conv.ask(`The lowest temperature for today is ${lowestTemperature}`);
  conv.ask('I can send you daily updates with the lowest temperature' +
    ' of the day. Would you like that?');
  conv.ask(new Suggestions('Send daily updates'));
});
Java
@ForIntent("Daily Lowest Temperature")
public ActionResponse dailyLowestTemperature(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  Integer lowestTemperature =
      LOWEST_TEMPERATURES.get(LocalDate.now().getDayOfWeek());
  responseBuilder
      .add("The lowest temperature for today is " +  lowestTemperature + " degrees Fahrenheit.")
      .add("I can send you daily updates with the lowest temperature of " +
          "the day. Would you like that?")
      .addSuggestions(new String[] {
          "Send daily updates"
      });
  return responseBuilder.build();
}
JSON de Dialogflow

Ten en cuenta que el siguiente JSON describe una respuesta de webhook.

{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit"
            }
          },
          {
            "simpleResponse": {
              "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?"
            }
          }
        ],
        "suggestions": [
          {
            "title": "Send daily updates"
          }
        ]
      }
    }
  }
}
JSON del SDK de Actions

Ten en cuenta que el siguiente JSON describe una respuesta de webhook.

{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.TEXT"
        }
      ],
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "The lowest temperature for today is 75 degrees Fahrenheit"
              }
            },
            {
              "simpleResponse": {
                "textToSpeech": "I can send you daily updates with the lowest temperature of the day. Would you like that?"
              }
            }
          ],
          "suggestions": [
            {
              "title": "Send daily updates"
            }
          ]
        }
      }
    }
  ]
}

2. Cómo controlar el registro de actualizaciones

Configura un intent nuevo que se active cuando el usuario siga tu mensaje de registro. En la entrega de este nuevo intent, activa el intent integrado actions_intent_CONFIGURE_UPDATES con los siguientes parámetros:

  • intent: Establece el intent de actualización que configuraste.
  • frequency: Se establece como "DAILY".

Con el siguiente código, se registran actualizaciones diarias para el intent "Temperatura más baja diaria":

Dialogflow para Node.js
app.intent('Subscribe to Daily Updates', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'Daily Lowest Temperature',
    frequency: 'DAILY',
  }));
});
SDK de Actions para Node.js
conv.ask(new RegisterUpdate({
  intent: 'Daily Lowest Temperature',
  frequency: 'DAILY',
}));
Dialogflow Java
@ForIntent("Subscribe to Daily Updates")
public ActionResponse subscribeToDailyUpdates(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  return responseBuilder.add(new RegisterUpdate()
      .setIntent("Daily Lowest Temperature")
      .setFrequency("DAILY"))
      .build();
}
SDK de Actions SDK para Java
ResponseBuilder responseBuilder = getResponseBuilder(request);
return responseBuilder.add(new RegisterUpdate()
    .setIntent("Daily Lowest Temperature")
    .setFrequency("DAILY"))
    .build();
JSON de Dialogflow
{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "systemIntent": {
        "intent": "actions.intent.REGISTER_UPDATE",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec",
          "intent": "Daily Lowest Temperature",
          "triggerContext": {
            "timeContext": {
              "frequency": "DAILY"
            }
          }
        }
      }
    }
  }
}
JSON del SDK de Actions
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "possibleIntents": [
        {
          "intent": "actions.intent.REGISTER_UPDATE",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec",
            "intent": "Daily Lowest Temperature",
            "triggerContext": {
              "timeContext": {
                "frequency": "DAILY"
              }
            }
          }
        }
      ]
    }
  ]
}

3. Controla el resultado

El Asistente se hace cargo de la conversación y guía al usuario con el resto de la configuración de las actualizaciones diarias. Cuando se completa el registro, Asistente activa un intent con un parámetro que indica si el registro se realizó correctamente o no.

Las instrucciones para este paso son diferentes según si usas Dialogflow o el SDK de Actions para el desarrollo.

Dialogflow

Sigue estos pasos para crear un intent que controle el resultado del registro:

  1. En la consola de Dialogflow, crea un intent nuevo.
  2. Agrega el evento actions_intent_REGISTER_UPDATE.
  3. Activa la entrega de webhook para el intent.
  4. Haz clic en Guardar.
En tu entrega para el intent, verifica el parámetro registered del resultado y reorienta la conversación según corresponda.
Dialogflow para Node.js
app.intent('Confirm Daily Updates Subscription', (conv, params, registered) => {
  if (registered && registered.status === 'OK') {
    conv.close(`Ok, I'll start giving you daily updates.`);
  } else {
    conv.close(`Ok, I won't give you daily updates.`);
  }
});
Dialogflow Java
@ForIntent("Confirm Daily Updates Subscription")
public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  if (request.isUpdateRegistered()) {
    responseBuilder.add("Ok, I'll start giving you daily updates.");
  } else {
    responseBuilder.add("Ok, I won't give you daily updates.");
  }
  return responseBuilder.endConversation().build();
}
JSON de Dialogflow
{
  "payload": {
    "google": {
      "expectUserResponse": false,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "Ok, I'll start giving you daily updates."
            }
          }
        ]
      }
    }
  }
}
SDK de Actions

En tu código de entrega, agrega el control del intent integrado actions.intent.REGISTER.UPDATE. Verifica el parámetro registered para ver el resultado y gira la conversación según corresponda.

SDK de Actions para Node.js
app.intent('actions.intent.REGISTER_UPDATE', (conv, params, registered) => {
  if (registered && registered.status === 'OK') {
    conv.close(`Ok, I'll start giving you daily updates.`);
  } else {
    conv.close(`Ok, I won't give you daily updates.`);
  }
});
SDK de Actions SDK para Java
@ForIntent("actions.intent.REGISTER_UPDATE")
public ActionResponse confirmDailyUpdatesSubscription(ActionRequest request) {
  ResponseBuilder responseBuilder = getResponseBuilder(request);
  if (request.isUpdateRegistered()) {
    responseBuilder.add("Ok, I'll start giving you daily updates.");
  } else {
    responseBuilder.add("Ok, I won't give you daily updates.");
  }
  return responseBuilder.endConversation().build();
}
JSON del SDK de Actions
{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "simpleResponse": {
            "textToSpeech": "Ok, I'll start giving you daily updates."
          }
        }
      ]
    }
  }
}

Personalizar las actualizaciones (opcional)

Para personalizar tu intent de actualización, agrega parámetros personalizados cuando los usuarios registren actualizaciones diarias. Cuando entregues el intent de actualización, haz referencia a estos parámetros para personalizar la actualización diaria de ese usuario.

Las instrucciones para esta función son diferentes según si usas Dialogflow o el SDK de Actions para el desarrollo.

Dialogflow

Define una entidad de Dialogflow para controlar los parámetros personalizados de la actualización y, luego, transfiere el valor del parámetro como argumento de tu intent de actualización. Para configurar actualizaciones personalizadas en Dialogflow, sigue estos pasos:

  1. En la consola de Dialogflow, crea una entidad nueva.
  2. Agrega algunas entradas y sinónimos que sean relevantes para tu parámetro.
  3. Haz clic en Guardar y abre tu intent de actualización.
  4. En la sección Acciones y parámetros, configura actions.intent.CONFIGURE_UPDATES como el evento. En la misma sección, agrega un parámetro con el mismo tipo que la entidad nueva.
  5. Abre el intent de "actualización de registro" que controla el intent integrado CONFIGURE_UPDATES.
  6. En la sección Acciones y parámetros, agregue un parámetro obligatorio y establezca su tipo como la entidad creada anteriormente.
  7. Actualiza el código de entrega de tu intent de registro para incluir un objeto arguments con el siguiente contenido:
    • name: Es el nombre del parámetro como se configuró en Dialogflow.
    • textValue: Es el valor de tu parámetro.

El siguiente código lee el valor del parámetro y lo usa en la solicitud de actualización del registro:

Dialogflow para Node.js
app.intent('setup_update', (conv) => {
  conv.ask(new RegisterUpdate({
    intent: 'update_of_the_day',
    arguments: [
      {
        name: 'category',
        textValue: 'Daily_lowest_temperature',
      },
    ],
    frequency: 'DAILY',
  }));
});
Dialogflow Java
@ForIntent("setup_update")
public ActionResponse setupUpdate2(ActionRequest request) {
  List<Argument> args =
      Arrays.asList(
          new Argument()
              .setName("category")
              .setTextValue(request.getParameter("category").toString()));
  return getResponseBuilder(request)
      .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY"))
      .build();
}
JSON de Dialogflow
{
  "payload": {
    "google": {
      "expectUserResponse": true,
      "richResponse": {
        "items": [
          {
            "simpleResponse": {
              "textToSpeech": "PLACEHOLDER"
            }
          }
        ]
      },
      "userStorage": "{\"data\":{}}",
      "systemIntent": {
        "intent": "actions.intent.REGISTER_UPDATE",
        "data": {
          "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec",
          "intent": "update_of_the_day",
          "arguments": [
            {
              "name": "category",
              "textValue": "Daily_lowest_temperature"
            }
          ],
          "triggerContext": {
            "timeContext": {
              "frequency": "DAILY"
            }
          }
        }
      }
    }
  },
  "outputContexts": [
    {
      "name": "/contexts/_actions_on_google",
      "lifespanCount": 99,
      "parameters": {
        "data": "{}"
      }
    }
  ]
}
SDK de Actions

Solicita información adicional al usuario en la entrega de tu intent y, luego, entrega la información como argumento de tu intent de actualización. Para configurar actualizaciones personalizadas en el SDK de Actions, sigue estos pasos:

  1. Solicita al usuario la información que deseas usar para la personalización.
  2. En tu código de entrega para tu intent de "actualización de registro" que controla la CONFIGURE UPDATES, incluye un objeto arguments con el siguiente contenido:
    • name: Es un nombre para tu argumento.
    • textValue: Es la información del usuario, que se pasará como argumento.

El siguiente código envía un argumento con la solicitud de actualización del registro:

SDK de Actions para Node.js
app.intent('actions.intent.TEXT', (conv) => {
  if (conv.input.raw === 'Send daily') {
    conv.ask(new RegisterUpdate({
      intent: 'update_of_the_day',
      arguments: [
        {
          name: 'category',
          textValue: 'Daily_lowest_temperature',
        },
      ],
      frequency: 'DAILY',
    }));
  }
});
SDK de Actions SDK para Java
@ForIntent("actions.intent.CONFIGURE_UPDATES")
public ActionResponse configureUpdatesActionsSdk(ActionRequest request) {
  List<Argument> args =
      Arrays.asList(
          new Argument()
              .setName("category")
              .setTextValue(request.getParameter("category").toString()));
  return getResponseBuilder(request)
      .add(new RegisterUpdate().setIntent("intent_name").setArguments(args).setFrequency("DAILY"))
      .build();
}

@ForIntent("actions.intent.TEXT")
public ActionResponse text(ActionRequest request) {
  ResponseBuilder rb = getResponseBuilder(request);
  String input = request.getRawInput().getQuery();
  if (input.equals("DAILY_NOTIFICATION_SUGGESTION")) {
    rb.add("For which category do you want to receive daily updates?");
  } else {
    rb.add("Sorry, I didn't get that. Please try again later").endConversation();
  }
  return rb.build();
}
JSON del SDK de Actions
{
  "expectUserResponse": true,
  "expectedInputs": [
    {
      "inputPrompt": {
        "richInitialPrompt": {
          "items": [
            {
              "simpleResponse": {
                "textToSpeech": "PLACEHOLDER"
              }
            }
          ]
        }
      },
      "possibleIntents": [
        {
          "intent": "actions.intent.REGISTER_UPDATE",
          "inputValueData": {
            "@type": "type.googleapis.com/google.actions.v2.RegisterUpdateValueSpec",
            "intent": "update_of_the_day",
            "arguments": [
              {
                "name": "category",
                "textValue": "Daily_lowest_temperature"
              }
            ],
            "triggerContext": {
              "timeContext": {
                "frequency": "DAILY"
              }
            }
          }
        }
      ]
    }
  ],
  "conversationToken": "{\"data\":{}}",
  "userStorage": "{\"data\":{}}"
}

Cuando el usuario invoca tu actualización diaria, tu intent de actualización ahora incluye argumentos que contienen los valores proporcionados por el usuario durante el registro. Usa estos valores para personalizar la actualización de cada usuario.

Cómo probar las actualizaciones diarias

Prueba las actualizaciones diarias en un dispositivo móvil con Asistente de Google y la misma Cuenta de Google que usaste para crear la acción. Invoca tu acción y suscríbete a las actualizaciones diarias; luego, consulta las notificaciones de tu dispositivo cerca de la hora de actualización.