# MASTER — Automatización de Alexa Skills con ASK CLI / SMAPI para radios SignalLive

## Ubicación de este proyecto

Codex debe trabajar desde:

```text
C:\xampp\htdocs\aws-api-skill
```

Este proyecto NO es una Skill específica.

Es una **herramienta maestra de automatización** para crear, configurar, validar y administrar nuevas Alexa Custom Skills de radio basadas en canales de SignalLive.

Debe permitir que, en el futuro, una nueva radio como:

```text
radiomp-audio
```

pueda convertirse en una Skill Alexa con el mínimo trabajo manual posible.

---

# 1. OBJETIVO GENERAL

Construir dentro de:

```text
C:\xampp\htdocs\aws-api-skill
```

una solución reutilizable basada en:

```text
ASK CLI v2
SMAPI
PowerShell
JSON templates
```

que permita:

```text
config-radio.json
        ↓
diagnóstico SignalLive
        ↓
crear backend PHP Alexa
        ↓
crear Skill en Amazon
        ↓
obtener Skill ID
        ↓
subir Skill Manifest
        ↓
subir Interaction Model es-MX
        ↓
activar AUDIO_PLAYER
        ↓
configurar endpoint HTTPS
        ↓
configurar metadata de Distribution
        ↓
validar skill
        ↓
crear beta
        ↓
agregar testers
        ↓
dejar lista para Echo físico
```

El proyecto debe diseñarse para manejar MUCHAS radios futuras, no sólo Radio Babasónica.

---

# 2. CASO DE REFERENCIA YA EXITOSO

Ya existe una Skill funcional de referencia:

```text
Radio Babasónica
```

Canal:

```text
radiobbs
```

Stream:

```text
https://aproposito.ddns.net/live/radiobbs/index.m3u8
```

Backend:

```text
C:\xampp\htdocs\radio-babasonica-alexa
```

Endpoint:

```text
https://aproposito.ddns.net/radio-babasonica-alexa/public/
```

La Skill ya fue probada exitosamente en:

```text
Alexa Simulator
Echo físico
Beta Test
```

Codex puede inspeccionar este proyecto como REFERENCIA DE ARQUITECTURA y seguridad.

NO debe modificarlo durante esta fase.

---

# 3. REGLAS DE SEGURIDAD

NO modificar automáticamente:

```text
C:\xampp\htdocs\radio-babasonica-alexa
C:\xampp\htdocs\signallive
MediaMTX
mediamtx.yml
FFmpeg
WordPress
app C#
firewall
DNS
certificados
streams existentes
```

NO reiniciar:

```text
Apache
MediaMTX
Windows
FFmpeg
streamers
```

sin intervención explícita del usuario.

NO borrar Skills existentes.

NO enviar Skills a certificación/publicación automáticamente sin aprobación explícita del usuario.

NO finalizar beta tests existentes.

NO cambiar metadata de una Skill existente sin confirmar que el Skill ID corresponde al proyecto solicitado.

---

# 4. DOCUMENTACIÓN OFICIAL A USAR

Usar como referencia principal documentación actual de Amazon:

```text
https://developer.amazon.com/en-US/docs/alexa/smapi/quick-start-alexa-skills-kit-command-line-interface.html

https://developer.amazon.com/en-US/docs/alexa/smapi/ask-cli-command-reference.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-operations.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-manifest.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-validation-api.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-beta-testing-api.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-beta-tester-api.html

https://developer.amazon.com/en-US/docs/alexa/smapi/skill-certification-api.html
```

IMPORTANTE:

Trabajar con:

```text
ASK CLI v2
```

y preferir:

```text
ask smapi ...
```

NO usar comandos obsoletos de ASK CLI v1 si existe equivalente v2.

---

# 5. ESTRUCTURA QUE DEBE CREARSE

Crear dentro de:

```text
C:\xampp\htdocs\aws-api-skill
```

una estructura aproximada:

```text
aws-api-skill\
│
├── README.md
├── MASTER_STATUS.md
├── .gitignore
│
├── config\
│   ├── factory.config.json
│   └── radio.example.json
│
├── templates\
│   ├── skill-manifest.template.json
│   ├── interaction-model-es-MX.template.json
│   ├── backend\
│   └── distribution\
│
├── scripts\
│   ├── bootstrap-ask-cli.ps1
│   ├── diagnose-radio.ps1
│   ├── create-radio-skill.ps1
│   ├── update-radio-skill.ps1
│   ├── validate-radio-skill.ps1
│   ├── create-beta.ps1
│   ├── add-beta-testers.ps1
│   ├── status-radio-skill.ps1
│   └── package-radio-skill.ps1
│
├── generated\
│
├── logs\
│
└── docs\
    ├── ASK_CLI_SETUP.md
    ├── RADIO_CONFIG_SCHEMA.md
    └── WORKFLOW.md
```

Puede ajustarse si Codex encuentra una arquitectura mejor, pero debe mantenerse modular y reutilizable.

---

# 6. FASE 1 — INSPECCIÓN DEL ENTORNO

Antes de instalar nada ejecutar:

```cmd
node --version
npm --version
git --version
ask --version
```

Registrar resultados.

ASK CLI requiere Node.js moderno.

Amazon indica Node.js 14+ como mínimo y recomienda release actual o LTS activo.

Si Node no existe o es demasiado viejo:

```text
NO instalar silenciosamente.
```

Generar instrucciones exactas para el usuario.

---

# 7. ASK CLI

Si ASK CLI no existe:

preparar:

```cmd
npm install -g ask-cli@2
```

Si la consola tiene privilegios suficientes y el usuario ya autorizó ejecutar instalaciones, puede instalarlo.

Si requiere elevación o modificación administrativa:

```text
DETENER
```

y generar la instrucción manual.

Después confirmar:

```cmd
ask --version
```

Debe ser versión 2.x.

---

# 8. AUTENTICACIÓN ASK CLI

La primera configuración requiere intervención humana.

Usar:

```cmd
ask configure
```

Perfil recomendado:

```text
signal-radio-factory
```

El usuario debe autenticarse con:

```text
la cuenta Amazon Developer que será propietaria de las Skills
```

NO almacenar:

```text
password Amazon
access token LWA
refresh token
cookies
```

dentro del proyecto.

ASK CLI debe gestionar sus propias credenciales.

Si `ask configure` requiere navegador:

abrirlo y esperar al usuario.

No intentar automatizar login.

---

# 9. CONFIRMAR PERFIL

Después de autenticar:

ejecutar una operación SMAPI de lectura.

Por ejemplo:

```cmd
ask smapi list-vendors --profile signal-radio-factory
```

Registrar:

```text
Vendor ID
Vendor Name
Role
```

Guardar el Vendor ID en:

```text
config\factory.config.json
```

No guardar credenciales.

---

# 10. FACTORY CONFIG

Crear:

```text
config\factory.config.json
```

Ejemplo:

```json
{
  "ask_profile": "signal-radio-factory",
  "locale": "es-MX",
  "domain": "aproposito.ddns.net",
  "htdocs": "C:\\xampp\\htdocs",
  "signal_live_root": "C:\\xampp\\htdocs\\signallive",
  "ffprobe": "C:\\ffmpeg\\bin\\ffprobe.exe",
  "ffmpeg": "C:\\ffmpeg\\bin\\ffmpeg.exe",
  "mediamtx_api": "http://127.0.0.1:9997"
}
```

El Vendor ID puede agregarse después de descubrirlo.

---

# 11. CONFIG DE CADA RADIO

Cada nueva Skill debe comenzar desde un único JSON.

Ejemplo:

```text
config\radio.example.json
```

Formato:

```json
{
  "channel_id": "radiomp-audio",
  "skill_display_name": "Radio Mano Peluda",
  "invocation_name": "radio mano peluda",
  "project_slug": "radio-mano-peluda-alexa",
  "locale": "es-MX",

  "stream_url": "https://aproposito.ddns.net/live/radiomp-audio/index.m3u8",

  "speech": {
    "launch": "Estás escuchando Radio Mano Peluda.",
    "help": "Puedes decir: pon la radio.",
    "fallback": "Por ahora puedo reproducir la señal en vivo."
  },

  "distribution": {
    "summary": "Escucha Radio Mano Peluda en vivo desde Alexa.",
    "description": "DESCRIPCION_PENDIENTE",
    "category": "STREAMING_SERVICE",
    "keywords": [
      "radio",
      "streaming"
    ],
    "privacy_policy_url": "https://www.laciudadbabasonica.com/terminos-y-condiciones/",
    "terms_of_use_url": "https://www.laciudadbabasonica.com/terminos-y-condiciones/"
  },

  "beta_testers": [],

  "skill_id": null
}
```

