ultisuite-client/lib/mail-automation/webhook-template-variables.ts
R3D347HR4Y ad1370ea7e
Some checks are pending
E2E / Playwright e2e (push) Waiting to run
feat: enhance configuration and add new demo layouts
- Introduced turbopack alias for canvas in next.config.mjs.
- Updated package.json scripts for development and branding tasks.
- Added new dependencies for Tiptap extensions.
- Implemented new demo layouts for agenda, contacts, drive, and mail applications.
- Enhanced globals.css for improved theming and splash screen animations.
- Added OAuth callback handling for drive mounts.
- Updated layout components to integrate new demo shells and improve structure.
2026-06-12 19:10:24 +02:00

279 lines
7.5 KiB
TypeScript

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: "<p>HTML body</p>",
},
],
},
{
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<AutomationDomain | 'universal'>(domains)
if (includeUniversal) allowed.add('universal')
return WEBHOOK_TEMPLATE_VARIABLE_GROUPS.filter((g) => allowed.has(g.domain))
}
export const WEBHOOK_DEFAULT_TEMPLATES: Record<AutomationDomain, string> = {
mail: '{"text":"Nouveau mail de $sender.name : $subject"}',
drive: '{"text":"Fichier Drive $drive.file_name ajouté dans $drive.file_path"}',
contacts: '{"text":"Contact $contact.name ($contact.email) mis à jour"}',
agenda: '{"text":"Événement $calendar.event_title le $calendar.event_start"}',
}