Añade env de ingesta, SMTP y webhooks + dependencia nodemailer
Variables nuevas (todas opcionales vía zod, sin romper build/demo): - FUNNEL_API_KEY: clave Bearer del EP de ingesta. - SMTP_* + EMAIL_FROM: envío de email del presupuesto/enlace. - PERFIL/WHATSAPP/WHATSAPP_START webhook URLs: señales al flujo externo. - APP_URL: base para enlaces absolutos. Helpers emailConfigurado()/perfilWebhookConfigurado()/whatsappWebhookConfigurado()/ whatsappStartConfigurado(). nodemailer como dep directa (stack: Email SMTP). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -12,12 +12,36 @@ const schema = z.object({
|
||||
RETELL_API_KEY: opcional,
|
||||
RETELL_AGENT_ID: opcional,
|
||||
RETELL_FROM_NUMBER: opcional,
|
||||
// EP de ingesta del lead: clave compartida que valida al llamante externo.
|
||||
FUNNEL_API_KEY: opcional,
|
||||
// SMTP para enviar el presupuesto y el enlace al formulario.
|
||||
SMTP_HOST: opcional,
|
||||
SMTP_PORT: opcional,
|
||||
SMTP_USER: opcional,
|
||||
SMTP_PASS: opcional,
|
||||
EMAIL_FROM: opcional,
|
||||
// Webhooks salientes hacia el flujo externo (generación, entrega y arranque de WhatsApp).
|
||||
PERFIL_WEBHOOK_URL: opcional,
|
||||
WHATSAPP_WEBHOOK_URL: opcional,
|
||||
WHATSAPP_START_WEBHOOK_URL: opcional,
|
||||
// Base pública de la app, para construir enlaces (ej. el enlace al formulario en el email).
|
||||
APP_URL: opcional,
|
||||
});
|
||||
|
||||
export const env = schema.parse({
|
||||
RETELL_API_KEY: process.env.RETELL_API_KEY,
|
||||
RETELL_AGENT_ID: process.env.RETELL_AGENT_ID,
|
||||
RETELL_FROM_NUMBER: process.env.RETELL_FROM_NUMBER,
|
||||
FUNNEL_API_KEY: process.env.FUNNEL_API_KEY,
|
||||
SMTP_HOST: process.env.SMTP_HOST,
|
||||
SMTP_PORT: process.env.SMTP_PORT,
|
||||
SMTP_USER: process.env.SMTP_USER,
|
||||
SMTP_PASS: process.env.SMTP_PASS,
|
||||
EMAIL_FROM: process.env.EMAIL_FROM,
|
||||
PERFIL_WEBHOOK_URL: process.env.PERFIL_WEBHOOK_URL,
|
||||
WHATSAPP_WEBHOOK_URL: process.env.WHATSAPP_WEBHOOK_URL,
|
||||
WHATSAPP_START_WEBHOOK_URL: process.env.WHATSAPP_START_WEBHOOK_URL,
|
||||
APP_URL: process.env.APP_URL,
|
||||
});
|
||||
|
||||
// Mínimo para lanzar una llamada saliente: clave de API + número de origen. El agente puede
|
||||
@@ -26,3 +50,21 @@ export const env = schema.parse({
|
||||
export function retellConfigurado(): boolean {
|
||||
return Boolean(env.RETELL_API_KEY && env.RETELL_FROM_NUMBER);
|
||||
}
|
||||
|
||||
// Mínimo para enviar email: host SMTP + remitente. Sin esto el envío degrada a no-op.
|
||||
export function emailConfigurado(): boolean {
|
||||
return Boolean(env.SMTP_HOST && env.EMAIL_FROM);
|
||||
}
|
||||
|
||||
// Cada webhook saliente es opcional: si falta su URL, la señal correspondiente no se manda.
|
||||
export function perfilWebhookConfigurado(): boolean {
|
||||
return Boolean(env.PERFIL_WEBHOOK_URL);
|
||||
}
|
||||
|
||||
export function whatsappWebhookConfigurado(): boolean {
|
||||
return Boolean(env.WHATSAPP_WEBHOOK_URL);
|
||||
}
|
||||
|
||||
export function whatsappStartConfigurado(): boolean {
|
||||
return Boolean(env.WHATSAPP_START_WEBHOOK_URL);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user