No copiar nombre, invocation name o identidad de Radio Babasónica a otra radio.

---

# 12. FASE 2 — DIAGNÓSTICO AUTOMÁTICO SIGNAL LIVE

Antes de crear una Skill, ejecutar un diagnóstico.

Crear:

```text
scripts\diagnose-radio.ps1
```

Debe recibir:

```powershell
.\scripts\diagnose-radio.ps1 -Config ".\config\radiomp-audio.json"
```

Debe validar:

```text
HTTP GET
HTTPS
TLS
HLS
playlist
segmentos
codec
sample rate
canales
bitrate
audio-only
20 segundos
60 segundos
MediaMTX ready
```

Usar:

```text
curl.exe
ffprobe.exe
ffmpeg.exe
MediaMTX API
```

Generar:

```text
generated\<PROJECT_SLUG>\DIAGNOSTIC_RESULTS.md
```

Si el diagnóstico falla:

```text
NO crear Skill Amazon.
```

---

# 13. GATE DE STREAM

Requisitos mínimos antes de continuar:

```text
URL pública HTTP 200
HTTPS válido
audio existente
stream decodificable
segmentos accesibles
estabilidad 60 segundos
```

Registrar:

```text
STREAM_READY_FOR_ALEXA=YES
```

---

# 14. FASE 3 — GENERAR BACKEND PHP

Usar el proyecto exitoso:

```text
C:\xampp\htdocs\radio-babasonica-alexa
```

como referencia técnica.

NO copiar:

```text
Skill ID
nombre
stream URL
tokens
logs
cache runtime
branding
```

Sí reutilizar arquitectura:

```text
AlexaRequestVerifier
AlexaRequestHandler
AlexaResponse
controller
logging sanitizado
Signature-256
X.509 chain verification
timestamp validation
AudioPlayer
PlaybackController
```

Crear:

```text
C:\xampp\htdocs\<PROJECT_SLUG>
```

---

# 15. SECURITY BACKEND OBLIGATORIA

Cada backend generado debe incluir:

```text
SignatureCertChainUrl normalization
SSRF protection
host exacto s3.amazonaws.com
path /echo.api/
TLS validation
X.509 chain validation
SAN echo-api.amazon.com
Signature-256
SHA-256
anti-downgrade
timestamp <= 150 sec
Skill ID validation
sanitized logs
```

No reducir seguridad para simplificar la automatización.

---

# 16. AUDIOPLAYER

Cada Skill de radio v0.1 debe implementar:

```text
LaunchRequest
PlayRadioIntent
AMAZON.PauseIntent
AMAZON.ResumeIntent
AMAZON.StopIntent
AMAZON.CancelIntent

AudioPlayer.PlaybackStarted
AudioPlayer.PlaybackStopped
AudioPlayer.PlaybackFinished
AudioPlayer.PlaybackNearlyFinished
AudioPlayer.PlaybackFailed

PlaybackController.PlayCommandIssued
PlaybackController.PauseCommandIssued
PlaybackController.NextCommandIssued
PlaybackController.PreviousCommandIssued
```

---

# 17. MODELO es-MX

Generar:

```text
interaction-model\es-MX.json
```

usando:

```text
INVOCATION_NAME
```

del config.

Samples base:

```text
pon la radio
reproduce la radio
quiero escuchar la radio
escuchar la radio
enciende la radio
```

No asumir que:

```text
Alexa, reproduce <nombre de skill>
```

siempre llegará a la Skill.

Puede entrar a Amazon Music o Spotify.

La frase recomendada sigue siendo:

```text
Alexa, abre <invocation name>
```

---

# 18. FASE 4 — GENERAR SKILL MANIFEST

Crear:

```text
generated\<PROJECT_SLUG>\skill-manifest.json
```

Debe usar esquema actual de Skill Manifest v1.

Debe incluir:

```text
manifestVersion
publishingInformation
apis.custom
endpoint HTTPS
AUDIO_PLAYER interface
privacyAndCompliance
```

Endpoint:

```text
https://aproposito.ddns.net/<PROJECT_SLUG>/public/
```

SSL:

```text
Trusted
```

