0

Powiadomienia push z KSeF - da się jakoś to ogarnąć?

ZbigniewMichalski15 lut0 wyświetleń

Witam,

Pracuję w małej fundacji i od jakiegoś czasu bawimy się wdrożeniem KSeF przez API. Mamy własny prosty system do faktur i chcielibyśmy, żeby nas informował automatycznie gdy przyjdzie nowa faktura od kontrahenta.

Z tego co czytałam w dokumentacji KSeF, nie ma tam czegoś takiego jak webhook, który by nas pingował gdy coś się wydarzy. Trzeba cały czas odpytywać system (polling), co jest trochę... nieoptymalne?

Czy ktoś z was implementował jakieś obejście? Myślałam o:

- Cyklicznym zadaniu co X minut sprawdzającym nowe faktury

- Jakimś zewnętrznym serwisie pośredniczącym (ale nie wiem czy takie w ogóle istnieją)

W commercial'owych programach księgowych to zapewne jest gotowe, ale my mamy specyficzne potrzeby NGO i wolałabym nie dokładać kolejnych kosztów licencji.

Może ktoś ma doświadczenie z takim rozwiązaniem?

5 odpowiedzi

0
Niestety masz rację - KSeF nie oferuje webhooków ani żadnego mechanizmu push. To jest jeden z częstszych zarzutów przy implementacjach i trzeba się z tym pogodzić. My w naszym systemie rozwiązaliśmy to przez scheduled job co 5-10 minut (w zależności od potrzeb klienta). Używamy endpointa `/api/online/Invoice/Query/Sync/Incremental` który pozwala pobrać tylko faktury od ostatniego sprawdzenia - nie trzeba za każdym razem ciągnąć wszystkiego od początku. Przekazujesz timestamp ostatniego pobrania i dostajesz tylko te nowe. Całkiem OK się sprawdza. Kilka praktycznych rzeczy: - Ustaw monitoring tego joba żeby mieć pewność że działa (my używamy healthchecków) - Implementuj exponential backoff jak KSeF leży (zdarza się, zwłaszcza w demo) - Pamiętaj o limitach API - nie odpytuj częściej niż potrzebujesz Co do kosztów - jeśli macie już swój system i umiejętności żeby to zaimplementować, to polling naprawdę nie jest taki straszny. Alternatywnie niektóre biura rachunkowe oferują dostęp do swoich systemów za niewielkie pieniądze dla NGO, ale rozumiem że jak już macie coś swojego to szkoda porzucać. Jaki stack technologiczny używacie? Może podpowiem coś konkretnego do implementacji.
0
My też mamy polling co 10 minut i działa okej. Na początek ustawcie rzadziej, bo jak się okazało w demo to KSeF czasem odpowiada wolno i jak masz zbyt częste zapytania to się kumulują. Jedna rzecz - pamiętajcie że musicie gdzieś zapisywać ten timestamp z ostatniego sprawdzenia. My mieliśmy kiedyś problem bo po restarcie aplikacji gubił to i pobierał wszystko od początku miesiąca :) Jakie macie wolumeny faktur? Bo jak dostajecie 2-3 dziennie to nawet odpytywanie co godzine wystarczy...
0
VATreturns_PL3 dni temu
Potwierdzam - polling to jedyne rozwiązanie i wcale nie jest tak źle jak brzmi na początku. U nas implementowałem to w Node.js z cron jobem co 15 minut (fundacje rzadko mają duży wolumen więc nie ma sensu męczyć API częściej). Kluczowe rzeczy: ```javascript // Zawsze zapisuj lastQueryTimestamp w bazie const lastCheck = await getLastCheckTimestamp(); const response = await ksef.queryIncrementalInvoices(lastCheck); await saveLastCheckTimestamp(response.timestamp); ``` Jedna pułapka na którą wpadłem - `Incremental` endpoint czasem zwraca faktury z lekkim opóźnieniem (kilka minut), więc dodaj bufor typu `lastCheck - 5 minut` żeby nic nie przegapić. Co do monitoringu - polecam prosty healthcheck endpoint który sprawdza czy job odpalił się w ostatnich 30 minutach. Jak się job wywali (a zdarza się przy problemach z KSeF demo) to od razu wiesz. BTW, jeśli użwyacie TypeScript to mam gotowe typy dla FA(2) schema - mogę podesłać na priv jak będzie potrzeba. Oszczędzi trochę czasu przy parsowaniu XMLi. Jaki mniej wicęej wolumen faktur macie miesięcznie? To pomoże ustalić optymalną częstotliwość.
0
MartaNowacka3 dni temu
Widzę że już dostałaś dobre rady techniczne, więc dodm perspektywę z wdrożeń w organizacjach non-profit. W moim doświadczeniu (głównie Comarch ERP, ale też klka custom'owych rozwiązań) polling co 10-15 minut to standard i naprawdę wystarczy dla większości fundacji. Kluczowe pytanie: czy faktury przychodzą do was regularnie czy sporadycznie? Bo jak dostajecie 5-10 faktur miesięcznie to można spookjnie ustawić nwet co godzinę. Jedna rzecz której nie wdzę w poprzednich odpowiedziach - **uwaga na środowiska**. W demo KSeF odpytywanie działa różnie niż w produkcji, więc nie testujcie tylko na demo. Mieliśmy przypadek gdzie klient miał perfekcyjnie działający polling na demo, a po przejściu na prod okazało się że trzeba było zwiększyć timeouty i dodać retry logic. Co do kosztów - jeśli już mcie własny system i programistę, to zdecydowanie opłaca się zostać przy polling'u. Commercial'owe rozwiązania dla NGO to często 200-500 zł miesięcznie + koszty wdrożenia, więc jak już macie infrastrukturę to nie ma sensu dokładać. Jedno pytanie praktyczne: czy macie już zaimplementowaną autoryzację do KSeF (token, certyfikat) czy to też przed wami? Bo to może być większy orzech do zgryzienia niż sam polling. A propos - jakiej technologii używacie do swojego systemu faktur? Może będę mogła podpowiedzieć coś konkretnego.
0
eInvoice_dev3 dni temu
Z perspektywy architekta który implementował podobne rozwiązania dla kilku organizacji non-profit - polling to rzeczywiście jedyna opcja i wcale nie jest taki zły jak się wydaje na początku. Kluczowe rzeczy których nie widzę w poprzednich odpowiedziach: **Circuit breaker pattern** - koniecznie zaimplementuj mechanizm który zatrzyma odpytywanie gdy KSeF ma problemy. Miałem przypadek gdzie klient męczył API przez 3 godziny podczas awarii i dostał temporary ban. Prosty licznik failed requests i exponential backoff wystarczy. **Monitoring i alerting** - nie tylko healthcheck czy job się odpala, ale też metryki biznesowe. Ilość pobranych faktur dziennie, średni response time KSeF, błedy parsowania XML. Jak nagle spadnie liczba faktur to może oznaczać że coś się zepsuło u kontrahentów lub w samym KSeF. **Backup strategy** - zapisuj raw XML'e gdzieś bezpiecznie. Nie tylko sparsowane dane. Miałem sytuację gdzie po aktualizacji schema FA(2) część starych faktur się nie parsowała poprawnie i trzeba było przetwarzać od nowa. Co do częstotliwości - dla fundacji polecam zacząć od 30 minut i dopiro jak będziecie mieli więcej danych o wollumenie to optymalizować. KSeF ma różne performance'y w różnych porach dnia i lepiej być conservative na początku. Jedna rzecz praktyczna - jeśli używacie jakiejś formy cache'owania (Redis, Memcached), to warto trzymać tam mapping'i między numerami faktur a waszymi internal ID. Przyspiesza znacznie processing jak masz duplikaty lub partial updates. Jaki stack macie? I czy planujecie horizontal scaling w przyszłości? Bo to wpływa na design całego polling mechanizmu.

Twoja odpowiedź

Zaloguj się, aby odpowiedzieć w tej dyskusji.