En este documento, se enumeran los errores y las excepciones que se admiten oficialmente para los dispositivos inteligentes para la casa. Usa estos códigos de errores y excepciones en la respuesta del intent o en las notificaciones si las implementaste, de modo que Asistente de Google alerte a los usuarios finales sobre problemas relacionados con un comando o estado del dispositivo determinados. Si la respuesta contiene un formato incorrecto o errorCode, Asistente de Google les dará a los usuarios un mensaje de error genérico, por ejemplo, "Lo sentimos, el dispositivo no está disponible en este momento".
Errores
Debes devolver un código de error cuando un problema hace que falle una solicitud de ejecución o consulta. Por ejemplo, si una cerradura de puerta está trabada y no se puede trabar ni destrabar, se debe devolver un error sobre este estado al usuario.
Los códigos de error se pueden adjuntar a nivel del dispositivo o a nivel global. Por ejemplo, si un usuario tiene muchas luces de un proveedor y estas se controlan con un concentrador, cuando el usuario pida que se apaguen todas las luces, el proveedor puede devolver un error a nivel del dispositivo si una sola luz está sin conexión o un error a nivel global si todo el concentrador está sin conexión y no se puede controlar ninguna luz. Si todos los dispositivos están sin conexión, no hay diferencia entre usar errores a nivel global o a nivel del dispositivo.
Resumen:
- Error a nivel global: Todos los dispositivos de la respuesta tienen el mismo error
- Error a nivel local: respuesta mixta con casos de error y éxito
Errores a nivel global
En el siguiente fragmento de JSON, se muestra cómo devolver errores de nivel global en la respuesta de QUERY o EXECUTE.
A continuación, se muestra un ejemplo de error de nivel global deviceOffline debido a que la unidad central está sin conexión:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "deviceOffline", "status" : "ERROR" } }
Un ejemplo de error de nivel global inSoftwareUpdate debido a que el concentrador se está actualizando es el siguiente:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "inSoftwareUpdate", "status" : "ERROR" } }
Errores a nivel del dispositivo
Respuesta de QUERY
En el siguiente fragmento de JSON, se muestra cómo devolver errores a nivel del dispositivo en la respuesta de QUERY.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "device-id-1": { "errorCode": "deviceOffline", "status" : "ERROR" }, "device-id-2": { "errorCode": "deviceOffline", "status" : "ERROR" } } } }
Respuesta EXECUTE
En el siguiente fragmento de JSON, se muestra cómo devolver errores a nivel del dispositivo en la respuesta EXECUTE.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [ { "ids": [ "device-id-1" ], "status": "ERROR", "errorCode": "deviceOffline" }, { "ids": [ "device-id-2" ], "status": "SUCCESS", "states": { "on": true, "online": true } } ] } }
Notificaciones con errores
Notificación proactiva
En el siguiente fragmento de JSON, se muestra cómo informar errores a nivel del dispositivo en una notificación proactiva.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "agentUserId": "agent-user-id-1", "eventId": "unique-event-id-1", "payload": { "devices": { "notifications": { "device-id-1": { "RunCycle": { "priority": 0, "status": "FAILURE", "errorCode": "deviceDoorOpen" } } } } } }
Respuesta de seguimiento
En el siguiente fragmento de JSON, se muestra cómo informar errores a nivel del dispositivo en una respuesta de seguimiento.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "agentUserId": "agent-user-id-1", "eventId": "unique-event-id-1", "payload": { "devices": { "notifications": { "device-id-1": { "LockUnlock": { "priority": 0, "followUpResponse": { "status": "FAILURE", "errorCode": "deviceJammingDetected", "followUpToken": "PLACEHOLDER" } } } } } } }
Lista de errores
Los siguientes errores producirán el TTS asociado en el dispositivo.
- aboveMaximumLightEffectsDuration : El valor es superior a la duración máxima de 1 hora. Vuelve a intentarlo.
- aboveMaximumTimerDuration : Solo puedo configurar <device(s)> por un máximo de <time period>
- actionNotAvailable : Lo siento, no puedo realizar esa acción en este momento. Sugerencia: Verifica las características del dispositivo y la lógica de estado actual en tu entrega.
- actionUnavailableWhileRunning : <device(s)> <is/are> currently running, so I can't make any changes.
- alreadyArmed : <device(s)> <is/are> already armed.
- alreadyAtMax : <device(s)> <is/are> already set to the maximum temperature.
- alreadyAtMin : <device(s)> <is/are> already set to the minimum temperature.
- alreadyClosed : <device(s)> <is/are> already closed.
- alreadyDisarmed : <device(s)> <is/are> already disarmed.
- alreadyDocked : <device(s)> <is/are> already docked.
- alreadyInState : <device(s)> <is/are> already in that state.
- alreadyLocked : <device(s)> <is/are> already locked.
- alreadyOff : <device(s)> <is/are> already off.
- alreadyOn : <device(s)> <is/are> already on.
- alreadyOpen : <device(s)> <is/are> already open.
- alreadyPaused : <device(s)> <is/are> already paused.
- alreadyStarted : <device(s)> <is/are> already started.
- alreadyStopped : <device(s)> <is/are> already stopped.
- alreadyUnlocked : <device(s)> <is/are> already unlocked.
- ambiguousZoneName : Lo siento, <device(s)> no puede identificar a qué zona te refieres. Asegúrate de que tus zonas tengan nombres únicos y vuelve a intentarlo.
- amountAboveLimit : Esa cantidad supera el límite máximo que admite <device(s)>.
- appLaunchFailed : No se pudo iniciar <app name> en <device(s)>. Sugerencia: Verifica el appId y que la app sea compatible con el hardware de destino.
- armFailure : No se pudieron activar los dispositivos <device(s)>.
- armLevelNeeded : No sé bien en qué nivel configurar <device(s)>. Di "Establece <dispositivo(s)> en <seguridad baja>" o "Establece <dispositivo(s)> en <seguridad alta>".
- authFailure : Parece que no puedo comunicarme con <device(s)>. Verifica la app y asegúrate de que <device/devices> <is/are> completamente configurado.
- bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
- belowMinimumLightEffectsDuration : El valor es inferior a la duración mínima de 5 minutos. Vuelve a intentarlo.
- belowMinimumTimerDuration : No puedo establecer <device(s)> por tan poco tiempo. Vuelve a intentarlo.
- binFull : <device(s)> <has/have> <a full bin/full bins>.
- cancelArmingRestricted : No pude cancelar la activación de <device(s)>.
- cancelTooLate : Lo sentimos, es demasiado tarde para cancelar. En su lugar, usa <device(s)> o la app.
- channelSwitchFailed : No se pudo cambiar al canal <channel name>.Vuelve a intentarlo más tarde. Sugerencia: Verifica los nombres o números de los canales y el estado de la suscripción del usuario.
- chargerIssue : Lo siento, parece que <device(s)> <has/have> <a charger issue/charger issues>. Sugerencia: El socio debe investigar la telemetría a nivel del hardware y el estado de la batería.
- commandInsertFailed : No se pueden procesar los comandos para <device(s)>. Sugerencia: Investiga el rendimiento de escritura de la base de datos o la lógica interna de puesta en cola de comandos.
- deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
- degreesOutOfRange : Los grados solicitados están fuera del rango de <device(s)>.
- deviceAlertNeedsAssistance : <device(s)> <has/have> an active alert and <need(s)> your assistance.
- deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
- deviceBusy : Lo siento, parece que <device(s)> ya está haciendo algo en este momento.
- deviceCharging : Lo siento, al parecer <device(s)> no puede realizar esa acción porque se está cargando.
- deviceClogged : Lo siento, parece que <device(s)> está obstruido.
- deviceCurrentlyDispensing : <device(s)> is already dispensing something right now.
- deviceDoorOpen : La puerta está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
- deviceHandleClosed : La manija está cerrada en <device(s)>. Ábrela y vuelve a intentarlo.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceLidOpen : La tapa está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
- deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Comunícate con tu concesionario de servicio local.
- deviceNotDocked : Lo siento, parece que <device(s)> no <isn't/aren't> en la estación de carga. Conéctalo(s) y vuelve a intentarlo.
-
deviceNotFound
:
<device(s)> <is/are>n't available. Vuelve a intentar configurarlo. Sugerencia: Asegúrate de que tu backend siempre mantenga sincronizado Home Graph. Llama a
requestSynccada vez que se agreguen o quiten dispositivos. - deviceNotMounted : Lo siento, parece que <device(s)> no puede hacer eso porque no está instalado.
- deviceNotReady : <device(s)> <is/are>n't ready.
- deviceStuck : <device(s)> <is/are> stuck and needs your help.
- deviceTampered : Se manipuló/manipularon <dispositivo(s)>.
- deviceThermalShutdown : Lo siento, parece que <device(s)> se apagó debido a las temperaturas extremas.
- directResponseOnlyUnreachable : <device(s)> <doesn't/don't> support remote control.
- disarmFailure : No se pudo desactivar el <dispositivo(s)>.
- discreteOnlyOpenClose : Lo siento, <device(s)> solo se puede abrir o cerrar por completo.
- dispenseAmountAboveLimit : <device(s)> no puede expender tanta cantidad.
- dispenseAmountBelowLimit : <device(s)> no puede expender tan poca cantidad.
- dispenseAmountRemainingExceeded : <device(s)> doesn't have enough <dispense item> to do that.
- dispenseFractionalAmountNotSupported : <device(s)> can't dispense fractions of <dispense item>.
- dispenseFractionalUnitNotSupported : <device(s)> doesn't support fractions of that unit for <dispense item>.
- dispenseUnitNotSupported : <device(s)> no admite esa unidad para <dispense item>.
- doorClosedTooLong : Hace bastante tiempo que no se abre la puerta de <device(s)>. Ábrela, asegúrate de que haya algo dentro y vuelve a intentarlo.
- emergencyHeatOn : <device(s)> <is/are> in Emergency Heat Mode, so <it/they>'ll have to be adjusted by hand.
- faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
- floorUnreachable : <device(s)> can't reach that room. Muévelo(s) al piso correcto y vuelve a intentarlo.
- functionNotSupported : En realidad, <device(s)> no admite(n) esa funcionalidad. Sugerencia: Asegúrate de que tu respuesta de SYNC refleje con precisión las capacidades del dispositivo.
- genericDispenseNotSupported : Necesito saber qué quieres dispensar. Vuelve a intentarlo con el nombre del elemento.
- hardError : Lo siento, se produjo un error y no puedo controlar el dispositivo de la casa.
- hardError : Lo siento, se produjo un error y no puedo controlar el dispositivo de la casa.
- inAutoMode : <device(s)> <is/are> currently set to auto mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inAwayMode : <device(s)> <is/are> currently set to away mode. Para controlar el termostato, deberás cambiarlo manualmente al modo En casa con la app de Nest en un teléfono, una tablet o una computadora.
- inDryMode : <device(s)> <is/are> currently set to dry mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inEcoMode : <device(s)> <is/are> currently set to eco mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
- inHumidifierMode : <device(s)> <is/are> currently set to humidifier mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inOffMode : <device(s)> <is/are> currently off. To change the temperature, you'll need to switch <it/them> to a different mode.
- inPurifierMode : <device(s)> <is/are> currently set to purifier mode. Para cambiar la temperatura, deberás cambiar <it/them> a otro modo.
- inSleepMode : <device(s)> <is/are> in sleep mode. Vuelve a intentarlo más tarde.
- inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
- lockFailure : No se pudieron bloquear los dispositivos <device(s)>. Sugerencia: Investiga si hay atascos físicos, poca energía o fallas en el motor del hardware de la cerradura.
- lockedState : <device(s)> <is/are> currently locked.
- lockedToRange : Esa temperatura está fuera del rango bloqueado en <device(s)>.
- lowBattery : <device(s)> <has/have> low battery.
- maxSettingReached : <device(s)> <is/are> already set to the highest setting.
- maxSpeedReached : <device(s)> <is/are> already set to the maximum speed.
- minSettingReached : <device(s)> <is/are> already set to the lowest setting.
- minSpeedReached : <device(s)> <is/are> already set to the minimum speed.
- monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
- needsAttachment : Lo siento, parece que falta un archivo adjunto obligatorio en <device(s)>. Colócala y vuelve a intentarlo.
- needsBin : Lo siento, parece que <device(s)> no <is/are> tiene un contenedor. Colócala y vuelve a intentarlo.
- needsPads : <device(s)> <need(s)> new pads.
- needsSoftwareUpdate : <device(s)> <need(s)> a software update.
- needsWater : <device(s)> <need(s)> water.
- networkProfileNotRecognized : Lo siento, no reconozco "<network profile>" en <device(s)>. Sugerencia: Verifica que la cadena del nombre del perfil coincida con los perfiles admitidos en la respuesta de SYNC.
- networkSpeedTestInProgress : Ya estoy probando la <velocidad/velocidades> de <red>.
- noAvailableApp : Lo siento, parece que <app name> no está disponible.
- noAvailableChannel : Lo siento, parece que el canal <channel name> no está disponible.
- noChannelSubscription : Lo siento, no tienes una suscripción al canal <nombre del canal> en este momento.
- noTimerExists : Lo siento, parece que no hay temporizadores configurados en <device(s)>.
- notSupported : Lo siento, ese modo no está disponible para <device(s)>.
- obstructionDetected : <device(s)> detectó una obstrucción.
- offline , deviceOffline : Lo siento, parece que <device(s)> no <is/are> disponible(s) en este momento.
- onRequiresMode : Especifica qué modo quieres activar.
- passphraseIncorrect : Lo siento, parece que el PIN es incorrecto.
- percentOutOfRange : No puedo establecer <device(s)> en <percent>.
- pinIncorrect : (passphraseIncorrect)
- rainDetected : No abrí <device(s)> porque se detectó lluvia.
- rangeTooClose : Esos valores están demasiado cerca para un rango de calor y frío en <device(s)>. Elige temperaturas que estén más separadas.
- relinkRequired : Parece que se produjo un error con tu cuenta. Usa la app de Google Home o la del Asistente para volver a vincular <device(s)>. Sugerencia: Asegúrate de que tu servidor devuelva este código cuando un token de actualización no sea válido de forma permanente.
-
remoteSetDisabled
:
- Parámetro opcional
errorCodeReason currentlyArmed- Lo siento, como ya se activó la protección, debes usar <device(s)> o la app para realizar cualquier cambio.remoteUnlockNotAllowed- Lo siento, no puedo desbloquear <dispositivo(s)> de forma remota.remoteControlOff: Actualmente, esa acción está inhabilitada. Habilita el control remoto en <dispositivo(s)> y vuelve a intentarlo.childSafetyModeActive- Esa acción permanece inhabilitada para <dispositivo(s)> mientras el modo de seguridad para niños está activado.
- Parámetro opcional
- roomsOnDifferentFloors : <device(s)> can't reach those rooms because they're on different floors.
- safetyShutOff : <device(s)> <is/are> in Safety Shut-Off Mode, so <it/they>'ll have to be adjusted by hand.
- sceneCannotBeApplied : Lo sentimos, <dispositivo(s)> no se puede aplicar. Sugerencia: Verifica el estado interno de las escenas del usuario en la nube del socio.
- securityRestriction : <device(s)> <has/have> a security restriction.
- softwareUpdateNotAvailable : Lo siento, no hay actualizaciones de software disponibles en <device(s)>.
- startRequiresTime : Para hacer eso, tendrás que decirme cuánto tiempo quieres que funcione en <device(s)>.
- stillCoolingDown : <device(s)> <is/are> still cooling down.
- stillWarmingUp : <device(s)> <is/are> still warming up.
- streamUnavailable : Lo siento, parece que la transmisión no está disponible en <device(s)>.
- streamUnplayable : Lo siento, no puedo reproducir la transmisión de <device(s)> en este momento. Sugerencia: Verifica la señalización de WebRTC/HLS y asegúrate de que la URL de transmisión sea válida.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
- targetAlreadyReached : Lo siento, parece que esa ya es la temperatura actual.
- timerValueOutOfRange : No se puede establecer <device(s)> para esa cantidad de tiempo.
- tooManyFailedAttempts : Se realizaron demasiados intentos fallidos. Ve a la app del dispositivo para completar esa acción.
- transientError : Lo siento, se produjo un error al controlar <device(s)>. Vuelve a intentarlo. Sugerencia: Por lo general, estos errores se manifiestan como una conexión a un dispositivo o servicio que se interrumpe. También si no se pueden abrir conexiones nuevas a un servidor.
- turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
- unableToLocateDevice : No pude encontrar <device(s)>. Sugerencia: Verifica la conectividad local del dispositivo (Wi-Fi o Bluetooth).
- unknownFoodPreset : <device(s)> doesn't support that food preset.
- unlockFailure : No se pudo desbloquear <device(s)>. Sugerencia: Investiga si hay atascos de hardware, batería baja o entradas de PIN no válidas.
- unpausableState : No se puede pausar <device(s)> ahora mismo.
- userCancelled : ok
- valueOutOfRange : No se puede establecer <device(s)> en esa temperatura.
Informes de estado en línea y sin conexión
Cuando un dispositivo esté sin conexión, debes informar <code{"online": code="" dir="ltr" false}<="" translate="no"> a Report State en un plazo de cinco minutos desde el comportamiento del dispositivo. Por el contrario, cuando un dispositivo vuelve a estar en línea, debes informar <code{"online": code="" dir="ltr" translate="no" true}<=""> a Report State en un plazo de cinco minutos desde el comportamiento del dispositivo. Cada vez que un dispositivo vuelva a estar en línea, el socio debe informar todos los estados actuales del dispositivo con la API dereportStateAndNotification.
En este ejemplo, se muestra que un tipo de dispositivo light está en línea y se informan
todos los estados actuales del dispositivo.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}Excepciones
Debes devolver una excepción cuando haya un problema o una alerta asociados con un comando. El comando podría tener éxito o fallar.
Si el comando se ejecutó correctamente (status = "SUCCESS"), informa las excepciones
con la característica StatusReport (para dispositivos que no sean el de destino)
o devolviendo un exceptionCode adecuado (para el dispositivo de destino).
Por ejemplo, si el filtro de pelusas de la secadora está lleno, el usuario puede iniciar la secadora, pero es posible que quieras advertirle sobre este estado. Del mismo modo, cuando un dispositivo tiene poca batería, pero no está agotada, puedes ejecutar un comando, pero debes informar que la batería del dispositivo está baja.
Si el comando falla debido a excepciones, el estado debe ser "EXCEPTIONS",
y las excepciones se deben informar con el atributo StatusReport.
Excepción no bloqueante (SUCCESS) sobre el dispositivo de destino
Este ejemplo es para trabar la puerta:
La cerradura de la puerta principal tiene poca batería. Trabaré la puerta principal.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["device-id-1"], "status": "SUCCESS", "states": { "on": true, "online": true, "isLocked": true, "isJammed": false, "exceptionCode": "lowBattery" } }] } }
Excepción sin bloqueo (SUCCESS) sobre otro dispositivo que usa StatusReport
Este ejemplo es para activar un sistema de seguridad: De acuerdo, activando el sistema de seguridad. La ventana delantera está abierta.
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["device-id-1"], "status": "SUCCESS", "states": { "on": true, "online": true, "isArmed": true, "currentArmLevel": "L2", "currentStatusReport": [{ "blocking": false, "deviceTarget": "sensor_id1", "priority": 0, "statusCode": "deviceOpen" }] } }] } }
Excepción de bloqueo sobre otro dispositivo que usa StatusReport
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "devices": { "device-id-1": { "on": true, "online": true, "status": "EXCEPTIONS", "currentStatusReport": [{ "blocking": true, "deviceTarget": "device-id-1", "priority": 0, "statusCode": "lowBattery" }, { "blocking": true, "deviceTarget": "front_window_id", "priority": 1, "statusCode": "deviceOpen" }, { "blocking": true, "deviceTarget": "back_window_id", "priority": 1, "statusCode": "deviceOpen" } ] } } } }
Lista de excepciones
Las siguientes excepciones producirán el TTS asociado en el dispositivo.
- bagFull : <device(s)> <has/have> <a full bag/full bags>. Please empty <it/them> and try again.
- binFull : <device(s)> <has/have> <a full bin/full bins>.
- carbonMonoxideDetected : Se detectó monóxido de carbono en <house name>.
- deviceAtExtremeTemperature : <device(s)> <is/are> at <an extreme temperature/extreme temperatures>.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceMoved : <device(s)> <was/were> moved.
- deviceOpen : <dispositivo(s)> <está/están> abiertos.
- deviceTampered : Se manipuló/manipularon <device(s)>.
- deviceUnplugged : <device(s)> <is/are> unplugged.
- floorUnreachable : <device(s)> can't reach that room. Muévelo(s) al piso correcto y vuelve a intentarlo.
- hardwareFailure : <device(s)> <has/have> a hardware problem.
- inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
- isBypassed : <device(s)> <is/are> currently bypassed.
- lowBattery : <device(s)> <has/have> low battery.
- motionDetected : <device(s)> <detect(s)> motion.
- needsPads : <device(s)> <need(s)> new pads.
- needsSoftwareUpdate : <device(s)> <need(s)> a software update.
- needsWater : <device(s)> <need(s)> water.
- networkJammingDetected : la conexión de red doméstica a <device(s)> no funciona correctamente.
- noIssuesReported : <device(s)> reported no issues.
- roomsOnDifferentFloors : <device(s)> can't reach those rooms because they're on different floors.
- runCycleFinished : <device(s)> <has/have> finished running.
- securityRestriction : <device(s)> <has/have> a security restriction.
- smokeDetected : Se detectó humo en <house name>.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
- usingCellularBackup : <device(s)> <is/are> using cellular backup.
- waterLeakDetected : <device(s)> <detect(s)> una fuga de agua.