AoG ProTips: Handing Offline Devices
Missed our weekly video? Don’t worry, watch this week’s #AoGProTips 🎥
Many factors can affect device connectivity in the home, and it’s important to keep users aware when their devices are unreachable or offline. A critical element of your smart home Action is properly maintaining and reporting the reachability of each device to Google Assistant.
The smart home API supports multiple ways to indicate that a device is unreachable, so let’s explore when it’s appropriate to use each one.
Offline status
Each response that your smart home Action provides to a QUERY
and EXECUTE
intent should include a status code. For most intents, the status value will be SUCCESS
. When Google Assistant attempts to QUERY
an unreachable device, you should return the device status as OFFLINE
. This indicates that there is no additional state available from the device at this time.
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"devices": {
"123": {
"status": "OFFLINE"
}
}
}
}
Offline error
Each EXECUTE
intent represents a command to change the state of the device. If that command fails to execute for any reason, it is appropriate to report that condition with an error response. When an EXECUTE
intent fails because the device was unreachable, return an ERROR
status with the error code set to deviceOffline
.
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"payload": {
"commands": [
{
"ids": [
"123"
],
"status": "ERROR",
"errorCode": "deviceOffline"
}
]
}
}
Note that if your integration handles commands asynchronously or any other conditions require you to return a PENDING
status in the EXECUTE
response, you can update the status of an unreachable device using the offline state flag.
Offline status flag
Finally, we have the online state flag. Use this flag to publish any changes in device connectivity through the Report State API. This ensures that Home Graph remains up to date and reduces the chance that the Assistant sends QUERY
or EXECUTE
intents to an unreachable device.
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"agentUserId": "1234",
"payload": {
"devices": {
"states": {
"123": {
"online": false
}
}
}
}
}
For more helpful tips on getting the most out of your actions, be sure to check out the rest of the AoG ProTips series — and share your tips with us on Twitter using the hashtag #AoGProTips.