Süsteemi sünkroonimine kohandatud allikaga
Kohandatud allikas ühendab süsteemi, millel ei ole sisseehitatud konnektorit: teie wiki, piletisüsteemi, andmebaasi, ekspordi ükskõik kust. Teie kood saadab dokumendid Sursasse ja Sursa muudab need kaartideks kogus ja kaustades, mille jaoks allikas on seadistatud. Neil kaartidel on sama otsing, vastused, kontroll ja õigused nagu mis tahes muu allika kaartidel.
Erinevalt kaartide otse kirjutamisest peab kohandatud allikas arvet selle üle, mida olete saatnud. Täieliku sünkroonimise lõpus arhiveerib Sursa iga dokumendi, mida te ei saatnud, seega jõuavad teie süsteemis tehtud kustutamised Sursasse ilma lisatööta.
Allika seadistamine
Administraator loob allika Sursas jaotises Sources → New source → Custom source (allikad → uus allikas → kohandatud allikas) ja valib:
- kogu ja soovi korral selle kaartide jaoks kausta;
- kaustarežiimi: kõik kaardid valitud kaustas või alamkaustad, mis peegeldavad iga dokumendi välja
path; - õigused: kogu õigused või „as in the source“ (nagu allikas), kus iga dokument loetleb, kes seda näha tohib.
Allika lehel on näha selle ID; näited kasutavad ID-d 42.
Võtme valimine
| Võti | Algab eesliitega | Võimaldab |
|---|---|---|
| Allikavõti | kbsrc_ | Kirjutada dokumente sellesse ühte allikasse. Mitte midagi muud: see ei saa lugeda ega otsida. Looge see allika lehel jaotises API keys. |
Organisatsiooni võti ulatusega import:write | kb_ | Kirjutada organisatsiooni mis tahes kohandatud allikasse ja lugeda selle olekut. Allika ja selle võtmete loomiseks on vaja ulatust admin. |
Allikavõti on kõige turvalisem valik üksiku integratsiooni jaoks, eriti sellise, mis töötab kolmanda osapoole
platvormil. Ulatusega import:write organisatsiooni võti sobib teenusele, mis toidab mitut allikat.
Mõlemad võtmed saadetakse ühtemoodi ja kõik push-lõpp-punktid asuvad tee /v1/push/sources/{source_id} all.
Kontrollige võtit ja allika olekut päringuga GET /v1/push/sources/{source_id}:
curl https://api.sursa.com/v1/push/sources/42 \
-H "Authorization: Bearer $SURSA_SOURCE_KEY"{"source_id": 42, "name": "Helpdesk articles", "documents": 1840, "open_sync": null}
Dokument
| Väli | Kohustuslik | Kirjeldus |
|---|---|---|
external_id | jah | Dokumendi püsiv ID teie süsteemis, kuni 512 märki. Sama ID uuesti saatmine asendab dokumendi. |
title | jah | Kaardi pealkiri, kuni 500 märki. Faili puhul vaikimisi faili nimi. |
content | jah, kui faili ei ole | Kuni 5 MB. |
content_type | ei | html (vaikimisi), markdown või text. HTML-ist eemaldatakse skriptid, stiilid, vormid ja manustatud objektid. |
url | ei | Link dokumendile teie süsteemis, kuvatakse kaardil. |
path | ei | Kaustad massiivina (["Support", "Billing"]) või stringina ("Support/Billing"), kuni 10 taset. |
permissions | ei | {"everyone": true} või {"emails": [...], "groups": [...]}. Kasutatakse, kui allika õigused on „as in the source“. |
tags | ei | Kuni 50 silti, mis lisatakse allika siltidele. |
author_email | ei | Kui see on organisatsiooni kasutaja, saab temast kaardi vastutaja. |
updated_at | ei | Millal dokument teie süsteemis muutus (RFC 3339). |
metadata | ei | Teie võtme-väärtuse paarid kaardil. Vt Metaandmed. |
category | ei | Kaardi kategooria: organisatsiooni kategooria võti. |
verifiers, verify_interval_days | ei | Kes kaarti kontrollib (kasutajad e-posti aadressi järgi ja rühmad) ja kui sageli, päevades. |
upload_id | ei | Dokumendi fail osadena üleslaadimisest välja content asemel. |
attachments | ei | Dokumendi kuni 20 lisafaili loendina väärtustest upload_id. Igast neist saab allika eraldi kaart. |
Välja content asemel võib üksik dokument kanda kuni 100 MB suurust faili päringus multipart/form-data: fail osas
file, ülaltoodud väljad JSON-ina osas document. Väljade upload_id ja attachments osadena üleslaadimised
luuakse organisatsiooni võtmega, millel on ulatus import:write, ja otstarbega import_attachment; allikavõti ei
saa neid luua.
Kaks saatmisviisi
Otsesed uuendused sobivad süsteemidele, mis annavad teile teada igast muudatusest, näiteks veebihaak teie klienditoe süsteemist või samm Zapieris. Saatke dokument, kui see luuakse või seda muudetakse, ja kustutage see, kui see eemaldatakse:
| Päring | Teeb |
|---|---|
POST /v1/push/sources/{source_id}/documents | Loob või asendab ühe dokumendi. |
POST /v1/push/sources/{source_id}/documents/batch | Loob või asendab korraga palju dokumente. |
DELETE /v1/push/sources/{source_id}/documents/{external_id} | Eemaldab ühe dokumendi. URL-kodeerige ID. |
Muudatustest saavad kaardid umbes minuti jooksul; mitu järjestikust muudatust töödeldakse koos.
Sünkroonimised sobivad regulaarseteks eksportideks: saadate kõik või kõik, mis muutus, ja Sursa viib andmed vastavusse. Selle juhendi ülejäänud osa käsitleb sünkroonimisi.
Täieliku sünkroonimise käivitamine
Sünkroonimisel on kolm sammu: avamine, saatmine ja sulgemine.
1. Avage
POST /v1/push/sources/{source_id}/syncs avab sünkroonimise ja tagastab selle
numbri:
curl -X POST https://api.sursa.com/v1/push/sources/42/syncs \
-H "Authorization: Bearer $SURSA_SOURCE_KEY" \
-H "Idempotency-Key: sync-2026-10-24" \
-H "Content-Type: application/json" \
-d '{"type": "initial", "max_minutes": 180}'{"sync_number": 7, "type": "initial", "status": "open", "opened_at": "2026-10-24T02:00:00Z",
"expires_at": "2026-10-24T05:00:00Z", "pushed": 0, "removed": 0}
typeon allika esimese sünkroonimise puhulinitialja pärast esimese sünkroonimise lõpetamistincremental. Sünkroonimine tüübigaincrementalenne ühegi sünkroonimise lõpetamist tagastabsources.push_initial_required.- Korraga saab avatud olla ainult üks sünkroonimine: teine tagastab
409sources.push_sync_open. - Sünkroonimine on avatud
max_minutesminutit (vaikimisi 60, kuni 1440). Pärast seda see aegub: midagi ei arhiveerita ja selle numbrit enam ei aktsepteerita. Valige aeg, mis on teie ekspordi kestusest tublisti pikem.
2. Saatke dokumendid
Saatke dokumendid kuni 500 dokumendi suuruste partiidena koos sünkroonimise numbriga. Partii keha on kuni 50 MiB;
partiis olevad failid edastatakse väärtusena upload_id.
curl -X POST https://api.sursa.com/v1/push/sources/42/documents/batch \
-H "Authorization: Bearer $SURSA_SOURCE_KEY" \
-H "Idempotency-Key: sync-7-batch-1" \
-H "Content-Type: application/json" \
-d '{
"sync_number": 7,
"documents": [
{"external_id": "faq-shipping", "title": "Shipping", "content_type": "markdown",
"content": "# Shipping\n\nWe ship worldwide within 5 days.", "path": ["Support"]},
{"external_id": "faq-refunds", "title": "Refunds", "content_type": "html",
"content": "<p>Refunds take 14 days.</p>", "path": ["Support", "Billing"],
"permissions": {"groups": ["Support"]}, "metadata": {"article_id": "1042"}}
]
}'Vastuses on iga dokumendi tulemus samas järjekorras, milles need saatsite:
{
"results": [
{"external_id": "faq-shipping", "result": "unchanged", "status": "indexed", "card_id": "8c1d…", "version": "5e0f…"},
{"external_id": "faq-refunds", "result": "updated", "status": "pending", "card_id": "3f2c…", "version": "a91b…"}
]
}
| Väli | Tähendus |
|---|---|
result | Mis dokumendiga nüüd juhtus: created, updated, unchanged, deleted, not_found, error või skipped (atomaarses partiis, mida ei rakendatud). |
status | Kus dokument on teel kaardiks saamiseni: pending, processing (kaart on kirjutatud ja seda indekseeritakse), indexed, failed või removed. |
card_id | Dokumendi kaart, kui see on juba olemas. |
version | Sisu ja väljade räsi. Uuesti saadetud samal dokumendil on sama versioon ja tulemus unchanged. |
error, reason | Miks dokument ebaõnnestus. reason on püsiv kood: content_invalid, file_rejected, too_large, limit_reached, index_failed või batch_rejected (atomaarse partii mõni teine dokument ebaõnnestus). |
Vaikimisi rakendatakse partii iga dokumenti eraldi: üks vigane dokument ei peata teisi.
Dokumente, mis ei ole pärast viimast sünkroonimist muutunud, ei pea uuesti saatma. Kinnitage need ID järgi päringuga
POST /v1/push/sources/{source_id}/syncs/{sync_number}/touch, kuni 1000
ID-d päringu kohta, et täielik vastavusse viimine need alles jätaks:
curl -X POST https://api.sursa.com/v1/push/sources/42/syncs/7/touch \
-H "Authorization: Bearer $SURSA_SOURCE_KEY" \
-H "Content-Type: application/json" \
-d '{"external_ids": ["faq-contact", "faq-hours"]}'3. Sulgege
POST /v1/push/sources/{source_id}/syncs/{sync_number}/close lõpetab
sünkroonimise:
curl -X POST https://api.sursa.com/v1/push/sources/42/syncs/7/close \
-H "Authorization: Bearer $SURSA_SOURCE_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "complete"}'status | Mõju |
|---|---|
complete | Täielik vastavusse viimine. Arhiveeritakse iga allika dokument, mida selles sünkroonimises ei saadetud ega kinnitatud. Kasutage seda ainult siis, kui saatsite kõik. |
complete_incremental | Rakendab saadetu ega arhiveeri midagi. |
failed | Ei arhiveeri midagi ja säilitab juba saadetu. Lisage logi jaoks reason (näiteks API_ERROR) ja error_details. |
Sulgege olekuga failed alati, kui teie eksport peatub poolel teel: complete pärast osalist eksporti arhiveeriks kõik
dokumendid, milleni te ei jõudnud. Sama sulgemise kordamine tagastab sama tulemuse.
Pärast sulgemist muudab Sursa dokumendid umbes minuti jooksul kaartideks. Allika lehel on näha iga sünkroonimine koos
saadetud ja arhiveeritud dokumentide arvuga ning GET /v1/push/sources/{source_id}/syncs/{sync_number}
tagastab samad loendurid.
Inkrementaalsed sünkroonimised
Täielike sünkroonimiste vahel saatke ainult muutunu:
- Avage väärtusega
"type": "incremental". - Saatke muutunud dokumendid ja pange eemaldatud dokumentide ID-d väljale
deletes(vt allpool). - Sulgege olekuga
complete_incremental.
Käivitage aeg-ajalt, näiteks kord nädalas, täielik sünkroonimine, et tabada kõik, mis inkrementaalsest käivitusest välja jäi.
Dokumentide kustutamine partiis
Partii võib koos kirjutatavate dokumentidega dokumente ka eemaldada. Loetlege nende ID-d väljal deletes:
{
"sync_number": 8,
"documents": [{"external_id": "faq-shipping", "title": "Shipping", "content": "…"}],
"deletes": ["faq-old-returns", "faq-fax"]
}
Iga kustutatud ID saab väljal results oma kirje, mille result on deleted või, kui allikas sellist dokumenti ei
ole, not_found. Sama ID uuesti kustutamine on ohutu.
Atomaarsed partiid
Mõni muudatus on mõttekas ainult koos teistega, näiteks dokument ja dokument, mis selle asendab. Saatke
"atomic": true ja partii rakendatakse kas täielikult või üldse mitte: kui mõni dokument ei läbi valideerimist, ei
rakendata partiist midagi ning vastus on 422 koodiga sources.push_batch_rejected ja iga dokumendi tulemusega
väljal error.details.results: ebaõnnestunud dokumentidel on error, teistel skipped.
{"sync_number": 8, "atomic": true, "documents": […], "deletes": ["faq-old-returns"]}
Ilma väljata atomic rakendatakse partii dokumendi kaupa. Kasutage atomaarseid partiisid seotud muudatuste jaoks ja
tavalisi partiisid hulglaadimiseks, kus üks vigane dokument ei tohiks ülejäänuid kinni hoida.
Iga dokumendi tulemuse kontrollimine
Partii vastus ütleb, kuidas iga dokument kirjutati. Kaardiks muutmine toimub hiljem, seega võib status olla veel
pending. Sünkroonimise nende dokumentide leidmiseks, millest ei saanud kaarte:
curl "https://api.sursa.com/v1/push/sources/42/syncs/7/documents?status=failed" \
-H "Authorization: Bearer $SURSA_SOURCE_KEY"Igal kirjel on external_id, title, status, card_id, version ja reason, ning loendit lehitsetakse
parameetriga cursor. status võtab vastu ka väärtused pending, processing, indexed ja removed.
Küsimise asemel võite lasta endale ka teatada: sündmused import.sync_completed (sünkroonimine on suletud ja
töödeldud, koos kokkuvõtlike arvudega) ja import.document_failed (dokumendist ei saanud kaarti, koos väärtusega
reason) saabuvad veebihaagi kaudu ja
sündmuste linti.
Korduskatsed
- Saatke iga päringuga
POSTpäisIdempotency-Key. Sama võtmega korratud partii tagastab esimese tulemuse. - Isegi ilma võtmeta ei muutu sama väärtusega
external_iddokument kunagi teiseks kaardiks: selle tulemus onunchangedvõiupdated. - Kui protsess peatub sünkroonimise keskel, avage uus sünkroonimine pärast vana aegumist või sulgege vana olekuga
failed, kui selle number on teil veel olemas, ja käivitage sünkroonimine uuesti.
Piirangud
| Piirang | Väärtus |
|---|---|
| Ühe dokumendi sisu | 5 MB |
| Fail ühe dokumendi päringus | 100 MB |
| Dokumente partiis | 500 |
| Partiipäringu keha | 50 MiB |
ID-sid päringus touch | 1000 |
| Dokumente allikas | Sõltub paketist: alates 100 000 |
| Avatud sünkroonimine | Vaikimisi 60 minutit, kuni 24 tundi |
Dokument, mis ületab allika dokumendilimiidi, ebaõnnestub partiis põhjusega limit_reached; üksiku dokumendi
päring saab vastuse 409 koodiga sources.push_too_many_documents.
Sageduspiirangud kehtivad nagu mis tahes muule päringule; vt Sageduspiirangud ja kvoodid.
Levinud vead
| Vastus | Põhjus | Mida teha |
|---|---|---|
401 sources.push_key_invalid | Võti on vale, tühistatud või kuulub teisele allikale. | Kontrollige võtit ja teel olevat allika ID-d. |
400 sources.push_document_invalid | Kohustuslik väli puudub või piirang on ületatud. | Parandage dokument; tavalises partiis ebaõnnestub ainult see dokument. |
409 sources.push_sync_open | Teine sünkroonimine on veel avatud. | Sulgege see või oodake, kuni see aegub. |
409 sources.push_sync_closed | Sünkroonimine on suletud või selle aeg on läbi. | Avage uus sünkroonimine; pikkade eksportide jaoks suurendage väärtust max_minutes. |
403 sources.feature_disabled | Allikad ei kuulu organisatsiooni paketti. | Pöörduge administraatori poole. |
429 | Päringuid on liiga palju. | Oodake päises Retry-After antud aeg ära; saatke vähem, kuid suuremaid partiisid. |