MCP: zákazníci, recenze a zprávy
Nástroje MCP pro zákazníky, cenové skupiny, recenze, zprávy z kontaktního formuláře, žádosti podle GDPR a čekací listinu: oprávnění, potvrzení a parametry.
Zákazníci a jejich cenové skupiny, historie e-mailů a SMS, které jim obchod poslal, moderace recenzí, schránka zpráv, žádosti podle GDPR a čekací listina v pořadí zápisu. Čtecí nástroj vrací osobní údaje, proto oprávnění customers:read dávejte jen klientům, které je opravdu potřebují. O rozhodnutí o žádosti o velkoobchod dostane zákazník e-mail.
Nástroje volá klient přes server MCP na doméně obchodu, například https://muj-eshop.cz/api/mcp, a v odpovědi na tools/list dostane jen ty, na jejichž oprávnění klíč dosáhne. Jak server mluví, kdy se ptá člověka a jak se změny vracejí, popisuje článek MCP server.
U každého nástroje stojí oprávnění, které chce, jestli se server před provedením zeptá člověka a kudy, jestli volání strhne kredity obchodu nebo peníze z karty, co vrací pro deník změn a jakou větu o důsledku člověk v potvrzení uvidí. Všechno z toho se vyhodnocuje z téhož kódu, podle kterého se server rozhoduje. Popisy parametrů jsou převzaté ze schématu, které server posílá v tools/list; kde se v něm text obrací přímo k modelu, je tady převedený do vykání. Povinnost parametru platí uvnitř objektu, ve kterém parametr leží.
Před zápisem, který přepisuje nebo maže, před útratou kreditů nebo platbou kartou a před hledáním mimo obchod se server ptá člověka a do té doby neprovede nic. Nejdřív použije schválení, které pro totéž volání se stejnými hodnotami už v administraci leží schválené. Jinak se zeptá formulářem, když ho klient deklaruje a politika akce ho dovoluje; formulář potvrzuje ten, kdo drží klíč, takže před ukradeným klíčem takové potvrzení nechrání. Otázka ve formuláři nese pod nadpisem „Co se změní“ tytéž řádky jako stránka schválení. Klient s elicitací URL dostane odkaz na stránku schválení v administraci a klient bez elicitace odmítnutí approval_required s odkazem v _meta; po schválení volání zopakuje se stejnými hodnotami. Na stránce schválení rozhoduje jen přihlášený člověk, kterého u každé akce jmenuje odrážka Potvrzení přes MCP, a účet podpory SHOPZI nikdy. Když politika nedovoluje nic, co klient umí, přijde odmítnutí confirmation_required a neprovede se nic. Výsledek potvrzeného volání nese v _meta["cz.shopzi/confirmation"] údaj, že akci potvrdil člověk a kde (form nebo approval), a v obsahu českou větu pro model, u placené akce i s cenou a zůstatkem kreditů z dotazu. Na otázku formulářem je 15 minut, schválení na stránce platí 60 minut, pokud u akce není uvedeno jinak.
Zápisové nástroje vracejí v poli change_id ID záznamu v deníku změn; co pole u kterého nástroje nese, říká jeho odrážka Deník změn. Změnu z deníku vrací shopzi_undo_change podle jejího druhu: obnoví předchozí hodnoty, u skladu zapíše vyrovnávací pohyb, u běžné ceny zapíše návrat do 30denní historie cen (nic z ní nemaže) a změnu, která už opustila obchod nebo stála peníze (odeslaný e-mail, stržené kredity, platbu kartou), odmítne s vysvětlením.
shopzi_list_customers
Vrátí podle resource zákazníky (s filtry a řazením jako obrazovka Zákazníci, třeba podle útraty), cenové skupiny, recenze k moderaci, zprávy z kontaktního formuláře, žádosti podle GDPR, čekací listinu ze stránky před spuštěním v pořadí zápisu (waitlist, jiný seznam přes listKey), nebo historii e-mailů a SMS odeslaných zákazníkům (emails, bez těla zprávy). Výsledek obsahuje osobní údaje zákazníků.
- Oprávnění:
customers:read, u klíče „Zákazníci, skupiny, recenze, zprávy, historie e-mailů a SMS a žádosti GDPR (čtení)“. - Druh: čtení (
readOnlyHint). - Potvrzení přes MCP: ne.
- Kredity a platba kartou: ne.
shopzi_list_customers: oblasti
customersgroupsreviews(Recenze)messagesgdpr_requestswaitlistemails
shopzi_list_customers: parametry
resource(jedna z hodnotcustomers,groups,reviews,messages,gdpr_requests,waitlistaemails; povinný)listKey(text, 1 až 48 znaků; nepovinný): Jenwaitlist: klíč seznamu z bloku formuláře. Vynechané =cekaci-listina.search(text; nepovinný): Jencustomers: hledá v e-mailu, jménu a názvu firmy. Jenmessages: hledá ve jménu, e-mailu a textu zprávy.customerStatus(jedna z hodnotactive,suspendedadeleted; nepovinný): Jencustomers:active= aktivní,suspended= pozastavený nebo deaktivovaný,deleted= ke smazání nebo anonymizovaný.b2bStatus(jedna z hodnotnone,pending,verifiedarejected; nepovinný): Jencustomers: stav žádosti o velkoobchod.pendingje fronta k rozhodnutí, kterou vyřizujeshopzi_manage_customersoperation: decide_b2b.consent(jedna z hodnotsubscribed,noneasuppressed; nepovinný): Jencustomers:subscribed= odběratelé newsletteru,none= bez souhlasu,suppressed= odhlášení nebo zablokovaní. Rozeslat kampaň nástrojem nelze, to dělá člověk.sort(jedna z hodnotemail,name,created,orders,spent,last_orderaconsent; nepovinný): Jencustomers: spent = útrata, orders = počet objednávek, created = registrace. Vynechané = nejnovější registrace první.dir(jedna z hodnotascadesc; nepovinný): Jencustomers, výchozídesc.customerId(UUID; nepovinný): Jenemails: ID zákazníka (resource: customers).orderId(UUID; nepovinný): Jenemails: ID objednávky.email(text, 3 až 320 znaků; nepovinný): Jenemails: přesná adresa příjemce; najde i zprávy hostům.reviewStatus(jedna z hodnotpending,published,rejectedareported; nepovinný): Jenreviews: která fronta moderace. Výchozípending.messageStatus(jedna z hodnotnew,readaarchived; nepovinný): Jenmessages: filtr stavu. Vynechané = všechny.gdprStatus(jedna z hodnotpending,processing,completedarejected; nepovinný): Jengdpr_requests: filtr stavu. Vynechané = všechny.limit(celé číslo od 1 do 100, výchozí25; nepovinný): Počet položek na stránku, 1 až 100. Velká stránka se do jedné odpovědi nemusí vejít a nástroj ji pak odmítne, což stojí krok navíc: berte jen tolik položek, kolik na odpověď opravdu potřebujete.offset(celé číslo od 0 do 100000, výchozí0; nepovinný): Kolik položek přeskočit. 0 = první stránka.
shopzi_moderate_review
Schválí, zamítne, označí za spam, skryje nebo obnoví recenzi a zveřejní nebo stáhne veřejnou odpověď obchodu pod ní.
-
Oprávnění:
customers:write, u klíče „Recenze a zákazníci (zápis)“. -
Druh: zápis, který umí přepsat nebo smazat existující data (
destructiveHint). -
Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
approval_required. Na stránce schválení rozhoduje vlastník nebo manažer obchodu. -
Kredity a platba kartou: ne.
-
Deník změn: výsledek nese
change_id. ID záznamu v deníku. Předejte ho doshopzi_undo_change. -
Věta o důsledku, kterou člověk uvidí v potvrzení:
Schválení recenze, která teprve čekala na posouzení, se vrátit NEDÁ: do fronty čekajících ji nevrátí ani „vrátit zpět“, protože do ní recenzi zařazuje jen systém. Zpátky z ní vede skrytí nebo zamítnutí, ne návrat do fronty. Schválená recenze i vaše odpověď jsou VEŘEJNÉ, tedy vidí je každý na stránce produktu, a schválení a zamítnutí přepočítá hvězdičkové hodnocení produktu. Skrytí, zamítnutí, spam a stažení odpovědi se vracejí celé.
shopzi_moderate_review: parametry
reviewId(UUID; povinný): ID recenze ve tvaru UUID.action(jedna z hodnotapprove,reject,spam,hide,reinstate,replyaunpublish_reply; povinný): approve = zveřejnit, reject = zamítnout, spam = označit za spam, hide = stáhnout, reinstate = vrátit skrytou zpět, reply = zveřejnit nebo přepsat odpověď obchodu (text v polireply), unpublish_reply = stáhnout odpověď obchodu. Poslední dvě nechávají stav recenze i její hvězdičky beze změny.reply(text nebonull; nepovinný): Veřejná odpověď obchodu pod recenzí. Vynechané pole = odpověď se nemění, prázdné = stávající odpověď se stáhne.idempotencyKey(text, 1 až 200 znaků; nepovinný): Klíč idempotence. Stejný klíč = stejný zápis: opakované volání vrátí původní výsledek a NEZAPÍŠE podruhé. Použijte vlastní náhodný řetězec pro každou zamýšlenou změnu; při opakování po chybě sítě pošlete tentýž.
shopzi_manage_customer
Založí kartu zákazníka, rozhodne o čekající žádosti o velkoobchod, přepíše marketingové štítky zákazníka, nebo archivuje přečtenou zprávu. O rozhodnutí o velkoobchodu dostane zákazník e-mail stejně jako z administrace a ten vzít zpět nejde; ostatní operace nic neodesílají. Založení karty vrátit nejde.
- Oprávnění:
customers:write, u klíče „Recenze a zákazníci (zápis)“. - Druh: zápis, který umí přepsat nebo smazat existující data (
destructiveHint). - Potvrzení přes MCP: ano: formulář v klientu, který potvrdí ten, kdo drží klíč; jinak odkaz na stránku schválení přes elicitaci URL; jinak odkaz na stránku schválení v odmítnutí
approval_required. Na stránce schválení rozhoduje vlastník nebo manažer obchodu. - Kredity a platba kartou: ne.
- Deník změn: výsledek nese
change_id. ID záznamu v deníku. Předejte ho doshopzi_undo_change. - Věta o důsledku, kterou člověk uvidí v potvrzení: podle
operation, viz seznam níž.
shopzi_manage_customer: operace
-
create(založit)-
Věta o důsledku v potvrzení:
Založí se nová karta zákazníka s uvedenými údaji. Zákazníkovi nic neodejde a heslo se nezakládá. Vrátit to nejde: kartu zruší jen výmaz podle GDPR, který schvaluje člověk v administraci.
-
-
decide_b2b(rozhodnout o žádosti o velkoobchod)-
Věta o důsledku v potvrzení:
Rozhodnutí o žádosti o velkoobchod platí hned: schválený zákazník uvidí ceny své cenové skupiny, zamítnutý zůstane u běžných cen. E-mail mu o tom neodejde, dejte mu vědět sami. Vrátit to jde.
-
-
set_tags(přepsat marketingové štítky)-
Věta o důsledku v potvrzení:
Štítky se PŘEPISUJÍ celé: co v seznamu níž není, zákazníkovi zmizí. Rozhodují zároveň o tom, kdo padne do segmentu, tedy komu by šla budoucí kampaň; odeslat ji ale umí jen člověk v administraci a před odesláním uvidí, kolika lidem to půjde. Vrátit to jde. Archivace zprávy nic zákazníkovi neposílá a nesmaže: jen ji uklidí z fronty. Týká se výhradně zprávy, kterou už někdo přečetl, takže počet nepřečtených zpráv se tím nezmění, a vrátit ji z archivu jde jedním krokem.
-
-
archive_message(archivovat vyřízenou zprávu)-
Věta o důsledku v potvrzení:
Štítky se PŘEPISUJÍ celé: co v seznamu níž není, zákazníkovi zmizí. Rozhodují zároveň o tom, kdo padne do segmentu, tedy komu by šla budoucí kampaň; odeslat ji ale umí jen člověk v administraci a před odesláním uvidí, kolika lidem to půjde. Vrátit to jde. Archivace zprávy nic zákazníkovi neposílá a nesmaže: jen ji uklidí z fronty. Týká se výhradně zprávy, kterou už někdo přečetl, takže počet nepřečtených zpráv se tím nezmění, a vrátit ji z archivu jde jedním krokem.
-
Hodnota bez odrážky Věta o důsledku v potvrzení žádnou takovou větu nemá.
shopzi_manage_customer: parametry
operation(jedna z hodnotcreate,decide_b2b,set_tagsaarchive_message; povinný): create = založit kartu zákazníka; decide_b2b = rozhodnout o žádosti o velkoobchod; set_tags = přepsat marketingové štítky zákazníka; archive_message = uklidit z fronty dotazů zprávu, kterou už někdo přečetl a vyřídil.customerId(text; nepovinný):decide_b2baset_tags: ID zákazníka zeshopzi_list_customers(resource: customers).messageId(UUID; nepovinný): Jenarchive_message: ID zprávy zeshopzi_list_customers(resource: messages).fields(objekt; nepovinný): Jencreate: údaje nového zákazníka.fields.email(text; nepovinný): POVINNÝ při zakládání: přihlašovací e-mail zákazníka. Heslo se nezakládá ani neposílá, zákazník si ho nastaví přes „zapomenuté heslo“.fields.firstName(text nebonull; nepovinný)fields.lastName(text nebonull; nepovinný)fields.phone(text nebonull; nepovinný)fields.companyName(text nebonull; nepovinný): Vyplněný název firmy nebo IČO označí zákazníka jako firmu.fields.ico(text nebonull; nepovinný): IČO firmy.fields.dic(text nebonull; nepovinný): DIČ firmy.decision(jedna z hodnotapproveareject; nepovinný): Jendecide_b2b: approve = schválit, reject = zamítnout.note(text nebonull; nepovinný): Jendecide_b2b+reject: důvod zamítnutí. Zůstane na kartě a zákazník ho dostane v e-mailu o zamítnutí.customerGroupId(text; nepovinný): Jendecide_b2b+approve: cenová skupina zeshopzi_list_customers(resource: groups). Vynechané pole zařadí firmu do velkoobchodní skupiny obchodu.tags(pole, položka: text, nejvýš 40 znaků, nejvýš 20 položek; nepovinný): Jenset_tags: ÚPLNÝ seznam štítků, které má zákazník mít. Zápis je náhrada, ne přidání, takže si současné štítky nejdřív načtěte přesshopzi_list_customers(resource: customers) a pošlete je zpátky i s tím novým. Prázdný seznam štítky zruší. Štítky se ukládají malými písmeny a bez mezer na krajích, protože je segmenty porovnávají PŘESNĚ.idempotencyKey(text, 1 až 200 znaků; nepovinný): Klíč idempotence. Stejný klíč = stejný zápis: opakované volání vrátí původní výsledek a NEZAPÍŠE podruhé. Použijte vlastní náhodný řetězec pro každou zamýšlenou změnu; při opakování po chybě sítě pošlete tentýž.