Tovább a tartalomhoz

Integrációk

Az integráció egy projektet — vagy egy egész munkaterületet — köt össze valamivel az Ownlate-en kívül. Mindegyik egy szolgáltatóból, egy konfigurációból és hitelesítő adatokból áll, amelyeket tárolás előtt titkosítunk, és amelyeket az API soha nem ad vissza.

KategóriaSzolgáltatók
VerziókezelésGitHub, GitLab
Gépi fordításOpenAI, Anthropic, Mistral, DeepL, Google, Azure — lásd AI-fordítás
ÉrtesítésekSlack, Microsoft Teams, Discord, Mattermost, Matrix, Telegram
WebhookokÁltalános webhook

Az integrációk a projekt Integrációk lapján élnek, a munkaterület-szintűek pedig a Munkaterület → Integrációk alatt.

MűveletMit tesz
Tesztelés mentés előttEllenőrzi a beírt hitelesítő adatokat anélkül, hogy tárolná őket
TesztelésEllenőriz egy mentett integrációt
SzüneteltetésMegtartja a beállítást, de leállítja a működést
AktiválásVisszakapcsolja a szüneteltetettet
SzinkronnaplókMinden futás sorról sorra, az eredményével

A hatókör dönti el az elérést. A project hatókörű integráció egy projektet szolgál ki, a workspace hatókörű a munkaterület minden projektje számára elérhető. Gépi fordításnál a saját integráció nélküli projekt a munkaterületére esik vissza. Webhookoknál a munkaterület-szintűek csak akkor sülnek el, ha a projektnek nincs sajátja. Az értesítéseket projekt hatókörű integrációk küldik.

Amit egy integráció tesz, az bekerül a szinkronnaplójába, a hibákkal együtt — így a meg nem érkezett webhook megkülönböztethető attól, amelyet el sem küldtünk.

A verziókezelő integráció egy repository-URL-t, egy ágat (alapértelmezésben main) és egy hozzáférési tokent vár.

Szinkronizáláskor az Ownlate beolvassa az ág gyökeréből az ownlate.yml — vagy ownlate.yaml — fájlt. Ez ugyanaz a fájl, amelyet a CLI használ:

project_id: 00000000-0000-0000-0000-000000000000
files:
- source: locales/en.json
translation: locales/{lang}.json

Minden hozzárendeléshez lehúzza a forrásfájlt a repositoryból, és feltölti, pontosan úgy hozva létre és frissítve a szegmenseket, ahogy egy kézi feltöltés tenné. A konfigurációban felsorolt, de a repositoryból hiányzó fájlt kihagyja, és feljegyzi a naplóba; a konfiguráció nélküli repository semmit sem szinkronizál, és ezt ki is írja.

A files[].translation értékének tartalmaznia kell a {lang} helyőrzőt — ez a minta, amely szerint a lefordított fájlok visszaíródnak.

A szinkron a háttérben fut. Kézzel az integrációk lapról indítható, API-n keresztül pedig a PATCH /v1/workspaces/{workspaceId}/integrations/{id}/sync hívással.

A PR létrehozása a másik irányba dolgozik: az Ownlate exportálja a kiválasztott nyelvek jóváhagyott fordításait, kiírja őket az ownlate.yml-ből vett útvonalakra, feltol egy új ágat, és pull requestet nyit — GitLabon merge requestet. A válasz tartalmazza az URL-t, így egy pipeline fel tudja venni.

A tokennek elegendő jogosultság kell ahhoz, hogy olvassa a repositoryt, ágat toljon fel és pull requestet nyisson.

Hat chatcélpont, mindegyik az adott platform saját stílusában megformázva — Block Kit üzenet Slacken, MessageCard a Teamsben, és így tovább.

SzolgáltatóMit kér
SlackIncoming webhook URL
Microsoft TeamsConnector URL
DiscordWebhook URL
MattermostWebhook URL
TelegramBot token, chatazonosító
MatrixHomeserver-cím, szobaazonosító, hozzáférési token

Az üzenetek a kulcsot, a nyelvet, a forrásszöveget és az új fordítást hordozzák, valamint egy hivatkozást egyenesen a szegmensre az Ownlate-ben.

A webhook-integráció egy URL-t és egy opcionális titkot vár, és JSON-t küld rá:

{
"event": "translation.approved",
"payload": {
"segmentId": "…",
"projectId": "…",
"workspaceId": "…",
"language": "de",
"key": "home.title",
"sourceText": "Hello",
"translationText": "Hallo",
"actorId": "…",
"authorId": "…",
"approvedAt": "2026-08-20T09:31:00Z"
},
"timestamp": "1787654321000"
}

Minden kézbesítés ezeket a fejléceket hordozza:

FejlécTartalom
X-Ownlate-EventAz esemény neve
X-Ownlate-TimestampEzredmásodperc az epoch óta, ugyanaz az érték, mint a törzsben
X-Ownlate-Signaturesha256=…, csak akkor, ha van beállított titok

Az aláírás HMAC-SHA256 az időbélyeg, egy pont és a nyers kéréstörzs fölött, a titokkal mint kulccsal:

const expected = 'sha256=' + crypto
.createHmac('sha256', secret)
.update(`${req.headers['x-ownlate-timestamp']}.${rawBody}`)
.digest('hex')

Vesse össze az X-Ownlate-Signature értékével állandó idejű összehasonlítással, és utasítsa el azt az időbélyeget, amely már túl régi ahhoz, hogy hihető legyen.

Az értesítési és webhook-integrációk ezekre reagálnak:

EseményMikor
translation.submittedEgy fordítást lektorálásra küldtek
translation.reviewedEgy lektor átnézettnek jelölt egyet
translation.approvedEgy fordítást jóváhagytak
translation.rejectedEgy fordítást elutasítottak
segment.createdÚj szegmens került a projektbe

Alapból az integráció mindet megkapja. Állítson be rá eseményszűrőt, hogy szűkítse — egy Slack-csatorna, amely csak a jóváhagyásokat kéri, egy webhook, amelyet csak az új kulcsok érdekelnek.