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.
Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Guia do sistema de segurança de casa inteligente

action.devices.types.SECURITYSYSTEM: os sistemas de segurança podem ser ligados e desligados. Eles podem ser ligados a vários níveis de segurança (por exemplo, em casa e ausente) e podem relatar informações sobre determinados sensores, como um que detecta movimento ou uma janela aberta.

Esse tipo indica que o dispositivo recebe o ícone do sistema de segurança e alguns sinônimos e aliases relacionados.

Recursos do dispositivo

Consulte a documentação de característica correspondente para ver detalhes de implementação, como atributos e estados aos quais seu serviço precisa oferecer suporte, e como criar respostas EXECUTE e QUERY.

Características necessárias

Essas características e os comandos são obrigatórios, se aplicável ao seu dispositivo.

Essas características são recomendadas, se aplicável ao seu dispositivo. No entanto, você pode misturar e combinar todas as características disponíveis para atender melhor à funcionalidade atual do seu produto.

Requisitos de qualidade

  • Latência:precisa ser menor ou igual a 2.000 ms.
  • Confiabilidade: precisa ser maior ou igual a 97%.

Dispositivo de exemplo: sistema de segurança simples

Esta seção contém exemplos de payloads de intent que representam um "Sistema de Segurança" comum com base no tipo de dispositivo e nas características acima. Se você adicionar ou remover características na sua implementação, modifique suas respostas de acordo com essas mudanças.

Exemplo de resposta SYNC

Solicitação
{
  "requestId": "6894439706274654512",
  "inputs": [
    {
      "intent": "action.devices.SYNC"
    }
  ]
}
Resposta
{
  "requestId": "6894439706274654512",
  "payload": {
    "agentUserId": "user123",
    "devices": [
      {
        "id": "123",
        "type": "action.devices.types.SECURITYSYSTEM",
        "traits": [
          "action.devices.traits.StatusReport",
          "action.devices.traits.ArmDisarm"
        ],
        "name": {
          "name": "Simple security system"
        },
        "willReportState": true,
        "attributes": {
          "availableArmLevels": {
            "levels": [
              {
                "level_name": "home_key",
                "level_values": [
                  {
                    "level_synonym": [
                      "Home and Guarding",
                      "level 1",
                      "home",
                      "SL1"
                    ],
                    "lang": "en"
                  }
                ]
              },
              {
                "level_name": "away_key",
                "level_values": [
                  {
                    "level_synonym": [
                      "Away and Guarding",
                      "level 2",
                      "away",
                      "SL2"
                    ],
                    "lang": "en"
                  }
                ]
              }
            ],
            "ordered": true
          }
        },
        "deviceInfo": {
          "manufacturer": "smart-home-inc",
          "model": "hs1234",
          "hwVersion": "3.2",
          "swVersion": "11.4"
        }
      }
    ]
  }
}

Exemplo de resposta QUERY

Solicitação
{
  "requestId": "6894439706274654514",
  "inputs": [
    {
      "intent": "action.devices.QUERY",
      "payload": {
        "devices": [
          {
            "id": "123"
          }
        ]
      }
    }
  ]
}
Resposta
{
  "requestId": "6894439706274654514",
  "payload": {
    "devices": {
      "123": {
        "status": "SUCCESS",
        "online": true,
        "isArmed": true,
        "currentArmLevel": "home_key",
        "currentStatusReport": [
          {
            "blocking": false,
            "deviceTarget": "123",
            "priority": 0,
            "statusCode": "lowBattery"
          }
        ]
      }
    }
  }
}

Exemplos de comandos EXECUTE

Armarm

Para mais detalhes sobre os parâmetros de comando, consulte a referência action.devices.traits.ArmDisarm.

Solicitação
{
  "requestId": "6894439706274654516",
  "inputs": [
    {
      "intent": "action.devices.EXECUTE",
      "payload": {
        "commands": [
          {
            "devices": [
              {
                "id": "123"
              }
            ],
            "execution": [
              {
                "command": "action.devices.commands.ArmDisarm",
                "params": {
                  "arm": true,
                  "armLevel": "away_key"
                }
              }
            ]
          }
        ]
      }
    }
  ]
}
Resposta
{
  "requestId": "6894439706274654516",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "away_key"
        }
      }
    ]
  }
}

Dispositivo ERRORS

Veja a lista completa de erros e exceções.

Informar exceções de armamento

Ao tentar ligar ou desligar o sistema, você pode fornecer mais contexto com os códigos de exceções informados pela característica StatusReport. As exceções podem ser informadas como de bloqueio ou não.

  • As exceções que não causam bloqueio informadas com um status "SUCESSO" indicam que a exceção não impediu o equipamento de ligar ou desligar.
  • As exceções de bloqueio informadas com um status "EXCEÇÕES" indicam que a ativação ou desativação foi interrompida devido a essas exceções.

Os códigos de exceção que costumam ser associados a sistemas de segurança incluem:

  • doorOpen: uma porta está aberta.
  • windowOpen: uma janela está aberta.
  • isOpen: um sensor detecta que algo está aberto (mas não sabe se é uma porta ou janela).

Exemplo: exceção sem bloqueio

Este exemplo mostra uma exceção sem bloqueio em que o sistema de segurança está ligado, mesmo que uma janela seja relatada como aberta.

User Definir o sistema de segurança como de alta segurança.
Google Assistente Ok, a janela frontal está aberta. Ligando o sistema de segurança a alta segurança.
Solicitação
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "L2"
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": true,
          "currentArmLevel": "L2",
          "currentStatusReport": [
            {
              "blocking": false,
              "priority": 0,
              "statusCode": "windowOpen",
              "deviceTarget": "sensor_id1"
            }
          ]
        }
      }
    ]
  }
}

Exemplo: exceção de bloqueio

User Definir o sistema de segurança como de alta segurança.
Google Assistente Ocorreu um erro ao controlar o sistema de segurança. A janela da frente está aberta.
Solicitação
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "L2"
          }
        }]
      }]
    }
  }]
}
Resposta 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "online": true,
          "isArmed": false,
          "currentArmLevel": "L2",
          "currentStatusReport": [
            {
              "blocking": true,
              "priority": 0,
              "statusCode": "windowOpen",
              "deviceTarget": "sensor_id1"
            }
          ]
        }
      }
    ]
  }
}

Ligando com a autenticação de dois fatores

Se o fluxo de ativação exigir que os usuários insiram um PIN em uma caixa de diálogo de autenticação de dois fatores, verifique se eles querem continuar a ligar o sistema quando houver exceções ativas, por exemplo, quando uma janela ou porta estiver aberta.

Esse cenário pode exigir uma entrada com PIN ou uma senha longa seguida por um reconhecimento.

Exemplo: desafio de confirmação

Este exemplo mostra um usuário tentando ligar o sistema de segurança, mas uma porta da frente é detectada como aberta. O usuário reconhece que o sistema de segurança precisa estar ligado mesmo que a porta da frente esteja aberta.

User Ligar o sistema de segurança
Google Assistente A porta da frente está aberta. Você quer mesmo ativar o sistema de segurança?
User Sim.
Google Assistente Ok, ligando o sistema de segurança.

Na primeira etapa, você precisa responder com um desafio ackNeeded.

Solicitação 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true
          }
        }]
      }]
    }
  }]
}
Resposta 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "ERROR",
        "errorCode": "challengeNeeded",
        "challengeNeeded": {
          "type": "ackNeeded"
        },
        "states": {
          "isArmed": true,
          "currentArmLevel": "L2",
          "currentStatusReport": [
            {
              "blocking": false,
              "priority": 0,
              "statusCode": "doorOpen",
              "deviceTarget": "456"
            }
          ]
        }
      }
    ]
  }
}

A solicitação subsequente do Google para você conterá o resultado ack.

Solicitação 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}

Exemplo: PIN e desafio de confirmação

Este exemplo mostra um usuário tentando ligar o sistema de segurança solicitando o PIN. O sistema detecta que as janelas frontal e traseira estão abertas e solicita que o usuário reconheça que o armamento deve continuar.

User Mantenha o braço afastado.
Google Assistente Qual é seu PIN?
User 1234.
Google Assistente Parece que as janelas frontal e traseira estão abertas. Você quer mesmo continuar a desligar o sistema de segurança?
User Sim.
Google Assistente Ok, ligando o sistema de segurança para o lado ausente

Na primeira etapa, você precisa responder com um desafio pinNeeded padrão.

Solicitação 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [{
          "id": "123"
        }],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "pinNeeded"
      }
    }]
  }
}

O Google envia uma solicitação com o PIN fornecido. Para oferecer suporte à segunda curva, responda com um desafio ackNeeded com informações adicionais, incluindo o nível do grupo de destino e o relatório de status atual, com exceções de bloqueio.

Solicitação 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [...],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "away"
          },
          "challenge": {
            "pin": "1234"
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["456"],
      "status": "ERROR",
      "states": {
        "targetArmLevel": "away",
        "currentStatusReport": [{
            "blocking": true,
            "priority": 1,
            "deviceTarget": "front_window_id",
            "statusCode": "deviceOpen"
          },
          {
            "blocking": true,
            "priority": 1,
            "deviceTarget": "back_window_id",
            "statusCode": "deviceOpen"
          }
        ]
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}

A próxima solicitação do Google para você conterá apenas o resultado ack, e não o PIN fornecido na primeira vez.

Solicitação 3
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "inputs": [{
    "intent": "action.devices.EXECUTE",
    "payload": {
      "commands": [{
        "devices": [...],
        "execution": [{
          "command": "action.devices.commands.ArmDisarm",
          "params": {
            "arm": true,
            "armLevel": "away"
          },
          "challenge": {
            "ack": true
          }
        }]
      }]
    }
  }]
}
Resposta
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [
      {
        "ids": [
          "123"
        ],
        "status": "SUCCESS",
        "states": {
          "isArmed": true
        }
      }
    ]
  }
}