Plugin: AI Widget by Workfluz
Versión: 1.0.0
Fecha de Revisión: 24 de Octubre de 2025
Estado: ❌ NO CUMPLE con requisitos para repositorio oficial de WordPress
Problema: El plugin usa una licencia propietaria, lo cual es INCOMPATIBLE con WordPress.org
Evidencia:
// Archivo: ai-voice-text-widget.php, líneas 9-10
License: Proprietary
License URI: https://workfluz.com/licenseRequisito de WordPress.org:
"All plugins hosted on WordPress.org MUST be 100% GPL or compatible."
Impacto: ❌ RECHAZO AUTOMÁTICO - WordPress.org rechazará el plugin inmediatamente.
Solución Requerida:
// Cambiar a:
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
// O alternativamente:
License: GPL-3.0-or-later
License URI: https://www.gnu.org/licenses/gpl-3.0.htmlProblema: El archivo readme.txt está completamente vacío.
Requisito de WordPress.org:
"A properly formatted readme.txt file is REQUIRED for plugin approval."
Impacto: ❌ RECHAZO AUTOMÁTICO
Solución Requerida: Crear readme.txt con formato estándar que incluya:
- Contributors
- Tags
- Requires at least / Tested up to
- Stable tag
- Description
- Installation
- Frequently Asked Questions
- Changelog
- Screenshots (opcional)
Problema: El plugin usa servicios externos (OpenAI, VAPI, ElevenLabs) pero NO lo divulga adecuadamente en readme.txt ni en la interfaz de usuario.
Servicios Externos Detectados:
- OpenAI API (
https://api.openai.com/v1/chat/completions) - VAPI SDK (
https://cdn.jsdelivr.net/gh/VapiAI) - ElevenLabs (mencionado en código)
- Workfluz License Server (
https://app.workfluz.com/api/v1/licenses/validate)
Requisito de WordPress.org:
"Plugins that call external services MUST clearly disclose this in the readme.txt and provide links to Terms of Service and Privacy Policies."
Impacto: ❌ RECHAZO por falta de transparencia
Solución Requerida:
- Agregar sección "External Services" en readme.txt
- Incluir enlaces a términos de servicio y políticas de privacidad
- Mostrar avisos en la UI antes de la primera conexión
Problema: El código contiene avisos de "licencia propietaria" y restricciones incompatibles con GPL.
Evidencia:
// Archivo: ai-voice-text-widget.php, líneas 17-36
LICENCIA PROPIETARIA Y CONFIDENCIAL
====================================
RESTRICCIONES:
- Este código es CONFIDENCIAL y PROPIETARIO de Workfluz
- Queda PROHIBIDA la redistribución, copia, modificación...Requisito de WordPress.org:
"Plugin code cannot contain restrictions that contradict the GPL license."
Impacto: ❌ RECHAZO - WordPress.org no permitirá código con restricciones anti-GPL
Conflicto con GPL:
- GPL permite redistribución → Tu licencia la prohíbe
- GPL permite modificación → Tu licencia la prohíbe
- GPL permite uso comercial → Tu licencia lo limita
Solución Requerida: Eliminar TODOS los avisos de licencia propietaria del código.
Problema: No hay explicación clara sobre qué datos se envían a servicios externos.
Requisito de WordPress.org:
"Users must be informed about what data is transmitted to external services."
Impacto: Posible rechazo durante revisión manual.
Solución: Agregar en readme.txt y en la UI de configuración:
- Qué datos se envían (mensajes de usuario, audio, etc.)
- A qué servicios se envían
- Cómo se procesan
- Enlaces a políticas de privacidad de cada servicio
Problema: El plugin se conecta a app.workfluz.com para validar licencias sin consentimiento explícito.
Código Problemático:
// class-freemium.php, línea 434
$api_url = 'https://app.workfluz.com/api/v1/licenses/validate';Requisito de WordPress.org:
"Plugins cannot 'phone home' or track users without explicit opt-in and disclosure."
Impacto:
Solución:
- Divulgar claramente en readme.txt
- Hacer la conexión opcional (con opt-in)
- O eliminarla completamente para la versión del repositorio
Estado: ✅ BIEN IMPLEMENTADO
Evidencia:
- Uso correcto de
sanitize_text_field() - Uso de
esc_attr(),esc_html() - Uso de
wp_kses_post()para SVG - Uso de
sanitize_hex_color()
Ejemplo:
update_option( 'ai_widget_position', sanitize_text_field( $_POST['ai_widget_position'] ) );
update_option( 'ai_widget_logo_svg', wp_kses_post( $_POST['ai_widget_logo_svg'] ) );Estado: ✅ BIEN IMPLEMENTADO
Evidencia:
// Verificación de nonce
check_admin_referer( 'ai_widget_appearance' )
// Verificación de permisos
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
// AJAX nonce
check_ajax_referer( 'validate_license' );Estado: ✅ CORRECTO
- Uso de
wp_remote_post()en lugar de cURL - Uso de
wp_enqueue_script()ywp_enqueue_style() - Uso de opciones de WordPress (
get_option(),update_option()) - Uso de tablas personalizadas con prefijo
$wpdb->prefix
Estado: ✅ BIEN ORGANIZADO
ai-voice-text-widget/
├── admin/ ✅ Separación de admin
├── public/ ✅ Separación de frontend
├── includes/ ✅ Clases principales
├── languages/ ✅ Preparado para i18n
└── ai-voice-text-widget.php ✅ Archivo principal
Estado: ✅ CONFIGURADO CORRECTAMENTE
Text Domain: ai-voice-text-widget
Domain Path: /languages
// Uso en código:
__( 'AI Widget', 'ai-voice-text-widget' )Requisito: Debe estar probado con las últimas 3 versiones de WordPress.
Solución: Agregar en readme.txt:
Requires at least: 6.0
Tested up to: 6.7
Requires PHP: 7.4
Problema Potencial: Los comentarios sobre "protección" podrían hacer pensar que el código está ofuscado.
Requisito de WordPress.org:
"No obfuscated, encoded, or minified code is allowed (except for libraries)."
Estado Actual: ✅ El código NO está ofuscado, solo tiene comentarios de copyright.
Problema: El modelo de license keys puede ser problemático.
Preocupación de WordPress.org:
- Los plugins freemium están permitidos
- PERO no pueden estar "bloqueados" si no hay licencia válida
- Deben funcionar con funcionalidad básica sin licencia
Estado Actual:
-
Cambiar licencia a GPL-2.0-or-later
- Modificar header del plugin principal
- Eliminar TODOS los avisos de licencia propietaria
- Crear archivo LICENSE con texto GPL
- Actualizar todos los headers de archivos PHP
-
Crear readme.txt completo
- Usar formato estándar de WordPress
- Incluir descripción detallada
- Documentar instalación
- Incluir changelog
- Agregar sección de servicios externos
-
Divulgar servicios externos
- Documentar OpenAI API (con link a ToS)
- Documentar VAPI (con link a ToS)
- Documentar ElevenLabs (con link a ToS)
- Documentar conexión a Workfluz (o eliminarla)
- Agregar avisos en la UI
-
Eliminar telemetría no divulgada
- Hacer opcional la conexión a workfluz.com
- O eliminarla para versión del repositorio
- Agregar opt-in explícito
-
Actualizar información de compatibilidad
- Probar con WordPress 6.7
- Actualizar "Tested up to"
- Verificar PHP 8.0+ compatibility
Si prefieres mantener la licencia propietaria y el modelo actual:
- ✅ Mantener licencia propietaria
- ✅ Control total del código
- ✅ Sistema de licencias propio
- ❌ Sin exposición de WordPress.org
- ❌ Sin actualizaciones automáticas de WordPress
- Versión Lite en WordPress.org: GPL, funcionalidad básica
- Versión Pro en tu sitio: Propietaria, con licencias
- ✅ Exposición en WordPress.org
- ✅ Actualizaciones automáticas para Lite
- ✅ Puedes vender Pro separately
- Ejemplo: WooCommerce, Yoast SEO, etc.
- Envato (CodeCanyon)
- Freemius
- WooCommerce.com
- ✅ Permiten licencias propietarias
- ✅ Sistema de licencias incluido
- ❌ Comisiones (20-50%)
| Categoría | Estado | Comentario |
|---|---|---|
| Licencia | ❌ NO CUMPLE | Debe ser GPL |
| readme.txt | ❌ FALTANTE | Archivo vacío |
| Servicios Externos | ❌ NO DIVULGADO | Falta documentación |
| Seguridad | ✅ CUMPLE | Bien implementada |
| Código | ✅ CUMPLE | Buena calidad |
| Estructura | ✅ CUMPLE | Bien organizado |
| APIs WordPress | ✅ CUMPLE | Uso correcto |
Tiempo estimado: 8-16 horas de trabajo para hacer compatible
Prioridad de cambios:
- Cambiar a GPL-2.0-or-later (2 horas)
- Crear readme.txt completo (4 horas)
- Divulgar servicios externos (2 horas)
- Testing y ajustes (2-8 horas)
Estado actual: ✅ LISTO PARA PRODUCCIÓN
El plugin está bien desarrollado para uso privado/comercial. Solo necesita:
- Documentación de usuario final
- Sistema de soporte definido
- Proceso de actualización claro
© 2024-2025 Análisis de cumplimiento - Workfluz AI Widget