amazon-alexa — quality + safety report
In the Skillier index (antigravity__amazon-alexa) · scanned 2026-06-03 · engine: builtin+triage
✓ Clean — no heuristic safety flags surfaced.
Heuristic flags from the builtin scanner, which is known to over-flag (it trips on legitimate env-reading integrations, security skills, and library .eval calls). This is NOT an authoritative malicious verdict — re-scan with SkillSpector for the authoritative result. Run the authoritative scan →
📇 This skill is in the Skillier index (curated · deduped · quality-filtered). Install Skillier to route & load it into your AI client.
Quality notes
About this skill
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 .
📄 Read the SKILL.md
---
name: amazon-alexa
description: "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)."
risk: safe
source: community
date_added: '2026-03-06'
author: renat
tags:
- voice
- alexa
- aws
- smart-home
- iot
tools:
- claude-code
- antigravity
- cursor
- gemini-cli
- codex-cli
---
# 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
```bash
## 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`:
```json
{
"interactionModel": {
"languageModel": {
"invocationName": "auri"
}
}
}
```
---
## 3.1 Intents Essenciais Para Auri
```json
{
"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
```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
```bash
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
```json
{
"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)
```python
import time
## Adicionar Ttl De 180 Dias Ao Salvar
attrs["ttl"] = int(time.time()) + (180 * 24 * 3600)
```
---
### 6.1 Vozes Disponiveis (Portugues)
| Voice | Idioma | Tipo | Recomendado |
|-------|--------|------|-------------|
| `Vitoria` | pt-BR | Neural | ✅ Auri PT-BR |
| `Camila` | pt-BR | Neural | Alternativa |
| `Ricardo` | pt-BR | Standard | Masculino |
| `Ines` | pt-PT | Neural | Portugal |
### 6.2 Integrar Polly Na Resposta
```python
import boto3
import base64
def synthesize_polly(text: str, voice_id: str = "Vitoria") -> str:
"""Retorna URL de audio Polly para usar em Alexa."""
client = boto3.client("polly", region_name="us-east-1")
response = client.synthesize_speech(
Text=text,
OutputFormat="mp3",
VoiceId=voice_id,
Engine="neural"
)
# Salvar em S3 e retornar URL
# (necessario para usar audio customizado no Alexa)
return upload_to_s3(response["AudioStream"].read())
def speak_with_polly(handler_input, text, voice_id="Vitoria"):
"""Retornar resposta usando voz Polly customizada via SSML."""
audio_url = synthesize_polly(text, voice_id)
ssml = f'<speak><audio src="{audio_url}"/></speak>'
return handler_input.response_builder.speak(ssml)
```
### 6.3 Ssml Para Controle De Voz
```xml
<speak>
<prosody rate="90%" pitch="+5%">
Oi! Eu sou a Auri.
</prosody>
<break time="0.5s"/>
<emphasis level="moderate">Como posso ajudar?</emphasis>
</speak>
```
---
### 7.1 Template De Chat
```json
{
"type": "APL",
"version": "2023.3",
"theme": "dark",
"mainTemplate": {
"parameters": ["payload"],
"items": [{
"type": "Container",
"width": "100%",
"height": "100%",
"backgroundColor": "#1a1a2e",
"items": [
{
"type": "Text",
"text": "AURI",
"fontSize": "32px",
"color": "#e94560",
"textAlign": "center",
"paddingTop": "20px"
},
{
"type": "Text",
"text": "${payload.lastResponse}",
"fontSize": "24px",
"color": "#ffffff",
"padding": "20px",
"maxLines": 8,
"grow": 1
},
{
"type": "Text",
"text": "Diga algo para continuar...",
"fontSize": "18px",
"color": "#888888",
"textAlign": "center",
"paddingBottom": "20px"
}
]
}]
}
}
```
### 7.2 Adicionar Apl Na Resposta
```python
@sb.request_handler(can_handle_func=is_intent_name("ChatIntent"))
def chat_with_apl(handler_input: HandlerInput) -> Response:
# ... obter reply do Claude ...
# Verificar se device suporta APL
supported = handler_input.request_envelope.context.system.device.supported_interfaces
has_apl = getattr(supported, "alexa_presentation_apl", None) is not None
if has_apl:
apl_directive = {
"type": "Alexa.Presentation.APL.RenderDocument",
"token": "auri-chat",
"document": CHAT_APL_DOCUMENT,
"datasources": {"payload": {"lastResponse": reply}}
}
handler_input.response_builder.add_directive(apl_directive)
return handler_input.response_builder.speak(reply).ask("Mais alguma coisa?").response
```
---
### 8.1 Ativar Smart Home Skill
No `skill.json`, adicionar:
```json
{
"apis": {
"smartHome": {
"endpoint": {
"uri": "arn:aws:lambda:us-east-1:123456789:function:auri-smart-home"
}
}
}
}
```
### 8.2 Handler De Smart Home
```python
def handle_smart_home_directive(event, context):
namespace = event["directive"]["header"]["namespace"]
n
… (truncated)Want a live grade + an embeddable README badge? Run your skill through the free scanner.
Graded independently by Skillproof — nothing to sell the author. Quality is mechanical + corpus-grounded; safety flags are heuristic (builtin+triage), not a malicious verdict.