À 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 dans lesquelles votre code travaille.

4 min de lecture

Une function est un court morceau de TypeScript qui s'exécute sur l'infrastructure d'OmniLab. Vous l'écrivez dans OmniLab Studio, OmniLab la compile, et la plateforme l'exécute ensuite pour vous — soit lorsqu'un événement se produit dans une campagne, soit à un point de décision précis, par exemple l'inscription d'un contact.

Vous n'avez besoin d'aucun serveur, d'aucun endpoint et d'aucun déploiement de votre côté.

Les functions se configurent dans les Paramètres de l'Entreprise, ce qui exige un rôle Admin avec l'organisation globale sélectionnée — vérifiez que vous disposez de cet accès avant de planifier des travaux, car l'onglet reste invisible sans lui.

Comment cela fonctionne

Vous stockez un fichier TypeScript unique comportant un gestionnaire exporté. À la compilation, OmniLab transforme ce fichier en module WebAssembly et conserve la version compilée. Chaque invocation la charge ensuite dans un environnement isolé neuf et appelle votre export.

La forme de toute function
import type { PlatformEventHandler } from "./omnilab";

export const onPlatformEvent: PlatformEventHandler = (event) => {
  console.log("Il s'est passé quelque chose : " + event.type);
};

Votre gestionnaire atteint l'extérieur par les appels fournis par OmniLab : lire une valeur de configuration, lire un secret, émettre 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 restreint — c'est ce qui permet à OmniLab d'exécuter votre code sur sa propre infrastructure en toute sécurité, et cela suffit à la plupart des travaux d'intégration.

Chaque invocation est indépendante. Rien de ce que vous définissez lors d'un appel ne se transmet au suivant : ce que vous devez conserver va donc dans les champs personnalisés d'un contact, ou vers votre propre système via HTTP.

Function ou webhook ?

Les deux permettent de réagir à ce qui se passe dans OmniLab. La différence tient à l'endroit où votre code s'exécute et à sa capacité à modifier l'issue.

FunctionWebhook
S'exécute surL'infrastructure d'OmniLabLa vôtre
Vous devez hébergerRienUn endpoint HTTPS
Peut modifier ce que fait OmniLabOui, pour l'un des typesNon
Idéal pourUne logique qui doit s'exécuter au sein d'une opération OmniLab, ou de petites intégrations que vous préférez ne pas hébergerAlimenter un système que vous exploitez déjà

Un webhook informe vos systèmes qu'un événement s'est produit, après qu'OmniLab a déjà tranché. Une function s'exécute dans OmniLab et — pour l'un des deux types — au cœur de la décision elle-même : elle peut donc refuser une inscription, normaliser un e-mail avant son enregistrement, ou envoyer un message de vérification via votre propre fournisseur.

Choisir un type

Chaque function relève de l'un de deux types, et ce type détermine le moment où elle s'exécute et ce qu'elle peut influencer. Il est fixé à la création, faites donc ce choix avant de commencer à écrire.

Function d'événementFunction de type hook
S'exécuteAprès un événementPendant une opération, qui l'attend
Peut-elle modifier l'issue ?NonOui — elle poursuit ou refuse
Votre exportonPlatformEventon + le point d'ancrage, par exemple onContactCreatePre
Câblée parUn abonnement à des types d'événementsUne association à un point d'ancrage
Votre valeur de retourIgnoréeLa décision qu'OmniLab applique
En cas d'échecL'activité n'est pas affectéeL'opération est bloquée

Commencez par une function d'événement lorsque les deux conviendraient. Elle ne peut rien casser dans le parcours d'un client : le coût d'une erreur est un effet de bord manquant, pas une inscription en échec.

Changer de type revient à 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é par le testeur. Il n'existe aucun moyen de convertir un type en un autre : vous créez une nouvelle function et supprimez l'ancienne.

Du brouillon à l'exécution

L'enregistrement et la compilation sont volontairement dissociés. Enregistrer stocke votre code et en vérifie les types ; cela ne change jamais ce qui tourne. Seule une compilation produit une nouvelle version compilée.

Création Build compilation réussie échec, rien n'était en ligne échec, version précédente conservée nouvelle tentative nouvelle source, puis Build suppression suppression suppression Draft Building Ready BuildFailed Deleted

Le statut affiché dans la liste est l'un de ceux-ci : Draft, Building, Ready, Build failed ou Deleted. Seule une function Ready s'exécute.

Les deux issues possibles depuis Building méritent attention. Une function qui n'a jamais été compilée avec succès passe en Build failed. Une function déjà en ligne dont la recompilation échoue revient en Ready et continue de servir la version précédente : une recompilation défaillante ne met donc jamais hors ligne une function qui fonctionnait.

Le cadre dans lequel votre code travaille

LangageTypeScript, un seul fichier, point d'entrée user.ts
Temps par invocation2 secondes au maximum
Appels sortants par invocation20, tous appels SDK confondus
RéseauUniquement les hôtes que vous autorisez ; une function dont la liste est vide n'émet aucun appel sortant
Mémoire2 Mio par défaut, jusqu'à 4 Mio

Deux règles prennent souvent les équipes au dépourvu. Les secrets ne figurent jamais dans votre source : vous les stockez dans un bundle, associez le bundle à la function et lisez les valeurs par leur nom à l'exécution. Et les clés de champs personnalisés commençant par system. ou feature. sont réservées : les écritures y sont rejetées.

Les valeurs complètes, les codes d'erreur et les contrats figurent dans la référence du SDK.

Pour aller plus loin

Sur cette page