Skip to content

Repository files navigation

🛡️ Kiro AntiScam

Asistente de WhatsApp que detecta estafas en segundos

Hackathon Kiro TypeScript AWS CDK Next.js Tailwind CSS License: MIT

⚠️ Los veredictos son orientativos, no asesoramiento bancario, legal ni de seguridad.


đź“‹ Tabla de Contenidos


Arquitectura

flowchart LR
    U[📱 Usuario WhatsApp] -->|Envía mensaje| K[Kapso API]
    K -->|Webhook POST| GW[AWS API Gateway]
    GW -->|Autentica firma| WH[Lambda Webhook]
    WH -->|Pseudonimiza + Redacta| SQS[SQS Queue]
    SQS -->|Consume| LP[Lambda Processor]
    LP -->|Rules + VT + RAG + Bedrock| AP[Analysis Pipeline]
    AP -->|Veredicto| LP
    LP -->|Responde| K
    K -->|Resultado| U

    subgraph AWS Cloud
        GW
        WH
        SQS
        LP
        AP
        DDB[(DynamoDB<br/>Consent + Idempotencia)]
        SM[(Secrets Manager)]
        CW[(CloudWatch<br/>Logs + Alarms)]
    end

    WH -.-> DDB
    LP -.-> DDB
    LP -.-> SM
    LP -.-> CW
Loading
WhatsApp ──→ Kapso ──→ API Gateway ──→ LambdaWebhook ──→ SQS ──→ LambdaProcessor ──→ Kapso ──→ WhatsApp
                               │                                              │
                               │                                              ▼
                               │                                    AnalysisPipeline
                               │                                   ├── Reglas rápidas
                               │                                   ├── VirusTotal
                               │                                   ├── RAG (casos históricos)
                               │                                   └── Bedrock (Claude)
                               │
                          DynamoDB (consentimiento, idempotencia)
                          Secrets Manager (API keys, HMAC secrets)
                          CloudWatch (logs, alarms, budgets)

Flujo

  1. Usuario reenvĂ­a un mensaje sospechoso al nĂşmero de WhatsApp del bot
  2. Kapso recibe el mensaje y dispara un webhook
  3. LambdaWebhook autentica la firma, seudonimiza al usuario, redacta datos sensibles y encola en SQS
  4. LambdaProcessor consume de SQS, ejecuta el pipeline de análisis y responde por Kapso
  5. El usuario recibe un veredicto: 🚨 estafa / ⚠️ cuidado / ✅ parece seguro

Stack tecnolĂłgico

Componente TecnologĂ­a
Backend TypeScript, Node.js 18.18+
Cloud AWS (API Gateway, Lambda, SQS/DLQ, DynamoDB, Secrets Manager, KMS, CloudWatch)
Infraestructura AWS CDK TypeScript
WhatsApp Gateway Kapso API
Análisis Reglas heurísticas + VirusTotal + AWS Bedrock (Claude Sonnet 4)
Testing Vitest
Frontend Next.js 14 (App Router), TypeScript, Tailwind CSS
Package manager pnpm
Despliegue frontend Vercel-ready

Estructura del Repo

kiro-antiscam/
├── src/                          # Backend — bot de WhatsApp
│   ├── agent/                    # Agentes de análisis (LLM + tools)
│   │   ├── analyze-with-agent.ts # Agente de análisis de estafas
│   │   ├── conversation-prompt.ts # Prompt para agente conversacional
│   │   ├── create-conversation-agent.ts # Agente de conversación
│   │   ├── create-conversation-service.ts # Servicio conversacional
│   │   ├── create-analysis-agent.ts  # Factory del agente de análisis
│   │   ├── system-prompt.ts      # System prompt del bot
│   │   ├── model/                # Proveedores de modelo (Bedrock)
│   │   └── tools/                # Tools del agente (URL reputation, casos, analyze-scam)
│   ├── analysis/                 # Pipeline de detección
│   ├── detection/                # Reglas rápidas de detección
│   ├── domain/                   # Modelos de dominio y tipos
│   ├── kapso/                    # Integración con Kapso API (auth, client, parser, QR)
│   ├── lambda/                   # Handlers de Lambda (webhook, processor)
│   ├── messaging/                # Normalización, consentimiento, redacción, responder
│   ├── ports/                    # Interfaces de puertos (análisis, redacción, URL, conversación)
│   ├── queue/                    # SQS publisher, idempotencia
│   ├── reputation/               # VirusTotal y cache de reputación
│   ├── known-cases/              # RAG de casos históricos
│   └── url/                      # Extracción, fetch seguro, SSRF protection
├── landing/                      # Frontend — landing page (Next.js)
│   ├── app/                      # App Router pages
│   ├── components/               # Componentes UI (Hero, HowItWorks, TryIt, etc.)
│   └── lib/                      # Config
├── infra/                        # AWS CDK (definición completa de infraestructura)
├── scripts/                      # Scripts de prueba y deploy
├── test/                         # Tests unitarios (Vitest)
├── docs/                         # Documentación adicional (SDD, verify-before-deploy)
├── .kiro/                        # Configuración Kiro hackathon
├── .env.example                  # Variables de entorno de ejemplo
├── pnpm-workspace.yaml           # Workspace pnpm
├── PRD.md                        # Product Requirements Document
├── SITEMAP.md                    # Mapa de arquitectura y componentes
├── TASKS.md                      # Desglose de tareas del proyecto
└── UBIQUITOUS_LANGUAGE.md        # Glosario de dominio ubicuo (DDD)

