Senda
Senda Backend

Variables de entorno

Variables del .env de senda-backend. Nunca se commitean valores reales.

Nunca se commitean valores reales. Las variables sin valor por defecto se completan con tus propias credenciales. Lista completa en .env.example del backend.

CUSTODY_MASTER_SECRET, FILE_VAULT_SECRET y STELLAR_SECRET_KEY deben ser tres valores distintos entre sí.

Servidor y WhatsApp

VariableObligatoriaDescripción
PORTNoPuerto del servidor (por defecto 3000)
NODE_ENVNoEntorno (development en .env.example)
WHATSAPP_TOKENSíToken de acceso de WhatsApp Cloud API
WHATSAPP_PHONE_NUMBER_IDSíID del número de teléfono de WhatsApp Business
WHATSAPP_BUSINESS_ACCOUNT_IDNoID de la cuenta de WhatsApp Business (está en .env.example; el runtime no la lee)
WHATSAPP_API_VERSIONNoVersión de la API (por defecto v22.0)
VERIFY_TOKENSíToken de verificación del webhook. En .env.example es senda-verify-token. Si está vacío, GET /webhook responde 403
WHATSAPP_APP_SECRETSíApp Secret de Meta; firma X-Hub-Signature-256 del webhook. Sin este valor POST /webhook responde 403
WHATSAPP_CLICK_TO_CHATNoNúmero para el wa.me de regreso desde el alta web
PUBLIC_BASE_URLNoURL pública del backend; Render setea RENDER_EXTERNAL_URL solo. Construye /media/welcome.mp4 si no hay WELCOME_VIDEO_URL
WELCOME_VIDEO_URLNoURL absoluta del video de bienvenida. Si no está, usamos PUBLIC_BASE_URL o RENDER_EXTERNAL_URL + /media/welcome.mp4

Stellar y USDC

VariableObligatoriaDescripción
STELLAR_NETWORKSíRed de Stellar (testnet)
STELLAR_HORIZON_URLSíHorizon (https://horizon-testnet.stellar.org)
STELLAR_RPC_URLSíRPC de Soroban (https://soroban-testnet.stellar.org)
STELLAR_FRIENDBOT_URLSí (testnet)Friendbot (https://friendbot.stellar.org)
STELLAR_NETWORK_PASSPHRASESíPassphrase de la red (Test SDF Network ; September 2015)
STELLAR_CONTRACT_IDNoID de SendaContract. Sin este valor no registramos el crédito en el contrato Soroban
STELLAR_PUBLIC_KEYNoClave pública de la cuenta operativa (está en .env.example; el runtime firma con STELLAR_SECRET_KEY)
STELLAR_SECRET_KEYSíClave secreta de la cuenta operativa
STELLAR_TREASURY_SECRET_KEYNoTesorería pooled. Si falta, usa STELLAR_SECRET_KEY
USDC_SAC_CONTRACT_IDSíStellar Asset Contract de USDC (CDT2MY3QNV2RT2XULQWWXX2JELUWRWNXNKONCYG5MTIGZM7G5S2QNNGB)
USDC_CODESíCódigo del activo (USDC)
USDC_ISSUERSíEmisor del USDC (GBBD47IF6LWK7P7MDEVSCWR7DPUWV3NY3DTQEVFL4NAT4AQH3ZLLFLA5)
ENABLE_PUBLIC_CREDITNoEl crédito automático solo corre en testnet, salvo que esta variable sea true en red public

Custodia y wallets

VariableObligatoriaDescripción
CUSTODY_MASTER_SECRETSíSecreto de la custodia invisible (SEP-30, fallback). Distinto de STELLAR_SECRET_KEY
FILE_VAULT_SECRETSíCifrado en reposo de códigos de retiro y wallets legado. Distinto de los otros dos secretos
STELLAR_OFFRAMP_PUBLIC_KEYSíCuenta G… del vault de retiro en efectivo; distinta de la cuenta operativa
USE_PRIVY_WALLETSNofalse mantiene la custodia SEP-30
PRIVY_APP_IDPara PrivyID de la app de Privy. Activa el flujo Privy (salvo USE_PRIVY_WALLETS=false)
PRIVY_APP_SECRETPara PrivySecreto de la app de Privy
PRIVY_SESSION_SIGNER_IDPara PrivySession signer delegado en /setup
PRIVY_SESSION_SIGNER_PRIVATE_KEYPara PrivyClave privada del session signer
PRIVY_SPEND_POLICY_IDNoPolicy de gasto del dashboard de Privy
WEB_SETUP_PUBLIC_URLPara PrivyURL pública del mini sitio de alta
WEB_SETUP_ORIGINPara PrivyOrigen permitido por CORS para el alta

Off-ramp y rendimiento

VariableObligatoriaDescripción
SEP24_HOME_DOMAINSíDominio del ancla SEP-24 para el retiro a Mercado Pago (por defecto testanchor.stellar.org)
BLEND_POOL_IDSíPool de Blend en testnet para el rendimiento de USDC
BLEND_USDC_SAC_IDNoSAC de USDC del pool Blend; si falta, usamos USDC_SAC_CONTRACT_ID
BLEND_MAX_UTILIZATIONNoTope de uso del pool para aceptar depósitos (por defecto 0.85)

Transcripción

VariableObligatoriaDescripción
OPENAI_API_KEYPara notas de vozClave de OpenAI para POST /v1/audio/transcriptions
OPENAI_TRANSCRIPTION_MODELNoModelo de transcripción (whisper-1)

Persistencia

VariableObligatoriaDescripción
DATABASE_URLEn RenderURI de Supabase (Transaction pooler, puerto 6543, sslmode=require). En local, SQLite (data/senda.db)
SENDA_DATA_DIRNoDirectorio de datos. Si no está, usamos data/ bajo el cwd