{"id":16779,"date":"2026-04-09T15:01:27","date_gmt":"2026-04-09T14:01:27","guid":{"rendered":"https:\/\/help.expertsender.com\/?post_type=ecdp&#038;p=16779"},"modified":"2026-04-10T09:29:13","modified_gmt":"2026-04-10T08:29:13","slug":"integracja-wyszukiwarki-z-silnikiem-rekomendacji","status":"publish","type":"ecdp","link":"https:\/\/help.expertsender.com\/pl\/ecdp\/integracja-wyszukiwarki-z-silnikiem-rekomendacji\/","title":{"rendered":"Integracja wyszukiwarki z silnikiem rekomendacji"},"content":{"rendered":"\n<p>Wyszukiwarka produktowa oparta jest na silniku rekomendacji Recombee, kt\u00f3ry zasila ECDP. Silnik jest na bie\u017c\u0105co zasilany zdarzeniami behawioralnymi u\u017cytkownik\u00f3w przez skrypt \u015bledz\u0105cy ECDP (web tracking), dzi\u0119ki czemu wyniki wyszukiwania s\u0105 personalizowane w oparciu o rzeczywiste interakcje z produktami.<\/p>\n\n\n\n<p>Celem integracji jest:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poprawne raportowanie request\u00f3w o rekomendacje w ECDP,<\/li>\n\n\n\n<li>powi\u0105zanie klikni\u0119\u0107 i sprzeda\u017cy z konkretnym ID rekomendacji (<code>recommId<\/code>),<\/li>\n\n\n\n<li>obs\u0142uga przypadku braku wynik\u00f3w.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"dane-dostepowe-po-stronie-expertsender\">Dane dost\u0119powe (po stronie ExpertSender)<a href=\"#dane-dostepowe-po-stronie-expertsender\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<p>Po potwierdzeniu wdro\u017cenia dostarczymy dane niezb\u0119dne do po\u0142\u0105czenia z baz\u0105 Recombee oraz konfiguracji ECDP:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Database ID<\/strong>, <strong>Public Token<\/strong>, <strong>Region<\/strong> \u2013 do inicjalizacji klienta Recombee<\/li>\n\n\n\n<li><strong>Scenario ID<\/strong> \u2013 identyfikator scenariusza wyszukiwania<\/li>\n\n\n\n<li><strong>Banner ID<\/strong> \u2013 identyfikator przypisany do danego rynku \/ j\u0119zyka (u\u017cywany w metodach ECDP)<\/li>\n\n\n\n<li><strong>Engine ID<\/strong>, <strong>Logic ID<\/strong> \u2013 sta\u0142e warto\u015bci do budowania parametru <code>ecdp_recom<\/code> w URL<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"implementacja-widgetu\">Implementacja widgetu<a href=\"#implementacja-widgetu\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<p>Widget implementowany jest przy u\u017cyciu SDK Recombee: <a href=\"https:\/\/docs.recombee.com\/widget-sdks\/quick-search-widget-js\" target=\"_blank\" rel=\"noopener\">Quick Search Widget (JS) \u2013 dokumentacja<\/a><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"npm install @recombee\/quick-search-widget-js@0.2.4 recombee-js-api-client\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">npm<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">install<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">@recombee\/quick-search-widget-js@0.2.4<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C3E88D\">recombee-js-api-client<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"inicjalizacja-klienta\">Inicjalizacja klienta<a href=\"#inicjalizacja-klienta\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"import { ApiClient } from &quot;recombee-js-api-client&quot;;\n\nconst apiClient = new ApiClient(DATABASE_ID, PUBLIC_TOKEN, {\n  region: REGION,\n});\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">ApiClient<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">from<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">recombee-js-api-client<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #BABED8\"> apiClient <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #82AAFF\">ApiClient<\/span><span style=\"color: #BABED8\">(DATABASE_ID<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #BABED8\"> PUBLIC_TOKEN<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">  <\/span><span style=\"color: #F07178\">region<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #BABED8\"> REGION<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #BABED8\">)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"pobieranie-userid\">Pobieranie <code>userId<\/code><a href=\"#pobieranie-userid\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<p>Do identyfikacji u\u017cytkownika w requestach do Recombee nale\u017cy u\u017cy\u0107 Visitor ID z ECDP. Dost\u0119pne s\u0105 dwie metody \u2013 mo\u017cna u\u017cy\u0107 jednej z nich lub obudowa\u0107 obie w callback z fallbackiem.<\/p>\n\n\n\n<p><strong>Metoda 1 \u2013 przez JS:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"$ecdp.helpers.getVisitorId()\n\/\/ zwraca np. 'b39431c7-23e1-47b1-873c-a5e2629c3f6c'\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\">$ecdp<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">helpers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">getVisitorId<\/span><span style=\"color: #BABED8\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #676E95; font-style: italic\">\/\/ zwraca np. &#39;b39431c7-23e1-47b1-873c-a5e2629c3f6c&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Metoda 2 \u2013 przez cookie <code>vId<\/code>:<\/strong><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"const match = document.cookie\n  .split(&quot;; &quot;)\n  .find(row =&gt; row.startsWith(&quot;vId=&quot;));\n\nconst parsed = JSON.parse(decodeURIComponent(match.split(&quot;=&quot;)&#91;1&#93;));\nconst userId = parsed?.vId;\n\/\/ zwraca np. 'b39431c7-23e1-47b1-873c-a5e2629c3f6c'\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #BABED8\"> match <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> document<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">cookie<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">  <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">split<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">; <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">  <\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">find<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #BABED8; font-style: italic\">row<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C792EA\">=&gt;<\/span><span style=\"color: #BABED8\"> row<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">startsWith<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">vId=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">))<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #BABED8\"> parsed <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> JSON<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">parse<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #82AAFF\">decodeURIComponent<\/span><span style=\"color: #BABED8\">(match<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">split<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">=<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #BABED8\">)&#91;<\/span><span style=\"color: #F78C6C\">1<\/span><span style=\"color: #BABED8\">&#93;))<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #BABED8\"> userId <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> parsed<\/span><span style=\"color: #89DDFF\">?.<\/span><span style=\"color: #BABED8\">vId<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #676E95; font-style: italic\">\/\/ zwraca np. &#39;b39431c7-23e1-47b1-873c-a5e2629c3f6c&#39;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Obie metody zwracaj\u0105 ten sam Visitor ID. Mo\u017cna je po\u0142\u0105czy\u0107 w jedn\u0105 funkcj\u0119 z fallbackiem \u2013 najpierw pr\u00f3ba przez <code>getVisitorId()<\/code>, a w razie niedost\u0119pno\u015bci (np. race condition przy \u0142adowaniu skryptu ECDP) odczyt z cookie.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"funkcja-createrequest\">Funkcja <code>createRequest<\/code><a href=\"#funkcja-createrequest\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<p>Zapytanie do Recombee nale\u017cy opakowa\u0107 w <code>Batch<\/code> i u\u017cy\u0107 dostarczonego <code>SCENARIO_ID<\/code>. Ka\u017cdy u\u017cytkownik musi by\u0107 identyfikowany przez <code>userId<\/code> \u2013 dla zalogowanych u\u017cytkownik\u00f3w nale\u017cy u\u017cy\u0107 ich ID, dla anonimowych wygenerowa\u0107 i utrwali\u0107 losowe ID (np. przez <code>PersistentUserID<\/code> z SDK):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"import { Batch, SearchItems } from &quot;recombee-js-api-client&quot;;\n\nconst createRequest = ({ searchQuery }) =&gt; {\n  return new Batch(&#91;\n    new SearchItems(userId, searchQuery, 6, {\n      scenario: SCENARIO_ID,\n      cascadeCreate: true,\n      returnProperties: true,\n    }),\n  &#93;);\n};\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #89DDFF; font-style: italic\">import<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">Batch<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">SearchItems<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF; font-style: italic\">from<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #C3E88D\">recombee-js-api-client<\/span><span style=\"color: #89DDFF\">&quot;<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C792EA\">const<\/span><span style=\"color: #BABED8\"> createRequest <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">({<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #BABED8; font-style: italic\">searchQuery<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">})<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C792EA\">=&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">  <\/span><span style=\"color: #89DDFF; font-style: italic\">return<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">Batch<\/span><span style=\"color: #F07178\">(&#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF\">new<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #82AAFF\">SearchItems<\/span><span style=\"color: #F07178\">(<\/span><span style=\"color: #BABED8\">userId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">searchQuery<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #F78C6C\">6<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">      scenario<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">SCENARIO_ID<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">      cascadeCreate<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">      returnProperties<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #FF9CAC\">true<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">    <\/span><span style=\"color: #89DDFF\">}<\/span><span style=\"color: #F07178\">)<\/span><span style=\"color: #89DDFF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">  &#93;)<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">};<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"tracking-ecdp-kluczowe-wymagania\">Tracking ECDP \u2013 kluczowe wymagania<a href=\"#tracking-ecdp-kluczowe-wymagania\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"metoda-1-rejestrowanie-requestu-rekomendacji\">Metoda 1 \u2013 rejestrowanie requestu rekomendacji<a href=\"#metoda-1-rejestrowanie-requestu-rekomendacji\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"$ecdp.helpers.registerIncreaseBannerRecommendationAndView(bannerId, count)\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #BABED8\">$ecdp<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">helpers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">registerIncreaseBannerRecommendationAndView<\/span><span style=\"color: #BABED8\">(bannerId<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #BABED8\"> count)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Nale\u017cy j\u0105 wywo\u0142a\u0107 <strong>po ka\u017cdym zapytaniu do Recombee<\/strong> \u2013 zar\u00f3wno przy wyszukiwaniu, jak i przy pobieraniu bestseller\u00f3w. Rejestruje wykonanie requestu oraz wy\u015bwietlenie bannera.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>bannerId<\/code> \u2013 dostarczony przez ExpertSender<\/li>\n\n\n\n<li><code>count<\/code> \u2013 liczba produkt\u00f3w, o kt\u00f3r\u0105 odpytano Recombee (np. <code>6<\/code>); <strong>nie<\/strong> jest to liczba faktycznie zwr\u00f3conych produkt\u00f3w<\/li>\n<\/ul>\n\n\n\n<p>\u26a0\ufe0f Wywo\u0142anie tej metody jest <strong>krytyczne<\/strong> dla poprawnego raportowania w ECDP. Powinna by\u0107 wywo\u0142ywana raz na request, nawet je\u015bli wyniki s\u0105 cachowane.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"metoda-2-rejestrowanie-samego-wyswietlenia\">Metoda 2 \u2013 rejestrowanie samego wy\u015bwietlenia<a href=\"#metoda-2-rejestrowanie-samego-wyswietlenia\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"\/\/ Jeden banner\n$ecdp.helpers.registerIncreaseBannerView(83)\n\n\/\/ Wiele banner\u00f3w\n$ecdp.helpers.registerIncreaseBannerView(&#91;83, 84&#93;)\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #676E95; font-style: italic\">\/\/ Jeden banner<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">$ecdp<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">helpers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">registerIncreaseBannerView<\/span><span style=\"color: #BABED8\">(<\/span><span style=\"color: #F78C6C\">83<\/span><span style=\"color: #BABED8\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #676E95; font-style: italic\">\/\/ Wiele banner\u00f3w<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">$ecdp<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">helpers<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #82AAFF\">registerIncreaseBannerView<\/span><span style=\"color: #BABED8\">(&#91;<\/span><span style=\"color: #F78C6C\">83<\/span><span style=\"color: #89DDFF\">,<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #F78C6C\">84<\/span><span style=\"color: #BABED8\">&#93;)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>S\u0142u\u017cy wy\u0142\u0105cznie do rejestracji wy\u015bwietle\u0144 (view) bez requestu rekomendacyjnego.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"pobranie-recommid-i-modyfikacja-linkow-produktowych\">Pobranie <code>recommId<\/code> i modyfikacja link\u00f3w produktowych<a href=\"#pobranie-recommid-i-modyfikacja-linkow-produktowych\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"onRecommResponse: (response) =&gt; {\n  const recommId = response.recommId;\n}\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">onRecommResponse<\/span><span style=\"color: #89DDFF\">:<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">(<\/span><span style=\"color: #BABED8; font-style: italic\">response<\/span><span style=\"color: #89DDFF\">)<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #C792EA\">=&gt;<\/span><span style=\"color: #BABED8\"> <\/span><span style=\"color: #89DDFF\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F07178\">  <\/span><span style=\"color: #C792EA\">const<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">recommId<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #F07178\"> <\/span><span style=\"color: #BABED8\">response<\/span><span style=\"color: #89DDFF\">.<\/span><span style=\"color: #BABED8\">recommId<\/span><span style=\"color: #89DDFF\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #89DDFF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><code>recommId<\/code> jest unikalne dla ka\u017cdego requestu i musi zosta\u0107 u\u017cyte do zbudowania link\u00f3w do produkt\u00f3w. Ka\u017cdy link produktowy w wynikach wyszukiwania musi zawiera\u0107 dwa parametry:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"https:\/\/example.com\/product\n  ?ecdp_recom={engineId}-{logicId}-{recommId}\n  &amp;ecdp_banner_click={bannerId}\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">https:\/\/example.com\/product<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">  <\/span><span style=\"color: #FFCB6B\">?ecdp_recom<\/span><span style=\"color: #BABED8\">={engineId}<\/span><span style=\"color: #FFCB6B\">-<\/span><span style=\"color: #BABED8\">{logicId}<\/span><span style=\"color: #FFCB6B\">-<\/span><span style=\"color: #BABED8\">{recommId}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #BABED8\">  <\/span><span style=\"color: #89DDFF\">&amp;<\/span><span style=\"color: #BABED8\">ecdp_banner_click<\/span><span style=\"color: #89DDFF\">=<\/span><span style=\"color: #C3E88D\">{bannerId}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\u26a0\ufe0f Je\u015bli <code>recommId<\/code> zwr\u00f3cony przez Recombee zawiera suffix po znaku <code>|<\/code>, nale\u017cy go usun\u0105\u0107 przed u\u017cyciem:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span role=\"button\" tabindex=\"0\" data-code=\"1-1-xxxxxx|734  \u274c\n1-1-xxxxxx      \u2705\" style=\"color:#babed8;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki material-theme-palenight\" style=\"background-color: #292D3E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #FFCB6B\">1-1-xxxxxx<\/span><span style=\"color: #89DDFF\">|<\/span><span style=\"color: #FFCB6B\">734<\/span><span style=\"color: #BABED8\">  <\/span><span style=\"color: #C3E88D\">\u274c<\/span><\/span>\n<span class=\"line\"><span style=\"color: #FFCB6B\">1-1-xxxxxx<\/span><span style=\"color: #BABED8\">      <\/span><span style=\"color: #C3E88D\">\u2705<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"obsluga-stanow-specjalnych\">Obs\u0142uga stan\u00f3w specjalnych<a href=\"#obsluga-stanow-specjalnych\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"otwarcie-wyszukiwarki-puste-pole-opcjonalnie\">Otwarcie wyszukiwarki (puste pole) \u2013 opcjonalnie<a href=\"#otwarcie-wyszukiwarki-puste-pole-opcjonalnie\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<p>Istnieje mo\u017cliwo\u015b\u0107 wy\u015bwietlania bestseller\u00f3w od razu po klikni\u0119ciu w pole wyszukiwania, zanim u\u017cytkownik wpisze zapytanie. Jest to opcja dodatkowa \u2013 decyzja o jej wdro\u017ceniu le\u017cy po stronie klienta. Je\u015bli ta funkcjonalno\u015b\u0107 zostanie zaimplementowana, request o bestsellery nale\u017cy zarejestrowa\u0107 w ECDP metod\u0105 1.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"brak-wynikow\">Brak wynik\u00f3w<a href=\"#brak-wynikow\" class=\"not-prose content-heading-link\">#<\/a><\/h3>\n\n\n\n<p>Gdy <code>props.state.items(0).length === 0<\/code>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Wy\u015bwietl komunikat o braku wynik\u00f3w dla danego zapytania.<\/li>\n\n\n\n<li>Wykonaj <strong>dodatkowy<\/strong> request do Recombee o bestsellery.<\/li>\n\n\n\n<li>Wywo\u0142aj <code>registerIncreaseBannerRecommendationAndView<\/code> dla tego requestu.<\/li>\n\n\n\n<li>Wy\u015bwietl alternatywne produkty.<\/li>\n<\/ol>\n\n\n\n<p>Ka\u017cdy request (r\u00f3wnie\u017c fallback na bestsellery) musi by\u0107 osobno zarejestrowany w ECDP.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"checklist-wdrozeniowy\">Checklist wdro\u017ceniowy<a href=\"#checklist-wdrozeniowy\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ka\u017cdy request do Recombee wywo\u0142uje <code>registerIncreaseBannerRecommendationAndView<\/code><\/li>\n\n\n\n<li>Ka\u017cdy link produktowy zawiera parametry <code>ecdp_recom<\/code> i <code>ecdp_banner_click<\/code><\/li>\n\n\n\n<li><code>recommId<\/code> w URL nie zawiera suffixu po <code>|<\/code><\/li>\n\n\n\n<li>Brak wynik\u00f3w generuje osobny request o bestsellery z trackingiem ECDP<\/li>\n\n\n\n<li>Otwarcie wyszukiwarki (puste zapytanie) generuje request o bestsellery z trackingiem ECDP (opcjonalnie)<\/li>\n\n\n\n<li>Bestsellery mog\u0105 by\u0107 cachowane po stronie frontendu (opcjonalnie)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" class=\"wp-block-heading\" id=\"model-rozliczeniowy\">Model rozliczeniowy<a href=\"#model-rozliczeniowy\" class=\"not-prose content-heading-link\">#<\/a><\/h2>\n\n\n\n<p>Wyszukiwarka rozliczana jest <strong>wsp\u00f3lnie z rekomendacjami produktowymi<\/strong> w ramach wsp\u00f3lnej puli request\u00f3w. Ka\u017cde wywo\u0142anie wyszukiwania generuje 1 request. Wolumen wyszukiwa\u0144 zosta\u0142 uwzgl\u0119dniony w przedstawionej ofercie.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"author":8,"featured_media":0,"parent":0,"menu_order":0,"template":"","ecdp-category":[],"class_list":["post-16779","ecdp","type-ecdp","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/ecdp\/16779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/ecdp"}],"about":[{"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/types\/ecdp"}],"author":[{"embeddable":true,"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/users\/8"}],"version-history":[{"count":5,"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/ecdp\/16779\/revisions"}],"predecessor-version":[{"id":16785,"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/ecdp\/16779\/revisions\/16785"}],"wp:attachment":[{"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/media?parent=16779"}],"wp:term":[{"taxonomy":"ecdp-category","embeddable":true,"href":"https:\/\/help.expertsender.com\/pl\/wp-json\/wp\/v2\/ecdp-category?post=16779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}