Cargando…

Esto está tardando más de lo esperado.

Volver al centro de ayuda

Avisos

Publica un aviso para todos los usuarios por megáfono, correo y web push.

Los avisos son comunicados que un administrador publica para todos: una ventana de mantenimiento, una función nueva, un cambio de términos. Cada uno es una página dentro de la aplicación, una entrada en un desplegable con icono de megáfono y, opcionalmente, un correo. Esta guía cubre encender el módulo, publicar, lo que ven los usuarios y lo que la cola tiene que hacer.

Enciéndelo

Opción Variable de entorno Por omisión Qué cambia
features.announcements FEATURE_ANNOUNCEMENTS false Encendida: el recurso Announcements aparece en /admin/announcements, el desplegable del megáfono aparece en la barra superior de la aplicación y /account/announcements abre. Apagada: el recurso se oculta y sus rutas devuelven 403, las páginas de cuenta devuelven 404, el desplegable no se dibuja.

FEATURE_ANNOUNCEMENTS no está en .env.example; agrégala tú.

FEATURE_ANNOUNCEMENTS=true

La bandera se lee desde config/features.php, así que surte efecto después de php artisan config:clear cuando la configuración está en caché.

Publica uno

Ve a /admin/announcements y haz clic en Create. El formulario:

Campo Reglas Notas
Title obligatorio, hasta 255 caracteres Se muestra en el desplegable, la lista, la página y el asunto del correo.
Slug opcional, único Si lo dejas vacío, se genera a partir del título. Es el último segmento de la URL pública, /account/announcements/{slug}.
Description obligatorio Un editor Markdown (Toast UI). Se guarda como Markdown y se dibuja como HTML en la página y en el correo.
Status obligatorio, por omisión Draft draft o published, los casos de App\Enums\AnnouncementStatus. Sólo los avisos publicados son visibles para los usuarios.
Send Email por omisión apagado Si la publicación además envía un correo. Oculto en las vistas de índice y detalle.

Dos campos más, Published At y Created At, son de sólo lectura en la vista de detalle.

No hay selector de audiencia ni publicación programada: cada aviso publicado llega a todas las cuentas en el momento en que lo guardas con el estado Published. Publica los borradores cuando lo digas en serio.

Lo que pasa al guardar, en App\Observers\AnnouncementObserver:

  • Guardar con estado Published por primera vez llena Published At con la hora actual. Regresar a Draft lo limpia; publicar de nuevo estampa una hora nueva, así que el aviso vuelve arriba como no leído para todos.
  • Cada vez que el estado se vuelve Published — al crear o tras un cambio — el job App\Jobs\SendAnnouncementEmailsJob se despacha a la cola con el aviso. Editar el título o el cuerpo de un aviso que ya está publicado no despacha nada.

Los avisos hacen borrado suave, así que la vista de papelera del recurso puede restaurar uno. Los permisos siguen la forma habitual (create announcement, retrieve announcement, update announcement, delete announcement); mira /help/roles-and-permissions.

Lo que ven los usuarios

El lado del lector son tres componentes Livewire en app/Livewire/Auth/Announcements/: Dropdown, Index y Show.

El megáfono. La barra superior de la aplicación muestra un icono de megáfono junto a la campana de notificaciones. Una insignia roja lleva el número de avisos no leídos, con tope en 9+. Al hacer clic se abre un desplegable con los diez avisos publicados más recientes, del más nuevo al más viejo, cada uno con su título y un extracto de 60 caracteres; los no leídos llevan un borde izquierdo de color. El desplegable tiene Mark as Read, que marca todo como leído de una vez, y View all announcements.

La lista. /account/announcements (enlazada también como Announcements en la barra lateral de la cuenta) pagina los avisos publicados, diez por página, con título, extracto de 150 caracteres y fecha de publicación.

La página. /account/announcements/{slug} dibuja el Markdown completo con la fecha de publicación y un enlace de regreso a la lista. Sólo resuelven los avisos publicados; el slug de un borrador devuelve 404.

Cómo se registra la lectura

El estado de lectura es una marca de tiempo por cuenta: users.last_announcement_read_at. Un aviso está sin leer cuando su Published At es posterior a esa marca, o cuando la marca está vacía. Dos cosas la ponen en la hora actual: abrir la página de cualquier aviso, y Mark as Read en el desplegable. Ambas marcan todos los avisos como leídos, no sólo uno.

No hay registro de lectura por aviso ni conteo de lecturas. El panel de administración no muestra nada sobre quién leyó qué; lo que sí guarda es qué correos salieron, descrito abajo.

Correo y web push

El job recorre User::whereNull('blocked_at') en bloques de 100 y envía a cada cuenta App\Notifications\Announcements\AnnouncementNotification. Las cuentas sin verificar entran; las bloqueadas no. La notificación elige sus canales por cuenta:

Canal Se envía cuando
Correo Send Email está encendido para el aviso Y la cuenta tiene activado Notify me by email of all actions on my account en su perfil.
Web push La cuenta tiene al menos una suscripción push, esté o no encendido Send Email. Mira /help/web-push-and-the-pwa.

La notificación no usa el canal de base de datos, así que no aparece en el centro de notificaciones; el megáfono es su forma dentro de la aplicación. Una cuenta que no cumple ninguna de las dos condiciones no recibe nada más que la insignia del megáfono.

El correo usa el layout de correo estándar de la aplicación a través de resources/views/emails/announcements/announcement.blade.php: el asunto es {nombre de la app} — {título}, el cuerpo es el Markdown dibujado, y un botón Read announcement abre la página del aviso. Cada correo que de verdad se envía queda registrado en Communication Logs, en /admin/communication_logs, con el destinatario, la clase de notificación, el asunto y el cuerpo HTML; un envío fallido también queda registrado ahí con su estado. Ese registro es lo más cercano a un reporte de entrega que ofrece el panel.

El job y la notificación implementan ShouldQueue, así que nada se envía hasta que corre un worker:

php artisan queue:work

Sin worker el aviso queda publicado y visible en el megáfono de inmediato; sólo los correos y los push esperan. Configura el worker como servicio en producción, como describe /help/queues-and-scheduled-work, y asegúrate de que el correo de .env funciona antes de encender Send Email para una base de usuarios grande: una publicación envía un correo por cuenta.