Este documento lista os erros e as exceções oficialmente aceitos para dispositivos de casa inteligente. Use os códigos de erros e exceções fornecidos na resposta da intent ou nas notificações, se você as tiver implementado, para que o Google Assistente alerte 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, por exemplo, "O dispositivo não está disponível no momento".
Erros
Retorne um código do erro quando um problema fizer com que uma solicitação de execução ou consulta falhe. Por exemplo, se uma fechadura estiver emperrada e não puder ser trancada ou destrancada, um erro sobre esse estado precisa ser retornado ao usuário.
Os códigos do 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 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 todo 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 nível do dispositivo.
Em resumo:
- 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 globais
O snippet JSON a seguir mostra como retornar erros globais na resposta QUERY ou EXECUTE.
Um exemplo de erro global deviceOffline devido ao hub estar
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 dispositivo
Resposta da CONSULTA
O snippet JSON a seguir mostra como retornar erros no nível do dispositivo na resposta 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 JSON a seguir mostra como informar erros no 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 JSON a seguir mostra como informar erros no 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 o TTS associado no dispositivo.
- aboveMaximumLightEffectsDuration : Isso é mais do que a duração máxima de 1 hora. Tente de novo.
- aboveMaximumTimerDuration : Só posso definir <dispositivo(s)> por até <período>
- actionNotAvailable : Não consigo fazer isso no momento. Dica:verifique os atributos do dispositivo e a lógica do estado atual no fulfillment.
- actionUnavailableWhileRunning : <dispositivo(s)> está/estão em execução no momento, então não posso fazer mudanças.
- alreadyArmed : <device(s)> <is/are> already armed.
- alreadyAtMax : <dispositivo(s)> já <está/estão> na temperatura máxima.
- alreadyAtMin : <dispositivo(s)> já <está/estão> na temperatura mínima.
- alreadyClosed : <device(s)> <is/are> already closed.
- alreadyDisarmed : <device(s)> <is/are> already disarmed.
- alreadyDocked : <dispositivo(s)> já <está/estão> na base.
- alreadyInState : <device(s)> <is/are> already in that state.
- alreadyLocked : <device(s)> <is/are> already locked.
- alreadyOff : <device(s)> <is/are> already off.
- alreadyOn : <dispositivo(s)> já <está/estão> ligado(s).
- alreadyOpen : <dispositivo(s)> já <está/estão> aberto(s).
- alreadyPaused : <device(s)> <is/are> already paused.
- alreadyStarted : <device(s)> <is/are> already started.
- alreadyStopped : <dispositivo(s)> já <está/estão> parado(s).
- alreadyUnlocked : <dispositivo(s)> já <está/estão> desbloqueado(s).
- ambiguousZoneName : Não foi possível identificar a zona que você quer dizer para <dispositivo(s)>. Verifique se as zonas têm nomes exclusivos e tente de novo.
- amountAboveLimit : É mais do que a capacidade do dispositivo <device(s)>.
- appLaunchFailed : Não foi possível iniciar <nome do app> em <dispositivo(s)>. Dica:verifique o appId e se o app é compatível com o hardware de destino.
- armFailure : Não foi possível ativar o(s) dispositivo(s).
- armLevelNeeded : Não entendi em que nível definir <dispositivo(s)>. Diga "Definir <dispositivo(s)> como <baixa segurança>" ou "Definir <dispositivo(s)> como <alta segurança>"
- authFailure : Não consigo acessar o dispositivo <device(s)>. Verifique o app para confirmar se o dispositivo <device/devices> está <is/are> totalmente configurado.
- bagFull : <dispositivo(s)> está(ão) com <o saco cheio/os sacos cheios>. Esvazie-<o/os> e tente novamente.
- belowMinimumLightEffectsDuration : Isso é menos do que a duração mínima de 5 minutos. Tente de novo.
- belowMinimumTimerDuration : Não é possível definir um tempo tão curto no dispositivo <device(s)>. Tente de novo.
- binFull : <dispositivo(s)> <está/estão> com <o compartimento cheio/os compartimentos cheios>.
- cancelArmingRestricted : Não foi possível cancelar a ativação de <dispositivo(s)>.
- cancelTooLate : Infelizmente, não é mais possível cancelar. Use <dispositivo(s)> ou o app.
- channelSwitchFailed : A conexão ao canal <channel name> falhou. Tente novamente mais tarde. Dica:verifique os nomes/números dos canais e o status da assinatura do usuário.
- chargerIssue : Parece que <device(s)> está/estão com <a charger issue/charger issues>. Dica:o parceiro precisa investigar a telemetria no nível do hardware e a integridade da bateria.
- commandInsertFailed : Não foi possível processar os comandos para <dispositivo(s)>. Dica:investigue o desempenho de gravação do banco de dados ou a lógica de enfileiramento de comandos internos.
- deadBattery : <device(s)> <has/have> <a dead battery/dead batteries>.
- degreesOutOfRange : Os graus solicitados estão fora do alcance de <dispositivo(s)>.
- deviceAlertNeedsAssistance : <dispositivo(s)> <tem/têm> um alerta ativo e <precisa(m)> da sua ajuda.
- deviceAtExtremeTemperature : <dispositivo(s)> <está/estão> em <uma temperatura extrema/temperaturas extremas>.
- deviceBusy : O dispositivo <device(s)> está fazendo outra coisa no momento.
- deviceCharging : Parece que o dispositivo <device(s)> não pode fazer isso porque está carregando.
- deviceClogged : Parece que o dispositivo <device(s)> está entupido.
- deviceCurrentlyDispensing : <dispositivo(s)> já está liberando algo no momento.
- deviceDoorOpen : A porta do dispositivo <device(s)> está aberta. Feche-a e tente novamente.
- deviceHandleClosed : A alça está fechada em <dispositivo(s)>. Abra-a e tente de novo.
- deviceJammingDetected : <device(s)> <is/are> jammed.
- deviceLidOpen : A tampa está aberta em <dispositivo(s)>. Feche-a e tente de novo.
- deviceNeedsRepair : <device(s)> <need(s)> to be repaired. Entre em contato com o revendedor de serviços local.
- deviceNotDocked : Parece que o dispositivo <device(s)> não está na base. Coloque <o dispositivo/os dispositivos> na base e tente novamente.
-
deviceNotFound
:
<dispositivo(s)> não <está/estão> disponível(is). Tente configurar <o dispositivo/os dispositivos> novamente. Dica:verifique se o back-end sempre mantém o Home Graph sincronizado. Chame
requestSyncsempre que dispositivos forem adicionados ou removidos. - deviceNotMounted : Parece que <dispositivo(s)> não pode(m) fazer isso porque não está/estão instalado(s).
- deviceNotReady : <device(s)> <is/are>n't ready.
- deviceStuck : <device(s)> <is/are> stuck and needs your help.
- deviceTampered : <dispositivo(s)> foi/foram adulterado(s).
- deviceThermalShutdown : Parece que o dispositivo <device(s)> foi desligado devido a temperaturas extremas.
- directResponseOnlyUnreachable : <dispositivo(s)> não <aceita/aceitam> controle remoto.
- disarmFailure : Não foi possível desativar o(s) dispositivo(s).
- discreteOnlyOpenClose : Não é possível abrir ou fechar o dispositivo <device(s)> parcialmente.
- dispenseAmountAboveLimit : <dispositivo(s)> não libera(m) grandes quantidades.
- dispenseAmountBelowLimit : <dispositivo(s)> não libera(m) pequenas quantidades.
- dispenseAmountRemainingExceeded : <dispositivo(s)> não tem <item de liberação> suficiente para fazer isso.
- dispenseFractionalAmountNotSupported : <device(s)> não pode dispensar frações de <dispense item>.
- dispenseFractionalUnitNotSupported : <device(s)> não é compatível com frações dessa unidade de <dispense item>.
- dispenseUnitNotSupported : <dispositivo(s)> não aceita(m) essa unidade para <item de liberação>.
- doorClosedTooLong : Já faz um tempo que a porta do dispositivo <device(s)> está aberta. Abra a porta, confira se há algo dentro do micro-ondas e tente novamente.
- emergencyHeatOn : <dispositivo(s)> <está/estão> no modo de aquecimento de emergência, então <ele/eles> precisa(m) ser ajustado(s) manualmente.
- faultyBattery : <device(s)> <has/have> <a faulty battery/faulty batteries>.
- floorUnreachable : <device(s)> can't reach that room. Coloque <it/them> no piso certo e tente novamente.
- functionNotSupported : Na verdade, <device(s)> não <supports/support> essa funcionalidade. Dica:verifique se a resposta de SYNC reflete com precisão os recursos do dispositivo.
- genericDispenseNotSupported : Preciso saber o que você quer que eu dispense. Tente de novo com o nome do item.
- hardError : Ocorreu um erro e não consigo controlar seu dispositivo de casa.
- hardError : Ocorreu um erro e não consigo controlar seu dispositivo de casa.
- inAutoMode : <device(s)> <is/are> currently set to auto mode. Para mudar a temperatura, mude o modo <dele/deles>.
- inAwayMode : <device(s)> <is/are> currently set to away mode. Para controlar o termostato, mude manualmente para o modo "Em casa" usando o app Nest em um smartphone, tablet ou computador.
- inDryMode : <device(s)> está/estão no modo de desumidificação. Para mudar a temperatura, mude o modo <dele/deles>.
- inEcoMode : <dispositivo(s)> está/estão no modo Eco. Para mudar a temperatura, mude <it/them> para outro modo.
- inFanOnlyMode : <device(s)> <is/are> currently set to fan-only mode. Para mudar a temperatura, mude <it/them> para outro modo.
- inHeatOrCool : <device(s)> <is/are>n't in heat/cool mode.
- inHumidifierMode : <dispositivo(s)> está(ão) no modo umidificador. Para mudar a temperatura, mude <it/them> para outro modo.
- inOffMode : <dispositivo(s)> está(ão) desligado(s). Para mudar a temperatura, mude o modo <dele/deles>.
- inPurifierMode : <device(s)> <is/are> currently set to purifier mode. Para mudar a temperatura, mude o modo <dele/deles>.
- inSleepMode : <dispositivo(s)> <está/estão> no modo de espera. Tente novamente mais tarde.
- inSoftwareUpdate : <device(s)> <is/are> currently in a software update.
- lockFailure : Não foi possível bloquear o(s) dispositivo(s) <device(s)>. Dica:investigue se há bloqueios físicos, baixa energia ou falhas no motor do hardware da fechadura.
- lockedState : <device(s)> <is/are> currently locked.
- lockedToRange : Essa temperatura está fora do intervalo bloqueado em <dispositivo(s)>.
- lowBattery : <device(s)> <has/have> low battery.
- maxSettingReached : <dispositivo(s)> já <está/estão> na configuração máxima.
- maxSpeedReached : <dispositivo(s)> já <está/estão> na velocidade máxima.
- minSettingReached : <dispositivo(s)> já <está/estão> na configuração mínima.
- minSpeedReached : <dispositivo(s)> já <está/estão> na velocidade mínima.
- monitoringServiceConnectionLost : <device(s)> <has/have> lost <its/their> connection to the monitoring service.
- needsAttachment : Parece que falta um acessório obrigatório no dispositivo <device(s)>. Substitua e tente novamente.
- needsBin : Parece que falta um compartimento no dispositivo <device(s)>. Substitua e tente novamente.
- needsPads : <device(s)> <need(s)> new pads.
- needsSoftwareUpdate : <dispositivo(s)> precisa(m) de uma atualização de software.
- needsWater : <device(s)> <need(s)> water.
- networkProfileNotRecognized : Não reconheço o perfil de rede "<network profile>" em <device(s)>. Dica:verifique se a string do nome do perfil corresponde aos perfis compatíveis na resposta SYNC.
- networkSpeedTestInProgress : Já estou testando a velocidade da rede <network>.
- noAvailableApp : Parece que o app <nome do app> não está disponível.
- noAvailableChannel : Desculpe, parece que o nome do canal <channel name> não está disponível.
- noChannelSubscription : Desculpe, você não está inscrito no canal <nome do canal> no momento.
- noTimerExists : Não tem nenhum timer definido no dispositivo <device(s)>.
- notSupported : Esse modo não está disponível para <dispositivo(s)>.
- obstructionDetected : <dispositivo(s)> detectou uma obstrução.
- offline , deviceOffline : Desculpe, parece que <device(s)> não <is/are> disponível no momento.
- onRequiresMode : Especifique qual modo você quer ativar.
- passphraseIncorrect : Parece que o PIN está incorreto.
- percentOutOfRange : Não consigo definir <percent> para <device(s)>.
- pinIncorrect : (passphraseIncorrect)
- rainDetected : Não abri <dispositivo(s)> porque detectei chuva.
- rangeTooClose : Essas temperaturas estão muito próximas para um intervalo de aquecimento e resfriamento para <dispositivo(s)>. Escolha temperaturas mais distantes.
- relinkRequired : Ocorreu um erro com sua conta. Use o app Google Home ou Google Assistente para conectar o <dispositivo> novamente. Dica:verifique se o servidor retorna esse código quando um token de atualização é permanentemente inválido.
-
remoteSetDisabled
:
- Parâmetro opcional
errorCodeReason currentlyArmed- Como o sistema de segurança já está ligado, você precisa usar <dispositivo(s)> ou o app para fazer alterações.remoteUnlockNotAllowed- Não posso desbloquear <dispositivo(s)> remotamente.remoteControlOff: A ação está desativada no momento. Ative o controle remoto em <dispositivo(s)> e tente novamente.childSafetyModeActive: A ação ficará desativada para <dispositivo(s)> enquanto o modo de segurança infantil estiver ativo.
- Parâmetro opcional
- roomsOnDifferentFloors : <dispositivo(s)> não chega(m) a esses ambientes porque ficam em andares diferentes.
- safetyShutOff : <device(s)> <is/are> no modo de desligamento de segurança, então <it/they> precisam ser ajustados manualmente.
- sceneCannotBeApplied : Não é possível aplicar <device(s)>. Dica:verifique a integridade interna das cenas do usuário na nuvem do parceiro.
- securityRestriction : <device(s)> <has/have> a security restriction.
- softwareUpdateNotAvailable : Não há atualizações de software disponíveis para <dispositivo(s)>.
- startRequiresTime : Para fazer isso, me diga por quanto tempo você quer que o <dispositivo(s)> funcione.
- stillCoolingDown : <device(s)> <is/are> still cooling down.
- stillWarmingUp : <dispositivo(s)> ainda <está/estão> aquecendo.
- streamUnavailable : Parece que o stream não está disponível no momento em <device(s)>.
- streamUnplayable : Não consigo abrir o stream de <dispositivo(s)> no momento. Dica:verifique a sinalização WebRTC/HLS e se o URL do stream é válido.
- tankEmpty : <device(s)> <has/have> <an empty tank/empty tanks>. Please fill <it/them> and try again.
- targetAlreadyReached : Parece que essa já é a temperatura atual.
- timerValueOutOfRange : Não é possível definir o timer de <dispositivo(s)> para esse período.
- tooManyFailedAttempts : Muitas tentativas falharam. Acesse o app do dispositivo para concluir essa ação.
- transientError : Algo deu errado ao controlar <dispositivo(s)>. Tente de novo. Dica:na maioria das vezes, esses erros se manifestam como uma conexão com um dispositivo ou serviço que foi interrompida. Também se novas conexões com um servidor não puderem ser abertas.
- turnedOff , deviceTurnedOff : <device(s)> <is/are> off right now.
- unableToLocateDevice : Não foi possível localizar <dispositivo(s)>. Dica:verifique a conectividade local do dispositivo (Wi-Fi/Bluetooth).
- unknownFoodPreset : <dispositivo(s)> não é compatível com essa predefinição para alimentos.
- unlockFailure : Não foi possível desbloquear o(s) dispositivo(s) <device(s)>. Dica:investigue travamentos de hardware, bateria fraca ou entradas de PIN inválidas.
- unpausableState : Não é possível pausar o(s) <dispositivo(s)> no momento.
- userCancelled : ok
- valueOutOfRange : Não é possível definir os dispositivos <device(s)> para essa temperatura.
Relatórios de estado on-line e off-line
Quando um dispositivo estiver off-line, informe <code{"online": code="" dir="ltr" false}<="" translate="no"> ao Report State em até cinco minutos após o comportamento do dispositivo. Por outro lado, quando um dispositivo volta a ficar on-line, você precisa informar <code{"online": code="" dir="ltr" translate="no" true}<=""> ao Report State em até cinco minutos após o comportamento do dispositivo. Sempre que um dispositivo voltar a ficar on-line, o parceiro precisará informar todos os estados atuais do dispositivo usando a APIreportStateAndNotification.
Este exemplo mostra que um tipo de dispositivo light está on-line e informa
todos os estados atuais do dispositivo.
"requestId": "test-request-id",
"agentUserId": "agent-user-1",
"payload":{
"devices": {
"states": {
"device-id-1": {
"brightness": 65,
"on": true,
"online": true
}
"notifications": {},
}
}
}Exceções
Retorne 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 bem-sucedido (status = "SUCCESS"), informe as exceções
usando o atributo StatusReport (para dispositivos que não sejam o de destino)
ou retornando um exceptionCode apropriado (para o dispositivo de destino).
Por exemplo, se o filtro de fiapos da secadora estiver cheio, o usuário ainda poderá iniciar o aparelho, mas talvez você queira avisar sobre esse estado. Da mesma forma, quando um dispositivo está com bateria fraca, mas não descarregada, ainda é possível executar um comando, mas é preciso informar que a bateria 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 bloqueante (SUCCESS) sobre o dispositivo de destino
Este exemplo é para trancar a porta:
A fechadura da porta da frente está com as pilhas fracas. 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) 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 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 seguintes exceções vão produzir o TTS associado no dispositivo.
- bagFull : <dispositivo(s)> está(ão) com <o saco cheio/os sacos cheios>. Esvazie-<o/os> e tente novamente.
- binFull : <dispositivo(s)> <está/estão> com <o compartimento cheio/os compartimentos cheios>.
- carbonMonoxideDetected : Foi detectado monóxido de carbono em <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 : <device(s)> <is/are> open.
- deviceTampered : <dispositivo(s)> foi/foram adulterado(s).
- deviceUnplugged : <device(s)> <is/are> unplugged.
- floorUnreachable : <dispositivo(s)> não chega(m) a esse ambiente. Coloque <it/them> no piso certo e tente novamente.
- 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)> movimento.
- needsPads : <device(s)> <need(s)> new pads.
- needsSoftwareUpdate : <dispositivo(s)> precisa(m) de uma atualização de software.
- needsWater : <dispositivo(s)> <precisa(m)> de água.
- networkJammingDetected : a conexão de rede doméstica com o(s) dispositivo(s) não está funcionando corretamente.
- noIssuesReported : <device(s)> não relatou problemas.
- roomsOnDifferentFloors : <dispositivo(s)> não chega(m) a esses ambientes porque ficam em andares diferentes.
- runCycleFinished : <device(s)> <has/have> finished running.
- securityRestriction : <device(s)> <has/have> a security restriction.
- smokeDetected : Fumaça detectada em <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)> um vazamento de água.