Backend: Bot de WhatsApp

Requisitos

  • Node.js 18.18+ y pnpm
  • [Opcional] Cuenta de AWS + AWS CLI configurado para deploy

InstalaciĂłn y pruebas (local, no requiere AWS)

pnpm install
pnpm run build      # Compila TypeScript (strict mode)
pnpm test           # Tests unitarios

Scripts disponibles

Script PropĂłsito
scripts/get-qr.sh Obtener QR para conectar WhatsApp
scripts/whatsapp-send.sh Enviar mensaje de prueba
scripts/webhook-with-url.sh Simular webhook con URL sospechosa
scripts/set-secrets.sh Cargar secrets en AWS Secrets Manager
scripts/webhook-consent.sh Simular flujo de consentimiento
scripts/webhook-unprocessable.sh Simular mensaje no procesable

Frontend: Landing Page

Landing page del proyecto, construida con Next.js 14, App Router, TypeScript y Tailwind CSS. Mobile-first y accesible con componentes: Hero, HowItWorks, Steps, TryIt, Privacy, Footer, WhatsAppQR.

Inicio rápido

cd landing
pnpm install
pnpm dev            # http://localhost:3000

Build y despliegue

pnpm build          # ProducciĂłn
pnpm start          # Servir build

Lista para deploy en Vercel con zero config.


Deploy en AWS

cd infra
pnpm install
npx cdk bootstrap                          # Solo la primera vez por cuenta/regiĂłn
npx cdk deploy AntiScamBotStack \
  -c antiscambot:enableRoutingToken=true \
  -c antiscambot:kapsoPhoneNumberId=<PHONE_NUMBER_ID>

Post-deploy

# Cargar secrets reales
export KAPSO_WEBHOOK_SECRET_VALUE="..."
export USER_ID_HMAC_SECRET_VALUE="$(node -e "console.log(require('crypto').randomBytes(32).toString('hex'))")"
export KAPSO_API_KEY_VALUE="..."
./scripts/set-secrets.sh

# Obtener URL del webhook
./scripts/get-webhook-url.sh

Luego en el panel de Kapso: crear un webhook tipo Kapso (events) con evento Message received y pegar la URL.

Detalle completo en infra/README.md.


Variables de Entorno

Que aporta el desarrollador (valores reales, nunca al repo)

Variable De dĂłnde sale
KAPSO_API_KEY Panel de Kapso → Integrations → API keys
KAPSO_PHONE_NUMBER_ID ID del nĂşmero conectado en Kapso
KAPSO_WEBHOOK_SECRET Secret key del webhook en Kapso
USER_ID_HMAC_SECRET node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Con default (no requiere tocar)

Variable Default
KAPSO_API_BASE_URL https://api.kapso.ai/meta/whatsapp/v24.0
KAPSO_SIGNATURE_HEADER x-webhook-signature
MESSAGE_MAX_LENGTH 4096
DEFAULT_LOCALE es
CONSENT_TTL_DAYS 30
LOG_LEVEL info

Las provee el deploy (CDK)

AWS_REGION, SQS_QUEUE_URL, CONSENT_TABLE_NAME, *_ARN de secretos, ENABLE_ROUTING_TOKEN, ROUTING_TOKEN_KMS_KEY_ID.


Seguridad y Privacidad

  • RedacciĂłn determinista de datos sensibles (OTP, tarjetas, CBU, documentos) en el webhook, antes de SQS, logs o persistencia
  • El telĂ©fono nunca se guarda en claro: se usa userId = HMAC-SHA256 del nĂşmero
  • Webhook autenticado por firma HMAC, verificada en tiempo constante
  • Routing token cifrado con KMS (opcional)
  • Consentimiento explĂ­cito antes de analizar; datos con TTL en DynamoDB
  • Secretos en AWS Secrets Manager; IAM de mĂ­nimo privilegio

DocumentaciĂłn

Archivo Contenido
PRD.md Requisitos del producto, user stories, decisiones técnicas
SITEMAP.md Mapa de arquitectura, endpoints, flujos, diagramas
TASKS.md Desglose de tareas del proyecto
UBIQUITOUS_LANGUAGE.md Glosario de dominio ubicuo (DDD)
docs/sdd/ SDD — Spec-Driven Development artifacts
docs/verify-before-deploy.md Checklist de verificaciĂłn pre-deploy
infra/README.md DocumentaciĂłn detallada del deploy
scripts/README.md Scripts de prueba y E2E
landing/README.md DocumentaciĂłn de la landing page

👥 Equipo

Rol Integrante
đź”§ Kapso / Infra / Agent pipeline xxgeoremixxx
🕵️ Análisis / Detección / URLs darksidesad
🎨 Landing page / Frontend darksidesad
🚀 Fork y mantenimiento fxckcode

📜 Licencia

MIT — Hecho con 💙 para la comunidad LATAM durante el hackathon AWS × Código Facilito.

About

🛡️ Asistente de WhatsApp que detecta estafas en segundos. MVP del hackathon AWS x Código Facilito — Kiro, Reto 3: Agentes Especializados. Next.js + AWS CDK + Bedrock + Kapso + TypeScript.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages