Integracje — Konfiguracja krok po kroku
Praktyczny przewodnik po konfigurowaniu kazdej integracji zewnetrznej w SerwisRun — OAuth, tokeny API, klucze, webhooki. Zawiera wszystkie kroki z wyjasnieniem co robic i gdzie szukac wartosci.
Wersja 1.1·Opublikowano: 2026-05-08
Glowny ekran konfiguracji: Panel Administracyjny → Integracje (/settings/integrations) — 5 zakladek: Email i Kalendarz / Cloud Storage / Sztuczna inteligencja / KSeF / Integracje dostawcow. Kazda zakladka ma przycisk „Testuj polaczenie".
1 Google Calendar
Ekran konfiguracji integracji dane zanonimizowane — 5 zakladek.
Cel: Automatyczne tworzenie zdarzen w kalendarzu technikow dla konserwacji / interwencji. Wykrywanie konfliktow (FreeBusy API). Synchronizacja statusow.
Model integracji
Shared OAuth2 — jedno konto Google autoryzowane przez admina. Per-technik kalendarz przez pole users.google_calendar_email. Technik musi udostepnic swoj kalendarz kontu systemowemu z uprawnieniem „Wprowadzanie zmian w wydarzeniach".
Krok po kroku
Etap A: Utworzenie projektu w Google Cloud Console
- 1Przejdz do console.cloud.google.com
- 2Utworz nowy projekt (np. „SerwisRun-Prod")
- 3W menu bocznym wybierz APIs & Services → Library
- 4Wlacz nastepujace API:
- Google Calendar API
- Google People API (opcjonalne — dla kontaktow)
- Admin SDK (dla avatarow z Directory)
Etap B: Utworzenie OAuth Client ID
- 1Menu boczne → APIs & Services → Credentials
- 2Klik „Create Credentials" → OAuth 2.0 Client ID
- 3Application type: Web application
- 4Authorized redirect URIs:
https://api.serwis.cloud/api/settings/integrations/google/callback
- 5Skopiuj Client ID i Client Secret
Etap C: Konfiguracja w SerwisRun
- 1Zaloguj jako admin → Panel Administracyjny → Integracje → Email i Kalendarz
- 2Wklej Client ID i Client Secret
- 3Klik „Autoryzuj z Google" → nastepuje redirect na ekran zgody Google
- 4Zaloguj sie kontem systemowym (np.
[email protected]) i zatwierdz scope
- 5Powrot do SerwisRun → status: „Polaczono"
- 6Klik „Testuj polaczenie" → test kalendarza (POST
/settings/integrations/test-calendar)
Etap D: Udostepnienie kalendarzy przez technikow
Wazne: Kazdy technik musi udostepnic swoj Google Calendar kontu systemowemu (
[email protected]) z uprawnieniem „Wprowadzanie zmian w wydarzeniach".
- Technik loguje sie do calendar.google.com
- Ustawienia → Konkretny kalendarz → „Udostepnij wybranym osobom"
- Dodaje adres systemowy z uprawnieniem „Dokonywanie zmian w wydarzeniach"
- Admin w SerwisRun: Uzytkownicy → edycja uzytkownika → pole
google_calendar_email → wpisuje adres email technika
Wskazowka: Po udostepnieniu system automatycznie pobiera avatar technika (3 strategie fallback: Directory API → Contacts by email → Contacts by name).
2 Google Drive (cloud storage)
Cel: Przechowywanie zalacznikow (skany umow, protokoly PDF, zdjecia z napraw) w strukturze SerwisRun/{moduł}/{identyfikator}/.
Konfiguracja
- 1W Google Cloud Console (ten sam projekt) wlacz Google Drive API
- 2Utworz Service Account:
- APIs & Services → Credentials → „Create Service Account"
- Nadaj role
roles/storage.objectAdmin
- Utworz klucz JSON → pobierz plik
- 3W SerwisRun: Integracje → Cloud Storage → Google Drive
- 4Wybierz providera: „Google Drive"
- 5Wklej zawartosc pliku JSON (credentials) w pole „Service Account JSON"
- 6Utworz w Google Drive folder
SerwisRun i udostepnij go service accountowi (z email z pliku JSON) jako „Editor"
- 7Klik „Testuj polaczenie" — system utworzy testowy plik
Struktura folderow
SerwisRun/
├── Kosztorysy/{Skrocona_nazwa_klienta}/{rok}/
├── Umowy/{klient}/{rok_startu}/{nr_umowy}/{kategoria}/
├── Protokoly konserwacji/{klient}/{rok}/
├── Protokoly naprawy/{klient}/{rok}/
├── Zgloszenia/{klient}/{rok}/{nr_zgloszenia}/
├── Klienci/{klient}/{rok}/
├── Kadry/{Imie Nazwisko}/
├── Samochody/{nr_rejestracyjny}/
└── Obiekty-Materialy/
├── Wyposazenie/{kategoria}/
└── Materialy/{kategoria}/
3 Gmail API (wysylka emaili)
Cel: Wysylka protokolow, kosztorysow, powiadomien o fakturach przez Gmail API (zamiast SMTP).
- 1Wlacz Gmail API w Google Cloud Console (ten sam projekt co Calendar)
- 2Uzyj istniejacego OAuth Client ID (z kroku 1.B)
- 3W SerwisRun: Integracje → Email i Kalendarz → Gmail
- 4Klik „Autoryzuj" — dodaje scope
https://www.googleapis.com/auth/gmail.send
- 5Ustaw adres wysylajacy (
from_email) — moze byc alias (wymaga konfiguracji w ustawieniach Gmaila „Send mail as...")
- 6Test: „Wyslij testowy email"
Alternatywa: Jesli nie masz Google Workspace, mozesz uzyc Resend API (3000 emaili/mies. za darmo) lub SMTP (Postmark, SendGrid). Konfiguracja w tej samej zakladce.
Cel: Import i eksport kontaktow z Google Contacts — synchronizacja z baza contacts w SerwisRun.
- 1Wlacz People API w Google Cloud Console
- 2W SerwisRun: Kontakty → Import/Eksport → „Z Google Contacts"
- 3Klik „Autoryzuj" — dodaje scope
contacts.readonly / contacts (dla eksportu)
- 4Wybierz kontakty do importu (checkbox na liscie)
- 5Klik „Importuj" — system dopasowuje po email, tworzy lub aktualizuje rekordy
5 OneDrive (Microsoft 365)
Cel: Alternatywa do Google Drive — przechowywanie dokumentow w OneDrive (konto firmowe lub osobiste).
Krok po kroku
- 1Przejdz do portal.azure.com (Azure Portal)
- 2Azure Active Directory → App Registrations → New registration
- 3Nazwa: „SerwisRun", Redirect URI:
https://api.serwis.cloud/api/settings/integrations/microsoft/callback
- 4Po utworzeniu: sekcja API Permissions → dodaj:
Files.ReadWrite.All
User.Read
offline_access (dla refresh tokenow)
- 5Sekcja Certificates & secrets → utworz „Client secret" → skopiuj wartosc (jednorazowo widoczna!)
- 6Skopiuj Application (client) ID i Directory (tenant) ID
- 7W SerwisRun: Integracje → Cloud Storage → OneDrive
- Wklej Client ID, Tenant ID, Client Secret
- Klik „Autoryzuj z Microsoft"
- Zaloguj kontem firmowym (np.
[email protected])
- 8Klik „Testuj polaczenie" — system tworzy folder
SerwisRun/
Uwaga: W Azure AD moze byc wymagana zgoda administratora na scope (grant admin consent). Jesli widzisz blad „Invalid scope" — wroc do App Registrations i kliknij „Grant admin consent for tenant".
Cel: Import/eksport kontaktow z Outlook przez Microsoft Graph API.
- 1Uzyj istniejacej rejestracji Azure AD (z kroku 5)
- 2Dodaj scope
Contacts.ReadWrite w API Permissions
- 3W SerwisRun: Kontakty → Import/Eksport → „Z Outlook"
- 4Reszta jak przy Google Contacts
7 Google Maps (Directions + Geocoding)
Cel: Kalkulacja rzeczywistej odleglosci drogowej i czasu dojazdu miedzy oddzialem a obiektem. Geokodowanie adresow do wspolrzednych GPS.
Wymagane API
- Directions API — trasa i czas dojazdu
- Geocoding API — adres → GPS
- Maps JavaScript API — map w przegladarce (opcjonalne)
- Distance Matrix API — wiele par adresow naraz
- Places API (New) — autocomplete adresow
Krok po kroku
- 1W Google Cloud Console wlacz powyzsze API
- 2APIs & Services → Credentials → „Create Credentials" → API Key
- 3Zabezpiecz klucz: „Restrict Key" → ograniczenie do wybranych API + ograniczenia HTTP referrer (np.
*.serwis.cloud/*)
- 4W SerwisRun: Integracje → Google Maps → wklej klucz
- 5Klik „Testuj polaczenie" — wykonuje testowa trase Warszawa → Krakow
- 6Ustaw GPS oddzialow: Dane firmy → Oddzialy → Wspolrzedne GPS
Uzycie w systemie
Przy tworzeniu/edycji obiektu serwisowego (/service-sites) pole „Odleglosc z oddzialu" pokazuje przycisk „Oblicz". Po klikniciu:
- System geokoduje adres obiektu → GPS (
service_sites.latitude/longitude)
- Wyznacza trase z GPS oddzialu do GPS obiektu (Directions API)
- Zapisuje
distance_to_branch_km i travel_time_minutes
- Wyswietla badge: „trasa drogowa" (zielony) lub „szacunek" (niebieski — fallback Haversine)
Koszty: Google Maps jest platne po limicie darmowego tier'u (~28 000 zapytan/mies.). Monitoruj wykorzystanie w Google Cloud Console. Fallback Haversine (linia prosta × 1.3, ~60 km/h) dziala bez API.
8 NIP Lookup + Biala Lista VAT (MF)
Cel: Pobieranie danych podatnika po NIP z Ministerstwa Finansow. Weryfikacja statusu VAT (aktywny / nieaktywny).
API
- Endpoint:
https://wl-api.mf.gov.pl/api/search/nip/{nip}
- Autoryzacja: BRAK — publiczne API
- Limit: 10 zapytan / minute
Konfiguracja
Nic nie trzeba konfigurowac! NIP Lookup dziala od razu. System wywoluje API z backendu — brak ryzyka ujawnienia kluczy.
Uzycie
W kreatorze klienta (/clients/wizard) i dostawcy (/suppliers/wizard) pole NIP ma przycisk „Pobierz z MF":
- Wpisz NIP (10 cyfr)
- Klik „Pobierz z MF"
- System wypelnia: nazwe pelna, nazwe skrocona, adres, REGON, KRS, status VAT, numer konta bankowego
- Badge statusu: Aktywny VAT / Nieaktywny VAT
9 KSeF — Krajowy System e-Faktur
Cel: Wysylka faktur wystawionych do KSeF. Import faktur zakupu z KSeF. Od 2026-07 obowiazkowe dla duzych podatnikow.
Srodowiska
| Srodowisko | URL API | Uzycie |
| Test | https://ksef-test.mf.gov.pl | Dev / testy |
| Produkcja | https://ksef.mf.gov.pl | Realne faktury |
Uwierzytelnianie — 2 opcje
Opcja A — Token autoryzacyjny (latwiejsze)
- 1Zaloguj sie do KSeF przez Profil Zaufany lub certyfikat kwalifikowany
- 2Wygeneruj token autoryzacyjny
- 3Skopiuj token
- 4W SerwisRun: Integracje → KSeF → wklej token + NIP firmy
Opcja B — Certyfikat kwalifikowany (produkcja wiekszych firm)
- 1Uzyj certyfikatu od zaufanego dostawcy (np. Certum, KIR)
- 2Wykonaj initSessionSigned na endpoint KSeF z podpisem XML XAdES
- 3Otrzymasz SessionToken waznie ~2h
- 4W SerwisRun: upload certyfikatu jako .p12/.pfx + haslo
Od 2026-07 KSeF jest obowiazkowy dla podatnikow z obrotem > 200M PLN. Dla mniejszych firm termin obowiazkowy to 2026 lub 2027. Zalecamy wdrozenie „Test" w SerwisRun i testowanie przed deadline.
10 Claude API (Anthropic)
Cel: Wszystkie funkcje AI w systemie — chatbot, kategoryzacja zgloszen, generowanie protokolow, kosztorysy, analiza dokumentow, identyfikacja materialow (vision).
Krok po kroku
- 1Zaloz konto na console.anthropic.com
- 2Dodaj metode platnosci (karta kredytowa)
- 3API Keys → Create Key
- 4Skopiuj klucz (format:
sk-ant-api03-...)
- 5W SerwisRun: Integracje → Sztuczna inteligencja → Claude API
- Wklej
ANTHROPIC_API_KEY
- Ustaw
AI_DAILY_TOKEN_LIMIT (domyslnie 100 000)
- Ustaw
AI_DAILY_REQUEST_LIMIT (domyslnie 50)
- 6Klik „Testuj polaczenie" — wysyla probne zapytanie
Modele uzywane
| Model | ID | Zastosowanie |
| Claude Sonnet 4.6 | claude-sonnet-4-6 | Zlozone zadania: chatbot, protokoly, kosztorysy, analiza dokumentow, vision |
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 | Proste zadania: kategoryzacja, analiza importu — oszczedza koszty |
Optymalizacja kosztow: System automatycznie wybiera model wg zadania (Haiku dla prostych, Sonnet dla zlozonych). Monitor wykorzystania: Panel Administracyjny → Integracje → AI → „Statystyki uzycia".
11 Delta-Poznan (katalog dystrybutora)
Import katalogu Delta-Poznan — mapowanie kategorii, SSE progress.
Cel: Import katalogu ~10 000 produktow z dystrybutora Delta-Poznan. Synchronizacja stanow magazynowych i cen zakupu.
Wymagania
- Konto B2B w Delta-Poznan (sklep.delta.poznan.pl)
- Token API (wymagany kontakt z opiekunem handlowym)
Krok po kroku
- 1W SerwisRun: Integracje → Integracje dostawcow → Delta-Poznan
- 2Wklej token API (Bearer)
- 3Klik „Testuj polaczenie"
- 4Przejdz do Ustawienia → Import Delta
- 5Krok A — Mapowanie kategorii:
- Klik „Pobierz kategorie" → lista kategorii Delta
- Klik „AI auto-mapowanie" (opcjonalne) → Claude sugeruje mapowania
- Recznie przypisz kazda kategorie Delta do lokalnej
material_categories
- Zapisz mapowanie
- 6Krok B — Import katalogu:
- Wybierz kategorie do importu (checkbox)
- Klik „Importuj" → SSE progress bar (XML streaming ~155MB)
- Czas: 10-20 min dla pelnego katalogu
- 7Krok C — Synchronizacja stanow i cen:
- Klik „Synchronizuj stany i ceny"
- Trwa ~2-3 min
- Automatyczna synchronizacja raz dziennie o 2:00 (opcja „delta_auto_sync")
12 WebAuthn / FIDO2 (biometria)
Cel: Logowanie biometryczne (odcisk palca, Face ID, YubiKey, passkey).
Konfiguracja
Nic nie trzeba konfigurowac w Integracjach! WebAuthn dziala od razu, bo RP ID jest derywowany z FRONTEND_URL (np. app.serwis.cloud).
Rejestracja urzadzenia przez uzytkownika
- Uzytkownik loguje sie (haslem)
- Przechodzi do Ustawienia systemu → „Logowanie biometryczne"
- Klik „Dodaj urzadzenie"
- Przegladarka pyta o biometrie (odcisk / Face ID / PIN)
- Urzadzenie rejestruje sie w
webauthn_credentials
Logowanie biometryczne
- Na ekranie logowania uzytkownik wpisuje email
- Po blur system sprawdza
POST /webauthn/check
- Jesli email ma zarejestrowane urzadzenie → wyswietlany przycisk „Zaloguj biometrycznie"
- Klik → autoryzacja biometryczna → JWT
13 Web Push Notifications (VAPID)
Cel: Powiadomienia push do technikow o nowych interwencjach, wygasnieciu SLA, pilnych zgloszeniach.
Generowanie kluczy VAPID
- 1Na serwerze:
npx web-push generate-vapid-keys
- 2Skopiuj Public Key i Private Key
- 3W SerwisRun: Integracje → Powiadomienia push
vapid_public_key: public key
vapid_private_key: private key
vapid_email: mailto:[email protected]
- 4Zapisz
Subskrypcja przez uzytkownika
- Uzytkownik na aplikacji mobilnej (
/mobile) otrzymuje prompt „Chcesz otrzymywac powiadomienia?"
- Klik „Tak" → subscribe z public key → zapis do
push_subscriptions
- Serwer moze teraz wysylac powiadomienia przez
webPush.service.sendPushToUser()
Monitorowanie i diagnostyka
Zarzadzanie backupami (Cloudflare R2) — status, lista, diagnostyka env.
Modul Import/Eksport — szablon Excel z dropdownami, podglad, tryby.
Gdzie szukac bledow?
| Integracja | Logi | Gdzie? |
| Google Calendar / Drive / Gmail | Google Cloud Console → Logging | Filtr po API name |
| OneDrive / Outlook | Azure Portal → App Registrations → „Sign-ins" | Filtr po App ID |
| Claude API | Panel Administracyjny → AI → „Statystyki uzycia" | SerwisRun + console.anthropic.com |
| KSeF | Szczegoly faktury → ksef_status, ksef_rejection_reason | SerwisRun |
| Delta-Poznan | distributor_sync_log tabela | Ustawienia → Import Delta → „Historia" |
| Web Push | Logi backendu (konsole Docker) | docker logs serwis-backend | grep push |
Odswiezanie tokenow OAuth
Tokeny Google i Microsoft wygasaja. System automatycznie odswieza przez googleAuth.helper.ts uzywajac refresh tokenow. Jesli jednak uzytkownik cofnie zgode (revoke) → konieczna ponowna autoryzacja:
- Status „Rozlaczono" w Integracjach
- Klik „Autoryzuj ponownie"
Bezpieczenstwo: Nigdy nie wysylaj kluczy API, tokenow OAuth ani sekretow przez email, czat lub w screen sharing. Wszystkie wartosci sa szyfrowane w bazie (integration_settings) i nie sa wyswietlane w formularzach po zapisie.