defineLogicFunction
Mantık fonksiyonlarını ve tetikleyicilerini tanımlayın
defineLogicFunction
Mantık fonksiyonlarını ve tetikleyicilerini tanımlayın
Her fonksiyon dosyası, bir işleyici ve isteğe bağlı tetikleyiciler içeren bir yapılandırmayı dışa aktarmak için Kullanılabilir tetikleyici türleri:
İşleyicinizde, iletilen başlıklara şu şekilde erişin:Önemli noktalar:
defineLogicFunction() kullanır.src/logic-functions/createPostCard.logic-function.ts
- httpRoute: Fonksiyonunuzu bir HTTP yolu ve yöntemiyle
/s/uç noktasının altında kullanıma sunar:
örn.path: '/post-card/create'https://your-twenty-server.com/s/post-card/createadresinden çağrılabilir
- cron: Bir CRON ifadesi kullanarak fonksiyonunuzu bir zamanlamayla çalıştırır.
- databaseEvent: Çalışma alanı nesnesi yaşam döngüsü olaylarında çalışır. Olay işlemi
updatedolduğunda, dinlenecek belirli alanlarupdatedFieldsdizisinde belirtilebilir. Tanımsız veya boş bırakılırsa, herhangi bir güncelleme fonksiyonu tetikler.
örn.person.updated,*.created,company.*
Bir fonksiyonu CLI kullanarak manuel olarak da çalıştırabilirsiniz:Günlükleri şu şekilde izleyebilirsiniz:
Rota tetikleyicisi yükü
Bir rota tetikleyicisi mantık fonksiyonunuzu çağırdığında, AWS HTTP API v2 formatını izleyen birRoutePayload nesnesi alır.
RoutePayload türünü twenty-sdk içinden içe aktarın:RoutePayload türünün yapısı şu şekildedir:| Özellik | Tür | Açıklama | Örnek |
|---|---|---|---|
headers | Record\<string, string | undefined> | HTTP başlıkları (forwardedRequestHeaders içinde listelenenlerle sınırlı) | aşağıdaki bölüme bakın |
queryStringParameters | Record\<string, string | undefined> | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) | /users?ids=1&ids=2&ids=3&name=Alice -> { ids: '1,2,3', name: 'Alice' } |
pathParameters | Record\<string, string | undefined> | Rota deseninden çıkarılan yol parametreleri | /users/:id, /users/123 -> { id: '123' } |
body | object | null | Ayrıştırılmış istek gövdesi (JSON) | { id: 1 } -> { id: 1 } |
isBase64Encoded | boolean | Gövdenin base64 ile kodlanıp kodlanmadığı | |
requestContext.http.method | string | HTTP yöntemi (GET, POST, PUT, PATCH, DELETE) | |
requestContext.http.path | string | Ham istek yolu |
forwardedRequestHeaders
Varsayılan olarak, güvenlik nedenleriyle gelen isteklerden HTTP başlıkları mantık fonksiyonunuza aktarılmaz. Belirli başlıklara erişmek için bunlarıforwardedRequestHeaders dizisinde listeleyin:Başlık adları küçük harfe normalize edilir. Onlara küçük harfli anahtarlarla erişin (örneğin,
event.headers['content-type']).Bir fonksiyonu araç olarak sunma
Mantık işlevleri, yapay zeka ajanları ve iş akışları için araçlar olarak sunulabilir. Bir fonksiyon bir araç olarak işaretlendiğinde, Twenty’nin yapay zeka özellikleri tarafından keşfedilebilir hâle gelir ve iş akışı otomasyonlarında kullanılabilir.Bir mantık fonksiyonunu araç olarak işaretlemek içinisTool: true olarak ayarlayın:src/logic-functions/enrich-company.logic-function.ts
isToolözelliğini tetikleyicilerle birleştirebilirsiniz — bir fonksiyon aynı anda hem bir araç (yapay zeka ajanları tarafından çağrılabilir) olabilir hem de olaylar tarafından tetiklenebilir.toolInputSchema(isteğe bağlı): Fonksiyonunuzun kabul ettiği parametreleri tanımlayan bir JSON Schema nesnesi. Şema, kaynak kodun statik analizinden otomatik olarak oluşturulur, ancak bunu açıkça belirleyebilirsiniz:
İyi bir
description yazın. AI ajanları, aracı ne zaman kullanacaklarına karar vermek için işlevin description alanına güvenir. Aracın ne yaptığını ve ne zaman çağrılması gerektiğini açıkça belirtin.definePostInstallLogicFunction
Bir kurulum sonrası mantık işlevi tanımlayın (uygulama başına bir adet)
definePostInstallLogicFunction
Bir kurulum sonrası mantık işlevi tanımlayın (uygulama başına bir adet)
Kurulum sonrası işlev, uygulamanız bir çalışma alanına yüklendikten sonra otomatik olarak çalışan bir mantık işlevidir. Sunucu, uygulamanın meta verileri senkronize edildikten ve SDK istemcisi oluşturulduktan sonra bunu yürütür; böylece çalışma alanı tamamen kullanıma hazırdır ve yeni şema kullanıma alınmıştır. Tipik kullanım örnekleri arasında varsayılan verilerin tohumlanması, başlangıç kayıtlarının oluşturulması, çalışma alanı ayarlarının yapılandırılması veya üçüncü taraf hizmetlerde kaynak sağlanması yer alır.Ayrıca kurulum sonrası işlevi istediğiniz zaman CLI kullanarak manuel olarak çalıştırabilirsiniz:Önemli noktalar:
src/logic-functions/post-install.ts
- Kurulum sonrası işlevler
definePostInstallLogicFunction()kullanır — tetikleyici ayarlarını atlayan (cronTriggerSettings,databaseEventTriggerSettings,httpRouteTriggerSettings,isTool) özel bir varyanttır. - İşleyici,
{ previousVersion?: string; newVersion: string }içeren birInstallPayloadalır —newVersion, yüklenen sürümdür;previousVersionise daha önce yüklü olan sürümdür (veya ilk kurulumdaundefined). Bu değerleri ilk kurulumları yükseltmelerden ayırt etmek ve sürüme özgü geçiş (migration) mantığını çalıştırmak için kullanın. - Kanca ne zaman çalışır: varsayılan olarak yalnızca ilk kurulumlarda. Uygulama önceki bir sürümden yükseltildiğinde de çalışmasını istiyorsanız
shouldRunOnVersionUpgrade: truegeçin. Belirtilmediğinde, bayrak varsayılan olarakfalseolur ve yükseltmeler kancayı atlar. - Yürütme modeli — varsayılan olarak eşzamansız, isteğe bağlı senkron:
shouldRunSynchronouslybayrağı kurulum sonrası işlemin nasıl yürütüldüğünü kontrol eder.shouldRunSynchronously: false(varsayılan) — kanca,retryLimit: 3ile mesaj kuyruğuna alınır ve bir worker içinde eşzamansız çalışır. İş kuyruğa alınır alınmaz kurulum yanıtı döner; dolayısıyla yavaşlayan veya hata veren bir işleyici çağıranı engellemez. Worker en fazla üç kez yeniden deneyecektir. Bunu uzun süre çalışan işler için kullanın — büyük veri kümelerini tohumlama, yavaş üçüncü taraf API’lerini çağırma, harici kaynakları sağlama; makul bir HTTP yanıt süresini aşabilecek her şey.shouldRunSynchronously: true— kanca kurulum akışı sırasında satır içi olarak yürütülür (kurulum öncesi ile aynı yürütücü). İşleyici bitene kadar kurulum isteği engellenir; hata fırlatırsa, kurulum çağıranı birPOST_INSTALL_ERRORalır. Otomatik yeniden deneme yok. Bunu, yanıt dönmeden mutlaka tamamlanması gereken hızlı işler için kullanın — örneğin, kullanıcıya bir doğrulama hatası iletmek veya kurulum çağrısı döner dönmez istemcinin ihtiyaç duyacağı hızlı bir kurulum yapmak. Kurulum sonrası çalıştığında, üstveri (metadata) geçişinin zaten uygulanmış olduğunu unutmayın; bu nedenle, senkron moddaki bir hata şema değişikliklerini geri almaz — yalnızca hatayı görünür kılar.
- İşleyicinizin idempotent olduğundan emin olun. Eşzamansız modda kuyruk en fazla üç kez yeniden deneyebilir; her iki modda da
shouldRunOnVersionUpgrade: trueiken yükseltmelerde kanca tekrar çalışabilir. - Ortam değişkenleri
APPLICATION_ID,APP_ACCESS_TOKENveAPI_URLişleyici içinde kullanılabilir (diğer mantık işlevlerinde olduğu gibi), böylece uygulamanıza özel kapsamda bir uygulama erişim belirteciyle Twenty API’sini çağırabilirsiniz. - Uygulama başına yalnızca bir kurulum sonrası işlevine izin verilir. Birden fazla tespit edilirse manifest oluşturma hataya düşer.
- İşlevin
universalIdentifier,shouldRunOnVersionUpgradeveshouldRunSynchronouslydeğerleri, derleme sırasında uygulama manifestinepostInstallLogicFunctionalanı altında otomatik olarak eklenir — bunlaradefineApplication()içinde atıfta bulunmanıza gerek yoktur. - Varsayılan zaman aşımı, veri tohumlama gibi daha uzun kurulum görevlerine izin vermek için 300 saniye (5 dakika) olarak ayarlanmıştır.
- Geliştirme modunda çalıştırılmaz: bir uygulama yerel olarak kaydedildiğinde (
yarn twenty devaracılığıyla), sunucu kurulum akışını tamamen atlar ve dosyaları doğrudan CLI watcher üzerinden eşitler — bu nedenle,shouldRunSynchronouslyne olursa olsun, kurulum sonrası geliştirme modunda hiç çalışmaz. Çalışan bir çalışma alanında bunu elle tetiklemek içinyarn twenty exec --postInstallkullanın.
definePreInstallLogicFunction
Bir kurulum öncesi mantık işlevi tanımlayın (uygulama başına bir adet)
definePreInstallLogicFunction
Bir kurulum öncesi mantık işlevi tanımlayın (uygulama başına bir adet)
Kurulum öncesi işlev, kurulum sırasında otomatik olarak çalışan ve çalışma alanı üstveri (metadata) geçişi uygulanmadan önce yürütülen bir mantık işlevidir. Kurulum sonrası ile (Ayrıca kurulum öncesi işlevi istediğiniz zaman CLI kullanarak manuel olarak çalıştırabilirsiniz:Önemli noktalar:
InstallPayload) aynı yük (payload) biçimini paylaşır, ancak kurulum akışında daha erken konumlandığından yaklaşan geçişin bağlı olduğu durumu hazırlayabilir — tipik kullanımlar arasında verileri yedeklemek, yeni şemayla uyumluluğu doğrulamak veya yeniden yapılandırılacak ya da kaldırılacak kayıtları arşivlemek yer alır.src/logic-functions/pre-install.ts
- Kurulum öncesi işlevler
definePreInstallLogicFunction()kullanır — kurulum sonrasıyla aynı özel yapılandırma, sadece yaşam döngüsünde farklı bir yuvaya eklenir. - Hem kurulum öncesi hem de kurulum sonrası işleyiciler aynı
InstallPayloadtürünü alır:{ previousVersion?: string; newVersion: string }. Bunu bir kez içe aktarın ve her iki kanca için yeniden kullanın. - Kanca ne zaman çalışır: çalışma alanı üstveri (metadata) geçişinden hemen önce konumlandırılır (
synchronizeFromManifest). Çalıştırmadan önce, sunucu yalnızca ekleyici bir “indirgenmiş eşitleme” yürütür; bu, çalışma alanı üstverisinde yeni sürümün kurulum öncesi işlevini kaydeder — başka hiçbir şeye dokunulmaz — ve ardından bunu yürütür. Bu eşitleme yalnızca ekleyici olduğundan, işleyiciniz çalıştığında önceki sürümün nesneleri, alanları ve verileri hâlâ sağlamdır: geçiş öncesi durumu güvenle okuyabilir ve yedekleyebilirsiniz. - Yürütme modeli: kurulum öncesi senkron olarak yürütülür ve kurulumu bloklar. İşleyici bir hata fırlatırsa, herhangi bir şema değişikliği uygulanmadan önce kurulum iptal edilir — çalışma alanı, tutarlı bir durumda önceki sürümde kalır. Bu kasıtlıdır: kurulum öncesi, riskli bir yükseltmeyi reddetmek için son şansınızdır.
- Kurulum sonrası ile aynı şekilde, uygulama başına yalnızca bir kurulum öncesi işlevine izin verilir. Derleme sırasında uygulama manifestine
preInstallLogicFunctionaltında otomatik olarak eklenir. - Geliştirme modunda çalıştırılmaz: kurulum sonrasında olduğu gibi — yerel olarak kaydedilen uygulamalarda kurulum akışı tamamen atlanır, bu nedenle
yarn twenty devaltında kurulum öncesi hiç çalışmaz. Bunu elle tetiklemek içinyarn twenty exec --preInstallkullanın.
Kurulum öncesi vs kurulum sonrası: hangisini ne zaman kullanmalı
Doğru kurulum kancasını seçme
Kurulum öncesi vs kurulum sonrası: hangisini ne zaman kullanmalı
Doğru kurulum kancasını seçme
Her iki kanca da aynı kurulum akışının parçasıdır ve aynı Kurulum öncesi her zaman senkrondur (kurulumu bloke eder ve iptal edebilir). Kurulum sonrası varsayılan olarak asenkrondur — otomatik yeniden denemelerle bir worker üzerinde kuyruğa alınır — ancak Bir geçiş mevcut verileri aksi takdirde silecek veya bozacaksa Kural olarak:
InstallPayload’ı alır. Fark, çalışma alanı üstveri (metadata) geçişine göre ne zaman çalıştıklarıdır ve bu, güvenle erişebilecekleri verileri değiştirir.shouldRunSynchronously: true ile senkron yürütmeye geçebilir. Her modun ne zaman kullanılacağı için yukarıdaki definePostInstallLogicFunction akordeonuna bakın.Yeni şemanın mevcut olmasını gerektiren her şey için post-install kullanın. Bu yaygın durumdur:- Yeni eklenen nesne ve alanlara karşı varsayılan verileri tohumlama (ilk kayıtları, varsayılan görünümleri, demo içeriği oluşturma).
- Uygulamanın kimlik bilgileri artık mevcut olduğuna göre, üçüncü taraf hizmetlerle webhook’ları kaydetmek.
- Eşitlenmiş üstveriye (metadata) bağlı kurulumu tamamlamak için kendi API’nizi çağırmak.
- Her yükseltmede durumu uzlaştırması gereken idempotent “bu mevcut olsun” mantığı —
shouldRunOnVersionUpgrade: trueile birleştirin.
PostCard kaydı tohumlama:src/logic-functions/post-install.ts
pre-install kullanın. Kurulum öncesi önceki şemaya karşı çalıştığı ve hatalandığında yükseltmeyi geri aldığı için, riskli olan her şey için doğru yerdir:- Kaldırılmak veya yeniden yapılandırılmak üzere olan verileri yedekleme — örn. v2’de bir alanı kaldırıyorsunuz ve geçiş çalışmadan önce değerlerini başka bir alana kopyalamanız veya depolamaya aktarmanız gerekiyor.
- Yeni bir kısıtın geçersiz kılacağı kayıtları arşivleme — örn. bir alan
NOT NULLoluyor ve önce null değerli satırları silmeniz veya düzeltmeniz gerekiyor. - Uyumluluğu doğrulama ve mevcut veriler temiz bir şekilde geçirilemiyorsa yükseltmeyi reddetme — işleyiciden hata fırlatın ve kurulum, herhangi bir değişiklik uygulanmadan iptal edilir. Bu, uyumsuzluğu geçişin ortasında keşfetmekten daha güvenlidir.
- İlişkilendirmeyi kaybettirecek bir şema değişikliğinden önce verileri yeniden adlandırma veya yeniden anahtarlama.
src/logic-functions/pre-install.ts
| You want to… | Kullan |
|---|---|
| Varsayılan verileri tohumlamak, çalışma alanını yapılandırmak, harici kaynakları kaydetmek | post-install |
| Kurulum yanıtını engellememesi gereken uzun süreli tohumlama veya üçüncü taraf çağrılarını çalıştırmak | post-install (varsayılan — shouldRunSynchronously: false, worker yeniden denemeleriyle) |
| Kurulum çağrısı döner dönmez çağıranın güveneceği hızlı kurulumu çalıştırmak | post-install ile shouldRunSynchronously: true |
| Yaklaşan geçişin kaybedeceği verileri okumak veya yedeklemek | pre-install |
| Mevcut verileri bozacak bir yükseltmeyi reddetmek | pre-install (işleyiciden hata fırlatmak) |
| Her yükseltmede uzlaştırma çalıştırmak | post-install ile shouldRunOnVersionUpgrade: true |
| Yalnızca ilk kurulumda tek seferlik kurulum yapmak | post-install ile shouldRunOnVersionUpgrade: false (varsayılan) |
Emin değilseniz, varsayılan olarak kurulum sonrasını tercih edin. Yalnızca geçişin kendisi yıkıcıysa ve önceki durum yok olmadan önce onu yakalamanız gerekiyorsa kurulum öncesine başvurun.
Tipli API istemcileri (twenty-client-sdk)
twenty-client-sdk paketi, mantık fonksiyonlarınızdan ve ön uç bileşenlerinizden Twenty API ile etkileşim kurmak için tip tanımlı iki GraphQL istemcisi sağlar.
| İstemci | İçe Aktar | Uç nokta | Oluşturuldu mu? |
|---|---|---|---|
CoreApiClient | twenty-client-sdk/core | /graphql — çalışma alanı verileri (kayıtlar, nesneler) | Evet, geliştirme/derleme zamanında |
MetadataApiClient | twenty-client-sdk/metadata | /metadata — çalışma alanı yapılandırması, dosya yüklemeleri | Hayır, önceden hazırlanmış olarak gelir |
CoreApiClient
Çalışma alanı verilerini sorgulayın ve değiştirin (kayıtlar, nesneler)
CoreApiClient
Çalışma alanı verilerini sorgulayın ve değiştirin (kayıtlar, nesneler)
CoreApiClient, çalışma alanı verilerini sorgulamak ve değiştirmek için ana istemcidir. yarn twenty dev veya yarn twenty build sırasında çalışma alanı şemanızdan oluşturulur, bu nedenle nesnelerinize ve alanlarınıza uyacak şekilde tamamen tiplenmiştir.true geçin, bağımsız değişkenler için __args kullanın ve ilişkiler için nesneleri iç içe yerleştirin. Çalışma alanı şemanıza göre tam otomatik tamamlama ve tip denetimi elde edersiniz.CoreApiClient geliştirme/derleme zamanında oluşturulur. Bunu önce
yarn twenty dev veya yarn twenty build çalıştırmadan kullanırsanız, bir hata verir. Oluşturma otomatik olarak gerçekleşir — CLI, çalışma alanınızın GraphQL şemasını inceler ve @genql/cli kullanarak tiplenmiş bir istemci üretir.Tür açıklamaları için CoreSchema’yı kullanma
CoreSchema, çalışma alanı nesnelerinize uyan TypeScript türleri sağlar — bileşen durumunu veya işlev parametrelerini tiplemek için kullanışlıdır:MetadataApiClient
Çalışma alanı yapılandırması, uygulamalar ve dosya yüklemeleri
MetadataApiClient
Çalışma alanı yapılandırması, uygulamalar ve dosya yüklemeleri
MetadataApiClient, SDK ile birlikte önceden hazırlanmış olarak gelir (oluşturma gerektirmez). Çalışma alanı yapılandırması, uygulamalar ve dosya yüklemeleri için /metadata uç noktasını sorgular.Dosya yükleme
MetadataApiClient, dosya türündeki alanlara dosya eklemek için bir uploadFile yöntemi içerir:| Parametre | Tür | Açıklama |
|---|---|---|
fileBuffer | Buffer | Dosyanın ham içeriği |
filename | string | Dosyanın adı (depolama ve görüntüleme için kullanılır) |
contentType | string | MIME türü (belirtilmezse varsayılan olarak application/octet-stream kullanılır) |
fieldMetadataUniversalIdentifier | string | Nesnenizdeki dosya türü alanının universalIdentifier değeri |
- Alan için
universalIdentifierkullanır (çalışma alanına özgü kimliği değil), böylece yükleme kodunuz uygulamanızın yüklü olduğu herhangi bir çalışma alanında çalışır. - Döndürülen
url, yüklenen dosyaya erişmek için kullanabileceğiniz imzalı bir URL’dir.
Kodunuz Twenty üzerinde çalıştığında (mantık işlevleri veya ön uç bileşenleri), platform kimlik bilgilerini ortam değişkenleri olarak enjekte eder:
TWENTY_API_URL— Twenty API’nin temel URL’siTWENTY_APP_ACCESS_TOKEN— Uygulamanızın varsayılan işlev rolü kapsamında kısa ömürlü bir anahtar
process.env’den okurlar. API anahtarının izinleri, application-config.ts içinde defaultRoleUniversalIdentifier ile referans verilen role göre belirlenir.