Las notificaciones permiten que tu integración de Cloud-to-cloud use Google Assistant para comunicarse con los usuarios sobre eventos o cambios importantes relacionados con el dispositivo. Puedes implementar notificaciones para alertar a los usuarios sobre eventos oportunos del dispositivo, por ejemplo, cuando alguien está en la puerta, o para informar sobre un cambio de estado solicitado del dispositivo, como cuando el cerrojo de una puerta se trabó o se destrabó correctamente.
Tu integración de Cloud-to-cloud puede enviar los siguientes tipos de notificaciones a los usuarios:
Notificaciones proactivas: Alerta al usuario sobre un evento del dispositivo smart home sin que el usuario haya realizado solicitudes previas a sus dispositivos, como el timbre de la puerta.
Respuestas de seguimiento: Es una confirmación de que una solicitud de comando del dispositivo se realizó correctamente o falló, por ejemplo, cuando se bloquea una puerta. Usa estas alertas para los comandos de dispositivos que tardan en completarse. Las respuestas de seguimiento solo se admiten cuando las solicitudes de comandos del dispositivo se envían desde bocinas y pantallas inteligentes.
Assistant proporciona estas notificaciones a los usuarios como anuncios en bocinas inteligentes y pantallas inteligentes. Las notificaciones proactivas están desactivadas de forma predeterminada. Los usuarios pueden activar o desactivar todas las notificaciones proactivas desde la Google Home app (GHA).
Eventos que activan notificaciones
Cuando se producen eventos de dispositivo, tu entrega envía una solicitud de notificación a Google. Los atributos de dispositivo que admite tu integración de Cloud-to-cloud determinan qué tipos de eventos de notificación están disponibles y los datos que puedes incluir en esas notificaciones.
Los siguientes rasgos admiten notificaciones proactivas:
| Rasgo | Eventos |
|---|---|
| ObjectDetection | Objetos que detecta el dispositivo, como cuando se detecta un rostro conocido en la puerta Por ejemplo: "Alice y Bob están en la puerta principal". |
| RunCycle | El dispositivo completa un ciclo. Por ejemplo: "Se completó el ciclo de la lavadora". |
| SensorState | El dispositivo detecta un estado de sensor compatible. Por ejemplo: "El detector de humo detecta humo". |
Los siguientes rasgos admiten respuestas de seguimiento:
| Rasgo | Eventos |
|---|---|
| LockUnlock | Es el estado de finalización y el cambio de estado después de la ejecución del comando del dispositivo action.devices.commands.LockUnlock. Por
ejemplo: "Se trabó la puerta principal" o "La puerta principal está
atascada".
|
| NetworkControl | Es el estado de finalización y el cambio de estado después de la ejecución del comando de dispositivo action.devices.commands.TestNetworkSpeed. Por ejemplo: "Finalizó la prueba de velocidad de red. La velocidad de descarga en
el router de la oficina es actualmente de 80.2 Kbps, y la velocidad de carga es de 9.3
Kbps".
|
| OpenClose | Es el estado de finalización y el cambio de estado después de la ejecución del comando de dispositivo action.devices.commands.OpenClose. Por ejemplo: "Se abrió la puerta principal" o "No se pudo abrir la puerta principal".
|
Todos los tipos de dispositivos admiten notificaciones para los rasgos aplicables.
Cómo compilar notificaciones para tu integración de nube a nube
Agrega notificaciones a tu integración de Cloud-to-cloud en estas etapas:
- Indica a Google si las notificaciones están habilitadas desde tu
app para dispositivos de smart home. Si los usuarios activan o desactivan las notificaciones
en tu app, envía una solicitud
SYNCpara informar a Google sobre el cambio de dispositivo. - Cuando se produce un evento de dispositivo o un cambio de estado pertinente que activa una
notificación, envía una solicitud de notificación llamando a la
API de Report State
reportStateAndNotification. Si el estado del dispositivo cambió, puedes enviar una carga útil de estado y de notificación juntas en tu llamada de Report State y notificación.
En las siguientes secciones, se describen estos pasos con más detalle.
Indica si las notificaciones están habilitadas en tu app
Los usuarios pueden elegir si quieren recibir notificaciones proactivas habilitando esta función en GHA. En la app para tu dispositivo smart home, también puedes agregar de forma opcional la capacidad de que los usuarios activen o desactiven de forma explícita las notificaciones del dispositivo, por ejemplo, desde la configuración de la app.
Indica a Google que las notificaciones están habilitadas para tu dispositivo realizando una llamada de solicitud de SYNC para actualizar los datos del dispositivo. Debes enviar una solicitud SYNC como esta cada vez que los usuarios cambien este parámetro de configuración en tu app.
En tu respuesta SYNC, envía una de estas actualizaciones:
- Si el usuario activó explícitamente las notificaciones en la app para dispositivos o si no proporcionas una opción de activar y desactivar, establece la propiedad
devices.notificationSupportedByAgententrue. - Si el usuario desactivó explícitamente las notificaciones en la app para dispositivos, establece la propiedad
devices.notificationSupportedByAgentenfalse.
En el siguiente fragmento, se muestra un ejemplo de cómo configurar tu respuesta de SYNC:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
Envía solicitudes de notificación a Google
Para activar las notificaciones en el Assistant, tu entrega envía una carga útil de notificación a la Google Home Graph a través de una llamada a la API de Report State y notificaciones.
Habilita la API de Google HomeGraph
-
En la Google Cloud Console, ve a la página de la API de HomeGraph.
Ir a la página de la API de HomeGraph - Selecciona el proyecto que coincida con tu ID del proyecto de smart home.
- Haz clic en HABILITAR.
Crea una clave de cuenta de servicio
Sigue estas instrucciones para generar una clave de cuenta de servicio desde la Google Cloud Console:
-
En la Google Cloud Console, ve a la página Cuentas de servicio.
Ir a la página Cuentas de servicio.Es posible que debas seleccionar un proyecto antes de que se te dirija a la página Cuentas de servicio.
Haz clic en Crear cuenta de servicio.
Escribe un nombre en el campo Nombre de cuenta de servicio.
En el campo ID de cuenta de servicio, ingresa un ID.
Opcional: en el campo Descripción de la cuenta de servicio, escribe una descripción.
Haz clic en Crear y continuar.
En el menú desplegable Rol, selecciona Cuentas de servicio > Creador de tokens de identidad de OpenID Connect para cuentas de servicio.
Haz clic en Continuar.
Haz clic en Listo.
Selecciona la cuenta de servicio que acabas de crear de la lista de cuentas de servicio y elige Administrar claves en el menú Acciones.
Selecciona Agregar clave > Crear clave nueva.
En Tipo de clave, selecciona la opción JSON.
Haz clic en Crear. Se descargará en tu computadora un archivo JSON que contiene tu clave.
Envía la notificación
Realiza la llamada de solicitud de notificación con la API de devices.reportStateAndNotification.
Tu solicitud JSON debe incluir un eventId, que es un ID único que genera
tu plataforma para el evento que activa la notificación. El eventId debe
ser un ID aleatorio que sea diferente cada vez que envíes una solicitud de notificación.
En el objeto notifications que pasas en tu llamada a la API, incluye un valor priority que defina cómo se debe presentar la notificación. Tu objeto notifications puede incluir diferentes campos según el rasgo del dispositivo.
Sigue una de estas rutas para establecer la carga útil y llamar a la API:
Envía una carga útil de notificación proactiva
Para llamar a la API, selecciona una opción de una de estas pestañas:
HTTP
La API de Home Graph proporciona un extremo HTTP
- Usa el archivo JSON de la cuenta de servicio que descargaste para crear un token web JSON (JWT). Para obtener más información, consulta Autenticación con una cuenta de servicio.
- Obtén un token de acceso de OAuth 2.0 con el
permiso
https://www.googleapis.com/auth/homegraphusando oauth2l: - Crea la solicitud JSON con el
agentUserId. A continuación, se incluye un ejemplo de solicitud JSON para Report State y Notification: - Combina el JSON de Report State y de notificación, y el token en tu solicitud HTTP POST
al extremo de Google Home Graph. Este es un ejemplo de cómo
realizar la solicitud en la línea de comandos con
curl, como prueba:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "ObjectDetection": { "priority": 0, "detectionTimestamp": 1534875126750, "objects": { "named": [ "Alice" ], "unclassified": 2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
La API de Home Graph proporciona un extremo de gRPC
- Obtén la definición del servicio de búferes de protocolo para la API de Home Graph.
- Sigue la documentación para desarrolladores de gRPC para generar stubs de cliente para uno de los lenguajes admitidos .
- Llama al método ReportStateAndNotification .
Node.js
El cliente de Node.js para las APIs de Google proporciona vinculaciones para la API de Home Graph.
- Inicializa el servicio
google.homegraphcon las credenciales predeterminadas de la aplicación. - Llama al método
reportStateAndNotificationcon el ReportStateAndNotificationRequest. Muestra unPromisecon ReportStateAndNotificationResponse.
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { ObjectDetection: { priority: 0, detectionTimestamp: 1534875126750, objects: { named: ['Alice'], unclassified: 2 } } } } } } } });
Java
La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.
- Inicializa
HomeGraphApiServicecon las credenciales predeterminadas de la aplicación. - Llama al método
reportStateAndNotificationconReportStateAndNotificationRequest. Devuelve unReportStateAndNotificationResponse.
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Build device notification payload. Map<?, ?> notifications = Map.of( "ObjectDetection", Map.of( "priority", 0, "detectionTimestamp", 1534875126, "objects", Map.of("named", List.of("Alice"), "unclassifed", 2))); // Send notification. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", notifications)))); homegraphService.devices().reportStateAndNotification(request);
Envía una carga útil de respuesta de seguimiento
La carga útil de una respuesta de seguimiento contiene el estado de la solicitud, los códigos de error de las fallas de eventos, si corresponde, y el followUpToken válido, proporcionado durante la solicitud de intent EXECUTE. El followUpToken se debe usar
en un plazo de cinco minutos para que siga siendo válido y para asociar correctamente la respuesta
con la solicitud original.
En el siguiente fragmento, se muestra un ejemplo de carga útil de solicitud EXECUTE con un
campo followUpToken.
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123",
}],
"execution": [{
"command": "action.devices.commands.TestNetworkSpeed",
"params": {
"testDownloadSpeed": true,
"testUploadSpeed": false,
"followUpToken": "PLACEHOLDER"
}
}]
}]
}
}]
};
Google usa el followUpToken para mostrar la notificación solo en el dispositivo con el que el usuario interactuaba originalmente y no transmitirla a todos sus dispositivos.
Para llamar a la API, selecciona una opción de una de estas pestañas:
HTTP
La API de Home Graph proporciona un extremo HTTP
- Usa el archivo JSON de la cuenta de servicio que descargaste para crear un token web JSON (JWT). Para obtener más información, consulta Autentícate con una cuenta de servicio.
- Obtén un token de acceso de OAuth 2.0 con el
permiso
https://www.googleapis.com/auth/homegraphusando oauth2l: - Crea la solicitud JSON con el
agentUserId. Este es un ejemplo de solicitud JSON para Report State y Notification: - Combina el JSON de Report State y de notificación, y el token en tu solicitud HTTP POST
al extremo de Google Home Graph. Este es un ejemplo de cómo
realizar la solicitud en la línea de comandos con
curl, como prueba:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "NetworkControl": { "priority": 0, "followUpResponse": { "status": "SUCCESS", "followUpToken": "PLACEHOLDER", "networkDownloadSpeedMbps": 23.3, "networkUploadSpeedMbps": 10.2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
La API de Home Graph proporciona un extremo de gRPC
- Obtén la definición del servicio de búferes de protocolo para la API de Home Graph.
- Sigue la documentación para desarrolladores de gRPC para generar stubs de cliente para uno de los lenguajes admitidos.
- Llama al método ReportStateAndNotification.
Node.js
El cliente de Node.js para las APIs de Google proporciona vinculaciones para la API de Home Graph.
- Inicializa el servicio
google.homegraphcon las credenciales predeterminadas de la aplicación. - Llama al método
reportStateAndNotificationcon ReportStateAndNotificationRequest. Muestra unPromisecon la ReportStateAndNotificationResponse.
const followUpToken = executionRequest.inputs[0].payload.commands[0].execution[0].params.followUpToken; const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { NetworkControl: { priority: 0, followUpResponse: { status: 'SUCCESS', followUpToken, networkDownloadSpeedMbps: 23.3, networkUploadSpeedMbps: 10.2, } } } } } } } });
Java
La biblioteca cliente de la API de HomeGraph para Java proporciona vinculaciones para la API de Home Graph.
- Inicializa el
HomeGraphApiServicecon las credenciales predeterminadas de la aplicación - Llama al método
reportStateAndNotificationcon elReportStateAndNotificationRequest. Devuelve un objetoReportStateAndNotificationResponse.
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Extract follow-up token. ExecuteRequest.Inputs executeInputs = (Inputs) executeRequest.getInputs()[0]; String followUpToken = (String) executeInputs .getPayload() .getCommands()[0] .getExecution()[0] .getParams() .get("followUpToken"); // Build device follow-up response payload. Map<?, ?> followUpResponse = Map.of( "NetworkControl", Map.of( "priority", 0, "followUpResponse", Map.of( "status", "SUCCESS", "followUpToken", followUpToken, "networkDownloadSpeedMbps", 23.3, "networkUploadSpeedMbps", 10.2))); // Send follow-up response. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", followUpResponse)))); homegraphService.devices().reportStateAndNotification(request);
Logging
Las notificaciones admiten el registro de eventos, como se describe en Cloud Logging para Cloud-to-cloud. Estos registros son útiles para probar y mantener la calidad de las notificaciones en tu Acción.
El siguiente es el esquema de una entrada notificationLog:
| Propiedad | Descripción |
|---|---|
requestId |
Es el ID de la solicitud de notificación. |
structName |
Es el nombre de la estructura de notificación, como "ObjectDetection". |
status |
Indica el estado de la notificación. |
El campo status incluye varios estados que pueden indicar errores en la
carga útil de la notificación. Es posible que algunas de estas solo estén disponibles en las acciones que no se hayan lanzado a producción.
Estos son algunos ejemplos de estados:
| Estado | Descripción |
|---|---|
EVENT_ID_MISSING |
Indica que falta el campo obligatorio eventId.
|
PRIORITY_MISSING |
Indica que falta un campo priority.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
Indica que la propiedad notificationSupportedByAgent del dispositivo que envía la notificación proporcionada en SYNC es falsa.
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
Indica que el usuario no habilitó las notificaciones en el dispositivo de notificación en el GHA. Este estado solo está disponible en las integraciones que no se lanzaron a producción. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
Indica que el usuario no asignó el dispositivo de notificación a una casa o estructura. Este estado solo está disponible en las integraciones que no se lanzaron a producción. |
Además de estos estados generales que se pueden aplicar a todas las notificaciones, el
campo status también puede incluir estados específicos de rasgos cuando corresponda (por
ejemplo, OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING).