- Requisitos
- Criar uma Skill Amazon Alexa
- Criar uma Função AWS Lambda
- Adicionar Código à Função Lambda
- Obtendo o home_assistant_agent_id
- Testar a Função Lambda
- Configurar o Endpoint do Serviço da Skill
- Vinculação de Conta
- Habilitar a Skill no App Alexa
- Localização da Alexa
- Esta skill Alexa requer que sua instância do Home Assistant esteja acessível pela Internet via HTTPS na porta 443 usando um certificado SSL/TLS. Um certificado autoassinado não funcionará, mas um certificado confiável público ou um certificado assinado por uma autoridade certificadora aprovada pela Amazon deve funcionar.
- Uma conta de desenvolvedor da Amazon. Inscreva-se aqui.
- Uma conta Amazon Web Services (AWS) é necessária para hospedar a função Lambda para sua skill Alexa Smart Home. O AWS Lambda é gratuito para até 1 milhão de solicitações e 1 GB de transferência de dados por mês.
-
Faça login no Alexa Developer Console. Você pode criar sua conta gratuita na página de login. Nota: Isso deve ser feito com a mesma conta Amazon que você usa nos seus dispositivos Alexa e app.
-
Vá para a página
Alexa Skills
, se ainda não estiver lá, e clique no botãoCreate Skill
para iniciar o processo. -
No passo
Name, Locale
: Insira oSkill name
como preferir, depois selecione olanguage
padrão da skill e clique emNext
. Importante: O idioma da sua skill deve ser o mesmo idioma da sua conta Amazon/Alexa. Mais informações sobre idiomas suportados aqui -
No passo
Experience, Model, Hosting service
: SelecioneOther
>Custom
>Provision your own
, depois clique emNext
. -
No passo
Template
: SelecioneStart from Scratch
e clique emNext
. -
Revise e clique em
Create Skill
. -
Isso pode levar alguns segundos, por favor, aguarde…
-
Na próxima tela, você verá algumas opções, e no painel direito
Building your skill
, siga estes passos:- Clique em
Invocation Name >
altere o nome de invocação padrão conforme desejar, e depois clique emSave
. - No menu de navegação à esquerda, vá para
CUSTOM
>Interaction Model
>JSON Editor
, arraste e solte o arquivo interactionModels.json, depois clique emSave
.
- Ainda no menu de navegação à esquerda, vá para
CUSTOM
>Interfaces
, role para baixo atéAlexa Presentation Language
, habilite e desmarqueHub Round
(Esta skill não é compatível).
- Agora, vá para
CUSTOM
>Endpoint
e anote oYour Skill ID
.
- Clique em
-
Você criou a estrutura da skill. No próximo passo, faremos algum trabalho de desenvolvedor, mas mantenha o
Alexa Developer Console
aberto, pois precisaremos alterar a configuração da skill mais tarde.
Escreveremos um pequeno código hospedado como uma função AWS Lambda
que redirecionará as solicitações da skill Alexa para sua instância do Home Assistant. Certifique-se de que você tem a API habilitada no Home Assistant, pois ela processará a solicitação e enviará a resposta. A função Lambda então entregará a resposta de volta para a skill Alexa.
Primeiro, você precisa fazer login no console AWS. Se você ainda não tem uma conta AWS, pode criar um novo usuário com o benefício de 12 meses de uso gratuito. Você não precisa se preocupar com custos, mesmo que sua conta já tenha passado dos primeiros 12 meses, já que a AWS oferece até 1 milhão de solicitações Lambda, 1 GB de dados de saída e todos os dados de entrada gratuitamente todos os meses para todos os usuários. Veja mais detalhes sobre preços do Lambda.
Agora você precisa criar uma função Lambda.
-
Clique em
Services
na barra de navegação superior, expanda o menu para exibir todos os serviços AWS, depois, na seçãoCompute
, clique emLambda
para navegar até o console Lambda ou use o campo de busca (Dica: AdicioneLambda
aos favoritos). -
IMPORTANTE - Skills Alexa só são suportadas em certas regiões da AWS. A localização do seu servidor atual será exibida no canto superior direito (por exemplo, Ohio). Selecione um servidor disponível abaixo que esteja mais próximo da sua localização e na sua região, com base no país da sua conta Amazon. Funções Alexa Lambda criadas em outros servidores não funcionarão corretamente e podem impedir a vinculação de contas!
- US East (N. Virginia) região para Américas: skills em
English (US)
,English (CA)
,Portuguese (BR)
. - EU (Ireland) região para skills em
English (UK)
,Italian
,German (DE)
,Spanish (ES)
,French (FR)
. - US West (Oregon) região para skills em
Japanese
eEnglish (AU)
(não testado ainda).
- US East (N. Virginia) região para Américas: skills em
-
Clique em
Functions
na barra de navegação à esquerda para exibir a lista de suas funções Lambda. -
Clique em
Create function
:- Selecione
Author from scratch
, depois insira um nome para a função comoHomeAssistantAssist
. - Selecione Python 3.12 como Runtime e x86_64 como arquitetura.
- Não altere a
default execution role
, deixe como padrãoCreate a new role with basic Lambda permissions
.
- Selecione
-
Clique em
Create function
, depois configure os detalhes da função Lambda. -
Expanda a seção
Function overview
(se ela não estiver expandida), depois clique em+ Add trigger
na parte esquerda do painel, depois selecioneAlexa
na lista suspensa para adicionar um gatilho Alexa à sua função Lambda. -
Selecione
Alexa Skills Kit
e insira oSkill ID
da skill que você criou no passo anterior. (Dica: Você pode precisar voltar aoAlexa Developer Console
para copiar oSkill ID
)., depois clique no botãoAdd
. -
Agora role até a aba
Code
>Code source
, depois clique no botãoUpload from
à direita e selecionezip file
.- Faça upload do arquivo
lambda_function.zip
baixado dos últimos lançamentos. - Todo o código será substituído pelo arquivo enviado, e você não poderá editá-lo (Se quiser editar algum arquivo, faça isso em sua estação antes deste passo).
- Faça upload do arquivo
-
Clique no botão
Deploy
para publicar o código atualizado. -
Navegue até a aba
Configuration
, selecioneEnvironment variables
no menu de navegação à esquerda. Você precisa adicionarpelo menos uma variável de ambiente
da lista abaixo. As variáveis restantes sãoopcionais
, mas configuram recursos específicos no funcionamento da skill. Para adicionar uma variável, clique no botãoEdit
, depois adicione as seguintes chaves e valores:- (obrigatório) Chave = home_assistant_url, Valor = A URL raiz do seu Home Assistant acessível pela Internet (na porta 443). Não inclua a barra
/
no final. - (opcional) Chave = home_assistant_agent_id, Valor = O Agent ID do seu Assist. instruções aqui
- (opcional) Chave = home_assistant_language, Valor = O idioma configurado no seu Assist. (O padrão é o idioma configurado no Assist)
- (opcional) Chave = home_assistant_dashboard, Valor = O ID do seu painel. Exemplo:
mushroom
. _(O padrão é 'lovelace') _ - (opcional) Chave = home_assistant_kioskmode, Valor =
True
. Defina esta variável para habilitar o KIOSKMODE. (Certifique-se de que você tenha este componente instalado, configurado e funcionando em sua instância do Home Assistant). - (opcional) Chave = debug, Valor =
True
. Defina esta variável para registrar as mensagens de depuração e permitir a variável de ambientehome_assistant_token
. - (opcional, não recomendado) Chave = home_assistant_token, Valor = Seu Home Assistant Long-Lived Access Token. Você conectará sua skill Alexa à sua conta de usuário do Home Assistant nos próximos passos, então não precisará adicioná-lo aqui. No entanto, você pode adicioná-lo aqui para fins de depuração. (Você deve remover e excluir essa variável de ambiente depois que a depuração terminar).
- (obrigatório) Chave = home_assistant_url, Valor = A URL raiz do seu Home Assistant acessível pela Internet (na porta 443). Não inclua a barra
-
Clique no botão Save no canto inferior direito.
-
Importante: Se você estiver usando um modelo IA, ou a resposta da API do Home Assistant é
maior que 3 segundos
(configuração padrão), você precisa aumentar o tempo limite da função Lambda, seguinido os passos abaixo:-
Permaneça na aba
Configuração
, vá emConfiguração geral
, clique emEditar
no canto direito do painel, agora edite as configurações básicas, no painelConfigurações básicas
e no campoTempo limite
você pode alterar para 30, 60 segundos ou o tempo que você precisar. -
Clique em
Salvar
no canto inferior direito.
-
- Com seu Home Assistant aberto, navegue até a Ferramentas de Desenvolvedor, vá na aba
Ações
e siga os passos abaixo:
- Busque por
conversation.process
no campo de ações e selecione:
- Ative o campo
Agente
e selecione o agente de conversação desejado na lista:
- Alterne para o
MODO YAML
e copie o ID que está no campoagent_id
:
Agora que você criou a função Lambda, você vai fazer um teste básico.
- Navegue até a aba
Test
, depois selecioneCreate new event
. - Nomeie seu evento como preferir, por exemplo:
AssistTest
. - Insira os seguintes dados na caixa de código chamada
Event JSON
:
{
"version": "1.0",
"session": {
"new": true,
"sessionId": "SessionId.sample-session-id"
},
"context": {
"System": {
"application": {
"applicationId": "amzn1.ask.skill.sample-application-id"
},
"user": {
"userId": "amzn1.ask.account.sample-user-id",
"accessToken": "sample-access-token"
},
"device": {
"deviceId": "amzn1.ask.device.sample-device-id",
"supportedInterfaces": {
"Alexa.Presentation.APL": {}
}
}
}
},
"request": {
"type": "LaunchRequest",
"requestId": "sample-request-id",
"timestamp": "2024-10-18T00:00:00Z",
"locale": "en-US"
}
}
-
Clique em
Save
no canto superior direito do painel. -
Faça login no Home Assistant e gere um
long-lived access token
. Depois de inserir seu long-lived access token na variável de ambientehome_assistant_token
e definir a variável de ambientedebug
paraTrue
, você pode executar o teste. -
Para testar, clique em
Test
no canto superior direito do painel. -
Se o teste correr bem e tudo estiver funcionando com sua função, o resultado aparecerá destacado em verde como
Executing function: succeeded
, o que significa que a skill foi iniciada corretamente.
Agora, remova o long-lived access token
(se preferir, recomendado) das variáveis de ambiente e exclua-o do seu Home Assistant.
-
Ainda no
AWS Console
, copie oFunction ARN
da sua função Lambda. -
Retorne ao
Alexa Developer Console
e vá para a páginaAlexa Skills
(se você ainda não estiver lá). -
Encontre a skill que você acabou de criar e clique no link
Edit
na lista suspensaActions
. -
Vá para
CUSTOM
>Endpoint
na barra de navegação à esquerda da páginaBuild
. -
Cole o
Function ARN
copiado da sua função Lambda no campoDefault region
e clique no botãoSave
no canto superior direito.
Alexa precisa vincular sua conta Amazon à sua conta do Home Assistant. Assim, o Home Assistant pode garantir que apenas solicitações autenticadas da Alexa possam acessar sua API. Para vincular a conta, você precisa garantir que seu Home Assistant esteja acessível da Internet na porta 443.
-
Retorne ao
Alexa Developer Console
e vá para a páginaAlexa Skills
(se você ainda não estiver lá). -
Encontre a skill que você acabou de criar e clique no link
Edit
na lista suspensaActions
. -
Clique em
ACCOUNT LINKING
na barra de navegação à esquerda da páginaBuild
. -
Marque o botão
Do you allow users to create an account or link to an existing account with you?
. -
Em
Settings
, desmarque a opçãoAllow users to enable skill without account linking
. -
Role para baixo e certifique-se de que
Auth Code Grant
esteja selecionado. -
Insira todas as informações necessárias. Supondo que seu Home Assistant possa ser acessado por
https://[YOUR HOME ASSISTANT URL]
. Para a vinculação de conta Alexa, por padrão, a porta 443 é usada (use seu firewall para redirecionar isso, se necessário):-
Your Web Authorization URI: https://[YOUR HOME ASSISTANT URL]/auth/authorize
-
Access Token URI: https://[YOUR HOME ASSISTANT URL]/auth/token Nota: Embora seja possível atribuir uma porta diferente, a Alexa exige que você use a porta 443, então certifique-se de que seu firewall/proxy esteja redirecionando via porta 443. (Leia mais na documentação do desenvolvedor Alexa sobre requisitos para vinculação de contas). Apesar do aviso de isenção de responsabilidade da documentação da Alexa, os certificados
Let’s Encrypt
ainda são aceitos. Importante: Você deve usar umcertificado SSL válido/confiável
para que a vinculação de contas funcione. Certificados autoassinados não funcionarão, mas você pode usar um certificado gratuitoLet’s Encrypt
. -
Your Client ID:
- https://pitangui.amazon.com/ se você estiver nas Américas.
- https://layla.amazon.com/ se você estiver na Europa.
- https://alexa.amazon.co.jp/ se você estiver no Japão ou Austrália (não verificado ainda).
Importante: A barra no final é importante (não altere a URL acima).
-
Your Secret: Insira qualquer coisa que desejar; o Home Assistant não verifica este campo.
-
Your Authentication Scheme: Certifique-se de que selecionou
Credentials in request body
. (O Home Assistant não suporta HTTP Basic). -
Você pode deixar
Scope
,Domain List
eDefault Access Token Expiration Time
em branco.
-
-
Clique no botão
Save
no canto superior direito. -
Clique em
CUSTOM
na barra de navegação à esquerda da páginaBuild
e emBuild Skill
no canto superior direito.
- Você precisa usar o
Alexa Mobile App
para vincular sua conta.- No
app Alexa
, vá paraMore
>Skills & Games
>Your Skills
->Dev
. - Clique na skill que você acabou de criar.
- Clique em
Enable to use
. - Uma nova janela será aberta para direcioná-lo à tela de login do seu Home Assistant.
- Depois de fazer login com sucesso, você será redirecionado de volta ao app Alexa.
- Agora, você pode pedir à Alexa no seu dispositivo Echo ou no App Alexa para abrir a skill, como Alexa, [seu Nome de Invocação].
- No
A localização deve corresponder ao local e idioma usados em seus dispositivos Amazon Echo. Os locais suportados pela skill atualmente estão descritos na página principal.