{"id":33416,"date":"2026-03-30T18:12:16","date_gmt":"2026-03-30T16:12:16","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=33416"},"modified":"2026-05-07T12:06:13","modified_gmt":"2026-05-07T10:06:13","slug":"kiedy-jira-automation-to-za-malo-obsluga-paginacji-przy-uzyciu-webhookow-i-wywolan-rekurencyjnych","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/kiedy-jira-automation-to-za-malo-obsluga-paginacji-przy-uzyciu-webhookow-i-wywolan-rekurencyjnych\/","title":{"rendered":"Kiedy Jira Automation to za ma\u0142o: Obs\u0142uga paginacji przy u\u017cyciu webhook\u00f3w i wywo\u0142a\u0144 rekurencyjnych"},"content":{"rendered":"\n<p>Jira Automation to <strong>narz\u0119dzie typu<\/strong><strong> \u201eno-code\u201d<\/strong>, kt\u00f3re pozwala budowa\u0107 z\u0142o\u017cone workflow bez u\u017cycia zewn\u0119trznych us\u0142ug. W wielu przypadkach w pe\u0142ni wystarcza do obs\u0142ugi integracji i logiki biznesowej.<\/p>\n\n\n\n<p>Problem pojawia si\u0119 przy pracy z <strong>wi\u0119kszymi zbiorami danych<\/strong>, szczeg\u00f3lnie gdy API zwraca wyniki w formie <strong>paginowanej<\/strong>. To, co pocz\u0105tkowo wygl\u0105da na prost\u0105 regu\u0142\u0119:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pobierz dane,<\/li>\n\n\n\n<li>przetw\u00f3rz wyniki,<\/li>\n\n\n\n<li>kontynuuj, je\u015bli s\u0105 kolejne,<\/li>\n<\/ul>\n\n\n\n<p>\u2026 bardzo szybko przestaje dzia\u0142a\u0107 poprawnie.<\/p>\n\n\n\n<p>Ten problem pojawia si\u0119 m.in. przy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>synchronizacji danych<\/strong> mi\u0119dzy systemami,<\/li>\n\n\n\n<li><strong>walidacji du\u017cych zbior\u00f3w danych,<\/strong><\/li>\n\n\n\n<li><strong>wyszukiwaniu konkretnych element\u00f3w<\/strong>, gdy brak filtrowania.<\/li>\n<\/ul>\n\n\n\n<p>Efekt: Automatyzacja dzia\u0142a poprawnie tylko <strong>pozornie<\/strong>, przetwarzaj\u0105c cz\u0119\u015b\u0107 danych.<\/p>\n\n\n\n<p>Je\u015bli Twoja regu\u0142a przetwarza tylko <strong>pierwsze 50 wynik\u00f3w<\/strong>, to jest dok\u0142adnie ten problem.<\/p>\n\n\n\n<p>W artykule zaprezentuj\u0119 wzorzec oparty na <strong>webhookach i rekurencji<\/strong>, kt\u00f3ry pozwala przetwarza\u0107 dane krok po kroku \u2013 w pe\u0142ni w ramach Jira Automation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problem paginacji w Jira Automation<\/h2>\n\n\n\n<p>Wi\u0119kszo\u015b\u0107 API Jira Cloud zwraca dane w spos\u00f3b paginowany, co oznacza, \u017ce zwracana jest tylko cz\u0119\u015b\u0107 danych oraz konieczne s\u0105 kolejne zapytania, aby pobra\u0107 pe\u0142ny zbi\u00f3r.<\/p>\n\n\n\n<p>Typowe mechanizmy paginacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>offset-based (<code>start<\/code>, <code>limit<\/code>),<\/li>\n\n\n\n<li>token-based (<code>nextPageToken<\/code>),<\/li>\n\n\n\n<li>link-based (<code>_links.next<\/code>),<\/li>\n\n\n\n<li>flagi logiczne (np. <code>isLast<\/code>).<\/li>\n<\/ul>\n\n\n\n<p><strong>Problem:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak jednolitego modelu paginacji,<\/li>\n\n\n\n<li>brak gwarancji pe\u0142nej liczby wynik\u00f3w,<\/li>\n\n\n\n<li>ograniczone mo\u017cliwo\u015bci filtrowania.<\/li>\n<\/ul>\n\n\n\n<p>Jira Automation oferuje branching, ale:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>dzia\u0142a tylko na ju\u017c pobranych danych,<\/li>\n\n\n\n<li>nie umo\u017cliwia iteracji mi\u0119dzy wywo\u0142aniami API,<\/li>\n\n\n\n<li>nie wspiera <strong>akumulacji wynik\u00f3w.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Obs\u0142uga paginacji wymaga wi\u0119c rozdzielenia logiki na wiele niezale\u017cnych wykona\u0144.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Case study: rekurencyjne przetwarzanie przez webhook<\/h2>\n\n\n\n<p>Ten wzorzec jest przydatny, gdy trzeba przetworzy\u0107 wszystkie strony danych oraz znale\u017a\u0107 konkretny element bez mo\u017cliwo\u015bci filtrowania.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Architektura rozwi\u0105zania<\/h3>\n\n\n\n<p>Rozwi\u0105zanie sk\u0142ada si\u0119 z dw\u00f3ch regu\u0142 automatyzacji:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Regu\u0142a inicjalna<\/strong>\n<ul class=\"wp-block-list\">\n<li>rozpoczyna process,<\/li>\n\n\n\n<li>wysy\u0142a pierwszy webhook.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Regu\u0142a rekurencyjna<\/strong>\n<ul class=\"wp-block-list\">\n<li>wywo\u0142ywana przez webhook,<\/li>\n\n\n\n<li>przetwarza dane,<\/li>\n\n\n\n<li>decyduje o kontynuacji.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/03\\\/image1-2.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33417&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:646,&quot;targetHeight&quot;:525,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Powi\\u0119ksz obrazek: Regu\\u0142y automatyzacji&quot;,&quot;alt&quot;:&quot;Regu\\u0142y automatyzacji&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"646\" height=\"525\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/03\/image1-2.png\" alt=\"Regu\u0142y automatyzacji\" class=\"wp-image-33417\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/03\/image1-2.png 646w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/03\/image1-2-300x244.png 300w\" sizes=\"(max-width: 646px) 100vw, 646px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Powi\u0119ksz obrazek: Regu\u0142y automatyzacji\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Ryc. 1 Regu\u0142y automatyzacji<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Zarz\u0105dzanie stanem (payload)<\/h3>\n\n\n\n<p>Ka\u017cde wykonanie jest <strong>stateless<\/strong>, dlatego ca\u0142y stan musi by\u0107 przekazywany w payloadzie.<\/p>\n\n\n\n<p>Przyk\u0142ad:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n{\n  &quot;start&quot;: 0,\n  &quot;limit&quot;: 50,\n  &quot;targetName&quot;: &quot;Example Organization&quot;,\n  &quot;runId&quot;: &quot;12345&quot;,\n  &quot;maxDepth&quot;: 10\n}\n<\/pre><\/div>\n\n\n<p>Kluczowe pola:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pagination \u2013 <code>start<\/code>, <code>limit<\/code><\/li>\n\n\n\n<li>kontrola \u2013 <code>maxDepth<\/code><\/li>\n\n\n\n<li>korelacja \u2013 <code>runId<\/code><\/li>\n\n\n\n<li>kontekst \u2013 <code>targetName<\/code><\/li>\n<\/ul>\n\n\n\n<p>Nie istnieje wsp\u00f3\u0142dzielona pami\u0119\u0107 mi\u0119dzy wykonaniami \u2013 ca\u0142y stan musi by\u0107 przekazywany w requestach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dwa praktyczne przypadki u\u017cycia<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Pe\u0142ne przetwarzanie (ang. Full Traversal)<\/h3>\n\n\n\n<p>Rozwi\u0105zanie jest u\u017cywane, gdy trzeba przetworzy\u0107 ca\u0142y zbi\u00f3r danych.<\/p>\n\n\n\n<p><strong>Flow:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pobierz stron\u0119.<\/li>\n\n\n\n<li>Przetw\u00f3rz element.<\/li>\n\n\n\n<li>Kontynuuj, je\u015bli s\u0105 kolejne dane.<\/li>\n<\/ol>\n\n\n\n<p><strong>Warunki zako\u0144czenia:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak kolejnych stron,<\/li>\n\n\n\n<li>pusta odpowied\u017a,<\/li>\n\n\n\n<li>osi\u0105gni\u0119ty <code>maxDepth.<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Zastosowanie:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>agregacja,<\/li>\n\n\n\n<li>synchronizacja,<\/li>\n\n\n\n<li>walidacja.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Wyszukiwanie warunkowe (ang. Conditional Search)<\/h3>\n\n\n\n<p>Rozwi\u0105zanie wykorzystujemy, gdy potrzebny jest tylko jeden element.<\/p>\n\n\n\n<p><strong>Flow:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pobierz stron\u0119.<\/li>\n\n\n\n<li>Sprawd\u017a warunek.<\/li>\n\n\n\n<li>Zatrzymaj, je\u015bli znaleziono.<\/li>\n\n\n\n<li>W przeciwnym razie \u2013 kontynuuj.<\/li>\n<\/ol>\n\n\n\n<p><strong>Warunki zako\u0144czenia:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>znaleziono element,<\/li>\n\n\n\n<li>ostatnia strona,<\/li>\n\n\n\n<li>osi\u0105gni\u0119ty <code>maxDepth.<\/code><\/li>\n<\/ul>\n\n\n\n<p><strong>Przep\u0142yw wykonania:<\/strong><\/p>\n\n\n\n<p>Ka\u017cde wykonanie realizuje tylko jeden krok.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 1: Zapytanie API (na przyk\u0142adzie JSM)<\/h3>\n\n\n\n<p>W przyk\u0142adzie u\u017cywamy API JSM, ale ten sam mechanizm mo\u017cna zastosowa\u0107 do ka\u017cdego paginowanego API.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nGET \/rest\/servicedeskapi\/organization?start={{webhookData.start}}&amp;limit={{webhookData.limit}}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Krok 2: Przetwarzanie odpowiedzi<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n{\n  &quot;values&quot;: &#x5B;\n    { &quot;id&quot;: &quot;1&quot;, &quot;name&quot;: &quot;Org A&quot; },\n    { &quot;id&quot;: &quot;2&quot;, &quot;name&quot;: &quot;Org B&quot; }\n  ],\n  &quot;isLast&quot;: false,\n  &quot;start&quot;: 0,\n  &quot;limit&quot;: 50\n}\n<\/pre><\/div>\n\n\n<p>Regu\u0142a:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>sprawdza warto\u015b\u0107 docelow\u0105,<\/li>\n\n\n\n<li>ocenia warunek kontynuacji (<code>isLast<\/code>).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 3: Wywo\u0142anie kolejnej iteracji<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\nPOST &lt;webhook-url&gt;\n{\n  &quot;start&quot;: {{webhookData.start.plus(webhookData.limit)}},\n  &quot;limit&quot;: {{webhookData.limit}},\n  &quot;targetName&quot;: &quot;{{webhookData.targetName}}&quot;,\n  &quot;runId&quot;: &quot;{{webhookData.runId}}&quot;,\n  &quot;maxDepth&quot;: {{webhookData.maxDepth.minus(1)}}\n}\n<\/pre><\/div>\n\n\n<p>Paginacja przesuwa si\u0119 dalej, a kontekst jest zachowany.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Krok 4: Warunki zako\u0144czenia<\/h3>\n\n\n\n<p>Wykonanie zatrzymuje si\u0119, gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>znaleziono target,<\/li>\n\n\n\n<li>brak kolejnych stron (<code>isLast = true<\/code>),<\/li>\n\n\n\n<li>osi\u0105gni\u0119to <code>maxDepth.<\/code><\/li>\n<\/ul>\n\n\n\n<p>Kluczowa idea: ca\u0142e zachowanie wynika z <strong>\u0142a\u0144cucha niezale\u017cnych wykona\u0144<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ograniczenia i ryzyka<\/h2>\n\n\n\n<p>To podej\u015bcie wi\u0105\u017ce si\u0119 z pewnymi kompromisami:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>brak mo\u017cliwo\u015bci bezpo\u015bredniego anulowania,<\/li>\n\n\n\n<li>zu\u017cycie executions Automation i limit\u00f3w API,<\/li>\n\n\n\n<li>zwi\u0119kszona z\u0142o\u017cono\u015b\u0107 (zarz\u0105dzanie stanem, warunki ochronne),<\/li>\n\n\n\n<li>ograniczona obserwowalno\u015b\u0107 (rozproszone wykonania),<\/li>\n\n\n\n<li>brak wsp\u00f3\u0142dzielonego stanu i <strong>brak akumulacji wynik\u00f3w.<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Takie rozwi\u0105zanie nie zast\u0119puje zewn\u0119trznych system\u00f3w przetwarzania danych.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dobre praktyki<\/h2>\n\n\n\n<p>Aby zwi\u0119kszy\u0107 niezawodno\u015b\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>definiuj jasne warunki kontynuacji,<\/li>\n\n\n\n<li>zawsze implementuj logik\u0119 zako\u0144czenia,<\/li>\n\n\n\n<li>u\u017cywaj <code>maxDepth<\/code> jako zabezpieczenia,<\/li>\n\n\n\n<li>utrzymuj payload mo\u017cliwie prosty,<\/li>\n\n\n\n<li>u\u017cywaj <code>runId<\/code> do \u015bledzenia,<\/li>\n\n\n\n<li>projektuj kroki jako idempotentne.<\/li>\n<\/ul>\n\n\n\n<p>Ka\u017cde wykonanie powinno by\u0107 niezale\u017cne i bezpieczne.<\/p>\n\n\n<div class=\"nsw-o-blogersii-banner\">\n            <picture>\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Atlassian-Desktop_.jpg\" media=\"(min-width: 992px)\" >\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Atlassian-Mob_.jpg\" media=\"(min-width: 300px)\" >            <img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Atlassian-Desktop_.jpg\" alt=\"\"  class=\"\"  >\n        <\/picture>\n        <div class=\"cnt\">\n                    <div class=\"nsw-m-title-block -h3 -invert  -has-title-margin-bottom-0 -has-title-font-weight-bold\">\n                                <h2 class=\"nsw-m-title-block__title\">Sii x Atlassian <\/h2>\n                <\/div>\n                            <p class=\"has-nsw-p-4-font-size has-invert-color\">\n                Jako Atlassian Platinum Partner analizujemy, wdra\u017camy i migrujemy narz\u0119dzia do chmury, aby przyspieszy\u0107 i usprawni\u0107 prac\u0119 zespo\u0142\u00f3w.\n            <\/p>\n                            <a  href=\"https:\/\/sii.pl\/oferta\/enterprise-platforms\/atlassian\/\" class=\"nsw-a-button -ghost -banner-button\"   >\n        <span>Oferta Atlassian<\/span>\n    <\/a>\n            <\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Podsumowanie<\/h2>\n\n\n\n<p>Rekurencyjne przetwarzanie z u\u017cyciem webhook\u00f3w to praktyczne obej\u015bcie dla obs\u0142ugi paginowanych API w Jira Automation.<\/p>\n\n\n\n<p>Sprawdza si\u0119, gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>logika musi pozosta\u0107 w Jira Cloud,<\/li>\n\n\n\n<li>wolumen danych jest umiarkowany,<\/li>\n\n\n\n<li>zastosowano odpowiednie zabezpieczenia.<\/li>\n<\/ul>\n\n\n\n<p>Nie powinno by\u0107 stosowane, gdy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>przetwarzanie jest du\u017ce lub cz\u0119ste,<\/li>\n\n\n\n<li>wymagana jest wysoka obserwowalno\u015b\u0107 lub mo\u017cliwo\u015b\u0107 anulowania,<\/li>\n\n\n\n<li>dost\u0119pne s\u0105 systemy zewn\u0119trzne.<\/li>\n<\/ul>\n\n\n\n<p>To rozwi\u0105zanie rozszerza mo\u017cliwo\u015bci Jira Automation bez wprowadzania dodatkowej infrastruktury.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;33416&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;2&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;Kiedy Jira Automation to za ma\u0142o: Obs\u0142uga paginacji przy u\u017cyciu webhook\u00f3w i wywo\u0142a\u0144 rekurencyjnych&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Jira Automation to narz\u0119dzie typu \u201eno-code\u201d, kt\u00f3re pozwala budowa\u0107 z\u0142o\u017cone workflow bez u\u017cycia zewn\u0119trznych us\u0142ug. W wielu przypadkach w pe\u0142ni &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/kiedy-jira-automation-to-za-malo-obsluga-paginacji-przy-uzyciu-webhookow-i-wywolan-rekurencyjnych\/\">Continued<\/a><\/p>\n","protected":false},"author":786,"featured_media":33421,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1316],"tags":[1606,1546,1037,354,1032],"class_list":["post-33416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-na-miekko","tag-jira","tag-przeglad-narzedzi","tag-atlassian","tag-automatyzacja","tag-case-study"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/03\/Idea_2.jpg","category_names":["Development na mi\u0119kko"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/33416"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/users\/786"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/comments?post=33416"}],"version-history":[{"count":3,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/33416\/revisions"}],"predecessor-version":[{"id":33763,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/posts\/33416\/revisions\/33763"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media\/33421"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/media?parent=33416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/categories?post=33416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/wp-json\/wp\/v2\/tags?post=33416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}