À propos des functions
Ce que sont les functions OmniLab, comment elles s'exécutent, quand en préférer une à un webhook, et les limites que votre code doit respecter.
Une function est un petit programme TypeScript qui s'exécute sur l'infrastructure même d'OmniLab. Vous l'écrivez dans Studio et OmniLab la compile. Dès lors, la plateforme l'exécute pour vous : quand quelque chose se produit dans une campagne, ou à un point de décision, comme l'inscription d'un contact.
Vous n'avez besoin d'aucun serveur, d'aucun endpoint ni d'aucun déploiement de votre côté.
Les functions se configurent dans les Paramètres de l'Entreprise, ce qui exige le rôle Admin et l'organisation Global sélectionnée. Vérifiez que vous disposez de cet accès avant de planifier quoi que ce soit : sans lui, l'onglet n'apparaît pas.
Comment ça marche
Vous stockez un seul fichier TypeScript avec un seul gestionnaire exporté. Quand vous le compilez, OmniLab transforme ce fichier en module WebAssembly et conserve la version compilée. Chaque invocation charge ensuite cette version dans un environnement isolé neuf et appelle votre export.
import type { PlatformEventHandler } from "./omnilab";
export const onPlatformEvent: PlatformEventHandler = (event) => {
console.log("Something happened: " + event.type);
};Votre gestionnaire communique avec l'extérieur via les appels fournis par OmniLab : lire une valeur de configuration, lire un secret, envoyer une requête HTTP vers un hôte que vous avez autorisé, lire un contact et écrire ses champs personnalisés. Cet ensemble est volontairement réduit : c'est ce qui permet d'exécuter votre code en toute sécurité sur la plateforme. Il suffit à la plupart des intégrations.
Chaque invocation est indépendante. Rien de ce que vous définissez lors d'un appel n'est disponible lors du suivant. Conservez ce dont vous avez besoin dans les champs personnalisés du contact, ou dans votre propre système via HTTP.
Function ou webhook ?
Les deux permettent de réagir à ce qui se passe dans OmniLab. Ce qui les distingue : l'endroit où s'exécute votre code, et sa capacité à changer le résultat.
| Function | Webhook | |
|---|---|---|
| S'exécute sur | L'infrastructure d'OmniLab | La vôtre |
| Vous devez héberger | Rien | Un endpoint HTTPS |
| Peut changer ce que fait OmniLab | Oui, pour l'un des deux types | Non |
| Idéal pour | Une logique qui doit s'exécuter dans une opération OmniLab, ou de petites intégrations que vous préférez ne pas héberger | Alimenter un système que vous exploitez déjà |
Un webhook informe vos systèmes qu'un événement s'est produit, une fois la décision d'OmniLab déjà prise. Une function s'exécute dans OmniLab. L'un des deux types s'exécute au sein même de la décision : il peut donc refuser une inscription, normaliser un email avant qu'il soit stocké, ou envoyer un message de vérification via votre propre fournisseur.
Choisir un type
Chaque function relève de l'un des deux types, et ce type détermine quand elle s'exécute et sur quoi elle peut agir. Il est fixé à la création de la function : faites ce choix avant de commencer à écrire.
| Function d'événement de plateforme | Function de type hook | |
|---|---|---|
| S'exécute | Après un événement | Pendant une opération, qui l'attend |
| Peut-elle changer le résultat ? | Non | Oui : elle laisse l'opération se poursuivre ou la refuse |
| Votre export | onPlatformEvent | on + le point d'accroche, par exemple onContactCreatePre |
| Reliée par | Un abonnement à des types d'événements | Une liaison à un point d'accroche |
| Votre valeur de retour | Ignorée | La décision qu'OmniLab applique |
| En cas d'échec | L'activité n'est pas affectée | L'opération est refusée : voir ce que garantit un hook |
Quand les deux conviendraient, commencez par une function d'événement de plateforme : elle ne peut perturber aucune action d'un client. Au pire, il manque un effet secondaire ; aucune inscription n'échoue.
Utilisez une function d'événement de plateforme pour réagir à une activité : enrichir un contact, alimenter votre CRM, prévenir un canal. Utilisez une function de type hook pour filtrer une inscription, normaliser des données avant leur stockage ou envoyer un email de vérification.
Changer de type, c'est repartir de zéro
Le type détermine l'export que votre code doit fournir, les onglets affichés dans l'éditeur et le payload envoyé lors d'un test. Impossible de convertir un type en un autre : créez une nouvelle function et supprimez l'ancienne.
Du brouillon à l'exécution
La sauvegarde et la compilation sont volontairement séparées. La sauvegarde stocke votre code et en vérifie les types, sans jamais modifier ce qui s'exécute. Seule la compilation produit une nouvelle version compilée.
Le statut affiché dans la liste des functions est l'un de ceux-ci : Brouillon, Build en cours, Prêt, Échec du build ou Supprimé. Seule une function au statut Prêt s'exécute.
Le statut Build en cours peut déboucher sur deux statuts, et la nuance compte. Une function qui n'a jamais été compilée avec succès passe au statut Échec du build. Une function en ligne dont la recompilation échoue revient au statut Prêt et continue d'exécuter sa version précédente. Une recompilation ratée ne met jamais hors ligne une function qui fonctionne.
Le cadre de votre code
Votre code tient dans un seul fichier TypeScript, user.ts. Une function dont la liste d'hôtes autorisés est vide n'émet aucun appel sortant. Chaque invocation dispose d'un budget fixe de temps, de mémoire et d'appels SDK, détaillé dans Limites.
Deux règles surprennent souvent. Les secrets ne vont jamais dans votre code source : vous les stockez dans un lot de secrets, associez ce lot de secrets à la function, puis lisez chaque secret par son nom à l'exécution. Et les clés de champs personnalisés de contact qui commencent par system. ou feature. sont réservées : toute écriture sur ces clés est refusée.
Étapes suivantes
Functions
Écrivez du TypeScript qu'OmniLab compile en WebAssembly et exécute dans un environnement isolé, après un événement ou au cœur d'une décision métier.
Créer et compiler une function
Créez une function dans Studio, écrivez son gestionnaire, enregistrez un brouillon et compilez-la en version WebAssembly exécutable.