Billets, passes et e-mails
Ce que reçoit un acheteur : un billet par place avec un code QR signé, les billets PDF et un fichier de calendrier, les e-mails que l'API envoie et où ils vont sans service d'e-mail, et comment l'équipe réémet ou annule un billet.
Pour le pack Full Stack
Ce qu'est un billet
Un billet est une entrée : une place à un événement à places réservées, ou une place à un événement en entrée libre. Sa référence est celle de la commande plus un numéro (TKT-1042-1), et il porte la place, le nom du titulaire pris dans la commande, le type de billet et ce qui a été payé pour lui.
| Statut | Signification |
|---|---|
| Valide | Ouvre l'entrée, une seule fois. |
| Remboursement en attente | Suspendu dès qu'un remboursement est demandé, pendant qu'il attend le fournisseur, et encore après un remboursement échoué jusqu'à ce qu'il soit relancé ou rétabli. L'entrée le refuse. |
| Annulé | Remboursé ou annulé. L'entrée le refuse, et son billet n'affiche aucun code QR. |
Billets, PDF et fichiers de calendrier
- La confirmation de commande et Mes billets du participant affichent un billet par place, avec son code QR, la place, le titulaire et le type de billet, en anglais ou en arabe.
- Download tickets ouvre un PDF avec chaque billet valide de la commande, un par page A4, dessiné aux couleurs de l'événement avec son code QR ; un billet seul télécharge son propre PDF. Le texte du PDF est en caractères latins uniquement : la version arabe d'un billet est donc le billet web.
- Add to calendar télécharge un fichier de calendrier de l'événement, avec le lieu et un lien vers la page de l'événement.
- Les liens de téléchargement sont signés et valables 30 minutes ; la page en fait de nouveaux à chaque ouverture. Ils sont construits à partir du
PUBLIC_API_URLde l'API : définissez-le donc avec l'adresse publique de l'API.
Codes QR
- Le code QR contient un code qui commence par
TKY., une signature de la référence du billet faite avecTICKET_SECRET(leJWT_SECRETde l'API s'il n'est pas défini). Il ne contient rien de personnel. - Seule l'empreinte de chaque code est stockée : la base ne contient donc jamais un billet utilisable.
- Définissez `TICKET_SECRET` une fois, avant de vendre. Le changer plus tard fait que chaque code QR déjà émis cesse de fonctionner à l'entrée.
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"Les e-mails
| Envoyé quand | |
|---|---|
| Vos billets | Une commande est payée ou une commande gratuite est confirmée, et de nouveau après une réémission ou un renvoi |
| Code de vérification | Un participant s'inscrit ou change son e-mail |
| Réinitialisation du mot de passe | Un participant demande un nouveau mot de passe |
| Remboursement | Le fournisseur confirme un remboursement, ou ne le fait pas, auquel cas l'acheteur est prévenu que l'équipe vérifie |
| Événement annulé | Un événement est annulé, envoyé à chaque commande payée |
| Rappel d'événement | Environ un jour avant l'événement, aux participants qui gardent les rappels activés dans leur compte (ci-dessous) |
- Définissez
RESEND_API_KEYetMAIL_FROM(par exempleTicketory <tickets@your-domain.com>) dans le.envde l'API pour les envoyer via Resend. Une réponse à un e-mail de billets va à l'e-mail de support de l'espace de travail. Chaque e-mail concernant une commande (billets, remboursements, avis d'annulation et rappel) est rédigé dans la langue de la commande, anglais ou arabe, avec le titre de l'événement dans cette langue ; un renvoi demandé depuis le site suit la langue de la page. Les e-mails de vérification et de réinitialisation suivent la page utilisée par le participant. - Sans elles, chaque e-mail est écrit dans le journal de l'API au lieu d'être envoyé, c'est là qu'on lit un code de vérification sur une installation neuve (avec Docker :
docker compose logs api). La confirmation indique alors que les billets sont prêts à télécharger. - Un envoi échoué est retenté jusqu'à six fois, avec une attente croissante. La confirmation affiche l'état de l'e-mail et propose Resend email, une fois par minute.
- Les réglages Notifications du tableau de bord changent ce que l'équipe est informée ; ils n'empêchent jamais un e-mail d'atteindre un acheteur.
Rappels d'événement
- Un participant avec un compte qui garde Event reminders activé dans son profil (activé par défaut) reçoit un e-mail par événement, environ 24 heures avant la première session pour laquelle il a des billets valides, listant ces billets avec leurs places et un lien vers Mes billets.
- L'API cherche les rappels à envoyer une minute après son démarrage puis toutes les 15 minutes. Chacun est enregistré dans la table
event_remindersavant d'être envoyé, si bien qu'aucun ne part deux fois, même après un redémarrage ou avec deux copies de l'API. Un envoi échoué est retenté jusqu'à trois fois tant que l'événement est encore à venir. - Les billets remboursés, suspendus et annulés, les commandes impayées et les événements annulés ou en brouillon n'en reçoivent aucun, ni une commande payée après l'heure du rappel, puisque ses billets viennent d'être envoyés.
EVENT_REMINDER_HOURSdans le.envde l'API change le délai (au plus168, une semaine), et0désactive les rappels. Sans fournisseur d'e-mail, chaque rappel est écrit dans le journal de l'API, comme tous les autres e-mails.- Le réglage News and offers du profil est seulement enregistré comme choix du participant : le template n'envoie aucun e-mail d'actualités ou d'offres.
Réémettre et annuler
- Reissue, sur un billet de la page de la commande, donne au billet un nouveau code QR : l'ancien cesse aussitôt de fonctionner à l'entrée, et les billets sont renvoyés par e-mail avec le nouveau code. Seul un billet valide peut être réémis.
- Void sert pour un billet que personne n'a payé, comme un billet gratuit. Sa place repart aussitôt en vente, sauf si son titulaire était déjà entré. Un billet payé est remboursé à la place, ce qui garde l'argent et l'entrée en accord.
- Les deux exigent
tickets.manage, que détiennent les rôles Propriétaire et Finance des données d'exemple, et les deux sont inscrits dans la chronologie de la commande.
Les routes derrière tout cela
GET /api/orders/:reference/receiptrépond avec la commande, ses billets avec une image QR tant que la commande est payée, l'état de l'e-mail et desdownloadssignés. Il exige le jeton d'accès de la commande ou celui du participant.GET /api/orders/:reference/tickets.pdf,GET /api/orders/:reference/calendar.icsetGET /api/tickets/:reference/pdfprennent un lien signé (?exp=&sig=) ; un lien erroné ou expiré donne un 404.POST /api/orders/:reference/resend-emailremet l'e-mail en file ; moins d'une minute après donne un 429COOLDOWN.POST /api/admin/tickets/:reference/reissueet/voidexigenttickets.manage. Annuler un billet payé donne un 409USE_REFUND.