Erros e exceções

Este documento lista os erros e as exceções com suporte oficial para dispositivos de casa inteligente. Use esses códigos de erros e exceções na resposta da intent ou nas notificações, se você as implementou, para que o Google Assistente alertem os usuários finais sobre problemas relacionados a um determinado comando ou estado do dispositivo. Se a resposta tiver formatação incorreta ou errorCode, o Google Assistente vai mostrar aos usuários uma mensagem de erro genérica, por exemplo, "Desculpe, o dispositivo não está disponível no momento".

Erros

Você precisa retornar um código de erro quando um problema faz com que uma solicitação de execução ou de consulta falhe. Por exemplo, se uma fechadura de porta estiver travada e não puder ser travada ou destravada, um erro sobre esse estado será retornado ao usuário.

Os códigos de erro podem ser anexados no nível do dispositivo ou global. Por exemplo, se um usuário tiver muitas luzes de um provedor e elas forem controladas por um hub, quando o usuário pedir para desligar todas as luzes, o provedor poderá retornar um erro no nível do dispositivo se uma única luz estiver off-line ou um erro no nível global se o hub estiver off-line e nenhuma luz puder ser controlada. Se todos os dispositivos estiverem off-line, não haverá diferença entre usar erros no nível global ou no dispositivo.

Quando um dispositivo estiver off-line, informe {"online": false} para Report State em até 5 minutos após o comportamento do dispositivo.

Resumindo:

  • Erro global: todos os dispositivos na resposta têm o mesmo erro.
  • Erro no nível local: resposta mista com casos de erro e sucesso

Erros no nível global

O snippet de JSON a seguir mostra como retornar erros no nível global na resposta QUERY ou EXECUTE.

Um exemplo de erro global deviceOffline devido ao hub está off-line:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "deviceOffline",
    "status" : "ERROR"
  }
}

Um exemplo de erro global inSoftwareUpdate devido à atualização do hub:

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "errorCode": "inSoftwareUpdate",
    "status" : "ERROR"
  }
}

Erros no nível do dispositivo

Resposta de CONSULTA

O snippet JSON a seguir mostra como retornar erros no nível do dispositivo na resposta da QUERY.

{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "devices": {
      "device-id-1": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      },
      "device-id-2": {
        "errorCode": "deviceOffline",
        "status" : "ERROR"
      }
    }
  }
}

Resposta EXECUTE

O snippet JSON a seguir mostra como retornar erros no nível do dispositivo na resposta 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
        }
      }
    ]
  }
}

Notificações com erros

Notificação proativa

O snippet de JSON a seguir mostra como informar erros no nível do dispositivo em uma notificação proativa.

{
  "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"
          }
        }
      }
    }
  }
}

Resposta de acompanhamento

O snippet de JSON a seguir mostra como informar erros no nível do dispositivo em uma resposta de acompanhamento.

{
  "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 erros

Os erros a seguir vão produzir a TTS associada no dispositivo.

  • aboveMaximumLightEffectsDuration : É mais do que a duração máxima de uma hora. Tente novamente.
  • aboveMaximumTimerDuration : Só posso definir <device(s)> por até <time period>
  • actionNotAvailable : Não consigo fazer isso no momento.
  • actionUnavailableWhileRunning : <device(s)> <is/are> está(m) em execução no momento, então não posso fazer mudanças.
  • alreadyArmed : <device(s)> <is/are> já está(m) ativado(s).
  • alreadyAtMax : <device(s)> <is/are> já está definido para a temperatura máxima.
  • alreadyAtMin : <device(s)> <is/are> já está definido para a temperatura mínima.
  • alreadyClosed : <device(s)> <is/are> já está(ão) fechado(s).
  • alreadyDisarmed : <device(s)> <is/are> já desativado.
  • alreadyDocked : <device(s)> <is/are> já está acoplado.
  • alreadyInState : <device(s)> <is/are> já estão nesse estado.
  • alreadyLocked : <device(s)> <is/are> já está bloqueado.
  • alreadyOff : <device(s)> <is/are> já estão desativados.
  • alreadyOn : <device(s)> <is/are> já está(m) ligado(s).
  • alreadyOpen : <device(s)> <is/are> já está aberto.
  • alreadyPaused : <device(s)> <is/are> já está(ão) pausado(s).
  • alreadyStarted : <device(s)> <is/are> já iniciado.
  • alreadyStopped : <device(s)> <is/are> já foram interrompidos.
  • alreadyUnlocked : <device(s)> <is/are> já desbloqueado.
  • ambiguousZoneName : O <device(s)> não consegue identificar a zona a que você se refere. Confira se elas têm nomes exclusivos e tente novamente.
  • amountAboveLimit : É mais do que o que <device(s)> pode suportar.
  • appLaunchFailed : Não foi possível iniciar o <nome do app> no(s) <dispositivo(s)>.
  • armFailure : <device(s)> não pode ser ativado.
  • armLevelNeeded : Não sei em qual nível definir <device(s)>. Diga "Definir <dispositivos> como <baixa segurança>" ou "Definir <dispositivos> como <alta segurança>"
  • authFailure : Não consigo acessar <device(s)>. Verifique o app para confirmar se o <device/devices> <está/estão> totalmente configurado.
  • BagFull : <device(s)> <has/have> <a full bag/full bags>. Esvazie <it/them> e tente novamente.
  • belowMinimumLightEffectsDuration : É menor do que a duração mínima de cinco minutos. Tente novamente.
  • belowMinimumTimerDuration : Não é possível definir <device(s)> por um tempo tão curto. Tente de novo.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Não foi possível cancelar a ativação de <device(s)>.
  • cancelTooLate : É tarde demais para cancelar. Use <device(s)> ou o app.
  • channelSwitchFailed : A conexão com o canal <channel name> falhou. Tente novamente mais tarde.
  • chargerIssue : Parece que <device(s)> <has/have> <a charger issue/charger issues>.
  • commandInsertFailed : Não foi possível processar comandos para <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
  • degreesOutOfRange : Os graus solicitados estão fora do alcance de <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <tem/têm> um alerta ativo e <precisa(m)> da sua ajuda.
  • deviceAtExtremeTemperature : <device(s)> <is/are> <an extreme temperature/extreme temperatures>.
  • deviceBusy : Parece que o <device(s)> está fazendo outra coisa no momento.
  • deviceCharging : Parece que <device(s)> não pode fazer isso porque (ha_shared.ItsTheyre size=$item.devices.total_device_count) está carregando.
  • deviceClogged : Desculpe, parece que o <device(s)> está entupido.
  • deviceCurrentlyDispensing : <device(s)> já está liberando algo no momento.
  • deviceDoorOpen : A porta está aberta em <device(s)>. Feche-a e tente novamente.
  • deviceHandleClosed : O handle foi fechado em <device(s)>. Abra e tente novamente.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceLidOpen : A tampa do <device(s)> está aberta. Feche-a e tente novamente.
  • deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Entre em contato com o provedor de serviços local.
  • deviceNotDocked : Parece que <device(s)> <isn't/aren't> está desconectado. Coloque <ele/ela> na base e tente novamente.
  • deviceNotFound : <device(s)> <is/are>n't available. Tente configurar <ele/eles> novamente.
  • deviceNotMounted : Parece que <device(s)> não pode fazer isso porque <it/they> <is/are>n't montado.
  • deviceNotReady : <device(s)> <is/are>n't ready.
  • deviceStuck : <device(s)> <is/are> está/estão travado(s) e precisa de ajuda.
  • deviceTampered : <device(s)> <has/have> foram adulterados.
  • deviceThermalShutdown : Parece que o <device(s)> foi desligado devido a temperaturas extremas.
  • directResponseOnlyUnreachable : <device(s)> <não/não> tem suporte para controle remoto.
  • disarmFailure : <device(s)> não foi desativado.
  • DiscreteOnlyOpenClose : Desculpe, <device(s)> só pode ser aberto ou fechado completamente.
  • dispenseAmountAboveLimit : <device(s)> não pode liberar uma quantidade tão grande.
  • dispenseAmountBelowLimit : <device(s)> não pode liberar uma quantidade tão pequena.
  • dispenseAmountRemainingExceeded : <device(s)> não tem <dispense item> suficiente para fazer isso.
  • dispenseFractionalAmountNotSupported : <device(s)> não pode dispensar frações de <dispense item>.
  • dispenseFractionalUnitNotSupported : <device(s)> não oferece suporte a frações dessa unidade para <dispense item>.
  • dispenseUnitNotSupported : <device(s)> não oferece suporte a essa unidade para <dispense item>.
  • doorClosedTooLong : Já faz um tempo que a porta do <device(s)> está aberta. Abra a porta, confira se há algo dentro do micro-ondas e tente novamente.
  • emergencyHeatOn : <device(s)> <is/are> no modo de aquecimento de emergência. Portanto, <it/they> precisa ser ajustado manualmente.
  • faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
  • floorUnreachable : <device(s)> não consegue acessar esse ambiente. Coloque <ele/ela> no andar certo e tente novamente.
  • functionNotSupported : Na verdade, <device(s)> <não tem/não tem> suporte para essa funcionalidade.
  • genericDispenseNotSupported : Preciso saber o que você quer dispensar. Tente novamente com o nome do item.
  • hardError : Ocorreu um erro e não foi possível controlar seu dispositivo doméstico.
  • hardError : Ocorreu um erro e não foi possível controlar seu dispositivo doméstico.
  • inAutoMode : <device(s)> <is/are> está atualmente definido como modo automático. Para mudar a temperatura, escolha outra opção.
  • inAwayMode : <device(s)> <is/are> está definido como modo ausente. Para controlar o termostato, escolha o modo "Em casa" manualmente usando o app Nest em um smartphone, tablet ou computador.
  • inDryMode : <device(s)> <is/are> está definido como modo seco. Para mudar a temperatura, escolha outra opção.
  • inEcoMode : <device(s)> <is/are> está definido como modo de economia de energia. Para mudar a temperatura, escolha outra opção.
  • inFanOnlyMode : <device(s)> <is/are> está atualmente definido como modo somente ventilador. Para mudar a temperatura, escolha outra opção.
  • inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
  • inHumidifierMode : <device(s)> <is/are> está definido como modo umidificador. Para mudar a temperatura, escolha outra opção.
  • inOffMode : <device(s)> <is/are> estão desativados. Para mudar a temperatura, escolha outra opção.
  • inPurifierMode : <device(s)> <is/are> está definido como modo purificador. Para mudar a temperatura, escolha outra opção.
  • inSleepMode : <device(s)> <is/are> no modo de suspensão. Tente novamente mais tarde.
  • inSoftwareUpdate : <device(s)> <is/are> está(ão) em uma atualização de software.
  • lockFailure : <device(s)> não pode ser bloqueado.
  • "lockedState" : <device(s)> <is/are> atualmente bloqueado.
  • lockedToRange : Essa temperatura está fora do intervalo determinado em <device(s)>.
  • lowBattery : <device(s)> <has/have> bateria fraca.
  • maxSettingReached : <device(s)> <is/are> já está definido com a configuração mais alta.
  • maxSpeedReached : <device(s)> <is/are> já está definido para a velocidade máxima.
  • minSettingReached : <device(s)> <is/are> já está definido com a configuração mais baixa.
  • minSpeedReached : <device(s)> <is/are> já está definido para a velocidade mínima.
  • MonitoringServiceConnectionLost : <device(s)> <tem/têm> perdido <sua/suas> conexão com o serviço de monitoramento.
  • needsAttachment : Parece que falta um anexo obrigatório em <device(s)>. Substitua e tente novamente.
  • needsBin : Parece que <device(s)> <is/are> está sem um recipiente. Substitua e tente novamente.
  • needsPads : <device(s)> <need(s)> novas almofadas.
  • needsSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
  • needsWater : <device(s)> <need(s)> água.
  • networkProfileNotRecognized : Não reconheço "<network profile>" em <device(s)>.
  • networkSpeedTestInProgress : <network> <speed/speeds>> já está sendo testado.
  • noAvailableApp : Parece que o <nome do app> não está disponível.
  • noAvailableChannel : Parece que o canal <channel name> não está disponível.
  • noChannelSubscription : Desculpe, parece que você não tem uma assinatura do canal <channel name> no momento.
  • noTimerExists : Parece que não há nenhum timer definido em <device(s)>.
  • notSupported : Desculpe, esse modo não está disponível para <device(s)>.
  • obstructionDetected : <device(s)> detectou uma obstrução.
  • offline , deviceOffline : Parece que <device(s)> <is/are> não está disponível no momento.
  • onRequiresMode : Especifique o modo que você quer ativar.
  • passphraseIncorrect : Parece que o PIN está incorreto.
  • PercentOutOfRange : Não é possível definir <device(s)> como <percent>.
  • pinIncorrect : (passphraseIncorrect)
  • rainDetected : Não abri <device(s)> porque detectei chuva.
  • rangeTooClose : Esses valores estão próximos demais para um intervalo de aquecer/refrigerar do <device(s)>. Escolha temperaturas mais distantes.
  • relinkRequired : Ocorreu um erro com sua conta. Use o app Google Home ou Google Assistente para conectar <device(s)> novamente.
  • remoteSetDisabled :
    • Parâmetro opcional errorCodeReason
    • currentlyArmed: Como o sistema de segurança já está ativado, você precisa usar o <device(s)> ou o app para fazer alterações.
    • remoteUnlockNotAllowed: Infelizmente, não consigo desbloquear o(s) <dispositivo(s)> remotamente.
    • remoteControlOff: essa ação está desativada no momento. Ative o controle remoto no <device(s)> e tente novamente.
    • childSafetyModeActive: essa ação fica desativada para <device(s)> enquanto o modo de segurança infantil está ativo.
  • roomsOnDifferentFloors : <device(s)> não consegue chegar a esses cômodos porque eles estão em andares diferentes.
  • safetyShutOff : <device(s)> <is/are> no modo de desativação de segurança. Portanto, <it/they> precisam ser ajustados manualmente.
  • sceneCannotBeApplied : Não foi possível aplicar <device(s)>.
  • securityRestriction : <device(s)> <tem/têm> uma restrição de segurança.
  • softwareUpdateNotAvailable : Não há atualização de software disponível para <device(s)>.
  • startRequiresTime : Para fazer isso, me diga por quanto tempo você quer que o <device(s)> funcione.
  • stillCoolingDown : <device(s)> <is/are> ainda está esfriando.
  • stillWarmingUp : <device(s)> <is/are> ainda está aquecendo.
  • streamUnavailable : Parece que o stream não está disponível no momento em <device(s)>.
  • streamUnplayable : Não é possível reproduzir o stream de <device(s)> no momento.
  • tankEmpty : <device(s)> <tem/têm> <um tanque vazio/tanques vazios>. Preencha <ele/eles> e tente novamente.
  • targetAlreadyReached : Parece que essa já é a temperatura atual.
  • timerValueOutOfRange : <device(s)> não pode ser definido para esse período.
  • tooManyFailedAttempts : Desculpe, muitas tentativas falharam. Acesse o app do dispositivo para concluir a ação.
  • errorTransient : Algo deu errado ao controlar <device(s)>. Tente novamente.
  • turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
  • unableToLocateDevice : Não foi possível localizar <device(s)>.
  • unknownFoodPreset : <device(s)> não é compatível com essa predefinição de alimentos.
  • unlockFailure : <device(s)> não pode ser desbloqueado.
  • unpausableState : <device(s)> não pode ser pausado no momento.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> não pode ser definido para essa temperatura.

Exceções

Você precisa retornar uma exceção quando houver um problema ou alerta associado a um comando. O comando pode ser bem-sucedido ou falhar.

Se o comando tiver sido concluído (status = "SUCCESS"), informe as exceções usando o atributo StatusReport (para dispositivos diferentes do de destino) ou retornando um exceptionCode adequado (para o dispositivo de destino).

Por exemplo, se a tela de fiapos da secadora estiver cheia, o usuário ainda poderá ligar a secadora, mas você pode alertá-lo sobre esse estado. Da mesma forma, quando um dispositivo tem uma bateria fraca que não está vazia, ainda é possível executar um comando, mas é necessário informar que a bateria do dispositivo está fraca.

Se o comando falhar devido a exceções, o status será "EXCEPTIONS", e as exceções serão informadas usando o atributo StatusReport.

Exceção não de bloqueio (SUCESSO) sobre o dispositivo de destino

Este exemplo é para trancar a porta:

A fechadura da porta da frente está com a bateria fraca. Trancando a porta da frente.

{
  "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"
      }
    }]
  }
}

Exceção sem bloqueio (SUCESSO) sobre outro dispositivo usando StatusReport

Este exemplo é para ativar um sistema de segurança: Ok, ativando o sistema de segurança. A janela da frente está aberta.

{
  "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"
        }]
      }
    }]
  }
}

Exceção de bloqueio sobre outro dispositivo usando 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 exceções

As exceções a seguir vão produzir a TTS associada no dispositivo.

  • BagFull : <device(s)> <has/have> <a full bag/full bags>. Esvazie <it/them> e tente novamente.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • carbonMonoxideDetected : Monóxido de carbono foi detectado em <nome da casa>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> <an extreme temperature/extreme temperatures>.
  • deviceJammingDetected : <device(s)> <is/are> jammed.
  • deviceMoved : <device(s)> <was/were> moved.
  • deviceOpen : <device(s)> <is/are> open.
  • deviceTampered : <device(s)> <has/have> foram adulterados.
  • deviceUnplugged : <device(s)> <is/are> unplugged.
  • floorUnreachable : <device(s)> não consegue acessar esse ambiente. Coloque <ele/ela> no andar certo e tente novamente.
  • hardwareFailure : <device(s)> <has/have> um problema de hardware.
  • inSoftwareUpdate : <device(s)> <is/are> está(ão) atualmente em uma atualização de software.
  • isBypassed : <device(s)> <is/are> atualmente ignorado.
  • lowBattery : <device(s)> <has/have> bateria fraca.
  • motionDetected : <device(s)> <detect(s)> motion.
  • needsPads : <device(s)> <need(s)> novas almofadas.
  • needsSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
  • needsWater : <device(s)> <need(s)> água.
  • networkJammingDetected : a conexão de rede doméstica com <device(s)> não está funcionando corretamente.
  • noIssuesReported : <device(s)> não relatou problemas.
  • roomsOnDifferentFloors : <device(s)> não consegue chegar a esses cômodos porque eles estão em andares diferentes.
  • runCycleFinished : <device(s)> <has/have> finished running.
  • securityRestriction : <device(s)> <tem/têm> uma restrição de segurança.
  • smokeDetected : Fumaça foi detectada em <nome da casa>.
  • tankEmpty : <device(s)> <tem/têm> <um tanque vazio/tanques vazios>. Preencha <ele/eles> e tente novamente.
  • usingCellularBackup : <device(s)> <is/are> usando o backup por celular.
  • waterLeakDetected : <device(s)> <detect(s)> um vazamento de água.