Saltar a contenido

Convoca Enroll

Guía para administradores: gestión de actividades e inscripciones.

1. Introducción

Convoca Enroll gestiona el ciclo completo de actividades: desde su creación hasta el check-in de asistentes. Permite crear actividades, configurar plazas y precios, procesar inscripciones con control de aforo, gestionar lista de espera, hacer check-in con QR, y exportar datos a CSV.

Requiere: convoca-core activo.

2. Configuración inicial

Accede a Convoca → Enroll → Ajustes:

Ajuste Descripción
Email de notificaciones Dirección que recibe avisos de nuevas inscripciones
Plantillas de email Personaliza el asunto y cuerpo de los correos de confirmación, cancelación y recordatorio
Google Calendar Conecta una cuenta de Google para sincronizar actividades
Google Photos Conecta un álbum de Google Photos para fotos de actividades
Recordatorios Configura días de antelación para enviar recordatorios automáticos

Conectar Google Calendar

  1. Ve a Convoca → Enroll → Ajustes → Google Calendar
  2. Haz clic en Conectar cuenta de Google
  3. Autoriza a Convoca para gestionar calendarios
  4. Selecciona el calendario donde se crearán los eventos

3. Crear una actividad

  1. Ve a Actividades → Añadir nueva
  2. Rellena el título (ej: "De pajareo a Somiedo")
  3. Escribe la descripción en el editor de bloques
  4. En el panel lateral Datos de la actividad, configura:
Campo Descripción
Fecha y hora de inicio Cuándo empieza la actividad
Fecha y hora de fin Cuándo termina (opcional)
Ubicación Dirección o lugar (ej: "Parque de Somiedo, Asturias")
Plazas totales Número máximo de asistentes
Precio general Precio para no socios
Precio socio Precio para socios
Estado Publicada, Borrador, Cancelada
  1. Asigna una imagen destacada (se usará en listados y redes sociales)
  2. Selecciona las categorías adecuadas (Rutas, Talleres, Voluntariado…)
  3. Haz clic en Publicar

Shortcodes

Usa [convoca_inscripcion_page] en una página para mostrar el listado de actividades con su formulario de inscripción:

[convoca_inscripcion_page]

Para mostrar el formulario de inscripción de una actividad concreta:

[convoca_form_inscripcion id="123"]

El panel de reservas del usuario:

[convoca_panel_reservas]

4. Gestionar inscripciones

Cada actividad tiene su panel de inscripciones en Actividades → [nombre] → Inscripciones.

Acción Cómo hacerlo
Ver inscritos El panel muestra nombre, email, fecha y estado
Cancelar inscripción Haz clic en Cancelar junto al nombre
Añadir a lista de espera Si las plazas están llenas, nuevos inscritos van automáticamente a espera
Promover de espera Cuando hay baja, el sistema promueve automáticamente al siguiente en espera
Exportar CSV Botón Exportar → descarga lista de inscritos

Cómo se inscribe un usuario

El usuario accede a la página de la actividad, ve el formulario con plazas disponibles y precio, y completa sus datos. El sistema:

  1. Verifica que hay plazas disponibles
  2. Bloquea atómicamente la plaza (evita overbooking)
  3. Si no hay plazas, ofrece lista de espera
  4. Envía email de confirmación al usuario y al administrador

5. Check-in con QR

Cada inscripción confirmada genera un QR único que permite hacer check-in el día del evento.

Como administrador

  1. Ve a la actividad y abre el panel de Check-in
  2. Escanea el QR del asistente (desde su email o móvil)
  3. El sistema registra la hora de llegada
  4. También puedes hacer check-in manual buscando por nombre o email

Como asistente

El asistente recibe un email de confirmación con su QR. Puede mostrarlo desde el móvil al llegar a la actividad.

6. Evaluaciones

Después de una actividad, Convoca Enroll envía automáticamente un formulario de evaluación a los asistentes:

  1. El sistema espera 24h tras la finalización
  2. Envía un email con enlace al formulario
  3. Las respuestas se almacenan en Actividades → Evaluaciones
  4. Puedes ver estadísticas agregadas desde el panel

7. Google Calendar

Si configuraste la integración:

  • Las actividades se crean automáticamente como eventos en Google Calendar
  • Los cambios en fecha/hora se sincronizan
  • Las cancelaciones eliminan el evento
  • El enlace de Google Calendar aparece en la página de la actividad

8. Google Photos

Si configuraste la integración:

  • Crea álbumes automáticamente para cada actividad
  • Sube la imagen destacada como portada
  • Los asistentes pueden subir fotos si se habilita

9. CRM — Seguimiento de inscripciones

El Monitor CRM en Convoca → Enroll → CRM muestra:

  • Total de inscripciones por mes
  • Tasa de ocupación por actividad
  • Asistentes recurrentes
  • Actividades más populares

10. Problemas comunes

