Aplikace nyní mohou používat jiné úložiště, než je Mergado Appcloud.
Většina dalších změn, které jsou uvedeny níže, vychází z této změny, která v některých oblastech zásadně mění paradigma, v jakém appky existují a fungují.
U appky v Developers je nová stránka Úložiště, kterou může vývojář použít ke správě úložiště zvlášť vývojové a zvlášť produkční verze appky.
Defaultní úložiště je vždy Appcloud. Potom lze každé verzi appky nastavovat jiné URL, které Mergado používá:
Při odesílání hook requestů.
Při posílání payloadů na endpointy pravidel appky.
Pro zobrazení IFRAMEů (widget i plná verze) při zobrazování appky v UI.
Pokud alespoň jedna verze appky nepoužívá Appcloud úložiště, pak při vytváření nového vydání na stránce Releases není možné spouštět tradiční release proces na Appcloudu.
Hook URL musí začínat stejnou URL, jako je Základní URL appky.
Lze nastavovat způsob routingu aplikace. Oproti stávajícímu pretty routingu ve stylu:
.../eshop/1/project/2
… lze nově nastavit i jednodušší routing přes GET parametry:
.../?eshop=1&project=2
Přepracovaný a zjednodušený životní cyklus aplikace.
Možnost “soběstačných” releasů aplikace.
Umožňuje použití pokročilejších CI a CD nástrojů.
Aplikace nově nepodléhá tradičnímu cyklickému vývoj-žádost o release-potvrzení podporou-release-vývoj....
Nové verze si vývojář řeší a vydává sám, bez explicitního potvrzování podporou Mergada.
Pokud vývojová i produkční verze aplikace užívá Appcloud úložiště, lze tradiční “appcloudovský” release spouštět i nadále - při vytvoření nového vydání na stránce Releases v Developers je k dispozici checkbox, který toto zajistí. (Více o této přepracované stránce níže.)
Pokud alespoň jedna verze na Appcloudu nesídlí, celý releasovací proces si musí vývojáři řešit sami. To však zároveň vývojářům umožňuje integraci pokročilých build či CI systémů do jejich vývojové workflow. A toto vše je možné, protože…
Nově má vývojář aplikace SSH přístup k oběma verzím appky(dříve byl přístup pouze k vývojové verzi).
Autoři aplikace tak mají větší kontrolu nad tím, co se s aplikací děje - např. je potřeba mít přístup k logům, je potřeba urychleně vydat fix nějaké chyby, nebo si vývojáři chtějí nakonfigurovat složitější build procesy přes nějaké externí CI nástroje.
Tradiční schvalovací proces toto zásadně brzdil či zcela znemožňoval.
Informace v Mergado Store se nyní “přelévají” tlačítkem Aktualizovat Store, bez předchozí kontroly podpory (je však o tomto aktu notifikována).
Poznámka: Informace se přelejí automaticky i při vytvoření nového release.
Přes to všechno má naše podpora v případě potřeby stále možnost zasáhnout a “zlobivou” aplikaci např. skrýt z Mergado Store, či ji u některého subjektu přímo vypnout.
Přepracovaná stránka Releases v Developers.
Namísto historie stavů mezi vývoj-žádost o release-potvrzení podporou-release-vývoj... jsou nyní na stránce s výdánímí appky vypsané běžné záznamy s novými verzemi aplikace, které vývojář může vytvářet, editovat i mazat.
Zatím se tato historie ukazuje jen v Developers a momentálně je především pro interní účely, aby podpora Mergada měla přehled o tom, co se v aplikaci kdy a jak změnilo.
V editoru “poznámek v vydání”lze používat Markdown.
Přepracované zabezpečení hook requestů ze strany Mergada.
V minulosti se o autentizaci hook requestů staral samotný Appcloud. Ten - pro vývojáře zcela transparentně - kontroloval, zda požadavky z Mergada obsahují správnou hodnotu speciální HTTP hlavičky. Pokud request na URL, kde appka přijímala hooky (.../_mergado/hook/), neobsahoval správnou hodnotu příslušné hlavičky, požadavek server vůbec nepustil dál. Protože nově appky mohou sídlit i jinde, než na Appcloudu, tento magický mechanismus se musel přepracovat a zjednodušit.
Nově se o autentizaci hook requestů musí starat samotná appka(resp. její vývojáři).
Jak to funguje:
Každá stage appky má vlastní náhodně vygenerovaný a tajný klíč, tedy Webhook Secret. Tento klíč je k dispozici u appky v Developers.
Daný klíč zná jen Mergado a vývojáři appky.
Mergado tento klíč posílá v HTTP hlavičceMergado-Apps-Webhook-Secret u všech requestů, které na appku míří - tj. všechny požadavky na hook endpoint a na endpointy pravidel aplikace.
Aplikace by při přijímání requestů na těchto endpointech měla kontrolovat správnou hodnotu tajného klíče - a odmítnout ty požadavky, které ji neobsahují.
Takto je zabráněno neoprávněným requestům od třetích stran.
Nový hook ping, kterým se v Developers dá jednoduše otestovat funkčnost hook endpointu aplikace.
U appky na stránce Přehled v Developers jsou dvě nová tlačítka (pro každou stage jedno), kterým se na hook endpoint appky dá odeslat testovací hook (POST request) v tomto formátu:
{
"action": "ping"
}
Pokud se na tento request vrátí odpověď ve formátu …
{
"message": "pong"
}
… považuje se hook za úspěšně vyřízený. Vrátí-li se cokoliv jiného, je to považováno za neúspěch. V obou případech se tento výsledek ihned zobrazí v UI.
Na Appcloudu je implementovaná možnost spouštět pre-release skript.
Tato možnost je k dispozici pouze v případě, že celý release appky probíhá v rámci Appcloudu. To znamená, že aby se pre-release spouštěl, musí obě stage appky musí jako úložiště používat Appcloud.
Jak to funguje:
Vývojová verze appky v rootu svého zdrojového kódu (např. /srv/production/apps/app_logbook.dev/app/) může obsahovat soubor s názvem mergado_pre_release.
Tento soubor se před přepsáním produkční verze verzí vývojovou zkopíruje do root adresáře se zdrojovým kódu produkční verze (např. /srv/production/apps/app_logbook/app/).
Zde se soubor spustí, pod uživatelem produkční verze appky. Respektuje se shebang, takže tento skript může být napsaný jak v bashi, tak třeba i v PHP.
Release pokračuje až po skončení tohoto skriptu (bez ohledu na výsledek). Pokud tento skript neskončí do jedné hodiny, ukončí se, výsledek se ignoruje a release pokračuje dál.
V Developers je nově k dispozici anglická jazyková verze Mergado Store banneru.
Aplikace lze nově označit jako “deprecated”.
U “deprecated” appky bude na její stránce v Mergado Store vidět hláška, že již není ve vývoji.
Lze nastavit jinou appku, jakožto nástupce, na kterou se u dané hlášky v Mergado Store bude odkazovat.
Je to marketing-friendly alternativa k úplnému smazání aplikace.
{
"name": "Product has CZ country in square brackets",
"query": "[PRODUCT] CONTAINS \"[cz]\"",
"read_only": false,
"search_output": true
}
Tyto operátory doplňují původní regulární operátory ~ a !~, které by u výše uvedeného příkladu pravou stranu interpretovaly nikoliv jako čistý text, nýbrž (chybně) jako regulární výraz (buď znak “c” a nebo znak “z”).
Pravidlo nastavení dopravy nyní správně vytváří element PRICE_COD pro formát Favi.cz, Favi.sk a Favi.ro.
Opravena chyba, kdy převodník na Zboží.cz pomíchával pořadí elementů s obrázky.
Opravena chyba, kde Google/Facebook převodník špatně vyplňoval měnu.
Vydáváme Mergado API v nové major verzi 2.0.
API je nyní verzováno. V hlavičce Accept je možné zadat požadovanou verzi API, a to v této podobě:
application/mergado-v2+json
Pokud není vyžádána konkrétní verze, použije se výchozí(tj. verze 1). Veškeré změny vycházející z této nové verze jsou sepsány níže.
Změny ve staré verzi Mergado API
Endpointy /stats/audits/<id>/ a /stats/audits/<id>/issues statistických auditů mohou obsahovat nový verdict missing_stats.
Použije se, pokud ve statistikách chybí hodnota potřebná pro validaci. Např. validátor heureka_price_status vyžaduje hodnotu min_price_2, která však chybí v sortiment reportu z Heureky, pokud produkt prodává jen jeden eshop.
Endpointy /products/<id>/stats/ a /projects/<id>/stats/products/ a /shops/<id>/stats/products/:
Pole stats.price, stats.heureka_is_alone, stats.heureka_cpc_status, stats.heureka_is_paired, stats.heureka_margin_status, stats.heureka_price_status, stats.heureka_position_status a stats.heureka_profit vždy vrací null(pro zachování alespoň částečné zpětné kompatibility).
Přidáno pole heureka_id, které odpovídá poli product_id ze sortiment reportu Heureky.
Změny v Mergado API v2.0
Endpointy /shops/<id>/statslogs/ a /statslogs/<id>/
Nový typ logů audit nahradil původní typ report.
Endpoint /products/<id>/stats/
Nově vrací historii statistik (původně vracel statistiky pro jeden den) - vrací se tedy kolekce (seznam) místo jednoho záznamu.
Pokud se v URL zašle parametr date, vrátí seznam o jednom prvku, kterým jsou statistiky pro zadaný den.
Jinak je možné specifikovat start_date a end_date.
Pokud není specifikováno nic, použije se výchozí start_date(měsíc nazpět) a end_date(včerejšek).
Úpravy polí:
Přidáno pole heureka_id, které odpovídá poli product_id ze sortiment reportu Heureky.
Odstraněná pole:
price
heureka_is_alone
heureka_cpc_status
heureka_is_paired
heureka_margin_status
heureka_price_status
heureka_position_status
heureka_profit
Přejmenovaná pole:
categorytextheureka_categorytext
delivery_dateheureka_delivery_date
heureka_cpcheureka_feed_cpc
heureka_stats_clicksheureka_clicks
heureka_stats_cost_of_salesheureka_cost_of_sales
heureka_stats_cpcheureka_cpc
heureka_stats_salesheureka_sales
heureka_stats_total_costheureka_total_cost
heureka_stats_total_ordersheureka_total_orders
imgurlheureka_imgurl
manufacturerheureka_manufacturer
urlheureka_shop_url
heureka_nameheureka_card_name
price_vatheureka_price_vat
nameheureka_name
Polím cost, is_starter a is_topseller byl přidán prefix mergado_:
costmergado_cost
is_startermergado_is_starter
is_topsellermergado_is_topseller
Přidána pole Zboží.cz CVS reportu:
zbozi_conversion_cost_czk
zbozi_conversion_cost_czk_product_detail
zbozi_conversion_cost_czk_category_search
zbozi_conversion_cost_czk_top_product_detail
zbozi_conversion_cost_czk_category_listing
zbozi_conversion_cost_czk_search_result
zbozi_cpc_czk_product_detail
zbozi_cpc_czk_category_search
zbozi_cpc_czk_top_product_detail
zbozi_cpc_czk_category_listing
zbozi_cpc_czk_search_result
zbozi_cpc_czk_vat_product_detail
zbozi_cpc_czk_vat_category_search
zbozi_cpc_czk_vat_top_product_detail
zbozi_cpc_czk_vat_category_listing
zbozi_cpc_czk_vat_search_result
zbozi_conversions_value_czk_product_detail
zbozi_conversions_value_czk_category_search
zbozi_conversions_value_czk_top_product_detail
zbozi_conversions_value_czk_category_listing
zbozi_conversions_value_czk_search_result
zbozi_conversions_value_czk
zbozi_id
zbozi_name
zbozi_last_known_category
zbozi_conversion_rate_product_detail
zbozi_conversion_rate_category_search
zbozi_conversion_rate_top_product_detail
zbozi_conversion_rate_category_listing
zbozi_conversion_rate_search_result
zbozi_conversion_rate
zbozi_cpr_product_detail
zbozi_cpr_category_search
zbozi_cpr_top_product_detail
zbozi_cpr_category_listing
zbozi_cpr_search_result
zbozi_cpr
zbozi_conversions_product_detail
zbozi_conversions_category_search
zbozi_conversions_top_product_detail
zbozi_conversions_category_listing
zbozi_conversions_search_result
zbozi_conversions
zbozi_products_sold_through_zbozi
zbozi_direct_conversions
zbozi_card_name
zbozi_bid_click_through_product_detail
zbozi_bid_click_through_category_search
zbozi_bid_click_through_top_product_detail
zbozi_bid_click_through_category_listing
zbozi_bid_click_through_search_result
zbozi_bid_click_through
zbozi_avg_position_product_detail
zbozi_avg_position_top_product_detail
zbozi_views_product_detail
zbozi_views_category_search
zbozi_views_top_product_detail
zbozi_views_category_listing
zbozi_views_search_results
Dále přidána pole z feedu Zboží.cz:
zbozi_delivery_date
zbozi_categorytext
zbozi_max_cpc
zbozi_max_cpc_search
zbozi_manufacturer
zbozi_brand
zbozi_shop_url
zbozi_imgurl
zbozi_price_vat
Endpointy /projects/<id>/stats/products/ a /shops/<id>/stats/products/:
Stejné změny jako u /products/<id>/stats/.
Endpoint /shops/<id>/info/:
mergado.output_feedmergado.output_feed_heureka.
mergado.reportmergado.audit.
Přidány typy mergado.output_feed_zbozi a zbozi.product_stats_report.
Pro appky vázané na export se v seznamu subjektů s ID exportu nově, pro lepší identifikaci, zobrazuje i ID e-shopu.
Nový endpointhttps://api.mergado.com/maintenance na kterém je dostupný seznam plánovaných výpadků Mergada - i zpětně.
Může pomoci diagnostikovat chyby či jiné anomálie, se kterými se appka může v dané časy potýkat.
Změna chování endpointu pro pravidla:
Při vytváření pravidla je nyní nutné explicitně specifikovat výběr či výběry, na které se pravidlo má aplikovat. Pole queries tedy musí být přítomné a musí obsahovat alespoň jeden výběr. Poznámka: ID výběru “pro všechny produkty” je k dispozici na endpointu s informacemi o konkrétním exportu.
Pokud toto požadavek nesplňuje, API při vytváření pravidla vrátí chybu 400.
Pokud se při úpravě pravidla přes metodu PATCH seznam výběrů vůbec nepošle, tak se výběry na pravidle nezmění.
Parametr filter_by podporuje nový operátor _exists_(s podtržítky), ve kterém je seznam polí produktu. Endpoint potom vrátí jen takové produkty, u kterých jsou tato pole skutečně definovaná.
V případě nevalidního seznamu se vrátí chyba 400.
Opravili jsme filtrování podle pole item_id, které nefungovalo.
Server vrátí chybu 400, pokud se v parametrech pošle nevalidní seznam (např. ?filter_by={"item_id__in": "123456789"}).
Optimalizovali jsme kompilaci MQL s velkým množstvím parametrů (tisíce a víc).
V testech jsme u takových velkých výběrů (např. výběr s operátorem IN, kde je 10000+ hodnot) zaznamenali zrychlení kompilace MQL z řádů minut na sekundy.
Vytváření a úpravy takových velkých výběrů přes API by nyní mělo být svižnější.
První část změn byla vydána již před dvěma týdny - jsou popsané zde i s ostatními.
Naše API má nový endpoint, který slouží jako proxy pro přístup k Google Analytics. Každá appka si skrz něj může tahat volitelná data z Google Analytics patřící e-shopu, ke kterému má daná appka přístup. (Je potřeba mít OAuth2 scope shop.ga.read.) Požadavky z appek jsou při průchodu naším API autorizované díky přístupům, které má daný e-shop nastavené v klíčence Mergado Keychain.
Záznamy procesů z historie exportu jsou nyní defaultně řazeny podle políčka started_at.
Dříve se řadilo dle finished_at, což však u zatím nedokončených procesů dělalo neplechu.
Endpointy:
https://api.mergado.com/projects/<id>/applylogs/
https://api.mergado.com/projects/<id>/importlogs/
https://api.mergado.com/projects/<id>/exportlogs/
Nyní je skrz Mergado App IFRAME API (MAIA)možné upravit adresu v URL řádku Mergada tak, že takovou adresu potom lze zkopírovat a opět otevřít s tím, že se změna propíše do URL appky uvnitř IFRAME.
Nová metoda Mergado.setAppRoute(string: url_after_base), kde url_after_base představuje část URL která je za base URL appky.
To znamená, že např. pokud je styl routování appky nastavený na “Pretty URL”, appka do této metody musí posílat i tu část URL, která specifikuje kontext(tzn. ID projektu/exportu či ID e-shopu).
V Mergadu je nově možnost vytvořit testovací export.
Může si jej aktivovat pouze uživatel vedený jako vývojář pro platformu Mergado. Takový uživatel uvidí tuto možnost na stránce s Nastavením exportu.
Počet výstupních položek v takovém feedu není započítáván do celkového počtu položek v e-shopu (z tohoto počtu se počítá částka pro fakturaci).
U tohoto exportu nejdou zapínat produkční verze cizích aplikací. Tzn. aby u testovacího exportu mohl uživatel/vývojář zapnout produkční verzi aplikace, musí patřit do jejího vendora (resp. být jejím vendorem).
Takový export nemá nastavený CRON a pokus o stažení výstupního feedu je přesměrovaný na feed vstupní. (Tzn. výstupní hodnoty je možné procházet pouze skrze rozhraní Mergada.)
Pozn. Je možné, že v rámci institutu testovacích exportů ještě dodatečně omezíme maximální počet položek, které může takový export obsahovat.
Nově je v Developersmožnost nechat si zobrazit seznam procesů appky v databázi na Appcloudu přes UI.
Může pomoci diagnostikovat problémy s appkou - tento seznam procesů je přístupný i v případě, že appka překročí maximální počet spojení do databáze Appcloudu.
Opraveny případy, kdy při mazání elementu přes API často nastávala chyba 500.
Upraveno chování pole applied_to_all_items přítomné u apply logů tak, aby nabýval hodnoty true v případě, že se pravidla aplikovala na všechny neskryté produkty.
Upraveno chování testovacích exportů: Namísto kompletně vypnutého plánovače přegenerování je nyní vypnutý pouze finální export(v rámci automatického přegenerování se přeskočí).
Odebírání stávajících webhooků ping, app.enable, app.disable je nadále natvrdo aktivované pro všechny appky.
Pokud se do naší Google Analytics Proxy pošle request bez ID profilu, vyplní se automaticky podle informací z e-shopu.
U přepínače pro zapnutí testovacího režimu exportu je doplněná drobná nápověda.
Pokud Mergado v rámci aplikování pravidel nějaké appky dostane zpět nevalidní JSON, tak proces skončí s chybou.
Předchozí chování bylo takové, že Mergado nic nenahlásilo a nevalidní odpověď se ignorovala.
Validní formát je toto:
{
"data": [ ... ]
}
Přidali jsme podporu pro vytváření MQL výběrů přímo přes URL adresu v prohlížeči.
Lze použít URL ve formě: https://app.mergado.com/projects/<id>/queries/?<params>
… kde <params> představuje tyto GET parametry:
mql: MQL podmínka pro výběr.
target: Hodnota input(vstup) či output(výstup) podle toho, zda má výběr cílit na vstupní hodnoty a nebo výstupní.
Při přístupu na URL tohoto nového systému pro “okamžité MQL výběry” následně proběhne přesměrování na stránku, která v URL obsahuje ID tohoto nového výběru. Takový výběr je dočasný a pokud si jej uživatel do určité doby explicitně neuloží, nedá se spoléhat na existenci výběru s tímto ID.
Dočasné - neuložené - výběry jsou po nějaké době odstraňovány.
Přístup na URL představující již existující “dočasný výběr” u daného projektu se přesměruje na daný existující výběr - a nebude se vytvářet výběr s novým ID.
Upravili jsme způsob, jakým pracujeme s přihlášením na Heureku. Nyní by se mělo předcházet situacím, kdy se kvůli nevalidním credentials Heureka shopu A znemožní přihlášení k shopu B, který má přihlašovací údaje validní.
Získávání informací z Heureky je o něco robustnější - pro vývojáře to znamená lepší dostupnost dat o Heureka shopech z našeho API.