Skip to main content
Installations-Hooks sind spezielle Logikfunktionen, die während des Installations-, Upgrade- oder Deinstallations-Lebenszyklus ausgeführt werden. Sie verwenden dieselbe Handler-Laufzeit wie reguläre Logikfunktionen, werden jedoch mit eigenen Define-Funktionen deklariert und sind vom normalen Trigger-Modell (HTTP, Cron, Datenbankereignisse) getrennt. Installations-Hooks erhalten ein InstallPayload ({ previousVersion?: string; newVersion: string }previousVersion ist bei einer Neuinstallation undefined); der Deinstallations-Hook erhält ein UninstallPayload ({ version?: string } – die entfernte Version). Jede App darf höchstens einen Hook jeder Art definieren (Pre-Install, Post-Install, Uninstall). Der Manifest-Build schlägt fehl, wenn mehr als ein Hook eines Typs erkannt wird.

Auf einen Blick

Faustregel: Standardmäßig Post-Install verwenden. Greifen Sie nur zu Pre-Install, wenn die Migration selbst destruktiv ist und Sie den vorherigen Zustand abfangen müssen, bevor er verloren geht.

Verhalten, das von beiden Hooks geteilt wird

  • Die Konfiguration ist eine defineLogicFunction-Konfiguration ohne die Trigger-Einstellungen, aber mit shouldRunOnVersionUpgrade.
  • Wann sie ausgeführt werden: standardmäßig nur bei Neuinstallationen. Setze shouldRunOnVersionUpgrade: true, um sie auch bei Upgrades auszuführen. Verwende previousVersion / newVersion, um je nach Upgrade-Pfad unterschiedlich zu verzweigen.
  • Idempotenz ist wichtig: Asynchrones Post-Install kann erneut ausgeführt werden, und beide Hooks werden bei Upgrades erneut ausgeführt, wenn shouldRunOnVersionUpgrade aktiviert ist.
  • Die übliche Logikfunktions-Umgebung (APPLICATION_ID, APP_ACCESS_TOKEN, API_URL) wird injiziert, sodass du die Twenty-API mit dem Token deiner App aufrufen kannst.
  • Der Hook wird zur Build-Zeit automatisch an das Anwendungsmanifest angehängt (preInstallLogicFunction / postInstallLogicFunction) — in defineApplication() muss nichts referenziert werden.
  • Der Standardwert für timeoutSeconds ist 300, um längere Einrichtungsaufgaben wie Daten-Seeding zu ermöglichen.
  • Wird im Dev-Modus nicht ausgeführt: yarn twenty dev überspringt den Installations-Flow und synchronisiert Dateien direkt, sodass Hooks dort nie ausgeführt werden. Führe sie stattdessen manuell aus:
Wird ausgeführt, nachdem deine App die Installation abgeschlossen hat: Metadaten synchronisiert, SDK-Client generiert, neues Schema abfragbar. Beispiel — bei Neuinstallationen einen Standarddatensatz anlegen:
src/logic-functions/post-install.ts
Das Flag shouldRunSynchronously steuert das Ausführungsmodell:
  • false (Standard) — in die Nachrichtenwarteschlange eingereiht (retryLimit: 3) und von einem Worker ausgeführt. Die Installationsantwort wird zurückgegeben, sobald der Job in die Warteschlange eingereiht wurde. Für lange laufende Aufgaben verwenden — das Befüllen großer Datensätze, langsame Drittanbieter-APIs.
  • true — wird inline während des Installations-Flows ausgeführt. Die Installationsanforderung blockiert, bis der Handler fertig ist; ein geworfener Fehler erscheint als POST_INSTALL_ERROR beim Aufrufer (keine Wiederholungsversuche). Für schnelle Aufgaben verwenden, die unbedingt vor der Antwort abgeschlossen sein müssen. Die Migration wurde zu diesem Zeitpunkt bereits angewendet, daher werden Schemaänderungen bei einem Fehler nicht zurückgerollt — es wird nur der Fehler nach außen gegeben.
Wird vor der Metadatenmigration gegen das bisherige Schema ausgeführt — die richtige Stelle, um Daten zu sichern, die eine Migration verlieren würde, oder um ein riskantes Upgrade abzulehnen. Vor der Ausführung führt der Server einen rein additiven „pared-down sync“ durch, der nur die Pre-Install-Funktion der neuen Version registriert; alles andere — Objekte, Felder und Daten der vorherigen Version — bleibt unangetastet, wenn dein Handler ausgeführt wird.Pre-Install ist immer synchron und blockiert die Installation. Wenn der Handler einen Fehler wirft, wird die Installation abgebrochen, bevor eine Schemaänderung erfolgt — der Arbeitsbereich verbleibt in der vorherigen Version in einem konsistenten Zustand. Das ist beabsichtigt: Pre-Install ist Ihre letzte Chance, ein riskantes Upgrade abzulehnen.Beispiel — die Werte eines Legacy-Feldes kopieren, bevor die Migration es entfernt:
src/logic-functions/pre-install.ts

Deinstallations-Hook

defineUninstallLogicFunction deklariert einen Hook, der ausgeführt wird, wenn ein Benutzer Ihre App deinstalliert. Er wird ausgeführt, bevor die Metadaten, Daten und der Code der App entfernt werden – sobald die Löschmigration ausgeführt wurde, bleibt nichts mehr zum Ausführen übrig – sodass Ihr Handler weiterhin die Objekte und Datensätze der App abfragen kann. Verwenden Sie ihn zur Bereinigung externer Ressourcen: Stellen Sie API-Ressourcen außer Betrieb, löschen Sie verbleibende Bots, widerrufen Sie Webhooks. Notizen:
  • Der Hook ist Best-Effort: Er wird synchron ausgeführt, aber ein Fehler wird protokolliert und blockiert die Deinstallation niemals – die Bereinigung darf es nicht unmöglich machen, eine App zu entfernen.
  • Er erhält UninstallPayload ({ version?: string } – die entfernte Version).
  • Er wird nicht ausgeführt, wenn eine fehlgeschlagene Neuinstallation zurückgerollt wird – die App wurde nie vollständig installiert.
  • Der Hook kann nicht ausgeführt werden, nachdem die App entfernt wurde, daher gehört externe Bereinigung, die von App-Daten abhängt (z. B. in Datensätzen gespeicherte Bot-IDs), hierher und nicht in einen externen geplanten Job.
  • Wie die Installations-Hooks wird er nicht im Dev-Modus ausgeführt – lösen Sie ihn stattdessen manuell aus:
src/logic-functions/uninstall.ts