WITHMIA v1.0.8 — Enforcement Real de Planes + Web Chat Gratis
Implementación completa de enforcement backend para todos los límites de plan (documentos, workflows, miembros, canales). El plan Gratis ahora incluye WhatsApp + Web Chat — dos canales para empezar sin pagar.
Equipo WITHMIA
WITHMIA
La v1.0.7 dejó el billing funcionando sin errores. La v1.0.8 cierra una brecha crítica: los límites de cada plan ahora se aplican realmente en el backend, y el plan Gratis se vuelve más competitivo con WhatsApp + Web Chat incluidos.
El problema: enforcement inexistente
Una auditoría profunda reveló que los límites de plan solo se verificaban en el frontend — locks visuales, badges “PRO” y redirecciones a la página de suscripción. Pero las APIs estaban completamente abiertas:
- Un usuario del plan Gratis podía subir documentos a la base de conocimiento vía API
- Podía crear workflows ilimitados llamando al endpoint directamente
- Podía invitar miembros sin restricción alguna
- Solo los mensajes IA (500/mes) tenían enforcement real vía
AiUsageService
¿Qué significaba esto?
Que cualquier usuario con conocimientos técnicos podía saltarse todas las restricciones del plan Gratis y usar features de pago sin suscribirse. Un problema de seguridad y modelo de negocio.
La solución: PlanEnforcementService
Se verificó y completó el servicio PlanEnforcementService que centraliza toda la lógica de verificación de límites:
| Método | Qué verifica | Fuente de datos |
|---|---|---|
canUseChannel($company, $channel) | Canal permitido en el plan | billing.plans.{tier}.channels |
canAddDocument($company) | Límite de documentos RAG | max_documents vs KnowledgeDocument::count() |
canCreateWorkflow($company) | Límite de workflows n8n | max_workflows vs WhatsAppInstance::count() |
canAddMember($company) | Límite de miembros | max_members vs User::count() + TeamInvitation::pending() |
El servicio resuelve automáticamente el plan activo de la empresa (o free si no tiene suscripción) y consulta config/billing.php para obtener los límites.
Enforcement aplicado en todos los controllers
ChatwootChannelController (ya existía ✅)
Los 4 métodos de creación de canal ya verificaban el plan:
createWebWidget()→canUseChannel($company, 'web')createEmail()→canUseChannel($company, 'email')createInstagram()→canUseChannel($company, 'instagram')createFacebookMessenger()→canUseChannel($company, 'facebook')
DocumentController (nuevo 🔒)
storeDocumentMetadata()ahora verificacanAddDocument()antes de crear el registro- Plan Gratis: 0 documentos → bloqueado completamente
- Plan Pro: máximo 10 documentos
- Enterprise: ilimitado (
max_documents = -1)
N8nWorkflowController (nuevo 🔒)
createWorkflowForCompany()ahora verificacanCreateWorkflow()antes de llamar a n8n- Plan Gratis: 0 workflows → bloqueado completamente
- Plan Pro: máximo 3 workflows
TeamInvitationController (nuevo 🔒)
store()ahora verificacanAddMember()después de validar duplicados- Cuenta usuarios actuales + invitaciones pendientes vs
max_members - Plan Gratis: máximo 1 miembro (el owner) → no puede invitar a nadie
Todos los endpoints retornan HTTP 403 con upgrade_required: true cuando el límite se excede, permitiendo al frontend mostrar el prompt de upgrade.
Plan Pro: enforcement completo de sus 5 límites
El plan Pro ($24.990/mes) es el más popular de WITHMIA. Con el enforcement real, ahora cada uno de sus límites se valida en el backend:
Canales: 5 canales completos ✅
- WhatsApp, Instagram, Facebook Messenger, Email, Web Chat
canUseChannel()permite los 5 canales configurados enbilling.plans.pro.channels- Solo Acceso API queda bloqueado (requiere Business o Enterprise)
Documentos RAG: máximo 10 ✅
canAddDocument()cuenta losKnowledgeDocumentde la empresa- Si tiene 10, el endpoint retorna 403 con mensaje de upgrade
- Para subir más → upgrade a Business (50) o Enterprise (ilimitado)
Workflows: máximo 3 ✅
canCreateWorkflow()cuenta lasWhatsAppInstanceconn8n_workflow_idactivo- Si tiene 3, se bloquea la creación de nuevos bots
- Para más → upgrade a Business (10) o Enterprise (ilimitado)
Miembros: 1 incluido + extras de pago ✅
canAddMember()cuenta usuarios + invitaciones pendientes vsmax_members- Pro incluye 1 miembro por defecto
- Miembros adicionales: $10.500 CLP/mes cada uno (pago vía Flow.cl/dLocal)
- Cada miembro extra incrementa
max_membersautomáticamente tras confirmar pago
Mensajes IA: 2.000/mes ✅
AiUsageService.canSendMessage()— ya existía antes de v1.0.8- Al 90% y 100% se envían alertas por email
- Excedentes: $5.990 CLP por cada 1.000 mensajes extra (máximo 5.000 extra)
Modelos IA: GPT-4o-mini + GPT-4o
getRecommendedModel()rutea automáticamente según plan- Pro puede utilizar ambos modelos según la complejidad del mensaje
Plan Gratis: ahora con WhatsApp + Web Chat
Decisión estratégica: el plan Gratis ahora incluye 2 canales en vez de solo WhatsApp.
¿Por qué?
El widget de chat web es un mercado poco explotado en Latinoamérica. Ofrecerlo gratis permite que más empresas prueben WITHMIA en su sitio web (WordPress, Shopify, Wix) sin compromiso, y descubran el valor de la plataforma de forma orgánica.
Cambios realizados
| Capa | Antes | Ahora |
|---|---|---|
config/billing.php | channels: ['whatsapp'] | channels: ['whatsapp', 'web'] |
SubscriptionPage.tsx | ”Solo WhatsApp" | "WhatsApp + Web Chat” |
Pricing.tsx (landing) | “1 canal (WhatsApp)" | "2 canales (WhatsApp + Web Chat)“ |
| Tabla comparativa | Web chat ❌ para gratis | Web chat ✅ para gratis |
IntegrationSection.tsx | Web chat sin proOnly | Sin cambios (ya correcto) |
Lo que sigue bloqueado en Gratis
- Instagram, Facebook Messenger, Email → requieren Pro o superior
- Documentos RAG → 0 permitidos
- Workflows → 0 permitidos
- Miembros adicionales → solo el owner
Resumen técnico
Archivos modificados
Backend:
config/billing.php— free.channels actualizado a['whatsapp', 'web']app/Http/Controllers/Api/DocumentController.php— enforcement concanAddDocument()app/Http/Controllers/Api/N8nWorkflowController.php— enforcement concanCreateWorkflow()app/Http/Controllers/Api/TeamInvitationController.php— enforcement concanAddMember()app/Services/PlanEnforcementService.php— verificado y completo (ya existía)
Frontend APP:
resources/js/pages/subscription/SubscriptionPage.tsx— texto actualizado
Landing page (WEBPAGE):
WEBPAGE/withmia-main/src/components/Pricing.tsx— features, tabla comparativa y FAQ
Patrón de respuesta 403
Todos los endpoints protegidos retornan el mismo formato:
{
"success": false,
"error": "Has alcanzado el límite de X de tu plan. Actualiza tu plan para Y.",
"upgrade_required": true
}
v1.0.8 transforma WITHMIA de una plataforma con restricciones cosméticas a una con enforcement real en cada endpoint. Y al mismo tiempo, hace el plan Gratis más atractivo con Web Chat incluido. Seguridad y crecimiento en una sola actualización.
Etiquetas
Comentarios
Sé respetuoso. Tu email no será publicado.