ASL Intake — Biblioteca de fuentes
Copia de la documentación pública: 2026-09-08
Requisitos previos
Node.js 22 o posterior PostgreSQL 16 o posterior Cuenta de AWS con acceso a Bedrock Número de voz de Twilio
Instale localmente o prepare un Droplet
Use INSTALL-WINDOWS.cmd para Windows nativo o scripts/deploy-digitalocean.ps1 para una instalación aislada en un Droplet compartido.
Implemente la base de datos
La preparación del Droplet crea un clúster PostgreSQL separado y accesible solo desde el servidor, genera credenciales distintas para propietario y ejecución, aplica las migraciones y verifica el rol restringido sin cambiar otros clústeres. Command: npm run db:ensure && npm run db:deploy
Configure el bufete y el agente de voz
Cree el bufete mediante la API administrativa y cargue el guion aprobado y el número de Twilio que recibirá las llamadas.
Dirija Twilio al servicio de voz
Configure el webhook de llamadas entrantes en /twilio/incoming. La respuesta TwiML abre el flujo multimedia bidireccional.
Inicie los servicios
Ejecute la API, el servicio de voz y el trabajador durable como servicios nativos de Node.js separados.
Resultado esperado
Una llamada firmada por Twilio se transmite directamente a Nova, la admisión se guarda una sola vez y el trabajador la archiva y entrega.
Notas de seguridad
No exponga el puerto de PostgreSQL ni las credenciales del propietario a la API, al servicio de voz, al trabajador o a Internet. Use HTTPS/WSS y valide cada firma de Twilio.
Valide el webhook de entrada
El servicio verifica X-Twilio-Signature usando la URL pública exacta y los campos enviados.
Resuelva la configuración por número
El número de Twilio marcado se relaciona en el servidor con un solo bufete y un guion aprobado.
Detecte el idioma
Nova 2 Sonic detecta inglés o español y usa una voz políglota. La persona puede cambiar de idioma durante la llamada.
Transmita el audio a Nova
Node convierte el audio mu-law de Twilio a PCM de 16 kHz y convierte la salida de Nova en tramas multimedia de Twilio.
Use herramientas nativas
Nova llama a complete_intake, send_intake_link, dispatch_urgent_alert, transfer_call y end_call. Node valida y ejecuta cada herramienta con nombres de campos canónicos en inglés. send_intake_link exige el número confirmado explícitamente por la persona, su consentimiento explícito para SMS transaccionales y una evaluación de urgencia resuelta antes de enviarse.
Conserve el ciclo de vida y la transcripción
Los eventos de inicio, alerta, finalización y cierre son idempotentes. Los segmentos de transcripción y el idioma preferido quedan aislados por bufete.
Resultado esperado
No se necesita una plataforma externa de agentes de voz durante la ejecución.
Twilio recibe 401
La URL pública exacta, el token de autenticación o el esquema del proxy no coinciden. Compare la URL configurada con la URL firmada por Twilio y confirme los encabezados del proxy.
Notas de seguridad
No escriba audio, texto de transcripciones, credenciales ni argumentos de herramientas en los registros ordinarios del servicio.
Cree el receptor
Use un endpoint HTTPS controlado por el producto o el bufete.
Verifique la firma
Verifique la firma HMAC con marca de tiempo antes de procesar el cuerpo exacto de la solicitud.
Aplique idempotencia
Guarde la clave estable de idempotencia y responda correctamente a duplicados seguros.
Pruebe reintentos y la cola de errores
Provoque fallas temporales y permanentes y confirme los reintentos, el tiempo de visibilidad y la revisión de mensajes fallidos.
Resultado esperado
Cada admisión llega lógicamente una sola vez, incluso cuando se repite una solicitud de red.
Notas de seguridad
El receptor no debe escribir detalles de las personas que llaman en registros sin censura.
Ejecute escenarios supervisados en ambos idiomas
Pruebe divulgación, emergencias, silencio, interrupciones, correcciones, transferencias, asuntos fuera de alcance y desconexiones por separado en inglés y español.
Verifique los registros
Compare las notas supervisadas, la transcripción, los campos, el idioma preferido, el consentimiento, las alertas, el archivo y la entrega.
Pruebe modos de falla
Pruebe fallas de Twilio, Nova, base de datos, cola, destino y servicios sin perder ni duplicar una admisión.
Apruebe políticas y operaciones
Apruebe la redacción en ambos idiomas para transcripción, retención, privacidad, incidentes y escalamiento humano.
Restaure un respaldo
Ejecute la prueba aislada de restauración y concilie admisiones conocidas antes de aceptar tráfico de producción.
Resultado esperado
Cada requisito bloqueante cuenta con evidencia fechada y una persona responsable.
Requisitos previos
Un conector de almacenamiento con la clave pública RSA-OAEP-256 del bufete El bucket compatible con S3 propiedad del bufete INTAKE_WEB_ENABLED e INTAKE_TRANSACTIONAL_SMS_ENABLED, que permanecen desactivados hasta que el bufete apruebe sus requisitos
Comprenda el límite de confianza antes de activar nada
El navegador de la persona genera una clave AES-256-GCM por archivo, cifra las respuestas y los adjuntos, y envuelve esa clave con la clave pública RSA del bufete. El texto cifrado se carga directamente al bucket del bufete mediante una URL prefirmada de corta duración. ASL solo guarda metadatos del recibo: identificadores, tamaños en bytes, sumas SHA-256 y fechas.
Envíe la invitación solo con consentimiento explícito
La invitación se crea para un número móvil confirmado con consentimiento explícito de SMS transaccional. El enlace de un solo uso viaja únicamente en el cuerpo del SMS y solo en el fragmento de la URL, por lo que el token nunca llega al servidor en una línea de solicitud ni queda en un registro de acceso.
Permita que la persona complete el formulario
El enlace es de un solo uso. Al canjearlo, el token se intercambia por una cookie de sesión HttpOnly, Secure y SameSite=Strict junto con una cookie CSRF, y el token se elimina del historial del navegador.
Verifique la carga antes de aceptar el envío
Cada objeto cifrado se vuelve a comprobar en el bucket del bufete: tamaño, tipo de contenido, metadatos y suma de verificación, antes de marcar el envío como completo. Una discrepancia hace fallar el envío en lugar de registrar un recibo de contenido que no se puede verificar.
Recupere y descifre en los sistemas del bufete
El personal del bufete solicita URLs de descarga prefirmadas de corta duración, descifra con la clave privada del bufete, verifica el sobre y la suma de verificación, y analiza en busca de software malicioso en un entorno aislado antes de incorporar el contenido a su sistema de casos.
Resultado esperado
El bufete puede leer sus propios envíos del formulario web. ASL puede demostrar que hubo un envío y no puede leer su contenido.
No se puede crear una invitación y la API responde firm_storage_not_ready.
El conector de almacenamiento del bufete falta o no está en estado activo. Configure el conector y actívelo solo después de que el bufete complete la prueba de carga, descarga, descifrado, suma de verificación, cuarentena de software malicioso y recuperación de claves.
Actualizar el bucket o la clave pública del bufete responde firm_storage_connector_locked.
El enrutamiento y el material de claves quedan inmutables en cuanto existe la primera invitación de ese bufete, para que el texto cifrado ya almacenado nunca quede huérfano en silencio. Siga el procedimiento documentado de rotación de emergencia. No edite el registro del conector directamente.
Notas de seguridad
ASL nunca posee la clave privada del bufete ni una respuesta o un adjunto legibles del formulario web. Solicitar la inspección del contenido en el servidor es una violación del diseño, no un atajo de depuración. Perder la clave privada del bufete vuelve permanentemente irrecuperable el texto cifrado existente; por eso se exigen dos copias de recuperación cifradas y aprobadas antes de enviar una invitación real. Rotar la clave pública no vuelve a cifrar los objetos existentes; el contenido cifrado con la clave anterior sigue necesitando esa clave anterior.