Esta é a Central do desenvolvedor do Google Home, a nova plataforma para aprender a desenvolver ações de casa inteligente. Observação: você continua criando ações no Console do Actions.

Erros e exceções

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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

Erros

Retorne um código de erro quando um problema fizer com que uma solicitação de execução ou consulta falhe. Por exemplo, se um bloqueio de porta estiver emperrado e não puder ser bloqueado ou destrancado, um erro sobre esse estado será retornado ao usuário.

Os códigos de erro podem ser anexados no nível do dispositivo ou no nível global. Por exemplo, se um usuário tiver muitas luzes de um provedor e for controlada por um hub, quando ele pedir para apagar todas as luzes, o provedor poderá retornar um erro no dispositivo se uma única luz estiver off-line ou um erro global se todo o hub estiver off-line e nenhuma luz puder ser controlada. Se todos os dispositivos estiverem off-line, não vai haver diferença entre erros no nível global ou no dispositivo. Quando um dispositivo estiver off-line, você precisará informar o estado {"online": false} em reportState, mesmo que retorne o código de erro deviceOffline.

Resumindo:

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

Erros no nível global

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

Um exemplo de erro de nível global deviceOffline devido ao hub é o off-line:

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

Um exemplo de erro de nível global inSoftwareUpdate devido ao hub é a atualização:

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

Erros no dispositivo

Resposta QUERY

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

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

EXECUTAR resposta

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

{
  "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 em JSON a seguir mostra como relatar 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 em JSON a seguir mostra como relatar 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 produzirão o TTS associado no dispositivo.

  • aboveMáximoLightEffects : Isso é mais do que a duração máxima de uma hora. Tente novamente.
  • aboveMaxTimerDuration : Só posso definir <device(s)> por até <time period>
  • actionNotAvailable : Não consigo fazer isso no momento.
  • actionAvailableDuringRunning : <device(s)> <está/estão> em execução, então não posso fazer mudanças.
  • alreadyArmed : <device(s)> <is/are> já está ligado.
  • alreadyAtMax : <device(s)> <is/are> já definido para a temperatura máxima.
  • alreadyAtMin : <device(s)> <is/are> já definido para a temperatura mínima.
  • alreadyClosed : <dispositivos(s)> <is/are> já fechados.
  • alreadyDisarmed : <device(s)> <is/are> já está desligado.
  • alreadyDocked : <device(s)> <is/are> já está na base.
  • alreadyInState : <device(s)> <is/are> já está nesse estado.
  • já bloqueado : <dispositivos)> <está/estão> bloqueados.
  • alreadyOff : <device(s)> <is/are> já estão desativados.
  • alreadyOn : <device(s)> <is/are> já ativado.
  • alreadyOpen : <device(s)> <is/are> já está aberto.
  • já pausado : <dispositivos(s)> <is/are> já pausados.
  • alreadyStarted : <device(s)> <is/are> já foi iniciado.
  • alreadySparado : <device(s)> <is/are> já parou.
  • alreadyUnlocked : <device(s)> <is/are> já está desbloqueado.
  • parseZoneName : Desculpe, <device(s)> não conseguiu identificar qual zona você quer dizer. Confira se elas têm nomes exclusivos e tente novamente.
  • amountAboveLimit : Isso é mais do que a capacidade de <device(s)>.
  • appLaunchFailed : Falha ao iniciar o <nome do app> em <device(s)>.
  • armFailure : <device(s)> não pôde ser ligado.
  • armLevelNeeded : Não sei em que nível definir <device(s)>. Diga "Definir <dispositivo(s)> como <segurança baixa>" ou "Definir <dispositivo(s)> como <segurança alta>"
  • authFailure : Não consigo acessar <device(s)>. Tente verificar o aplicativo para verificar se seu <device/devices> <is/are> está totalmente configurado.
  • bagFull : <device(s)> <has/have> <a full bag/full bolsas>. Esvazie <it/them> e tente novamente.
  • belowMinimumLightEffectsDuration : É inferior à duração mínima de cinco minutos. Tente novamente.
  • belowMinimumTimerDuration : Não é possível definir <device(s)> por um período tão curto. Tente novamente.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • cancelArmingRestricted : Não foi possível cancelar a ativação dos <device(s)>.
  • cancelTooLate : É tarde demais para cancelar. Use <device(s)> ou o app.
  • channelSwitchFailed : Falha ao alternar para o canal <nome do canal>. Tente novamente mais tarde.
  • carregadorIssue : Parece que os dispositivos estão com problemas <has/have> <um carregador/carregador>.
  • commandInsertFailed : Não foi possível processar comandos para <device(s)>.
  • deadBattery : <device(s)> <has/have> <a dead bateria/deadBattery>.
  • grausOutOfRange : Os graus solicitados estão fora do intervalo definido para <device(s)>.
  • deviceAlertNeedsAssistance : <device(s)> <has/have> um alerta ativo e <need(s)> sua assistência.
  • deviceAtExtremeTemperature : <device(s)> <is/are> a <uma temperatura extrema/extremas temperaturas>.
  • deviceBusy : Parece que <device(s)> já está fazendo algo.
  • deviceLoading : Parece que <device(s)> não consegue fazer isso porque (ha_shared.ItsYoure size=$item.devices.total_device_count) está carregando.
  • deviceClogged : Parece que <device(s)> está entupido.
  • DeviceDeviceDispensing : <device(s)> já está liberando algo no momento.
  • deviceDoorOpen : A porta está aberta em <device(s)>. Feche-a e tente novamente.
  • deviceHandleClosed : O identificador está fechado em <device(s)>. Abra-o e tente novamente.
  • deviceJammingDetected : <device(s)> <is/are> emperrado.
  • deviceLidOpen : A tampa está aberta em <device(s)>. Feche-a e tente novamente.
  • deviceNeedsRepair : <device(s)> <need(s)> a serem reparados. Entre em contato com a concessionária de serviços locais.
  • deviceNotDocked : Parece que o dispositivo <device(s)> <isn't/aren't> não está na base. Coloque <it/eles> e tente novamente.
  • deviceNotFound : <device(s)> <is/are>não estão disponíveis. Tente configurar <it/Eles> novamente.
  • deviceNotMounted : Parece que <device(s)> não pode fazer isso porque <it/does> <is/are>não estão instalados.
  • deviceNotReady : <device(s)> <is/are>não está pronto.
  • deviceStuck : <device(s)> <está/estão> travados e precisam da sua ajuda.
  • deviceTampered : <device(s)> <tem/com> adulteração.
  • deviceThermalShutdown : Parece que os dispositivos <device(s)> foram desligados devido a temperaturas extremas.
  • directResponseOnlyUnreachable : <device(s)> <não é compatível com o controle remoto ou não.
  • disarmFailure : <device(s)> não foi desligado.
  • discreteOnlyOpenClose : Só é possível abrir ou fechar <device(s)> o tempo todo.
  • enseenseAmountAboveLimit : <device(s)> não pode liberar uma quantidade tão grande.
  • enseenseAmountbelowLimit : <device(s)> não pode distribuir uma quantidade tão pequena.
  • enseenseAmountKeepExceeded : <device(s)> não tem <dispense item> suficiente para fazer isso
  • enseenseFractionalAmountNotSupported : <device(s)> não pode liberar frações de <dispense item>.
  • dispenseFractionalUnitNotSupported : <device(s)> não oferece suporte a frações dessa unidade de <dispense item>.
  • dispenseUnitNotSupported : <device(s)> não oferece suporte para essa unidade para <dispense item>.
  • doorClosedTooLong : Já faz algum tempo que a porta de <device(s)> foi aberta. Abra a porta, verifique se há algo dentro e tente novamente.
  • emergênciaHeatOn : <device(s)> <is/are> no modo de aquecimento de emergência, portanto, <it/eles> precisarão ser ajustados manualmente.
  • faultyBattery : <device(s)> <has/have> <a baulty/fouty pilha baterias>.
  • floorUnreachable : <device(s)> não pode chegar a esse ambiente. Coloque <it/eles> no andar certo e tente de novo.
  • functionNotSupported : Na verdade, <device(s)> <não é compatível ou não> tem compatibilidade com essa funcionalidade.
  • generalDispenseNotSupported : Preciso saber o que você quer disponibilizar. Tente novamente com o nome do item.
  • hardError : Algo deu errado e não consigo controlar seu dispositivo doméstico.
  • hardError : Algo deu errado e não consigo controlar seu dispositivo doméstico.
  • inAutoMode : <device(s)> <is/are> está configurado no modo automático. Para mudar a temperatura, escolha < ou a opção > diferente.
  • 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 no modo seco. Para mudar a temperatura, escolha < ou a opção > diferente.
  • inEcoMode : <device(s)> <is/are> está definido no modo econômico. Para mudar a temperatura, escolha < ou a opção > diferente.
  • inFanOnlyMode : <device(s)> <is/are> está definido como modo de ventilador. Para mudar a temperatura, escolha < ou a opção > diferente.
  • inHeatOrCool : <device(s)> <não está no modo aquecimento/refrigeração.
  • inHumidifierMode : <device(s)> <is/are> está definido no modo umidificador. Para mudar a temperatura, escolha < ou a opção > diferente.
  • inOffMode : <device(s)> <is/are> está desativado no momento. Para mudar a temperatura, você precisa alternar <it/elas> para um modo diferente.
  • inPurifierMode : <device(s)> <is/are> está definido no modo purificador. Para mudar a temperatura, escolha < ou a opção > diferente.
  • inSleepMode : <device(s)> <is/are> no modo de dormir. Tente de novo mais tarde.
  • inSoftwareUpdate : <device(s)> <is/are> no momento, em uma atualização de software.
  • lockFailure : <device(s)> não foi bloqueado.
  • lockState : <device(s)> <está/estão> bloqueados no momento.
  • lockToRange : Essa temperatura está fora do intervalo bloqueado em <device(s)>.
  • lowBattery : <device(s)> <has/have> low low bateria
  • maxSettingReached : <device(s)> <is/are> já está definido para 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 para a configuração mais baixa.
  • minSpeedReached : <device(s)> <is/are> já está definido para a velocidade mínima.
  • monitoringServiceConnectionLost : <device(s)> <has/have> perderam a conexão <its/their> para o serviço de monitoramento.
  • needAttachment : Parece que falta <device/s> um anexo obrigatório. Substitua e tente novamente.
  • NeedBin : Parece que há <device(s)> <is/are> faltando um contêiner. Substitua e tente novamente.
  • NeedPads : <device(s)> <need(s)>> novos blocos.
  • needSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
  • needWater : <device(s)> <need(s)> água.
  • networkProfileNotRecognized : Não reconheço "<network profile>" em <device(s)>.
  • networkSpeedTestInProgress : Já estou testando a <network> <speed/speeds>>.
  • noAvailableApp : Parece que o app <nome do app> não está disponível.
  • noAvailableChannel : Parece que o canal <channel name> não está disponível.
  • noChannelSubscription : Você não está inscrito no canal <channel name> no momento.
  • noTimerExists : Parece que não há nenhum timer definido em <device(s)>.
  • notSupported : Esse modo não está disponível para <device(s)>.
  • obstructionDetected : <device(s)> detectou uma obstrução.
  • off-line , deviceOff-line : Parece que <device(s)> <não/não estão disponíveis no momento.
  • onRequiresMode : Especifique qual modo você quer ativar.
  • senha incorreta : Parece que esse PIN está incorreto.
  • percentOutOfRange : Não consigo definir <device(s)> como <percent>.
  • pinCorrect : (passfrabarina)
  • rainDetected : Não abri o <dispositivo(s)> porque chuva foi detectada.
  • rangeTooClose : Esses valores estão próximos demais para um intervalo de aquecimento/refrigeração para <device(s)>. Escolha temperaturas mais distantes entre si.
  • relinkRequired : Parece que algo deu errado na sua conta. Use o app Google Home ou Google Assistente para vincular novamente <device(s)>.
  • remotamenteSetDisabled :
    • Parâmetro opcional errorCodeReason
    • currentlyArmed: como a segurança já está ativada, você precisa usar <device(s)> ou o app para fazer mudanças.
    • remoteUnlockNotAllowed - Não consigo desbloquear <device(s)> remotamente.
    • remoteControlOff: essa ação está desativada no momento. Ative o controle remoto em <device(s)> e tente novamente.
    • childSafetyModeActive: essa ação é desativada para <device(s)> enquanto o modo de segurança infantil está ativo.
  • roomOnDifferentFloors : <device(s)> não pode chegar a essas salas por estarem em andares diferentes.
  • safetyShutOff : <device(s)> <is/are> no Modo de Desligamento de Segurança, portanto <it/ele> terá que ser ajustado manualmente.
  • SceneCannotBeApplied : Não é possível aplicar <device(s)>.
  • securityRestriction : <device(s)> <has/have> uma restrição de segurança.
  • softwareUpdateNotAvailable : Não há atualização de software disponível em <device(s)>.
  • startRequiresTime : Para fazer isso, me diga por quanto tempo você quer executar <device(s)>.
  • stillCoolingDown : <device(s)> <is/are> ainda está resfriando.
  • stillWarmingUp : <device(s)> <is/are> ainda está se aquecendo.
  • streamUnavailable : Parece que o streaming está indisponível em <device(s)> no momento.
  • streamUnplayable : Não consigo mostrar o streaming de <device(s)> no momento.
  • tankEmpty : <device(s)> <has/have> <um tanque vazio/tanques vazios>. Preencha <it/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 : Há muitas tentativas com falha. Acesse o app do seu dispositivo para concluir essa ação.
  • transientError : Algo deu errado ao controlar <device(s)>. Tente novamente.
  • turnOff , deviceTurnedOff : <device(s)> <is/are> desativado no momento.
  • Não é possível localizar dispositivo : Não consegui localizar <device(s)>.
  • UnknownFoodPreset : <device(s)> não oferece suporte a essa predefinição para alimentos.
  • desbloqueioFailure : <device(s)> não pôde ser desbloqueado.
  • unpausebleState : <device(s)> não pode ser pausado no momento.
  • userCancelled : ok
  • valueOutOfRange : <device(s)> não pode ser definido para essa temperatura.

Exceções

Retorne uma exceção quando houver um problema ou alerta associado a um comando. O comando pode ter êxito ou falhar.

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

Por exemplo, se a tela de lint da secadora estiver cheia, o usuário ainda poderá iniciar o secador, mas recomendamos avisar sobre esse estado. Da mesma forma, quando um dispositivo tem uma bateria fraca, e esse número não está vazio, você ainda pode executar um comando, mas precisa informar que a bateria dele está acabando.

Se o comando falhar devido a exceções, o status será "EXCEPTIONS", e as exceções serão relatadas usando a característica StatusReport.

Exceção sem bloqueio (SUCCESS) no dispositivo de destino

Este exemplo é para trancar a porta:

A trava 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 (SUCCESS) em outro dispositivo usando o StatusReport

Este exemplo é para ligar um sistema de segurança: Ok, ligar 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"
        }]
      }
    }]
  }
}

Bloquear a exceção sobre outro dispositivo usando o 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 abaixo produzirão o TTS associado no dispositivo.

  • bagFull : <device(s)> <has/have> <a full bag/full bolsas>. Esvazie <it/them> e tente novamente.
  • binFull : <device(s)> <has/have> <a full bin/full bins>.
  • CarbonMonoxideDetected : O monóxido de carbono foi detectado em <house name>.
  • deviceAtExtremeTemperature : <device(s)> <is/are> a <uma temperatura extrema/extremas temperaturas>.
  • deviceJammingDetected : <device(s)> <is/are> emperrado.
  • deviceMove : <device(s)> <was/were> movido.
  • deviceOpen : <dispositivo(s)> <is/are> aberto.
  • deviceTampered : <device(s)> <tem/com> adulteração.
  • deviceUnplugged : <device(s)> <is/are> desconectados.
  • floorUnreachable : <device(s)> não pode chegar a esse ambiente. Coloque <it/eles> no andar certo e tente de novo.
  • hardwareFailure : <device(s)> <has/have> um problema de hardware.
  • inSoftwareUpdate : <device(s)> <is/are> no momento, em uma atualização de software.
  • isSkiped : <device(s)> <is/are> foi ignorado.
  • lowBattery : <device(s)> <has/have> low low bateria
  • MotionDetected : <device(s)> <detect(s)> movimento.
  • NeedPads : <device(s)> <need(s)>> novos blocos.
  • needSoftwareUpdate : <device(s)> <need(s)> uma atualização de software.
  • needWater : <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 relataram problemas.
  • roomOnDifferentFloors : <device(s)> não pode chegar a essas salas por estarem em andares diferentes.
  • runCycleFinished : <device(s)> <tem/tem> concluído a execução.
  • securityRestriction : <device(s)> <has/have> uma restrição de segurança.
  • fumaçaDetected : Fumaça foi detectada em <nome da casa>.
  • tankEmpty : <device(s)> <has/have> <um tanque vazio/tanques vazios>. Preencha <it/Eles> e tente novamente.
  • usingCellularBackup : <device(s)> <is/are> usando o backup celular.
  • waterLeakDetected : <device(s)> <detect(s)> um vazamento de água.