À 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.

5 min de lecture

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.

The shape of a platform event function
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.

FunctionWebhook
S'exécute surL'infrastructure d'OmniLabLa vôtre
Vous devez hébergerRienUn endpoint HTTPS
Peut changer ce que fait OmniLabOui, pour l'un des deux typesNon
Idéal pourUne logique qui doit s'exécuter dans 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, 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 plateformeFunction de type hook
S'exécuteAprès un événementPendant une opération, qui l'attend
Peut-elle changer le résultat ?NonOui : elle laisse l'opération se poursuivre ou la refuse
Votre exportonPlatformEventon + le point d'accroche, par exemple onContactCreatePre
Reliée parUn abonnement à des types d'événementsUne liaison à un point d'accroche
Votre valeur de retourIgnoréeLa décision qu'OmniLab applique
En cas d'échecL'activité n'est pas affectéeL'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.

Créer Construire la compilation réussit la compilation échoue, rien n'était en ligne la compilation échoue, version précédente conservée Construire à nouveau Enregistrer la nouvelle source, Construire à nouveau Supprimer Supprimer Supprimer Brouillon Build en cours Prêt Échec du build Supprimé

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

Sur cette page