SDK kaynaklarını kullanın (türler ve yapılandırma)
twenty-sdk, uygulamanız içinde kullandığınız türlendirilmiş yapı taşları ve yardımcı fonksiyonlar sağlar. Aşağıda en sık dokunacağınız başlıca parçalar yer alıyor.Yardımcı fonksiyonlar
SDK, uygulama varlıklarınızı tanımlamak için yardımcı fonksiyonlar sağlar. Varlık algılama bölümünde açıklandığı gibi, varlıklarınızın algılanması içinexport default define<Entity>({...}) kullanmalısınız:
| Fonksiyon | Amaç |
|---|---|
defineApplication | Uygulama meta verilerini yapılandırın (zorunlu, uygulama başına bir adet) |
defineObject | Alanlara sahip özel nesneler tanımlayın |
defineLogicFunction | İşleyicilerle mantık fonksiyonları tanımlayın |
definePreInstallLogicFunction | Bir kurulum öncesi 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) |
defineFrontComponent | Özel kullanıcı arayüzü için ön uç bileşenlerini tanımlayın |
defineRole | Rol izinlerini ve nesne erişimini yapılandırın |
defineField | Mevcut nesneleri ek alanlarla genişletin |
defineView | Nesneler için kaydedilmiş görünümler tanımlayın |
defineNavigationMenuItem | Kenar çubuğu gezinme bağlantılarını tanımlayın |
defineSkill | Yapay zekâ ajanı yeteneklerini tanımlayın |
Nesnelerin tanımlanması
Özel nesneler, çalışma alanınızdaki kayıtlar için hem şemayı hem de davranışı tanımlar. Yerleşik doğrulamayla nesneler tanımlamak içindefineObject() kullanın:
- Yerleşik doğrulama ve daha iyi IDE desteği için
defineObject()kullanın. universalIdentifierdağıtımlar arasında benzersiz ve kararlı olmalıdır.- Her alan bir
name,type,labelve kendi kararlıuniversalIdentifierdeğerini gerektirir. fieldsdizisi isteğe bağlıdır — özel alanlar olmadan da nesneler tanımlayabilirsiniz.yarn twenty entity:addkullanarak, adlandırma, alanlar ve ilişkiler konusunda sizi yönlendirerek yeni nesneler oluşturabilirsiniz.
Temel alanlar otomatik olarak oluşturulur. Özel bir nesne tanımladığınızda Twenty, standart alanları otomatik olarak ekler
örneğin
id, name, createdAt, updatedAt, createdBy, updatedBy ve deletedAt.
Bunları fields dizinizde tanımlamanız gerekmez — yalnızca özel alanlarınızı ekleyin.
fields dizinizde aynı ada sahip bir alan tanımlayarak varsayılan alanları geçersiz kılabilirsiniz,
ancak bu önerilmez.Uygulama yapılandırması (application-config.ts)
Her uygulamanın aşağıdakileri açıklayan tek birapplication-config.ts dosyası vardır:
- Uygulamanın kim olduğu: tanımlayıcılar, görünen ad ve açıklama.
- Fonksiyonlarının nasıl çalıştığı: izinler için hangi rolü kullandıkları.
- (İsteğe bağlı) değişkenler: fonksiyonlarınıza ortam değişkenleri olarak sunulan anahtar–değer çiftleri.
- (İsteğe bağlı) kurulum öncesi işlev: uygulama yüklenmeden önce çalışan bir mantık işlevi.
- (İsteğe bağlı) kurulum sonrası işlev: uygulama yüklendikten sonra çalışan bir mantık işlevi.
defineApplication() kullanın:
universalIdentifieralanları size ait belirleyici kimliklerdir; bunları bir kez oluşturun ve eşitlemeler boyunca kararlı tutun.applicationVariables, fonksiyonlarınız için ortam değişkenlerine dönüşür (örneğin,DEFAULT_RECIPIENT_NAMEdeğeriprocess.env.DEFAULT_RECIPIENT_NAMEolarak kullanılabilir).defaultRoleUniversalIdentifier, rol dosyasıyla eşleşmelidir (aşağıya bakın).- Kurulum öncesi ve kurulum sonrası işlevler, manifest oluşturma sırasında otomatik olarak algılanır. Bkz. Kurulum öncesi işlevler ve Kurulum sonrası işlevler.
Roller ve izinler
Uygulamalar, çalışma alanınızdaki nesneler ve eylemler üzerindeki izinleri kapsülleyen roller tanımlayabilir.application-config.ts içindeki defaultRoleUniversalIdentifier alanı, uygulamanızın mantık fonksiyonlarının kullandığı varsayılan rolü belirtir.
TWENTY_API_KEYolarak enjekte edilen çalışma zamanı API anahtarı bu varsayılan fonksiyon rolünden türetilir.- Türlendirilmiş istemci, o role tanınan izinlerle sınırlandırılır.
- En az ayrıcalık ilkesini izleyin: Yalnızca fonksiyonlarınızın ihtiyaç duyduğu izinlere sahip özel bir rol oluşturun ve ardından evrensel tanımlayıcısına referans verin.
Varsayılan fonksiyon rolü (*.role.ts)
Yeni bir uygulama oluşturduğunuzda CLI ayrıca varsayılan bir rol dosyası da oluşturur. Yerleşik doğrulamayla roller tanımlamak içindefineRole() kullanın:
universalIdentifier değeri daha sonra application-config.ts içinde defaultRoleUniversalIdentifier olarak referans verilir. Başka bir deyişle:
- *.role.ts, varsayılan fonksiyon rolünün neler yapabileceğini tanımlar.
- application-config.ts, fonksiyonlarınızın izinlerini devralması için bu role işaret eder.
- Oluşturulan rol ile başlayın ve en az ayrıcalık ilkesini izleyerek aşamalı olarak kısıtlayın.
objectPermissionsvefieldPermissionsdeğerlerini, fonksiyonlarınızın ihtiyaç duyduğu nesneler/alanlarla değiştirin.permissionFlags, platform düzeyindeki yeteneklere erişimi kontrol eder. Minimumda tutun; yalnızca ihtiyacınız olanları ekleyin.- Çalışan bir örneği Hello World uygulamasında görün:
packages/twenty-apps/hello-world/src/roles/function-role.ts.
Mantık fonksiyon yapılandırması ve giriş noktası
Her fonksiyon dosyası, bir işleyici ve isteğe bağlı tetikleyiciler içeren bir yapılandırmayı dışa aktarmak içindefineLogicFunction() kullanır.
- route: Fonksiyonunuzu bir HTTP yolu ve yöntemiyle
/s/uç noktası altında sunar:
örn.path: '/post-card/create',-><APP_URL>/s/post-card/createüzerinden çağırın
- 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
Notlar:
triggersdizisi isteğe bağlıdır. Tetikleyicisi olmayan fonksiyonlar, diğer fonksiyonlar tarafından çağrılan yardımcı fonksiyonlar olarak kullanılabilir.- Tek bir fonksiyonda birden çok tetikleyici türünü birleştirebilirsiniz.
Kurulum öncesi işlevler
Kurulum öncesi işlev, uygulamanız bir çalışma alanına yüklenmeden önce otomatik olarak çalışan bir mantık işlevidir. Bu, doğrulama görevleri, önkoşul kontrolleri veya ana kurulum başlamadan önce çalışma alanı durumunun hazırlanması için yararlıdır.create-twenty-app ile yeni bir uygulama iskeleti oluşturduğunuzda, src/logic-functions/pre-install.ts konumunda sizin için bir kurulum öncesi işlev oluşturulur:
- Kurulum öncesi işlevler
definePreInstallLogicFunction()kullanır — tetikleyici ayarlarını atlayan (cronTriggerSettings,databaseEventTriggerSettings,httpRouteTriggerSettings,isTool) özel bir varyanttır. - İşleyici,
{ previousVersion: string }içeren birInstallLogicFunctionPayloadalır — daha önce yüklü olan uygulamanın sürümü (veya yeni kurulumlar için boş bir dize). - Uygulama başına yalnızca bir kurulum öncesi işlevine izin verilir. Birden fazla tespit edilirse manifest oluşturma hataya düşer.
- İşlevin
universalIdentifierdeğeri, oluşturma sırasında uygulama manifestinde otomatik olarakpreInstallLogicFunctionUniversalIdentifierolarak ayarlanır —defineApplication()içinde buna atıfta bulunmanıza gerek yoktur. - Varsayılan zaman aşımı, daha uzun hazırlık görevlerine izin vermek için 300 saniye (5 dakika) olarak ayarlanmıştır.
- Kurulum öncesi işlevlerin tetikleyicilere ihtiyacı yoktur — kurulumdan önce platform tarafından veya
function:execute --preInstallaracılığıyla manuel olarak çağrılırlar.
Kurulum sonrası işlevler
Kurulum sonrası işlev, uygulamanız bir çalışma alanına yüklendikten sonra otomatik olarak çalışan bir mantık işlevidir. Bu, varsayılan verileri tohumlama, ilk kayıtları oluşturma veya çalışma alanı ayarlarını yapılandırma gibi tek seferlik kurulum görevleri için yararlıdır.create-twenty-app ile yeni bir uygulama iskeleti oluşturduğunuzda, src/logic-functions/post-install.ts konumunda sizin için bir kurulum sonrası işlevi oluşturulur:
- Kurulum sonrası işlevler
definePostInstallLogicFunction()kullanır — tetikleyici ayarlarını atlayan (cronTriggerSettings,databaseEventTriggerSettings,httpRouteTriggerSettings,isTool) özel bir varyanttır. - İşleyici,
{ previousVersion: string }içeren birInstallLogicFunctionPayloadalır — daha önce yüklü olan uygulamanın sürümü (veya yeni kurulumlar için boş bir dize). - Uygulama başına yalnızca bir kurulum sonrası işlevine izin verilir. Birden fazla tespit edilirse manifest oluşturma hataya düşer.
- İşlevin
universalIdentifierdeğeri, oluşturma sırasında uygulama manifestinde otomatik olarakpostInstallLogicFunctionUniversalIdentifierolarak ayarlanır —defineApplication()içinde buna 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.
- Kurulum sonrası işlevlerin tetikleyicilere ihtiyacı yoktur — kurulum sırasında platform tarafından veya
function:execute --postInstallaracılığıyla manuel olarak çağrılırlar.
Rota tetikleyicisi yükü
Bir rota tetikleyicisi mantık fonksiyonunuzu çağırdığında, AWS HTTP API v2 formatını izleyen birRoutePayload nesnesi alır. Türü twenty-sdk içinden içe aktarın:
RoutePayload türünün yapısı şu şekildedir:
| Özellik | Tür | Açıklama |
|---|---|---|
headers | Record<string, string | undefined> | HTTP başlıkları (forwardedRequestHeaders içinde listelenenlerle sınırlı) |
queryStringParameters | Record<string, string | undefined> | Sorgu dizesi parametreleri (birden çok değer virgülle birleştirilir) |
pathParameters | Record<string, string | undefined> | Rota deseninden çıkarılan yol parametreleri (örn., /users/:id → { id: '123' }) |
body | object | null | Ayrıştırılmış istek gövdesi (JSON) |
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 |
HTTP başlıklarını iletme
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ı açıkçaforwardedRequestHeaders dizisinde listeleyin:
Başlık adları küçük harfe normalize edilir. Onlara küçük harfli anahtarlarla erişin (örneğin,
event.headers['content-type']).- Şablondan:
yarn twenty entity:addçalıştırın ve yeni bir mantık fonksiyonu ekleme seçeneğini seçin. Bu, bir işleyici ve yapılandırma içeren bir başlangıç dosyası oluşturur. - Manuel: Yeni bir
*.logic-function.tsdosyası oluşturun ve aynı deseni izleyerekdefineLogicFunction()kullanın.
Bir mantık işlevini araç olarak işaretleme
Mantık işlevleri, yapay zeka ajanları ve iş akışları için araçlar olarak sunulabilir. Bir işlev bir araç olarak işaretlendiğinde, Twenty’nin yapay zeka özellikleri tarafından keşfedilebilir hâle gelir ve iş akışı otomasyonlarında bir adım olarak seçilebilir. Bir mantık işlevini bir araç olarak işaretlemek içinisTool: true olarak ayarlayın ve beklenen giriş parametrelerini açıklayan bir toolInputSchemayı JSON Şeması kullanarak sağlayın:
isTool(boolean, varsayılan:false):trueolarak ayarlandığında, işlev bir araç olarak kaydedilir ve AI ajanları ile iş akışı otomasyonları tarafından kullanılabilir hale gelir.toolInputSchema(object, isteğe bağlı): İşlevinizin kabul ettiği parametreleri tanımlayan bir JSON Schema nesnesi. AI ajanları, aracın hangi girdileri beklediğini anlamak ve çağrıları doğrulamak için bu şemayı kullanır. Atlanırsa, şema varsayılan olarak{ type: 'object', properties: {} }olur (parametre yok).isTool: false(veya ayarlanmamış) olan işlevler araç olarak sunulmaz. Yine de doğrudan yürütülebilir veya diğer işlevler tarafından çağrılabilirler, ancak araç keşfinde görünmezler.- Araç adlandırma: Bir araç olarak sunulduğunda, işlev adı otomatik olarak
logic_function_<name>biçimine dönüştürülür (küçük harfe çevrilir, alfasayısal olmayan karakterler alt çizgi ile değiştirilir). Örneğin,enrich-companylogic_function_enrich_companyhaline gelir. isToolözelliğini tetikleyicilerle birleştirebilirsiniz — bir işlev aynı anda hem bir araç (AI ajanları tarafından çağrılabilir) olabilir hem de olaylar tarafından tetiklenebilir (cron, veritabanı olayları, routes).
İ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.Ön uç bileşenleri
Ön uç bileşenleri, Twenty’nin kullanıcı arayüzünde görüntülenen özel React bileşenleri oluşturmanıza olanak tanır. Yerleşik doğrulamayla bileşenleri tanımlamak içindefineFrontComponent() kullanın:
- Ön uç bileşenleri, Twenty içinde yalıtılmış bağlamlarda görüntülenen React bileşenleridir.
componentalanı, React bileşeninize referans verir.- Bileşenler,
yarn twenty app:devsırasında otomatik olarak oluşturulur ve senkronize edilir.
- Şablondan:
yarn twenty entity:addçalıştırın ve yeni bir ön uç bileşeni ekleme seçeneğini seçin. - Manuel: Aynı deseni izleyerek yeni bir
.tsxdosyası oluşturun vedefineFrontComponent()kullanın.
Beceriler
Yetenekler, yapay zekâ ajanlarının çalışma alanınızda kullanabileceği yeniden kullanılabilir yönergeleri ve kabiliyetleri tanımlar. Yerleşik doğrulamayla yetenekleri tanımlamak içindefineSkill() kullanın:
name, yetenek için benzersiz bir tanımlayıcı dizedir (kebab-case önerilir).label, UI’de gösterilen, insan tarafından okunabilir addır.content, yetenek yönergelerini içerir — bu, yapay zekâ ajanının kullandığı metindir.icon(isteğe bağlı), UI’de gösterilen simgeyi ayarlar.description(isteğe bağlı), yeteneğin amacı hakkında ek bağlam sağlar.
- Şablondan:
yarn twenty entity:addkomutunu çalıştırın ve yeni bir yetenek ekleme seçeneğini seçin. - Manuel: Yeni bir dosya oluşturun ve aynı deseni izleyerek
defineSkill()kullanın.
Oluşturulan tiplendirilmiş istemciler
Çalışma alanı şemanıza göreyarn twenty app:dev tarafından iki tiplendirilmiş istemci otomatik olarak oluşturulur ve node_modules/twenty-sdk/generated içine kaydedilir:
CoreApiClient— çalışma alanı verileri için/graphqluç noktasını sorgularMetadataApiClient— çalışma alanı yapılandırması ve dosya yüklemeleri için/metadatauç noktasını sorgular.
yarn twenty app:dev tarafından otomatik olarak yeniden oluşturulur.
Mantık fonksiyonlarında çalışma zamanı kimlik bilgileri
Fonksiyonunuz Twenty üzerinde çalıştığında, platform kodunuz yürütülmeden önce kimlik bilgilerini ortam değişkenleri olarak enjekte eder:TWENTY_API_URL: Uygulamanızın hedeflediği Twenty API’nin temel URL’si.TWENTY_API_KEY: Uygulamanızın varsayılan fonksiyon rolü kapsamına sahip kısa ömürlü anahtar.
- Oluşturulan istemciye URL veya API anahtarı geçirmeniz gerekmez. Çalışma zamanında
TWENTY_API_URLveTWENTY_API_KEYdeğerlerini process.env üzerinden okur. - API anahtarının izinleri,
application-config.tsiçindedefaultRoleUniversalIdentifieraracılığıyla referans verilen role göre belirlenir. Bu, uygulamanızın mantık fonksiyonları tarafından kullanılan varsayılan roldür. - Uygulamalar, en az ayrıcalık ilkesini izlemek için roller tanımlayabilir. Yalnızca fonksiyonlarınızın ihtiyaç duyduğu izinleri verin ve ardından
defaultRoleUniversalIdentifierdeğerini o rolün evrensel tanımlayıcısına yönlendirin.
Dosya yükleme
OluşturulanMetadataApiClient, çalışma alanı nesnelerinizdeki dosya türündeki alanlara dosya eklemek için bir uploadFile yöntemi içerir. Standart GraphQL istemcileri çok parçalı dosya yüklemelerini yerel olarak desteklemediğinden, istemci arka planda GraphQL çok parçalı istek belirtimi uygulayan bu özel yöntemi sağlar.
| 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 | Dosyanın 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 |
uploadFileyöntemi, yükleme mutasyonu/metadatauç noktası tarafından çözümlendiği içinMetadataApiClientüzerinde mevcuttur.- Alan için
universalIdentifierkullanılı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 — uygulamaların başka her yerde alanlara nasıl atıfta bulunduğuyla tutarlıdır. - Döndürülen
url, yüklenen dosyaya erişmek için kullanabileceğiniz imzalı bir URL’dir.