En este documento, se enumeran los errores y las excepciones oficialmente compatibles para dispositivos de casa inteligente. Usa estos códigos de errores y excepciones en la respuesta del intent o en las notificaciones si lo implementaste, de modo que Asistente de Google alerte a los usuarios finales sobre problemas relacionados con un comando o el estado del dispositivo determinado. Si la respuesta contiene un formato incorrecto o errorCode
, Asistente de Google les muestra a los usuarios un mensaje de error genérico, por ejemplo, "Lo siento, dispositivo no está disponible en este momento".
Errores
Deberías mostrar un código de error cuando un problema hace que una solicitud de ejecución o consulta falle. Por ejemplo, si se bloquea una puerta y no se puede bloquear o desbloquear, se debe mostrar al usuario un error relacionado con este estado.
Los códigos de error se pueden conectar a nivel del dispositivo o a nivel global. Por ejemplo, si un usuario tiene muchas luces de un proveedor y la controla un concentrador, cuando el usuario solicite apagar todas las luces, el proveedor puede mostrar un error a nivel del dispositivo si una sola luz está sin conexión, o un error de nivel global si todo el concentrador está sin conexión y no se pueden controlar las luces. Si todos los dispositivos están sin conexión, no hay diferencia entre el uso de errores a nivel global o a nivel del dispositivo. Cuando un dispositivo está sin conexión, debes informar el estado {"online": false}
en reportState incluso si muestras el código de error deviceOffline
.
Resumen:
- Error a nivel global: todos los dispositivos en la respuesta tienen el mismo error
- Error a nivel local: respuesta mixta con casos de éxito y error
Errores a nivel global
En el siguiente fragmento JSON, se muestra cómo mostrar errores a nivel global en la respuesta QUERY o EXECUTE.
Un ejemplo del error de nivel global deviceOffline
debido al concentrador no tiene conexión:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "deviceOffline", "status" : "ERROR" } }
Se está actualizando un ejemplo de error inSoftwareUpdate
a nivel global debido al concentrador:
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "errorCode": "inSoftwareUpdate", "status" : "ERROR" } }
Errores a nivel del dispositivo
Respuesta de QUERY
En el siguiente fragmento JSON, se muestra cómo mostrar 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" } } } }
EJECUTAR respuesta
En el siguiente fragmento JSON, se muestra cómo mostrar errores a nivel del dispositivo en la respuesta EJECUTAR.
{ "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 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 JSON, se muestra cómo informar errores a nivel de 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.
- above MaximumLightEffectsDuration : Eso supera la duración máxima de 1 hora. Vuelve a intentarlo.
- aboveMaxTimerDuration : Solo puedo configurar <device(s)> por hasta <time period>
- actionNotAvailable : Lamentablemente, no puedo hacerlo en este momento.
- actionAvailablewhileRunning : <device/s> > <is/are> se está ejecutando, por lo que no puedo realizar ningún cambio.
- ARMArmed : <device/s>> <is/are> ya está activado.
- AtAtMax : <device(s)> <is/are> ya estableció la temperatura máxima.
- YaAtMin : <device(s)> <is/are> ya estableció la temperatura mínima.
- Ya cerrado : <device(s)> <is/are> already closed.
- ya desactivado : <device/s>> <is/are> ya está desactivado.
- ya con un conector : <device/s>> <is/are> ya está en el conector.
- ya inState : <device(s)> <is/are> ya está en ese estado.
- Ya bloqueado : <device/s>> <is/are> ya está bloqueado.
- offOff : <device(s)> <is/are> ya desactivada.
- ya activada : <device/s>> <is/are> ya está encendido.
- Ya está abierto : <device(s)> <is/are> already open.
- ya pausada : <dispositivo(s)> <is/are> ya se detuvo.
- ya iniciado : <device(s)> <is/are> already started.
- alreadyStopped : Ya se detuvieron <device(s)> <is/are>.
- ya desbloqueado : <device/s> ya se desbloqueó.
- ambiguousZoneName : Lo sentimos, <device(s)> no puede identificar la zona a la que te refieres. Asegúrate de que las zonas tengan nombres únicos y vuelve a intentarlo.
- amountAboveLimit : Eso es más de lo que pueden admitir los <device(s)>.
- appLaunchFailed : No se pudo iniciar <app name> en <device(s)>.
- armFailure : No se pudieron activar <device(s)>.
- armLevelNeeded : No sé en qué nivel establecer <device(s)>. Di "Establecer <device/>> en <baja seguridad>" o "Establecer <device(s)> en <high security>"
- authFailure : No puedo establecer conexión con <device(s)>. Intenta verificar que la app <device/devices> <is/are> esté configurada por completo.
- bagFull : <device(s)> <has/have> <a full bag/full Bags>. Vacía <it/them> y vuelve a intentarlo.
- belowMinimumLightEffectsDuration : 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 : Lo siento, no pude cancelar la activación de <device(s)>.
- canceltootete : Lo siento, ya es demasiado tarde para cancelar. Usa <device(s)> o la app.
- channelSwitchFailed : No se pudo cambiar al canal <channel name>. Vuelve a intentarlo más tarde.
- loaderIssue : Lamentablemente, parece que <device(s)> <has/have> <a cargador issue/charger issues>.
- commandInsertFailed : No se pueden procesar comandos para <device(s)>.
- deadBattery : <device/s>> <has/have> <a baterías agotadas>.
- gradosOutOfRange : Los grados solicitados están fuera del rango de <device(s)>.
- deviceAlertNeedsAssistance : <device(s)> <has/have> una alerta activa y <need(s)> tu asistencia.
- deviceAtExtremeTemperature : <device(s)> <is/are> to <anext frío/extreme temperaturas>.
- deviceBusy : Lo siento, parece que <device(s)> ya está haciendo algo en este momento.
- deviceCharge : Lo siento, parece que <device(s)> no puede hacer eso porque (ha_shared.ItsArere size=$item.devices.total_device_count) se está cargando.
- deviceClogged : Lamentablemente, parece que <device(s)> está obstruido.
- deviceCurrentlyDispensing : <device(s)> ya está expendiendo algo en este momento.
- deviceDoorOpen : La puerta está abierta en <device(s)>. Ciérrala y vuelve a intentarlo.
- deviceHandleClosed : El identificador se cerró en <device(s)>. Ábrelo 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)> que se repararán. Comunícate con tu concesionario de servicios local.
- deviceNotDocked : Lo siento, parece que <device(s)> <isn't/aren't> no está conectado. Conecta <it/them> y vuelve a intentarlo.
- deviceNotFound : <device(s)> <is/are>no está disponible. Te recomiendo que vuelvas a configurar <it/them>.
- deviceNotMounted : Lo siento, parece que <device(s)> no puede hacer eso porque <it/them> <is/are>no está activado.
- deviceNotReady : <device(s)> <is/are>n't ready.
- deviceStuck : <device/s>> <is/are> se bloquea y necesita tu ayuda.
- deviceTampered : Se manipuló <device(s)> <br/>>.
- deviceThermalShutdown : Perdón, parece que <device(s)> se apagó debido a temperaturas extremas.
- directResponseOnlyUnreachable : <device(s)> <no admite o no el control remoto.
- desarFailure : No se pudieron desactivar <device(s)>.
- discreteOnlyOpenClose : Lamentablemente, <device(s)> solo se puede abrir o cerrar por completo.
- dispenseAmountAboveLimit : <device(s)> no puede distribuir una cantidad tan grande.
- dispenseAmountUnderLimit : <device(s)> no puede distribuir una cantidad tan pequeña.
- dispenseAmountRemainingExceeded : <device(s)> no tiene suficiente <dispense item> para hacerlo.
- dispenseFractionalAmountNotSupported : <device(s)> no puede distribuir fracciones de <dispense item>.
- dispenseFractionalUnitNotSupported : <device(s)> no admite fracciones de esa unidad para <dispense item>.
- dispenseUnitNotSupported : <device(s)> no admite esa unidad para <dispense item>.
- puertaClosedTooLong : Hace tiempo que no se abre la puerta de <device(s)>. Abre la puerta, asegúrate de que haya algo dentro y vuelve a intentarlo.
- emergenciaHeatOn : <dispositivos/> <is/are> en modo calefactor de emergencia, por lo que <it/ellos>deberán ajustarse manualmente.
- batería defectuosa : <dispositivo(s)> <has/have> <una batería o baterías defectuosas>.
- floorUnreachable : <device(s)> no puede acceder a esa habitación. Mueve <it/them> al piso correcto y vuelve a intentarlo.
- functionNotSupported : En realidad, <device(s)> <not/t/do> no admite esa funcionalidad.
- genéricosDispenseNotSupported : Necesito saber qué quiere distribuir. Vuelve a intentarlo con el nombre del elemento.
- hardError : Se produjo un error y no puedo controlar el dispositivo de la casa.
- hardError : Se produjo un error y no puedo controlar el dispositivo de la casa.
- inAutoMode : Actualmente, <device(s)> <is/are> está configurado en modo automático. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inAwayMode : Actualmente, los <device(s)> <is/are> están configurados en modo Ausente. Para controlar el termostato, deberás cambiarlo manualmente al modo En casa con la app de Nest desde un teléfono, una tablet o una computadora.
- inDryMode : Actualmente, <device(s)> <is/are> está configurado en modo seco. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inEcoMode : <device/s>> <is/are> está configurado en el modo Eco. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inFanOnlyMode : Por el momento, <device(s)> <is/are> está configurado en el modo solo ventilador. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inHeatOrCool : <dispositivo/s> <is/no>están en modo frío/calor.
- inHumidifierMode : <dispositivo/s> <is/are> configurado actualmente en modo humidificador. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inOffMode : Por el momento, <device(s)> <is/are> está desactivado. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inPurifierMode : <device/s>> <is/are> está configurada en el modo purificador. Para cambiar la temperatura, deberás usar <it/them> para cambiar a otro modo.
- inSleepMode : <device(s)> <is/are> en modo de suspensión. Vuelve a intentarlo más tarde.
- inSoftwareUpdate : <device/s>> <is/are> se encuentra en una actualización de software.
- lockFailure : No se pudieron bloquear <device(s)>.
- lockState : Por el momento, <device(s)> <is/are> está bloqueado.
- lockToRange : Esa temperatura está fuera del rango que se bloqueó en <device(s)>.
- lowBattery : <device(s)> <has/have> de batería baja.
- maxSettingReached : <device(s)> <is/are> ya se estableció la configuración más alta.
- maxSpeedReached : <device(s)> <is/are> ya está configurada en la velocidad máxima.
- minSettingReached : <device/s>> <is/are> ya está establecido en el parámetro de configuración más bajo.
- minSpeedReached : <device(s)> <is/are> ya está configurada en la velocidad mínima.
- monitoringServiceConnectionLost : <device/s>> <has/have> perdió <it/su> conexión al servicio de supervisión.
- needAttachment : Lamentablemente, parece que <device(s)> <is/are> no tiene un archivo adjunto obligatorio. Reemplázala y vuelve a intentarlo.
- needBin : Lo siento, parece que <device(s)> <is/are> no tiene un contenedor. Reemplázala y vuelve a intentarlo.
- NeedPads : <device(s)> <need(s)> nuevas compresas
- needSoftwareUpdate : <device(s)> <need(s)> una actualización de software.
- NeedWater : <device(s)> <need(s)> agua
- networkProfileNotRecognized : Lo siento, no reconozco "<network profile>" en <device(s)>.
- networkSpeedTestInProgress : Ya estoy probando el <network> <speed/speeds>>.
- noAvailableApp : Lo siento, parece que <app name> no está disponible.
- noAvailableChannel : Lamentablemente, parece que el canal <channel name> no está disponible.
- noChannelSubscription : Lo sentimos, no estás suscrito al canal <channel name> en este momento.
- noTimerExists : Lamentablemente, parece que no se estableció ningún temporizador en <device(s)>.
- notSupported : Lamentablemente, ese modo no está disponible para <device(s)>.
- tapionobsDetected : <device(s)> detectó una obstrucción.
- sin conexión , deviceOffline : Lamentablemente, parece que <device/s> > <is/are>no está disponible en este momento.
- onRequiresMode : Especifica el modo que quieres activar.
- PASSWORDIncorrect : Lamentablemente, parece que el PIN es incorrecto.
- percentOutOfRange : Lo siento, no puedo establecer <device(s)> en <percent>.
- pinIncorrect : (passphraseIncorrect)
- RainDetected : No abrí <device(s)> porque se detectó lluvia.
- rangeTooClose : Esos están demasiado cerca para un rango de calor y frío de <device(s)>. Elige temperaturas más distantes.
- relinkRequired : Se produjo un error con tu cuenta. Usa la app de Google Home o la del Asistente para volver a vincular <device(s)>.
-
remoteSetDisabled
:
- Parámetro opcional
errorCodeReason
currentlyArmed
- Debido a que la seguridad ya está activada, debes usar <device(s)> o la app para realizar cambios.remoteUnlockNotAllowed
- No puedo desbloquear <device(s)> de forma remota.remoteControlOff
: esa acción está inhabilitada actualmente. Habilita el control remoto en <device(s)> y vuelve a intentarlo.childSafetyModeActive
: Esa acción está inhabilitada para <device(s)> mientras el modo de seguridad infantil está activo.
- Parámetro opcional
- roomsOnDifferentFloors : <device(s)> no puede llegar a esas habitaciones porque están en pisos diferentes.
- safetyShutOff : <device/s> > <is/are > en el modo de apagado seguro, por lo que<it/ellos>deberán ajustarse manualmente.
- SceneCannotBeApplied : No se pueden aplicar <device(s)>.
- securityRestriction : <dispositivo(s)> <has/have> una restricción de seguridad.
- softwareUpdateNotAvailable : Lamentablemente, no hay una actualización de software disponible en <device(s)>.
- startRequiresTime : Para ello, debes decirme por cuánto tiempo quieres ejecutar los <device(s)>.
- tillCoolingDown : <device(s)> <is/are>till enfriamiento.
- tillWarmingUp : <device/s>> <is/are> has Warming.
- Streamavailable : Lamentablemente, la transmisión no está disponible en <device(s)>.
- streamUnplayable : En este momento, no puedo reproducir la transmisión desde <device(s)>.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Completa <it/them> y vuelve a intentarlo.
- targetAlreadyReached : Lamentablemente, parece que esa es la temperatura actual.
- cronómetroValueOutOfRange : No se pueden configurar <device(s)> durante ese período.
- TooManyFailedIntents : Se produjeron demasiados intentos fallidos. Ve a la app del dispositivo para completar esa acción.
- transientError : Se produjo un error al controlar <device(s)>. Vuelve a intentarlo.
- offOff , deviceTurnedOff : <device(s)> <is/are> está desactivada en este momento.
- CanToLocateDevice : No pude encontrar <device(s)>.
- UnknownFoodPreset : <device(s)> no admite ese ajuste predeterminado.
- desbloqueaFailure : No se pudieron desbloquear <device(s)>.
- unpausableState : <device(s)> no se puede pausar en este momento.
- usuario cancelado : ok
- valueOutOfRange : <device(s)> no se puede establecer en esa temperatura.
Excepciones
Deberías mostrar una excepción cuando haya un problema o una alerta asociada con un comando. El comando puede tener éxito o fallar.
Si el comando se ejecuta de forma correcta (estado = "SUCCESS"), informa las excepciones con la característica StatusReport
(para dispositivos que no sean el objetivo) o muestra un exceptionCode
adecuado (para el dispositivo de destino).
Por ejemplo, si la pantalla de lint de la secadora está llena, el usuario aún puede iniciar la secadora, pero tal vez quieras advertirle sobre este estado. De manera similar, cuando un dispositivo tiene poca batería vacía, puedes ejecutar un comando de todos modos, pero debes avisarle que queda poca.
Si el comando falla debido a excepciones, el estado debe ser "EXCEPTIONS", y las excepciones deben informarse con la característica StatusReport
.
Excepción sin bloqueo (SUCCESS) sobre el dispositivo de destino
Este ejemplo es para trabar la puerta:
La cerradura de la puerta principal tiene poca batería. Trabando 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 con StatusReport
Este ejemplo es para activar un sistema de seguridad: Bien, activando el sistema de seguridad. La ventana frontal 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 con 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 al dispositivo.
- bagFull : <device(s)> <has/have> <a full bag/full Bags>. Vacía <it/them> y vuelve a intentarlo.
- 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> to <anext frío/extreme temperaturas>.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceMove : Se movió <device(s)> <was/were>.
- deviceOpen : <device(s)> <is/are> open.
- deviceTampered : Se manipuló <device(s)> <br/>>.
- deviceUnplugged : <device(s)> <is/are> unplugged.
- floorUnreachable : <device(s)> no puede acceder a esa habitación. Mueve <it/them> al piso correcto y vuelve a intentarlo.
- hardwareFailure : <device(s)> <has/have> un problema de hardware.
- inSoftwareUpdate : <device/s>> <is/are> se encuentra en una actualización de software.
- isBypassed : Actualmente, se omiten <device(s)> <is/are>.
- lowBattery : <device(s)> <has/have> de batería baja.
- MoveDetected : Movimiento <device(s)> <detect(s)>.
- NeedPads : <device(s)> <need(s)> nuevas compresas
- needSoftwareUpdate : <device(s)> <need(s)> una actualización de software.
- NeedWater : <device(s)> <need(s)> agua
- networkJammingDetected : La conexión de red doméstica a <device(s)> no funciona correctamente.
- noIssuesReported : <device(s)> no informó ningún problema.
- roomsOnDifferentFloors : <device(s)> no puede llegar a esas habitaciones porque están en pisos diferentes.
- runCycleFinish : <device/s>> <has/have> terminó de ejecutarse.
- securityRestriction : <dispositivo(s)> <has/have> una restricción de seguridad.
- humoDetected : Se detectó humo en <house name>.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Completa <it/them> y vuelve a intentarlo.
- con el respaldo celular : <device/s>> <is/are> usa el respaldo celular
- waterLeakDetected : <device(s)> <detect(s)> es una fuga de agua.