Report State est une fonctionnalité importante qui permet
L'action Home signale de manière proactive le dernier état de la
l'appareil de l'utilisateur vers Google Home Graph au lieu d'attendre
Intent QUERY
.
Report State signale à Google l'état des appareils des utilisateurs
avec le agentUserId
spécifié qui leur est associé (envoyé dans le
SYNC
). Lorsque Google Assistant souhaite effectuer une action
qui nécessite de comprendre l'état actuel d'un appareil, il peut simplement
les informations d'état dans Home Graph à la place
d'émettre un intent QUERY
à différents clouds tiers avant d'émettre
Intent EXECUTE
.
Sans Report State, les lumières de plusieurs fournisseurs dans
dans un salon, la commande Ok Google, éclaire mon salon nécessite
résoudre plusieurs intents QUERY
envoyés à plusieurs clouds,
Il s'agit simplement de rechercher les valeurs actuelles de luminosité en fonction
précédemment signalées. Pour une expérience utilisateur optimale,
Assistant doit avoir l'état actuel d'un appareil.
sans nécessiter d'aller-retour vers l'appareil.
Après le SYNC
initial pour un appareil, la plate-forme envoie un intent QUERY
.
qui rassemble l'état de l'appareil pour renseigner Home Graph.
Ensuite, Home Graph ne stocke que l'état
envoyé avec Report State.
Lorsque vous appelez Report State, assurez-vous de fournir des informations
des données d'état pour une caractéristique donnée. Home Graph met à jour l'état d'une
par caractéristique et écrase toutes les données associées à cette caractéristique lorsqu'une
L'appel Report State a été effectué. Par exemple, si vous souhaitez signaler
de la caractéristique StartStop, la charge utile
doit inclure des valeurs pour isRunning
et isPaused
.
Commencer
Pour implémenter Report State, procédez comme suit:
Activer l'API Google HomeGraph
-
Dans Google Cloud Console, accédez à la page API HomeGraph.
Accéder à la page de l'API HomeGraph - Sélectionnez le projet qui correspond à l'ID de votre projet smart home.
- Cliquez sur ENABLE (ACTIVER).
Créer une clé de compte de service
Suivez ces instructions pour générer une clé de compte de service à partir de Google Cloud Console:
-
Dans Google Cloud Console, accédez à la page Créer une clé de compte de service.
Accéder à la page Créer une clé de compte de service - Dans la liste Compte de service, sélectionnez Nouveau compte de service :
- Dans le champ Nom du compte de service, saisissez un nom.
- Dans le champ ID de compte de service, saisissez un ID.
Dans la liste Rôle, sélectionnez Comptes de service > <ph type="x-smartling-placeholder"></ph> Créateur de jetons du compte de service
Dans le champ Type de clé, sélectionnez l'option JSON.
- Cliquez sur Créer. Un fichier JSON contenant votre clé des téléchargements sur votre ordinateur.
Appeler l'API
Sélectionnez une option dans les onglets ci-dessous:
HTTP
Le Home Graph fournit un point de terminaison HTTP
- Créer un fichier JSON Web à l'aide du fichier JSON du compte de service téléchargé Jeton (JWT). Pour en savoir plus, consultez <ph type="x-smartling-placeholder"></ph> S'authentifier à l'aide d'un compte de service
- Obtenez un jeton d'accès OAuth 2.0 à l'aide du
https://www.googleapis.com/auth/homegraph
habilitation utilisant oauth2l: - Créez la requête JSON avec le
agentUserId
. Voici un exemple de requête JSON pour l'état du rapport et la notification: - Combiner l'état du rapport et le JSON de notification et le jeton dans votre requête HTTP POST
au point de terminaison Google Home Graph. Voici un exemple
de la façon dont
pour effectuer la requête dans la ligne de commande en utilisant
curl
, comme suit : un test:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "requestId": "123ABC", "agentUserId": "user-123", "payload": { "devices": { "states": { "light-123": { "on": true } } } } }
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
Home Graph fournit un point de terminaison gRPC.
- Obtenez la définition du service Protocol Buffers pour l'API Home Graph.
- Suivez la documentation gRPC destinée aux développeurs afin de générer des bouchons de client pour l'une des langues compatibles.
- Appelez la méthode ReportStateAndNotification.
Node.js
Le client Node.js des API Google fournit des liaisons pour l'API Home Graph.
- Initialisez le service
google.homegraph
à l'aide des identifiants par défaut de l'application. - Appelez la méthode
reportStateAndNotification
avec ReportStateAndNotificationRequest. Elle renvoie unPromise
avec 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', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { states: { "PLACEHOLDER-DEVICE-ID": { on: true } } } } } });
Java
La bibliothèque cliente de l'API HomeGraph pour Java fournit des liaisons pour l'API HomeGraph.
- Initialisez
HomeGraphApiService
à l'aide des identifiants par défaut de l'application. - Appelez la méthode
reportStateAndNotification
avecReportStateAndNotificationRequest
. Elle renvoie 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 state payload. Map<?, ?> states = Map.of("on", true); // Report device state. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setStates(Map.of("PLACEHOLDER-DEVICE-ID", states)))); homegraphService.devices().reportStateAndNotification(request); }
État du rapport de test
Pour préparer votre action en vue de la certification, il est important de tester Report State
Pour ce faire, nous vous recommandons d'utiliser la visionneuse Home Graph, qui est une application web autonome qui ne nécessite pas de téléchargement ou de déploiement.
Le tableau de bord Report State est toujours disponible, sont obsolètes et ne sont plus prises en charge.
Tableau de bord d'état du rapport
Prérequis
Avant de pouvoir tester votre action, vous avez besoin de votre compte de service
Key et votre agentUserId
. Si vous possédez déjà votre clé de compte de service et
agentUserId
, consultez la section Déployer le Report State
tableau de bord.
Déployer le tableau de bord "Report State" (État du rapport)
Une fois que vous disposez de la clé de compte de service et de l'ID utilisateur de l'agent pour votre projet,
téléchargez et déployez la dernière version
Report State
tableau de bord.
Une fois que vous avez téléchargé la dernière version, suivez les instructions du
fichier README.MD
inclus.
Après avoir déployé le tableau de bord Report State, accédez le tableau de bord à partir de l'URL suivante (remplacez your_project_id par votre ID du projet):
http://<your-project-id>.appspot.com
Dans le tableau de bord, procédez comme suit:
- Sélectionnez le fichier de votre clé de compte
- Ajouter votre agentUserId
Cliquez ensuite sur Liste.
Tous vos appareils s'affichent dans la liste. Une fois la liste remplie, vous pouvez utiliser la Bouton Actualiser pour mettre à jour l'état de l'appareil En cas de changement de l'état d'un appareil, la ligne est surlignée en vert.
Réponses d'erreur
L'une des réponses d'erreur suivantes peut s'afficher lorsque vous appelez Report State Ces réponses se présentent sous la forme d'états HTTP codes.
400 Bad Request
: impossible de traiter le serveur. la requête envoyée par le client en raison d'une syntaxe non valide. Causes courantes Incluez un fichier JSON mal formé ou utiliseznull
au lieu de "" pour une valeur de chaîne.404 Not Found
: la ressource demandée n'a pas pu être mais elle sera peut-être disponible à l'avenir. En général, cela signifie que nous Impossible de trouver l'appareil demandé. Cela peut également signifier que le compte utilisateur n'est pas associé à Google ou nous avons reçu unagentUserId
non valide. Assurez-vous que queagentUserId
correspond à la valeur fournie dans votre SYNC, et vous avez correctement qui gère les intents DISCONNECT.