Receber por email
← Voltar para o catálogo

amazon-alexa

Integracao completa com Amazon Alexa para criar skills de voz inteligentes, transformar Alexa em assistente com Claude como cerebro (projeto Auri) e integrar com AWS ecosystem (Lambda, DynamoDB, Polly, Transcribe, Lex, Smart Home).

41.2kestrelas
Atualizado há 4 meses

Ver no GitHub ↗ Licença: MIT

Como adicionar

/plugin marketplace add sickn33/antigravity-awesome-skills

O comando exato pode variar conforme o repositório. Confira o README no GitHub.

Para o autor da skill

Cole no README do seu repo

Mostra que sua skill está catalogada na Skillteca, gera backlink e tráfego rastreável.

[![Skillteca](https://www.skillteca.com.br/api/badge/amazon-alexa-mptbuyiq/svg)](https://www.skillteca.com.br/skills/amazon-alexa-mptbuyiq)

Skills relacionadas

Ver todas de DevOps e Infra →

Alerta por categoria

Receba novas skills de DevOps e Infra toda segunda

1 email curto, só com as skills novas de DevOps e Infra. 4 minutos de leitura, sem spam, cancela com 1 clique.

Você confirma o email no primeiro envio. Sem spam. Cancela com 1 clique.

Ler descrição completa

AMAZON ALEXA — Voz Inteligente com Claude

Overview

Integracao completa com Amazon Alexa para criar skills de voz inteligentes, transformar Alexa em assistente com Claude como cerebro (projeto Auri) e integrar com AWS ecosystem (Lambda, DynamoDB, Polly, Transcribe, Lex, Smart Home).

When to Use This Skill

  • When you need specialized assistance with this domain

Do Not Use This Skill When

  • The task is unrelated to amazon alexa
  • A simpler, more specific tool can handle the request
  • The user needs general-purpose assistance without domain expertise

How It Works

Voce e o especialista em Alexa e AWS Voice. Missao: transformar
qualquer dispositivo Alexa em assistente ultra-inteligente usando
Claude como LLM backend, com voz neural, memoria persistente e
controle de Smart Home. Projeto-chave: AURI.

1. Visao Geral Do Ecossistema

[Alexa Device] → [Alexa Cloud] → [AWS Lambda] → [Claude API]
    Fala          Transcricao      Logica          Inteligencia
      ↑               ↑               ↑                ↑
   Usuario         Intent        Handler          Anthropic
                               + DynamoDB
                               + Polly TTS
                               + APL Visual

Componentes Da Arquitetura Auri

| Componente | Servico AWS | Funcao | |-----------|-------------|--------| | Voz → Texto | Alexa ASR nativo | Reconhecimento de fala | | NLU | ASK Interaction Model + Lex V2 | Extrair intent e slots | | Backend | AWS Lambda (Python/Node.js) | Logica e orquestracao | | LLM | Claude API (Anthropic) | Inteligencia e respostas | | Persistencia | Amazon DynamoDB | Historico e preferencias | | Texto → Voz | Amazon Polly (neural) | Fala natural da Auri | | Interface Visual | APL (Alexa Presentation Language) | Telas em Echo Show | | Smart Home | Alexa Smart Home API | Controle de dispositivos | | Automacao | Alexa Routines API | Rotinas inteligentes |

2.1 Pre-Requisitos


## Ask Cli

npm install -g ask-cli
ask configure

## Aws Cli

pip install awscli
aws configure

Criar Skill Com Template

ask new \ --template hello-world \ --skill-name auri \ --language pt-BR

└── .Ask/Ask-Resources.Json


## 2.3 Configurar Invocation Name

No arquivo `models/pt-BR.json`:

{ "interactionModel": { "languageModel": { "invocationName": "auri" } } }


---

## 3.1 Intents Essenciais Para Auri

{ "interactionModel": { "languageModel": { "invocationName": "auri", "intents": [ {"name": "AMAZON.HelpIntent"}, {"name": "AMAZON.StopIntent"}, {"name": "AMAZON.CancelIntent"}, {"name": "AMAZON.FallbackIntent"}, { "name": "ChatIntent", "slots": [{"name": "query", "type": "AMAZON.SearchQuery"}], "samples": [ "{query}", "me ajuda com {query}", "quero saber sobre {query}", "o que voce sabe sobre {query}", "explique {query}", "pesquise {query}" ] }, { "name": "SmartHomeIntent", "slots": [ {"name": "device", "type": "AMAZON.Room"}, {"name": "action", "type": "ActionType"} ], "samples": [ "{action} a {device}", "controla {device}", "acende {device}", "apaga {device}" ] }, { "name": "RoutineIntent", "slots": [{"name": "routine", "type": "RoutineType"}], "samples": [ "ativa rotina {routine}", "executa {routine}", "modo {routine}" ] } ], "types": [ { "name": "ActionType", "values": [ {"name": {"value": "liga", "synonyms": ["acende", "ativa", "liga"]}}, {"name": {"value": "desliga", "synonyms": ["apaga", "desativa", "desliga"]}} ] }, { "name": "RoutineType", "values": [ {"name": {"value": "bom dia", "synonyms": ["acordar", "manhã"]}}, {"name": {"value": "boa noite", "synonyms": ["dormir", "descansar"]}}, {"name": {"value": "trabalho", "synonyms": ["trabalhar", "foco"]}}, {"name": {"value": "sair", "synonyms": ["saindo", "goodbye"]}} ] } ] } } }


---

## 4.1 Handler Principal Python

import os import time import anthropic import boto3 from ask_sdk_core.skill_builder import SkillBuilder from ask_sdk_core.handler_input import HandlerInput from ask_sdk_core.utils import is_intent_name, is_request_type from ask_sdk_model import Response from ask_sdk_dynamodb_persistence_adapter import DynamoDbPersistenceAdapter

============================================================

@sb.request_handler(can_handle_func=is_request_type("LaunchRequest")) def launch_handler(handler_input: HandlerInput) -> Response: attrs = handler_input.attributes_manager.persistent_attributes name = attrs.get("name", "") greeting = f"Oi{', ' + name if name else ''}! Eu sou a Auri. Como posso ajudar?" return (handler_input.response_builder .speak(greeting).ask("Em que posso ajudar?").response)

@sb.request_handler(can_handle_func=is_intent_name("ChatIntent")) def chat_handler(handler_input: HandlerInput) -> Response: try: # Obter query slots = handler_input.request_envelope.request.intent.slots query = slots["query"].value if slots.get("query") else None if not query: return (handler_input.response_builder .speak("Pode repetir? Nao entendi bem.").ask("Pode repetir?").response)

# Carregar historico attrs = handler_input.attributes_manager.persistent_attributes history = attrs.get("history", [])

# Montar mensagens para Claude messages = history[-MAX_HISTORY:] messages.append({"role": "user", "content": query})

# Chamar Claude client = anthropic.Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"]) response = client.messages.create( model=CLAUDE_MODEL, max_tokens=512, system=AURI_SYSTEM_PROMPT, messages=messages ) reply = response.content[0].text

# Truncar para nao exceder timeout if len(reply) > MAX_RESPONSE_CHARS: reply = reply[:MAX_RESPONSE_CHARS] + "... Quer que eu continue?"

# Salvar historico history.append({"role": "user", "content": query}) history.append({"role": "assistant", "content": reply}) attrs["history"] = history[-50:] # Manter ultimas 50 handler_input.attributes_manager.persistent_attributes = attrs handler_input.attributes_manager.save_persist

4.2 Variaveis De Ambiente Lambda

ANTHROPIC_API_KEY=sk-...  (armazenar em Secrets Manager)
DYNAMODB_TABLE=auri-users
AWS_REGION=us-east-1

4.3 Requirements.Txt

ask-sdk-core>=1.19.0
ask-sdk-dynamodb-persistence-adapter>=1.19.0
anthropic>=0.40.0
boto3>=1.34.0

5.1 Criar Tabela

aws dynamodb create-table \
  --table-name auri-users \
  --attribute-definitions AttributeName=userId,AttributeType=S \
  --key-schema AttributeName=userId,KeyType=HASH \
  --billing-mode PAY_PER_REQUEST \
  --region us-east-1

5.2 Schema Do Usuario

{
  "userId": "amzn1.ask.account.XXXXX",
  "name": "Joao",
  "history": [
    {"role": "user", "content": "..."},
    {"role": "assistant", "content": "..."}
  ],
  "preferences": {
    "language": "pt-BR",
    "voice": "Vitoria",
    "personality": "assistente profissional"
  },
  "smartHome": {
    "devices": {},
    "routines": {}
  },
  "updatedAt": 1740960000,
  "ttl": 1748736000
}

5.3 Ttl Automatico (Expirar Dados Antigos)

import time

## Adicionar Ttl De 180 Dias Ao Salvar

attrs["ttl"] = int(time.time()) + (180 * 24 * 3600)
``
Compartilhar X LinkedIn