Report State — важная функция, позволяющая Google Home Action заблаговременно сообщать в Google Home Graph о последнем состоянии устройства пользователя, вместо того чтобы ждать запроса QUERY .
Report State отправляет в Google информацию о состоянии пользовательских устройств с указанным agentUserId (отправленным в исходном запросе SYNC ). Когда Google Assistant хочет выполнить действие, требующее понимания текущего состояния устройства, он может просто получить информацию о состоянии в Home Graph вместо того чтобы отправлять интент QUERY в различные сторонние облачные сервисы перед отправкой интента EXECUTE .
Без Report State , при наличии освещения от нескольких поставщиков в гостиной, команда «Окей, Google, ярче мою гостиную» требует обработки нескольких QUERY , отправленных в несколько облачных сервисов, вместо того, чтобы просто узнать текущие значения яркости на основе ранее полученных данных. Для наилучшего пользовательского опыта Assistant должен иметь текущее состояние устройства, не требуя повторного обращения к устройству.
После первоначальной SYNC устройства платформа отправляет намерение QUERY , которое собирает состояние устройства для заполнения Home Graph . После этого Home Graph сохраняет только то состояние, которое было отправлено с помощью Report State .
При вызове функции Report State убедитесь, что предоставляете полные данные о состоянии для заданного параметра. Home Graph обновляет состояние для каждого параметра отдельно и перезаписывает все данные для этого параметра при вызове функции Report State . Например, если вы сообщаете о состоянии для параметра StartStop , полезная нагрузка должна включать значения для параметров isRunning и isPaused .
Начать
Для внедрения функции Report State выполните следующие шаги:
Включите API Google HomeGraph
В Google Cloud Console перейдите на страницу API HomeGraph .
Перейдите на страницу API HomeGraph.- Выберите проект, соответствующий идентификатору вашего проекта smart home .
- Нажмите ВКЛЮЧИТЬ .
Создать ключ учетной записи службы
Следуйте этим инструкциям, чтобы сгенерировать ключ учетной записи службы в Google Cloud Console :
В Google Cloud Console перейдите на страницу «Учетные записи служб» .
Перейдите на страницу «Учетные записи служб» .Возможно, вам потребуется выбрать проект, прежде чем вы перейдете на страницу «Учетные записи служб».
Нажмите . Создайте учетную запись службы .
В поле « Имя учетной записи службы» введите имя.
В поле «Идентификатор учетной записи службы» введите идентификатор.
В поле «Описание учетной записи службы» введите описание.
Нажмите «Создать и продолжить» .
В раскрывающемся списке «Роль» выберите «Учетные записи служб» > «Создание токенов идентификации OpenID Connect для учетных записей служб» .
Нажмите «Продолжить» .
Нажмите «Готово» .
Выберите созданную вами учетную запись службы из списка учетных записей служб и выберите «Управление ключами» в меню «Действия .
Выберите «Добавить ключ» > «Создать новый ключ» .
В поле « Тип ключа» выберите вариант JSON .
Нажмите «Создать». Будет создан JSON-файл, содержащий ключи, которые можно загрузить на ваш компьютер.
Вызовите API
Выберите один из вариантов на вкладках ниже:
HTTP
Home Graph предоставляет HTTP-конечную точку.
- Используйте загруженный JSON-файл учетной записи службы для создания JSON-токена (JWT). Дополнительную информацию см. в разделе «Аутентификация с использованием учетной записи службы» .
- Получите токен доступа OAuth 2.0 с областью действия
https://www.googleapis.com/auth/homegraph, используя oauth2l : - Создайте JSON-запрос, используя
agentUserId. Вот пример JSON-запроса для получения информации о состоянии отчета и уведомлений: - Объедините JSON-данные состояния отчета и уведомления, а также токен в вашем HTTP POST-запросе к конечной точке Google Home Graph. Вот пример того, как выполнить запрос в командной строке с помощью
curl, в качестве теста:
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 предоставляет конечную точку gRPC.
- Получите определение службы Protocol Buffers для API Home Graph.
- Для генерации клиентских заглушек для одного из поддерживаемых языков следуйте документации для разработчиков gRPC.
- Вызовите метод ReportStateAndNotification .
Node.js
Клиент Google API для Node.js предоставляет привязки для API Home Graph .
- Инициализируйте службу
google.homegraph, используя учетные данные приложения по умолчанию . - Вызовите метод
reportStateAndNotificationс объектом ReportStateAndNotificationRequest . Он вернетPromiseс объектом 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
Клиентская библиотека HomeGraph API для Java предоставляет привязки для HomeGraph API.
- Инициализируйте
HomeGraphApiService, используя учетные данные приложения по умолчанию . - Вызовите метод
reportStateAndNotificationс объектомReportStateAndNotificationRequest. Он вернет объектReportStateAndNotificationResponse.
// 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); }
Отчет о результатах испытаний.
Для подготовки вашей Cloud-to-cloud интеграции к сертификации важно протестировать Report State .
Для этого мы рекомендуем использовать инструмент Home Graph Viewer, который представляет собой автономное веб-приложение, не требующее загрузки или развертывания.
Панель мониторинга Report State по-прежнему доступна, но устарела и больше не поддерживается.
Панель мониторинга состояния отчета
Предварительные требования
Прежде чем тестировать интеграцию Cloud-to-cloud , вам потребуется ключ учетной записи службы и agentUserId . Если у вас уже есть ключ учетной записи службы и agentUserId см. раздел «Развертывание панели мониторинга Report State .
Разверните панель мониторинга состояния отчета.
Получив ключ учетной записи службы и идентификатор пользователя агента для вашего проекта, загрузите и разверните последнюю версию из панели мониторинга Report State . После загрузки последней версии следуйте инструкциям из прилагаемого файла README.MD .
После развертывания панели Report State получите к ней доступ по следующему URL-адресу (замените your_project_id на идентификатор вашего проекта):
http://<your-project-id>.appspot.com
На панели управления выполните следующие действия:
- Выберите файл ключа вашей учетной записи.
- Добавьте свой идентификатор пользователя агента.
Затем нажмите «Список» .
Отобразился список всех ваших устройств. После заполнения списка вы можете использовать кнопку «Обновить» , чтобы обновить состояние устройств. При изменении состояния устройства соответствующая строка будет выделена зеленым цветом.
Сообщить о расхождении в данных штатов
Точность определения состояния устройства на основе запроса измеряет, насколько хорошо последнее состояние устройства в отчете соответствует его статусу на момент запроса пользователем. Ожидается, что это значение составит 99,5%.
Ответы об ошибках
При вызове функции Report State вы можете получить один из следующих ответов об ошибке. Эти ответы поступают в виде кодов состояния HTTP.
-
400 Bad Request— Сервер не смог обработать запрос, отправленный клиентом, из-за неверного синтаксиса . Распространенные причины включают некорректный JSON или использованиеnullвместо "" для строкового значения. -
404 Not Found— Запрошенный ресурс не найден, но может стать доступен в будущем. Как правило, это означает, что мы не можем найти запрошенное устройство. Это также может означать, что учетная запись пользователя не связана с Google или мы получили недействительныйagentUserId. Убедитесь, чтоagentUserIdсовпадает со значением, указанным в ответе SYNC , и что вы правильно обрабатываете намерения DISCONNECT .
Онлайн и офлайн отчетность по штатам
Если устройство отключено от сети, следует сообщить об этом. Сообщайте о состоянии устройства в течение пяти минут после его поведения. И наоборот, когда устройство возвращается в онлайн-режим, следует сообщить о его состоянии. Сообщить о состоянии устройства следует в течение пяти минут после его срабатывания. Как только устройство снова подключается к сети, партнер должен сообщать обо всех текущих состояниях устройства, используя API reportStateAndNotification . В этом примере показано, что в сети находится устройство типа light , и сообщается обо всех текущих состояниях устройства. "requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}