Locale:

```text
es-MX
```

---

# 19. AUDIO_PLAYER EN MANIFEST

El manifest debe declarar:

```json
"interfaces": [
  {
    "type": "AUDIO_PLAYER"
  }
]
```

No depender de habilitarlo manualmente en Developer Console.

---

# 20. DISTRIBUTION EN MANIFEST

Generar metadata desde config:

```text
name
summary
description
examplePhrases
keywords
category
privacy policy
terms of use
testing instructions
```

Para radio streaming usar categoría compatible con:

```text
Streaming Services
```

Consultar el schema actual con SMAPI antes de asumir enum exacto.

---

# 21. CONSULTAR SCHEMA ACTUAL

Antes de generar manifest definitivo, Codex debe usar ASK CLI/SMAPI para comprobar schemas actuales.

Usar:

```text
ask smapi get-resource-schema
```

o la operación equivalente disponible en la versión instalada.

No confiar ciegamente en ejemplos viejos.

Registrar schema/version usado.

---

# 22. CREAR SKILL AMAZON

Usar ASK CLI v2.

Operación actual:

```text
create-skill-for-vendor
```

Conceptualmente:

```cmd
ask smapi create-skill-for-vendor --manifest <MANIFEST_JSON> --profile signal-radio-factory
```

IMPORTANTE:

Antes de ejecutar, consultar:

```cmd
ask smapi create-skill-for-vendor --help
```

y adaptar la invocación a la versión instalada.

No inventar flags.

---

# 23. CAPTURAR SKILL ID

Después de crear la Skill, capturar:

```text
amzn1.ask.skill....
```

Guardar en:

```text
config\<radio>.json
```

y:

```text
generated\<PROJECT_SLUG>\skill-state.json
```

Ejemplo:

```json
{
  "skill_id": "amzn1.ask.skill.xxxxx",
  "stage": "development",
  "locale": "es-MX"
}
```

---

# 24. IDEMPOTENCIA

Antes de crear una Skill:

si el config ya contiene:

```text
skill_id
```

NO crear otra.

Debe pasar a modo:

```text
UPDATE EXISTING SKILL
```

Prevenir Skills duplicadas por ejecuciones repetidas.

---

# 25. SUBIR / ACTUALIZAR MANIFEST

Para una Skill existente usar:

```text
ask smapi update-skill-manifest
```

Consultar primero:

```cmd
ask smapi update-skill-manifest --help
```

Stage:

```text
development
```

Después consultar manifest remoto:

```text
ask smapi get-skill-manifest
```

y guardar snapshot en:

```text
generated\<PROJECT_SLUG>\remote-manifest.json
```

---

# 26. SUBIR INTERACTION MODEL

Usar:

```text
ask smapi set-interaction-model
```

con:

```text
skill ID
stage development
locale es-MX
interaction model JSON
```

Antes:

```cmd
ask smapi set-interaction-model --help
```

No usar comandos v1 obsoletos.

---

# 27. BUILD / STATUS

`set-interaction-model` dispara build.

Consultar estado con APIs actuales.

Preferir:

```text
get-skill-status
```

o recurso equivalente actual.

Esperar hasta:

```text
SUCCEEDED
```

con timeout razonable.

Si:

```text
FAILED
```

guardar errores completos.

No continuar a beta.

---

# 28. APACHE / SKILL ID — ESCALABILIDAD

Este punto es CRÍTICO.

Actualmente puede existir un:

```apache
SetEnv ALEXA_SKILL_ID "..."
```

para Radio Babasónica.

Con varias Skills no se debe permitir que una Skill ID global aplique a todas.

La fábrica debe inspeccionar:

```text
C:\xampp\apache\conf\extra\httpd-ssl.conf
```

y diseñar una estrategia POR PROYECTO.

Ejemplos aceptables:

```text
SetEnvIf Request_URI ...
```

o configuración por Directory/.htaccess si es compatible con la configuración Apache actual.

NO migrar Radio Babasónica automáticamente sin backup y prueba.

Antes de crear la segunda Skill:

generar un:

```text
APACHE_MULTI_SKILL_PLAN.md
```

explicando exactamente cómo coexistirán:

```text
radio-babasonica-alexa
radio-mano-peluda-alexa
otras futuras
```

---

# 29. CAMBIO APACHE

La automatización puede:

```text
crear backup
editar sólo directiva necesaria
ejecutar httpd.exe -t
```

Debe obtener:

```text
Syntax OK
```

NO reiniciar Apache.

Usuario reinicia manualmente.

---

# 30. RUNTIME SKILL ID

Después del reinicio manual, debe existir una prueba que confirme que:

```text
Skill A → recibe Skill ID A
Skill B → recibe Skill ID B
```

sin exponer el valor completo públicamente.

Puede usar endpoint de diagnóstico local temporal o test PHP CLI, nunca un endpoint público que revele IDs completos.

---

# 31. VALIDACIÓN SMAPI

No depender de Certification → Validation en interfaz.

Usar Skill Validation API vía ASK CLI.

ASK CLI v2 reemplazó el antiguo `ask validate`.

Usar:

```text
submit-skill-validation
get-skill-validations
```

o nombres actuales equivalentes mostrados por:

```cmd
ask smapi --help
```

Stage:

```text
development
```

Locale:

```text
es-MX
```

Guardar:

```text
generated\<PROJECT_SLUG>\VALIDATION_RESULTS.md
```

Gate:

```text
0 REQUIRED failures
```

---

# 32. SIMULACIÓN

ASK CLI v2 usa operaciones SMAPI de simulación.

Usar:

```text
simulate-skill
get-skill-simulation
```

si están disponibles para `es-MX`.

Antes comprobar help/version.

Si la API de simulación no soporta `es-MX` en la versión actual:

```text
NO marcar como fallo.
```

Documentar que la prueba debe realizarse en Alexa Simulator o Echo físico.

---

# 33. BETA TEST — AUTOMATIZAR

Después de validación correcta:

crear beta:

```cmd
ask smapi create-beta-test --skill-id <SKILL_ID> --profile signal-radio-factory
```

Consultar `--help` antes.

Agregar testers:

```text
ask smapi add-testers-to-beta-test
```

o nombre actual equivalente.

Amazon soporta hasta 500 testers.

Nunca agregar emails no incluidos explícitamente en el config.

---

# 34. TESTERS CONFIG

Ejemplo:

```json
"beta_testers": [
  "tester@example.com"
]
```

Nunca usar correos de otros proyectos automáticamente.

---

# 35. START BETA

Después de agregar testers:

```text
ask smapi start-beta-test
```

Guardar respuesta.

Después consultar:

```text
get-beta-test
list-beta-testers
```

Registrar:

```text
invited
accepted
not accepted
```

según respuesta disponible.

---

# 36. ACCIÓN HUMANA QUE SIGUE SIENDO NECESARIA

La fábrica NO puede hacer automáticamente:

```text
aceptar beta desde cuenta tester
probar físicamente un Echo
aceptar Login with Amazon inicial
aprobar declaraciones legales falsas
```

Debe generar instrucciones claras.

---

# 37. CERTIFICACIÓN / PUBLICACIÓN

SMAPI permite:

```text
submit-skill-for-certification
```

pero la fábrica NO debe ejecutarlo automáticamente por defecto.

Requiere parámetro explícito:

```text
--SubmitForCertification
```

y confirmación humana.

Por defecto:

```text
NO SUBMIT
```

---

# 38. PUBLICATION METHOD

Si en el futuro se envía:

preferir inicialmente:

```text
MANUAL_PUBLISHING
```

para evitar publicar automáticamente tras certificación.

No usar:

```text
AUTO_PUBLISHING
```

sin aprobación explícita.

---

# 39. SCRIPT PRINCIPAL

Crear:

```text
scripts\create-radio-skill.ps1
```

Uso esperado:

```powershell
.\scripts\create-radio-skill.ps1 `
  -Config ".\config\radiomp-audio.json"
```

Debe ejecutar:

```text
1. validate config
2. diagnose stream
3. generate backend
4. run backend tests
5. generate manifest
6. generate interaction model
7. check ASK auth
8. create Amazon Skill
9. capture Skill ID
10. update manifest
11. upload model
12. wait build
13. prepare Apache Skill-ID mapping
14. validate Apache syntax
15. STOP and request manual Apache restart if required
16. after resume, run SMAPI validation
17. optionally create beta
18. optionally add testers
19. generate final report
```

---

# 40. CHECKPOINT / RESUME

El script debe poder detenerse y continuar.

Ejemplo:

```text
WAITING_FOR_APACHE_RESTART
```

Después el usuario ejecuta:

```powershell
.\scripts\create-radio-skill.ps1 `
  -Config ".\config\radiomp-audio.json" `
  -Resume
```

No repetir creación de Skill.

---

# 41. DRY RUN

Implementar:

```powershell
-DryRun
```

Ejemplo:

```powershell
.\scripts\create-radio-skill.ps1 `
  -Config ".\config\radiomp-audio.json" `
  -DryRun
```

En Dry Run:

```text
NO crear skill
NO modificar Apache
NO crear beta
NO cambiar recursos Amazon
```

Sí debe:

```text
diagnosticar stream
generar manifest
generar interaction model
generar backend en staging
mostrar comandos SMAPI previstos
```

---

# 42. CONFIRMACIONES

Acciones destructivas o sensibles deben requerir opt-in:

```text
crear Skill Amazon
modificar Apache
crear beta
agregar testers
enviar certificación
eliminar Skill
```

Crear Skill puede ser habilitado con:

```text
-Apply
```

---

# 43. NO IMPLEMENTAR DELETE EN EL FLUJO NORMAL

Aunque SMAPI permite eliminar Skills:

NO ofrecer borrado como parte del workflow habitual.

Si se crea script futuro de eliminación:

```text
delete-skill.ps1
```

debe exigir:

```text
Skill ID completo
nombre esperado
doble confirmación
backup remoto del manifest
```

---

# 44. LOGGING

Logs:

```text
logs\factory-YYYYMMDD.log
```

NO registrar:

```text
LWA tokens
refresh tokens
passwords
cookies
cert private keys
Amazon credentials
```

Sí registrar:

```text
command
timestamp
exit code
skill ID
stage
status
```

Skill ID no es una contraseña, pero evitar imprimirlo innecesariamente en logs públicos.

---

# 45. GENERAR REPORTES

Por radio:

```text
generated\<PROJECT_SLUG>\
├── DIAGNOSTIC_RESULTS.md
├── GENERATED_MANIFEST.md
├── BUILD_RESULTS.md
├── VALIDATION_RESULTS.md
├── BETA_RESULTS.md
├── APACHE_RESULTS.md
├── FINAL_RESULTS.md
├── skill-manifest.json
├── interaction-model-es-MX.json
└── skill-state.json
```

---

# 46. FINAL_RESULTS

Debe contener:

```text
Channel ID:
Skill Display Name:
Invocation Name:
Stream URL:
Project Slug:
Backend Path:
Endpoint:
ASK Profile:
Vendor ID:
Skill ID:
Locale:
Manifest:
AudioPlayer:
Interaction Model:
Build:
Validation:
Apache:
Beta:
Tester status:
Echo physical:
Certification:
Current State:
```

---

# 47. MASTER STATUS

Crear:

```text
MASTER_STATUS.md
```

Tabla de todas las Skills administradas por la fábrica:

| Project | Channel | Skill Name | Skill ID | Stage | Build | Validation | Beta | Echo |
|---|---|---|---|---|---|---|---|---|

NO inventar estados.

---

# 48. REGISTRO LOCAL DE SKILLS

Crear:

```text
config\skills.registry.json
```

Ejemplo:

```json
{
  "skills": [
    {
      "project_slug": "radio-babasonica-alexa",
      "channel_id": "radiobbs",
      "skill_id": "amzn1.ask.skill....",
      "locale": "es-MX",
      "managed_by_factory": false
    }
  ]
}
```

Radio Babasónica puede registrarse como:

```text
managed_by_factory=false
```

porque fue creada manualmente.

No modificarla al registrarla.

---

# 49. IMPORTAR SKILL EXISTENTE — FUTURO

La fábrica debe diseñarse para poder adoptar una Skill existente sin recrearla.

Comando futuro:

```powershell
.\scripts\import-existing-skill.ps1 -SkillId "amzn1.ask.skill...."
```

Debe descargar:

```text
manifest
interaction model
status
```

y registrar la Skill localmente.

No modificar recursos remotos durante import.

---

# 50. RADIO BABASÓNICA COMO TEST DE LECTURA

Después de configurar ASK CLI, Codex puede usar el Skill ID existente de Radio Babasónica SÓLO para comprobar operaciones READ-ONLY:

```text
get-skill-manifest
get-interaction-model
get-skill-status
get-beta-test
list-beta-testers
```

NO ejecutar update.

NO crear nueva versión.

NO finalizar beta.

---

# 51. PRIMERA META DE ESTE MD

La primera ejecución de Codex NO debe crear todavía una segunda radio automáticamente.

Debe dejar listo:

```text
ASK CLI
autenticación
Vendor ID
estructura aws-api-skill
scripts base
templates
DryRun
registry
documentación
```

Y generar:

```text
C:\xampp\htdocs\aws-api-skill\AWS_API_SKILL_BOOTSTRAP_RESULTS.md
```

---

# 52. REPORTE BOOTSTRAP OBLIGATORIO

Contenido:

## Environment

```text
Windows:
Node:
npm:
Git:
ASK CLI:
ASK CLI major version:
```

## ASK Profile

```text
Profile:
Authenticated: YES / NO
Vendor ID:
```

## Created files

Lista.

## ASK CLI commands validated

Lista de comandos cuyo `--help` fue comprobado.

Como mínimo:

```text
list-vendors
create-skill-for-vendor
get-skill-manifest
update-skill-manifest
set-interaction-model
get-skill-status
submit-skill-validation
get-skill-validations
create-beta-test
add-testers-to-beta-test
start-beta-test
get-beta-test
list-beta-testers
submit-skill-for-certification
```

Si un nombre cambió en la versión instalada:

registrar nombre real.

## Radio Babasónica read-only test

```text
Manifest read: PASS / NOT RUN
Interaction model read: PASS / NOT RUN
Skill status read: PASS / NOT RUN
No writes executed: YES
```

## Factory status

```text
Ready for DryRun: YES / NO
Ready to create new Skills: YES / NO
```

## Manual actions pending

Lista.

---

# 53. NO CREAR radiomp-audio TODAVÍA EN BOOTSTRAP

Aunque se use como ejemplo:

```text
radiomp-audio
```

esta primera ejecución sólo prepara la fábrica.

NO crear esa Skill todavía.

Después de revisar:

```text
AWS_API_SKILL_BOOTSTRAP_RESULTS.md
```

se hará una segunda fase para construir la primera Skill completamente por API.

---

# 54. CRITERIOS DE ACEPTACIÓN DEL BOOTSTRAP

```text
[ ] Proyecto aws-api-skill creado/organizado
[ ] Node válido
[ ] npm válido
[ ] ASK CLI v2 instalado
[ ] ASK CLI autenticado o pasos manuales claros
[ ] Vendor ID obtenido
[ ] Credenciales no guardadas en repo
[ ] Config maestra creada
[ ] Template radio config creado
[ ] Skill manifest template creado
[ ] Interaction model template creado
[ ] Scripts PowerShell creados
[ ] DryRun implementado
[ ] Registry implementado
[ ] No se modificó Radio Babasónica
[ ] No se modificó SignalLive
[ ] No se modificó MediaMTX
[ ] No se reinició Apache
[ ] No se creó Skill nueva
[ ] Reporte bootstrap generado
```

---

# 55. REFERENCIA IMPORTANTE ASK CLI v2

ASK CLI v2 usa:

```text
ask smapi
```

para operaciones de SMAPI.

No usar ejemplos antiguos con:

```text
ask api
```

sin verificar versión.

ASK CLI v2 también eliminó comandos high-level antiguos como:

```text
ask validate
ask simulate
```

y los reemplazó por operaciones SMAPI específicas.

Antes de ejecutar cualquier comando sensible:

```cmd
ask smapi <command> --help
```

---

# 56. FIN DE FASE

Al terminar este MD deben existir:

```text
C:\xampp\htdocs\aws-api-skill\AWS_API_SKILL_BOOTSTRAP_RESULTS.md
C:\xampp\htdocs\aws-api-skill\README.md
C:\xampp\htdocs\aws-api-skill\MASTER_STATUS.md
C:\xampp\htdocs\aws-api-skill\config\
C:\xampp\htdocs\aws-api-skill\templates\
C:\xampp\htdocs\aws-api-skill\scripts\
```

Y el estado esperado será:

```text
Alexa Skill Factory
        ↓
ASK CLI / SMAPI READY
        ↓
siguiente fase:
crear primera radio nueva por API
```