Problema Solución
No se envían emails Verifica que el servidor tenga wp_mail() funcionando. Revisa la cola en Convoca → Registros
Error al conectar Google Reautoriza desde Ajustes → Google. Los tokens expiran cada hora (se refrescan automáticamente)
Plazas no se actualizan Ve a Convoca → Salud del Sistema y pulsa Forzar comprobación
QR no funciona Verifica que el asistente tiene el email de confirmación. Regenera el QR desde el panel de inscripciones
No aparecen actividades en el frontend Asegúrate de que el estado es "Publicada" y la fecha no es pasada

11. Shortcodes y bloques

Shortcode/Bloque Uso
[convoca_inscripcion_page] Página de actividades con inscripción
[convoca_form_inscripcion id="123"] Formulario de inscripción de una actividad concreta
[convoca_panel_reservas] Panel de reservas del usuario
[convoca_actividad_meta field="ubicacion"] Muestra metadato de la actividad actual
[convoca_inscripcion_actual] Formulario de inscripción de la actividad actual (página singular)
[convoca_evaluacion] Formulario de evaluación post-actividad
Bloque Registro
-------- ----------
convoca-enroll/inscripcion Block_Inscripcion.php
convoca-enroll/panel-reservas Block_Inscripcion.php
convoca-enroll/pagina-inscripcion Block_Inscripcion.php
convoca-enroll/evaluacion Block_Inscripcion.php
convoca-enroll/lista-espera Block_Inscripcion.php

12. API REST

Convoca Enroll expone endpoints REST para integraciones:

GET  /wp-json/convoca-enroll/v1/actividades
GET  /wp-json/convoca-enroll/v1/inscripciones?actividad_id=123
POST /wp-json/convoca-enroll/v1/checkin

Permisos: GET /actividades es público; los demás requieren manage_inscripciones (o rol voluntario_aprobado para check-in).


Referencia técnica

Poster Endpoints

POST /convoca/v1/media/poster/render

Generate a poster for an activity.

Capability: conv_manage_media

Request Body:

{
  "actividad_id": 100,
  "template": "nature-classic",
  "format": "square"
}

Response 200:

{
  "files": { "square": "/path/to/poster.png" },
  "url": "https://.../poster-100-nature-classic-square.png"
}

POST /convoca/v1/media/poster/regenerate

Regenerate (force) a poster, clearing caches.

Capability: conv_manage_media

Request Body:

{ "actividad_id": 100, "template": "nature-classic" }

Response 200: Same as render.

Template Endpoints

GET /convoca/v1/media/templates

List all available templates.

Capability: conv_manage_media

Response 200: Array of template objects with id, name, slug, description, config.

GET /convoca/v1/media/templates/{id}

Get a single template.

Capability: conv_manage_media

Response 200: Single template object.

Blog Endpoints

POST /convoca/v1/media/blog/create

Create or update a blog post for an activity.

Capability: conv_manage_media

Request Body:

{ "actividad_id": 100, "status": "draft" }

Response 200:

{ "post_id": 123, "edit_url": "...", "status": "draft" }

Social OAuth Endpoints

GET /convoca/v1/social/auth/meta

Redirect to Facebook OAuth dialog.

Capability: conv_manage_social

Query Params: None (state auto-generated)

GET /convoca/v1/social/callback/meta

OAuth callback from Meta. Exchanges code for long-lived token, discovers Pages + Instagram.

Permission: Public (OAuth redirect)

GET /convoca/v1/social/auth/google

Redirect to Google OAuth consent screen.

Capability: conv_manage_social

GET /convoca/v1/social/callback/google

OAuth callback from Google. Exchanges code for access + refresh tokens.

Permission: Public (OAuth redirect)

Account Management

GET /convoca/v1/social/accounts

List connected social accounts.

Capability: conv_manage_social

Response 200: Array of accounts with network, account_name, token_expires_at, is_active.

DELETE /convoca/v1/social/accounts/{id}

Disconnect a social account.

Capability: conv_manage_social

Response 200: { "success": true }

Error Response Format

All endpoints return standard WP REST errors:

{
  "code": "rest_forbidden",
  "message": "Sorry, you are not allowed to do that.",
  "data": { "status": 401 }
}

Referencia técnica

Overview

Convoca Enroll v2.7.0 is a WordPress plugin for activity management with an integrated Media & Social Suite for automated poster generation and social media publishing.

┌─────────────────────────────────────────────────────────┐
│                    WordPress                            │
│  ┌───────────────────────────────────────────────────┐  │
│  │              Convoca Core (v2.1.3)                │  │
│  │  Utils · Logger · Capabilities · Installer        │  │
│  └──────────┬────────────────────────────────────────┘  │
│             │ depends on                                │
│  ┌──────────▼────────────────────────────────────────┐  │
│  │              Convoca Enroll (v2.7.0)              │  │
│  │                                                    │  │
│  │  ┌─────────────┐  ┌──────────────┐  ┌──────────┐  │  │
│  │  │ Poster      │  │ Social       │  │ Admin    │  │  │
│  │  │ Engine      │  │ Publisher    │  │ UI       │  │  │
│  │  │ (media/)    │  │ (social/)    │  │ (admin/) │  │  │
│  │  └─────────────┘  └──────────────┘  └──────────┘  │  │
│  └────────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

