# Što ćete naučiti#
Ovaj vodič prikazuje ponovljive, production-safe obrasce za n8n Supabase Postgres automatizaciju: ingestiju webhooks događaja, RLS-sigurne upise, idempotentnost, upsert i pouzdanu sinkronizaciju.
Također ćete vidjeti konkretne SaaS back-office workflowe poput usmjeravanja leadova, subscription događaja, usklađivanja računa i obogaćivanja support ticketa, uz Postgres kao sustav zapisa (system of record).
Preporučena literatura ako ste novi u triggerima i dizajnu sinkronizacije:
- Osnove postavljanja webhooka: n8n webhook tutorial
- Robusni sync koncepti poput paginacije, CDC-a i deduplikacije: n8n data sync: CDC, pagination, deduplication
- Osnove API integracija: API integration guide
# Preduvjeti#
| Zahtjev | Verzija | Napomene |
|---|---|---|
| n8n | 1.40+ | Bilo koja novija verzija s dostupnim čvorovima Webhook, HTTP Request, Postgres i Supabase |
| Supabase | Current | Postgres s opcionalnim RLS-om, ovisno o obrascu |
| Postgres | 14+ | Radi i na 13+, ali 14+ je preporučen zbog operativnih alata |
| Sigurno spremište tajni | — | n8n credentials, environment varijable i ograničen pristup |
ℹ️ Napomena: Supabase je Postgres plus API sloj i auth. Za automatizaciju možete razgovarati sa Supabaseom preko REST-a, preko Supabase client API-ja ili izravno s Postgresom. Vaš izbor utječe na RLS ponašanje, performanse i operativni rizik.
# Arhitekturni izbori: Supabase API vs izravni Postgres#
Prva dizajnerska odluka je kako će se n8n povezati.
| Opcija povezivanja | Najbolje za | Prednosti | Nedostaci |
|---|---|---|---|
| Supabase REST API | Upise koji poštuju RLS, per-user politike | Dosljedno koristi RLS politike, jednostavan HTTP | Veći overhead, rate limitovi, više pokretnih dijelova |
| Supabase service role preko REST-a | Server-side back-office zadatke | Čisto zaobilazi RLS, jednostavnije od DB drivera | Veliki blast radius ako procuri, lako pretjerati s dozvolama |
| Izravna Postgres veza | High-volume sinkronizaciju, bulk upserts | Brzo, transakcijski, dobro za batch | Zaobilazi RLS osim ako ga implementirate u SQL-u, treba mrežni pristup |
Praktično pravilo:
- Ako workflow mora poštovati korisničke (user-level) pristupne politike, koristite Supabase REST s JWT-om ili namjenski RPC koji provodi logiku.
- Ako je workflow isključivo server-side i mora biti brz, koristite izravni Postgres s ulogama minimalnih privilegija ili uskim stored procedure API-jem.
🎯 Ključna poruka: Prvo optimizirajte ispravnost. Pouzdane automatizacije češće pucaju zbog dupliranih događaja, nedosljedne autorizacije i nedostajućih checkpointa nego zbog sirovog throughputa.
# Obrazac 1: Ingestija webhooka uz trajnu pohranu#
Većina SaaS alata isporučuje događaje putem webhooka i agresivno radi retry. Stripe radi retry danima ovisno o konfiguraciji, a mnogi CRM-ovi rade retry dok ne dobiju 2xx odgovor. Vaš workflow mora podnijeti duplikate i isporuke izvan redoslijeda.
Korak A: Primite i validirajte webhook#
Koristite n8n Webhook node, zatim validirajte signature ako provider to podržava. Validaciju držite strogom kako biste spriječili spoofane događaje.
Primjer provjere signaturea u n8n Code nodeu (generički HMAC obrazac):
const crypto = require('crypto');
const secret = $env.WEBHOOK_SECRET;
const payload = JSON.stringify($json.body ?? $json);
const signature = $json.headers?.['x-signature'];
const computed = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
if (computed !== signature) {
throw new Error('Invalid webhook signature');
}
return [{ json: { ok: true, body: $json.body ?? $json } }];Korak B: Prvo spremite raw event, pa tek onda procesirajte#
Trajna pohrana sprječava gubitak podataka kad downstream sustavi padnu. Spremite event sa stabilnim idempotency ključem i status poljem. Ovaj obrazac također omogućuje reprocessing i debugging.
Preporučena tablica:
| Stupac | Tip | Zašto je bitno |
|---|---|---|
| id | bigint ili uuid | Interni identifikator |
| source | text | Naziv providera, za rutiranje |
| event_id | text | ID događaja kod providera, jedinstven po provideru |
| idempotency_key | text | Za deduplikaciju kroz retry |
| received_at | timestamptz | Observability i SLA-ovi |
| payload | jsonb | Replay i audit |
| status | text | received, processed, failed |
| processed_at | timestamptz | Praćenje end-to-end latencije |
| error | text | Debug bez kopanja po logovima |
SQL za izradu tablice i enforcing dedupe:
create table if not exists webhook_events (
id bigserial primary key,
source text not null,
event_id text not null,
idempotency_key text not null,
received_at timestamptz not null default now(),
payload jsonb not null,
status text not null default 'received',
processed_at timestamptz,
error text
);
create unique index if not exists webhook_events_dedupe
on webhook_events (source, idempotency_key);U n8n-u, prvi DB upis treba biti insert koji smije sigurno pasti na conflict. Ako dođe do conflicta, event ste već obradili.
Ako u n8n-u koristite izravni Postgres, pokrenite:
insert into webhook_events (source, event_id, idempotency_key, payload)
values ($1, $2, $3, $4::jsonb)
on conflict (source, idempotency_key) do nothing
returning id;Ako returning id ne vrati nijedan red, zaustavite workflow i vratite 200 provideru.
💡 Savjet: Vratite 2xx odgovor brzo nakon trajne pohrane. Nemojte blokirati webhook odgovor downstream API pozivima. Time smanjujete retry providera i izbjegavate paralelne duplikate.
# Obrazac 2: Idempotency ključevi koji stvarno rade#
Idempotentnost propada kad su ključevi nestabilni ili previše granularni. Koristite provider ID-eve kad su dostupni, inače izvedite stabilan ključ.
Dobre opcije za idempotency ključ#
| Tip izvora | Preporučeni ključ | Zašto |
|---|---|---|
| Stripe-like event sustavi | provider event ID | Garantirano jedinstven po događaju |
| Webhook bez event ID-a | hash kanonikalnog payloada + vremenski prozor | Radi ako je kanonikalizacija dosljedna |
| Poll-based sync jobovi | external object ID + updated_at | Sprječava duplikate kroz stranice |
| Akcije pokrenute od ljudi | request ID iz vašeg API gatewaya | Prati korisnički zahtjev kroz retry |
Robustan fallback ključ je hash kanonikalnog stringa, ali mora ignorirati nestabilna polja poput delivery timestampova.
Primjer kanonikalnog hasha:
const crypto = require('crypto');
const source = 'examplecrm';
const type = $json.body.type;
const objectId = $json.body.data?.id;
const updatedAt = $json.body.data?.updated_at;
const base = `${source}:${type}:${objectId}:${updatedAt}`;
const idempotencyKey = crypto.createHash('sha256').update(base).digest('hex');
return [{ json: { idempotencyKey } }];⚠️ Upozorenje: Nemojte koristiti puni JSON payload “kako jest” za hashiranje. Redoslijed polja, whitespace i dinamički ključevi mogu se mijenjati između retryja i razbiti deduplikaciju.
# Obrazac 3: Upserts za vanjske objekte uz stabilna unique ograničenja#
Većina automatizacija mapira vanjske objekte u vaše Postgres tablice: kontakte, kompanije, račune, tickete, subscriptione.
Pouzdan obrazac je:
- 1Spremite external ID u namjenski stupac.
- 2Dodajte unique index na
(provider, external_id)ili samoexternal_idako je globalno jedinstven. - 3Upsertajte po tom ključu.
Primjer tablice kontakata:
| Stupac | Tip | Napomene |
|---|---|---|
| id | uuid | Interni |
| provider | text | crm_a, crm_b |
| external_id | text | ID objekta kod providera |
| text | Normaliziran | |
| name | text | Prikaz |
| raw | jsonb | Opcionalno, za sljedivost |
| updated_at | timestamptz | Za inkrementalni sync |
Indeks:
create unique index if not exists contacts_provider_external
on contacts (provider, external_id);Upsert:
insert into contacts (provider, external_id, email, name, raw, updated_at)
values ($1, $2, $3, $4, $5::jsonb, now())
on conflict (provider, external_id)
do update set
email = excluded.email,
name = excluded.name,
raw = excluded.raw,
updated_at = now()
returning id;Ovo sigurno pokriva retry i događaje izvan redoslijeda, sve dok definirate kako rješavate konflikte.
Rješavanje konflikata: last-write-wins vs version-aware#
Za mnoge back-office entitete, last-write-wins je prihvatljiv. Za financijske objekte radije koristite version-aware logiku.
Ako vanjski sustav daje updated_at ili broj verzije, enforcing:
insert into invoices (provider, external_id, amount_cents, status, external_updated_at)
values ($1, $2, $3, $4, $5)
on conflict (provider, external_id)
do update set
amount_cents = excluded.amount_cents,
status = excluded.status,
external_updated_at = excluded.external_updated_at
where invoices.external_updated_at is null
or excluded.external_updated_at >= invoices.external_updated_at;Time sprječavate da stariji događaji prepišu novije stanje.
# Obrazac 4: RLS-sigurni upisi bez pretjeranog korištenja service role#
Row Level Security je prednost, ali automatizacije ga mogu slučajno zaobići ili “razbiti”.
Opcija A: Koristite Supabase REST s korisničkim JWT-om#
Ovo je idealno kada automatizacije rade u ime korisnika. Na primjer: “Kad korisnik pošalje formu, kreiraj zapis vidljiv samo njihovom workspaceu.”
U n8n-u:
- Spremite JWT u workflow context ili ga dohvatite preko vašeg backenda.
- Zovite Supabase REST endpointove s
Authorization: Beareriapikey.
Tako vaše RLS politike ostaju na snazi.
Opcija B: Koristite service role key, ali suzite blast radius#
Service role zaobilazi RLS. To je ispravno za server-side zadatke poput:
- noćnog usklađivanja (reconciliation)
- admin back-office akcija
- ingestije third-party webhooka koji nisu user-scoped
Kontrole koje ovo čine sigurnijim:
- izolirajte ključ u namjenski n8n credential kojem pristup imaju samo specifični workflowi
- ograničite tko može uređivati workflowe
- rotirajte ključeve i logirajte korištenje
- preferirajte stored procedure sa strogim allow-listama umjesto slobodnih upisa u tablice
⚠️ Upozorenje: Ako service role key koristite kao general-purpose “piši bilo gdje”, jedan procurjeli credential postaje potpuni breach baze. Tretirajte ga kao root pristup.
Opcija C: Izravna Postgres uloga s minimalnim privilegijama#
Umjesto service role, kreirajte Postgres ulogu za automatizaciju. Dajte pristup samo potrebnim tablicama i operacijama.
Primjer:
create role n8n_automation login password 'replace_me';
grant usage on schema public to n8n_automation;
grant select, insert, update on table contacts, invoices, webhook_events to n8n_automation;
grant usage, select on all sequences in schema public to n8n_automation;Ovo po defaultu ne enforcea RLS, ali značajno smanjuje izloženost u odnosu na superuser-like pristup.
Opcija D: Stored procedure za “sigurne upise”#
Snažan kompromis je: n8n smije pozivati samo mali set RPC funkcija. Svaka funkcija validira ulaze, provjerava invarijante i piše u dopuštene tablice.
Primjer funkcije za kreiranje zadatka u workspaceu s guardrailovima:
create or replace function create_backoffice_task(
p_workspace_id uuid,
p_title text,
p_payload jsonb
) returns uuid
language plpgsql
as $$
declare
v_task_id uuid;
begin
if length(p_title) < 3 then
raise exception 'Title too short';
end if;
insert into tasks (workspace_id, title, payload)
values (p_workspace_id, p_title, p_payload)
returning id into v_task_id;
return v_task_id;
end;
$$;Zatim dodijelite samo execute:
grant execute on function create_backoffice_task(uuid, text, jsonb) to n8n_automation;# Obrazac 5: Pouzdan sync uz checkpointove, paginaciju i dedup#
Kod sinkronizacije objekata iz API-ja u Postgres problemi s pouzdanošću su uvijek isti:
- bugovi u paginaciji stvaraju missing zapise
- retry stvara duplikate
- rate limitovi uzrokuju djelomične runove
- dugi runovi padaju bez checkpointova
Osnovna sync petlja#
- 1Učitajte zadnji checkpoint iz Postgresa.
- 2Dohvatite stranicu zapisa iz vanjskog API-ja koristeći
updated_sincei cursor. - 3Upsertajte svaki zapis po stabilnom vanjskom ključu.
- 4Spremite novi checkpoint tek nakon što je stranica commitana.
- 5Ponavljajte dok ne završite.
Minimalna tablica checkpointova:
| Stupac | Tip | Svrha |
|---|---|---|
| source | text | Koji sustav |
| entity | text | contacts, invoices |
| cursor | text | API cursor ili page token |
| updated_since | timestamptz | Inkrementalni filter |
| last_run_at | timestamptz | Observability |
SQL:
create table if not exists sync_checkpoints (
source text not null,
entity text not null,
cursor text,
updated_since timestamptz,
last_run_at timestamptz not null default now(),
primary key (source, entity)
);Ažurirajte je transakcijski nakon obrade:
insert into sync_checkpoints (source, entity, cursor, updated_since, last_run_at)
values ($1, $2, $3, $4, now())
on conflict (source, entity)
do update set
cursor = excluded.cursor,
updated_since = excluded.updated_since,
last_run_at = now();Za dublje smjernice implementacije paginacije i deduplikacije u n8n-u, koristite: n8n data sync: CDC, pagination, deduplication
💡 Savjet: Koristite mali lookback prozor za
updated_since, npr. 5 do 15 minuta, i oslonite se na upsert kako biste pokrili preklapanja. Ovo je jednostavan način da se nosite s clock skewom i zakašnjelim događajima.
# Obrazac 6: Outbox obrazac za pouzdano “upiši pa obavijesti”#
Čest SaaS back-office workflow je:
- upisati zapis u Postgres
- obavijestiti drugi sustav poput Slacka, emaila, CRM-a ili internog API-ja
Ako to radite u jednom workflowu korak-po-korak, pad u notify koraku ostavlja djelomično stanje. Outbox obrazac čini side-effecte ponovljivima (replayable).
Kako radi#
- 1Vaš DB upis u istoj transakciji također umeće red “outbox poruke”.
- 2Zaseban n8n workflow procesira pending outbox redove i označava ih kao poslane.
Outbox tablica:
| Stupac | Tip | Napomene |
|---|---|---|
| id | bigserial | Redoslijed |
| topic | text | slack_alert, crm_sync |
| payload | jsonb | Tijelo poruke |
| status | text | pending, sent, failed |
| attempts | int | Kontrola retryja |
| next_attempt_at | timestamptz | Backoff |
| created_at | timestamptz | Auditing |
SQL:
create table if not exists outbox (
id bigserial primary key,
topic text not null,
payload jsonb not null,
status text not null default 'pending',
attempts int not null default 0,
next_attempt_at timestamptz not null default now(),
created_at timestamptz not null default now()
);
create index if not exists outbox_pending_idx
on outbox (status, next_attempt_at, id);n8n worker workflow:
- Cron trigger svakih 1 do 5 minuta
- Select
pendinggdje jenext_attempt_atdospio - Slanje poruka
- Update statusa u
sentilifaileduz eksponencijalni backoff
Backoff formula koju koristite u kodu: delay_minutes = min(60, 2 ^ attempts)
Ovaj obrazac smanjuje support incidente jer su failurei vidljivi i oporavljivi.
# Tipični SaaS back-office workflowi koje možete kopirati#
Ovi primjeri pretpostavljaju da je Postgres vaš system of record, a n8n orkestrira vanjske pozive.
Workflow A: Webhook za intake leadova u CRM uz dedup i enrichment#
Koristite kad marketing site šalje leadove, a vi želite čiste CRM podatke.
Koraci:
- 1Webhook prima lead.
- 2Insert u
webhook_eventss idempotency ključem. - 3Normalizirajte email i domain kompanije.
- 4Upsert u tablicu
leadspo(email)ili(provider, external_id). - 5Enrich preko Clearbit-like API-ja ili internog enrichment endpointa.
- 6Kreirajte ili ažurirajte CRM kontakt.
- 7Zapišite trace red u
integration_logs.
Ključni dizajn tablica:
| Tablica | Unique ključ | Zašto |
|---|---|---|
| leads | Sprječava duplikate zbog retryja forme | |
| integration_logs | source + idempotency_key | Jedan audit red po eventu |
Workflow B: Stripe subscription događaji u Supabase uz RLS-siguran pristup#
Koristite kad vašoj aplikaciji treba točan status pretplate, ali morate izbjeći izlaganje privilegiranih credentiala.
Preporučeni pristup:
- Ingestija i pohrana webhooka preko izravne Postgres uloge.
- Business updateovi preko stored procedure koja dira samo billing tablice.
- Aplikacija čita billing tablice kroz RLS politike.
Time automatizacija ostaje privilegirana samo gdje treba, a front-end ostaje ograničen.
Workflow C: Sync usklađivanja računa iz accounting alata#
Koristite kad financije trebaju točno stanje “paid”.
Koraci:
- 1Cron trigger noću plus hourly inkrementalni sync.
- 2Učitaj checkpoint.
- 3Dohvati ažurirane račune.
- 4Upsertaj račune version-aware po
external_updated_at. - 5Ako se status promijenio u paid, umetni outbox red za downstream akcije.
Time uklanjate ručna spreadsheet usklađivanja i smanjujete billing support tickete.
Workflow D: Obogaćivanje i rutiranje support ticketa#
Koristite kad support želi kontekst unutar ticketing alata.
Koraci:
- 1Webhook na novi ticket.
- 2Deduplikacija eventa.
- 3Upit u Postgres za plan korisnika, MRR, zadnji login, otvorene račune.
- 4Dodajte tagove ili prioritet preko helpdesk API-ja.
- 5Kreirajte interni task red za engineering ako je prag ozbiljnosti (severity) premašen.
ℹ️ Napomena: U mnogim SaaS organizacijama, ticket enrichment je jedna od automatizacija s najbržim ROI-jem. Prosječni trošak support agenta u EU je tipično u rasponu desetaka eura po satu (fully loaded), pa ušteda i 2 do 4 minute po ticketu na 500 ticketa mjesečno postaje značajna.
# Operativni guardrails: Observability, retry i kvaliteta podataka#
Logiranje koje pomaže da debuggate u minutama#
Logirajte strukturirane podatke, ne tekstualne “blobove”:
- source
- entity
- idempotency_key
- external_id
- status
- duration_ms
- error_code
Ako spremate webhook payloadove, spremite i:
- verziju payload sheme
- redaktiranu (redacted) varijantu payloada ako sadrži PII
Retry strategija: što retryati, a gdje stati#
| Tip greške | Retry? | Strategija |
|---|---|---|
| 429 rate limit | Da | Pričekajte prema provider headerima, zatim retry |
| 5xx outage providera | Da | Exponential backoff, ograničite broj pokušaja |
| 4xx validation error | Ne | Označite kao failed i alertajte |
| DB unique violation na dedupe insertu | Ne | Tretirajte kao već obrađeno |
Provjere kvalitete podataka koje možete automatizirati#
- Odbacite emailove koji ne prolaze osnovne format checkove
- Normalizirajte brojeve telefona i country codeove
- Enforceajte očekivane valute i integer cente
- Koristite foreign key constraintove gdje je moguće
Za higijenu API integracija, uključujući timeoutove i backoff prakse, pogledajte: API integration guide
# Sigurnosni checklist za n8n Supabase Postgres automatizaciju#
| Kontrola | Minimalni standard | Zašto je bitno |
|---|---|---|
| Scope credentiala | Odvojeni credentali po grupi workflowa | Ograničava blast radius |
| Pohrana tajni | n8n credentials + environment varijable | Izbjegava hardkodiranje tajni u nodeovima |
| Mrežni pristup | Ograničite DB na n8n IP ili privatnu mrežu | Smanjuje izloženost |
| Dozvole | DB uloga minimalnih privilegija ili execute na stored procedure | Sprječava “upiši bilo gdje” |
| Auditability | Spremite webhook_events i outbox tablice | Omogućuje replay i incident response |
| Rotacija ključeva | Kvartalno ili nakon promjena osoblja | Praktičan kompromis |
⚠️ Upozorenje: Ako je n8n izložen internetu, zaključajte ga. Stavite ga iza SSO-a, ograničite editor pristup i onemogućite public workflow execution osim ako koristite signed webhooks i strogu validaciju.
# Ključne poruke#
- Prvo spremite webhook payloadove u Postgres s unique
(source, idempotency_key)constraintom, a zatim procesirajte asinkrono kako biste preživjeli retry i outage. - Koristite stabilne idempotency ključeve i version-aware upsert kako duplikati i out-of-order updateovi ne bi korumpirali stanje.
- Preferirajte Postgres uloge minimalnih privilegija ili stored procedure za upise iz automatizacija; Supabase service role key koristite samo za usko ograničene server-side zadatke.
- Implementirajte pouzdan sync s checkpointovima, cursor paginacijom, overlap prozorima i upsertom tako da su ponovna pokretanja sigurna i potpuna.
- Koristite outbox tablicu kako bi notifikacije i downstream side-effecti bili replayable umjesto krhkih lanaca “upiši pa zovi API”.
# Zaključak#
Ovi obrasci čine n8n Supabase Postgres automatizaciju predvidljivom: retry ne duplicira podatke, webhooks se ne gube, a RLS ne postaje blokada ni sigurnosna rupa.
Ako želite da pregledamo vaše postojeće workflowe, dizajniramo RLS-sigurnu strategiju upisa ili implementiramo pouzdan sync s checkpointovima i outbox replayem, kontaktirajte Samioda i pomoći ćemo vam isporučiti automatizaciju koja ostaje ispravna i u stvarnim production failure modovima.
FAQ
Više iz kategorije Poslovna automatizacija
Sve →Izgradnja workflowova AI agenata u n8n-u: RAG, korištenje alata i zaštitne ograde za produkciju
Praktičan end-to-end vodič za n8n AI agent RAG workflow: unos dokumenata, segmentiranje i izrada embeddinga, pohrana u vektorsku bazu, upit s LLM-om te sigurno puštanje u rad uz PII kontrole, obranu od prompt-injectiona, ograničenja troškova i ljudska odobrenja.
n8n web scraping i detekcija promjena: pouzdano pratite stranice, otkrivajte ažuriranja i pokrećite workflowe
Praktičan vodič za 2026. o n8n monitoringu detekcije promjena pri web scrapingu: dohvat i parsiranje HTML-a, normalizacija sadržaja, otkrivanje smislenih promjena uz hashing i diffing, izbjegavanje lažnih pozitivnih rezultata te pouzdano slanje upozorenja u Slack ili Email.
Pouzdana sinkronizacija podataka u n8n: paginacija, inkrementalna učitavanja, deduplikacija i CDC
Izgradite produkcijski n8n workflow za sinkronizaciju podataka uz cursor paginaciju, inkrementalne timestampove, idempotency ključeve, pohranu dedup ključeva i CDC obrasce — uz monitoring metrike za otkrivanje drifta.
Trebate pomoć s projektom?
Gradimo prilagođena rješenja koristeći tehnologije iz ovog članka. Senior tim, fiksne cijene.
Povezani članci
Pouzdana sinkronizacija podataka u n8n: paginacija, inkrementalna učitavanja, deduplikacija i CDC
Izgradite produkcijski n8n workflow za sinkronizaciju podataka uz cursor paginaciju, inkrementalne timestampove, idempotency ključeve, pohranu dedup ključeva i CDC obrasce — uz monitoring metrike za otkrivanje drifta.
Izgradnja workflowova AI agenata u n8n-u: RAG, korištenje alata i zaštitne ograde za produkciju
Praktičan end-to-end vodič za n8n AI agent RAG workflow: unos dokumenata, segmentiranje i izrada embeddinga, pohrana u vektorsku bazu, upit s LLM-om te sigurno puštanje u rad uz PII kontrole, obranu od prompt-injectiona, ograničenja troškova i ljudska odobrenja.
n8n web scraping i detekcija promjena: pouzdano pratite stranice, otkrivajte ažuriranja i pokrećite workflowe
Praktičan vodič za 2026. o n8n monitoringu detekcije promjena pri web scrapingu: dohvat i parsiranje HTML-a, normalizacija sadržaja, otkrivanje smislenih promjena uz hashing i diffing, izbjegavanje lažnih pozitivnih rezultata te pouzdano slanje upozorenja u Slack ili Email.