Entradas, pases y correos
Lo que recibe un comprador: un pase por entrada con un código QR firmado, las entradas en PDF y un archivo de calendario, los correos que envía la API y adónde van sin un servicio de correo, y cómo reemite o anula una entrada el personal.
Para el paquete Full Stack
Qué es una entrada
Una entrada es una admisión: un asiento en un evento con asientos reservados, o una plaza en un evento de entrada general. Su referencia es la del pedido más un número (TKT-1042-1), y lleva el asiento, el nombre del titular tomado del pedido, el tipo de entrada y lo que se pagó por ella.
| Estado | Significado |
|---|---|
| Valid | Abre la puerta, una vez. |
| Refund pending | Suspendida en cuanto se pide un reembolso, mientras espera al proveedor, y también después de un reembolso fallido hasta que se reintenta o se restaura. La puerta la rechaza. |
| Void | Reembolsada o anulada. La puerta la rechaza, y su pase no muestra código QR. |
Pases, entradas en PDF y archivos de calendario
- La confirmación del pedido y My tickets del asistente muestran un pase por entrada, con su código QR, el asiento, el titular y el tipo de entrada, en inglés o árabe.
- Download tickets abre un PDF con todas las entradas válidas del pedido, una por página A4, dibujadas con el color del evento y su código QR; un pase individual descarga su propio PDF. El texto del PDF es solo latino, así que la versión en árabe de una entrada es el pase web.
- Add to calendar descarga un archivo de calendario del evento, con el recinto y un enlace a la página del evento.
- Los enlaces de descarga están firmados y funcionan 30 minutos; la página crea otros nuevos cada vez que se abre. Se construyen a partir del
PUBLIC_API_URLde la API, así que defínelo con la dirección pública de la API.
Códigos QR
- El código QR contiene un código que empieza por
TKY., una firma de la referencia de la entrada hecha conTICKET_SECRET(elJWT_SECRETde la API cuando no está definido). No contiene nada personal. - De cada código solo se guarda una huella, así que la base de datos nunca contiene una entrada utilizable.
- Define `TICKET_SECRET` una vez, antes de vender. Cambiarlo después hace que todos los códigos QR ya emitidos dejen de funcionar en la puerta.
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Los correos
| Correo electrónico | Se envía cuando |
|---|---|
| Your tickets | Se paga un pedido o se confirma un pedido gratuito, y otra vez tras una reemisión o un reenvío |
| Verification code | Un asistente se registra o cambia su correo |
| Password reset | Un asistente pide una contraseña nueva |
| Refund | El proveedor confirma un reembolso, o no, en cuyo caso se avisa al comprador de que el equipo lo está revisando |
| Event cancelled | Se cancela un evento, a cada pedido pagado |
| Event reminder | Aproximadamente un día antes del evento, a los asistentes que mantienen los recordatorios activados en su cuenta (abajo) |
- Define
RESEND_API_KEYyMAIL_FROM(por ejemploTicketory <tickets@your-domain.com>) en el.envde la API para enviarlos a través de Resend. Una respuesta a un correo de entradas va al correo de soporte del espacio de trabajo. Cada correo sobre un pedido (entradas, reembolsos, el aviso de cancelación y el recordatorio) se escribe en el idioma en que se hizo el pedido, inglés o árabe, con el título del evento en ese idioma; un reenvío pedido desde el sitio web sigue el idioma de la página. Los correos de verificación y de restablecimiento siguen la página que usó el asistente. - Sin ellas, cada correo se escribe en el registro de la API en lugar de enviarse, que es donde se lee un código de verificación en una instalación nueva (con Docker:
docker compose logs api). La confirmación dice entonces que las entradas están listas para descargar. - Un envío fallido se reintenta hasta seis veces, con una espera creciente. La confirmación muestra el estado del correo y ofrece Resend email, una vez por minuto.
- Los interruptores de Notifications del panel cambian lo que se avisa al equipo; nunca impiden que un correo llegue a un comprador.
Recordatorios de eventos
- Un asistente con cuenta que mantiene Event reminders activado en su perfil (activado por defecto) recibe un correo por evento, unas 24 horas antes de la primera sesión para la que tiene entradas válidas, con la lista de esas entradas y sus asientos y un enlace a My tickets.
- La API busca recordatorios pendientes un minuto después de arrancar y cada 15 minutos a partir de entonces. Cada uno se registra en la tabla
event_remindersantes de enviarse, así que ninguno sale dos veces, ni siquiera tras un reinicio o con dos copias de la API. Un envío fallido se intenta hasta tres veces mientras el evento aún está por delante. - Las entradas reembolsadas, suspendidas y anuladas, los pedidos sin pagar y los eventos cancelados o en borrador no reciben ninguno, ni tampoco un pedido pagado después de la hora del recordatorio, ya que sus entradas acaban de enviarse.
EVENT_REMINDER_HOURSen el.envde la API cambia la antelación (como máximo168, una semana), y0desactiva los recordatorios. Sin un proveedor de correo, cada recordatorio se escribe en el registro de la API, como cualquier otro correo.- El interruptor News and offers del perfil solo se guarda como elección del asistente: la plantilla no envía correos de novedades ni ofertas.
Reemitir y anular
- Reissue, en una entrada de la página del pedido, da a la entrada un código QR nuevo: el antiguo deja de funcionar en la puerta al instante, y las entradas se envían de nuevo por correo con el código nuevo. Solo se puede reemitir una entrada válida.
- Void es para una entrada que nadie pagó, como una gratuita. Su asiento o plaza vuelve a la venta al instante, salvo que su titular ya hubiera sido admitido. Una entrada pagada se reembolsa en su lugar, lo que mantiene el dinero y la admisión en sintonía.
- Ambas necesitan
tickets.manage, que tienen los roles de ejemplo Propietario y Finanzas, y ambas quedan escritas en la línea de tiempo del pedido.
Las rutas que hay detrás
GET /api/orders/:reference/receiptresponde el pedido, sus entradas con una imagen QR mientras el pedido está pagado, el estado del correo y losdownloadsfirmados. Necesita el token de acceso del pedido o el token del asistente.GET /api/orders/:reference/tickets.pdf,GET /api/orders/:reference/calendar.icsyGET /api/tickets/:reference/pdfaceptan un enlace firmado (?exp=&sig=); uno incorrecto o caducado es un 404.POST /api/orders/:reference/resend-emailpone el correo en cola de nuevo; antes de un minuto es un 429COOLDOWN.POST /api/admin/tickets/:reference/reissuey/voidnecesitantickets.manage. Anular una entrada pagada es un 409USE_REFUND.