export type WebhookTemplateVariable = { token: string label: string description: string example?: string } import type { AutomationDomain } from './domains' export type WebhookTemplateVariableGroup = { id: string label: string description: string domain: AutomationDomain | 'universal' variables: WebhookTemplateVariable[] } /** Variables interpolées côté backend (`internal/mail/webhooks/executor.go`). */ export const WEBHOOK_TEMPLATE_VARIABLE_GROUPS: WebhookTemplateVariableGroup[] = [ { id: "event", label: "Événement", description: "Métadonnées communes à tout type d'automatisation.", domain: "universal", variables: [ { token: "$event.type", label: "Type", description: "Type d'événement déclencheur (ex. message_received, drive_file_created).", example: "drive_file_created", }, { token: "$event.domain", label: "Domaine", description: "Domaine source : mail, drive, contacts ou agenda.", example: "drive", }, { token: "$date", label: "Date", description: "Horodatage ISO 8601 de l'événement.", example: "2026-05-22T10:00:00Z", }, ], }, { id: "sender", label: "Expéditeur", description: "Identité de l'expéditeur du message déclencheur.", domain: "mail", variables: [ { token: "$sender.name", label: "Nom", description: "Nom affiché de l'expéditeur.", example: "Alice Example", }, { token: "$sender.email", label: "E-mail", description: "Adresse e-mail de l'expéditeur.", example: "alice@example.com", }, ], }, { id: "message", label: "Message", description: "Métadonnées principales du mail.", domain: "mail", variables: [ { token: "$subject", label: "Objet", description: "Objet du message.", example: "Hello World", }, { token: "$message_id", label: "Identifiant", description: "Identifiant interne Ultimail du message.", example: "msg-123", }, ], }, { id: "body", label: "Contenu", description: "Corps du message, en texte ou HTML.", domain: "mail", variables: [ { token: "$body.textContent", label: "Texte brut", description: "Corps du message sans mise en forme.", example: "Plain body", }, { token: "$body.htmlContent", label: "HTML", description: "Corps du message avec balises HTML.", example: "
HTML body
", }, ], }, { id: "recipients", label: "Destinataires", description: "Adresses en copie directe (To).", domain: "mail", variables: [ { token: "$recipients.to", label: "To", description: "Liste des destinataires, séparés par des virgules.", example: "bob@example.com, carol@example.com", }, ], }, { id: "drive", label: "Fichier Drive", description: "Métadonnées du fichier ou dossier déclencheur.", domain: "drive", variables: [ { token: "$drive.file_name", label: "Nom", description: "Nom du fichier ou dossier.", example: "rapport.pdf", }, { token: "$drive.file_path", label: "Chemin", description: "Chemin complet dans le Drive.", example: "/Documents/rapport.pdf", }, { token: "$drive.mime_type", label: "Type MIME", description: "Type MIME du fichier.", example: "application/pdf", }, { token: "$drive.file_size", label: "Taille", description: "Taille en octets.", example: "102400", }, { token: "$drive.is_folder", label: "Dossier", description: "true si l'élément est un dossier.", example: "false", }, ], }, { id: "contact", label: "Contact", description: "Métadonnées du contact déclencheur.", domain: "contacts", variables: [ { token: "$contact.name", label: "Nom", description: "Nom affiché du contact.", example: "Alice Example", }, { token: "$contact.email", label: "E-mail", description: "Adresse e-mail principale.", example: "alice@example.com", }, { token: "$contact.phone", label: "Téléphone", description: "Numéro de téléphone principal.", example: "+33 6 00 00 00 00", }, { token: "$contact.org", label: "Organisation", description: "Entreprise ou organisation.", example: "Example Corp", }, { token: "$contact.id", label: "Identifiant", description: "Identifiant interne du contact.", example: "contact-42", }, ], }, { id: "calendar", label: "Événement agenda", description: "Métadonnées de l'événement déclencheur.", domain: "agenda", variables: [ { token: "$calendar.event_title", label: "Titre", description: "Titre ou objet de l'événement.", example: "Réunion équipe", }, { token: "$calendar.event_location", label: "Lieu", description: "Lieu ou salle de l'événement.", example: "Salle A", }, { token: "$calendar.event_organizer", label: "Organisateur", description: "Adresse e-mail de l'organisateur.", example: "alice@example.com", }, { token: "$calendar.event_start", label: "Début", description: "Date/heure de début (ISO 8601).", example: "2026-06-15T10:00:00Z", }, { token: "$calendar.event_end", label: "Fin", description: "Date/heure de fin (ISO 8601).", example: "2026-06-15T11:00:00Z", }, { token: "$calendar.event_all_day", label: "Journée entière", description: "true si l'événement dure toute la journée.", example: "false", }, { token: "$calendar.calendar_id", label: "Agenda", description: "Identifiant de l'agenda source.", example: "work", }, { token: "$calendar.event_uid", label: "Identifiant", description: "UID CalDAV de l'événement.", example: "team-sync-2026-06-15", }, { token: "$calendar.meet_url", label: "Lien visio", description: "URL de visioconférence associée, le cas échéant.", example: "https://meet.example.com/abc-def", }, ], }, ] export const WEBHOOK_TEMPLATE_VARIABLES = WEBHOOK_TEMPLATE_VARIABLE_GROUPS.flatMap( (group) => group.variables ) export function webhookVariableGroupsForDomains( domains: AutomationDomain[], includeUniversal = true ): WebhookTemplateVariableGroup[] { const allowed = new Set