Database Schema (4 custom tables)

Table Purpose Key Columns
wp_conv_media_templates Poster template definitions (JSON) id, slug, config (LONGTEXT JSON), is_system
wp_conv_social_accounts OAuth tokens (encrypted via openssl) id, network, access_token, refresh_token, token_expires_at
wp_conv_social_queue Social publishing queue id, status, scheduled_at, attempts, last_error
wp_conv_media_logs Audit log for all operations object_type, action, status, context, duration_ms

Token Encryption

Social OAuth tokens are encrypted using openssl_encrypt() with AES-256-CBC.

$key = defined('CONVOCA_SOCIAL_KEY') ? CONVOCA_SOCIAL_KEY : wp_salt('auth');
$iv  = substr(wp_salt('nonce'), 0, 16);
$encrypted = base64_encode(openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv));

Poster Engine — 3-Pass Pipeline (v3)

  1. Pass 1 (HTML Compilation): Inject activity data (title, date, price, QR, hero image) into an HTML/CSS template file. Full CSS3 support (Flexbox, Grid, gradients, shadows).
  2. Pass 2 (PDF Rendering): Render the HTML to a 1-page PDF via mPDF (mpdf/mpdf v8). Pixel-perfect vector output.
  3. Pass 3 (Rasterization): Open the PDF page with Imagick at appropriate DPI, resize to final format dimensions, export as PNG/WebP/JPG. Temporary PDF is deleted after conversion.

Template System

  • Templates are PHP files in templates/html/ that output HTML5 + CSS3.
  • Variables injected: $title, $date, $time, $location, $price, $hero_image, $qr_image, $logo_image, $primary_color, $accent_color, $org_name, $type_label, $type_icon, $format, $width, $height.
  • Legacy JSON templates in media/templates/ are automatically used as fallback via a basic HTML wrapper.

Format Dimensions

Format Width Height Use Case
square 1080 1080 Instagram Feed
portrait 1080 1350 Instagram Portrait
story 1080 1920 Instagram Stories
facebook 1200 630 Open Graph
banner 1920 1080 Web banner
a4 2480 3508 Print

Action Scheduler Integration

All social publishing is async via Action Scheduler (bundled with WooCommerce).

save_post_actividad hook
as_unschedule_all_actions()  (remove duplicates)
as_schedule_single_action()  (enqueue)
Action Scheduler worker
convoca_publish_social_post hook
Meta_Provider or GBP_Provider::publish()

Module Dependencies

Module Depends On
Poster Engine (media/) Convoca Core (Utils), Imagick/GD
QR Generator chillerlan/php-qrcode (composer)
Social Publisher (social/) Poster Engine, Action Scheduler, openssl
Admin UI (admin/) Poster Engine, Social Publisher

Security

  • Capabilities: conv_manage_media, conv_publish_social, conv_manage_social, conv_view_media_logs
  • Nonces: All AJAX and REST endpoints require nonce verification
  • CSRF: OAuth flows use wp_generate_password(32) state parameter with transient validation
  • Idempotency: Transient-based lock (5 min TTL) prevents concurrent duplicate publishing

Referencia técnica

Architecture: HTML → PDF → Image

Instead of composing images pixel-by-pixel with Imagick, the v3 engine follows an editorial-grade pipeline:

Activity Data → HTML/CSS Template → mPDF → PNG/WebP

Why This Approach

  • CSS3 native: Flexbox, Grid, gradients, shadows, border-radius — no manual coordinate calculations
  • Google Fonts: Load any font via @import url(...) without TTF files on the server
  • Maintainable: Edit posters by modifying HTML/CSS files, not PHP array logic
  • Clean rasterization: Imagick only handles mechanical PDF→PNG conversion (DPI, resize, export)

Pipeline Details

  1. Pass 1 — HTML Compilation (compile_html())
  2. Reads PHP template from templates/html/{slug}.php
  3. Injects activity data as extracted variables
  4. Returns full HTML document with <style> block

  5. Pass 2 — PDF Rendering (html_to_pdf())

  6. Uses mpdf/mpdf v8 with format set to exact pixel dimensions
  7. No margins, no page breaks
  8. Temporary PDF stored in uploads convoca-temp/

  9. Pass 3 — Rasterization (pdf_to_image())

  10. Opens PDF page 1 with Imagick at ~360 DPI
  11. Resizes to exact format dimensions (Lanczos filter)
  12. Strips metadata, sets quality (92% for JPEG/WebP)
  13. Deletes temporary PDF

Template Variables

All PHP templates in templates/html/ receive: | GET | /admin/users/search | Búsqueda de usuarios para check-in (admin) | | POST | /checkin/flush | Limpiar caché/estado de check-in | | GET | /ics | Exportar calendario iCal de las actividades | | GET | /me/session-status | Estado de sesión del usuario | | GET | /stats/{actividad_id} | Estadísticas de una actividad |