Prémiové čištění / Návrh propojeného řešení
01 / Srozumitelně. Od prvního kliknutí po zakázku.

Ať vás lidé najdou.
A poptávky mají
své místo.

Plán pro Prémiové čištění: viditelnější web ve vyhledávání, rychlá reakce na příchozí zprávy a společný přehled zákazníků i zakázek. Všechno krok za krokem, bez nutnosti rozumět IT.

ŘEŠENÍ NAVRHUJE
JEDEN NAVAZUJÍCÍ PROCES
01
Zákazník vás najde.Google, mapy, nový web
02
Napíše, co potřebuje.Facebook, Instagram, formulář
03
Tým ví, co má udělat.CRM, podklady, nabídka, termín
SEO znovu ověřeno 15. 10. 2026CRM a propojení: návrh k realizaciUkázky používají smyšlená data.
A / VYHLEDÁVÁNÍ

SEO přivede vhodné zájemce.

Pomůže vyhledávači pochopit, co čistíte a kde působíte. Člověk pak snáze najde konkrétní službu a důvody, proč oslovit právě vás.

B / KOMUNIKACE

Chatbot sesbírá zadání.

Zeptá se na službu, obec, přibližnou plochu a fotografie. Když zákazník něco neví, konverzace může pokračovat a převezme ji člověk.

C / KAŽDODENNÍ PRÁCE

CRM udrží přehled.

Na jedné kartě budou údaje, fotografie, nabídka, termín i další úkol. Dosavadní tabulky převedeme kontrolovaným importem.

Co tato stránka představujeSEO část popisuje veřejně zkontrolovaný současný web. CRM, automatizace a datový přenos popisují navržený cílový stav. Ukázka nic neposílá do Facebooku, Instagramu ani skutečného CRM. Přiložený skript potřebuje před spuštěním skutečné API a schválené nastavení.
02 / Současný web pod lupou

Základ existuje.
Potenciál zůstává.

Současný web je dostupný a má část technického základu. Kontrola ale potvrdila konkrétní nedostatky v popisu stránek, struktuře a práci s obsahem.

29 / 29adres ze sitemap vrátilo HTTP 200
11stránek bez nadpisu H1 ve zdrojovém HTML
6stránek bez meta description
3dvojice stránek se stejným titulkem
Co už je v pořádku

Není potřeba začínat od nuly.

  • Všech 29 URL uvedených v mapách stránek bylo dostupných.
  • Web používá HTTPS. Je k dispozici soubor robots.txt a index sitemap.
  • Kontrolované stránky mají uvedenou preferovanou adresu, tzv. canonical. Je však potřeba opravit její použití u duplicit.
  • Ve zdrojovém kódu existují základní strukturovaná data pro web, stránku a drobečkovou navigaci.
  • Firma má skutečné realizace, nabídku služeb a fotografie. To jsou dobré podklady pro kvalitnější obsah.
Co bez přístupů nevíme

Dostupnost není totéž co viditelnost.

  • HTTP 200 znamená „stránka se načetla“. Nedokazuje zařazení do Googlu.
  • Bez Search Console neznáme skutečné dotazy, prokliky, pozice ani problémy s indexací konkrétního webu.
  • Nemáme ověřené nastavení firemního profilu v Mapách ani analytiky.
  • Nepřidělujeme smyšlené Lighthouse skóre. Počet souborů není měřením rychlosti.
  • Ze samotné kontroly nelze slíbit konkrétní počet nových zakázek.

Metoda: veřejné HTTP načtení robots.txt, čtyř dílčích sitemap a všech 29 URL, rozbor původního HTML bez přihlášení a bez vykreslovacího testu. Opakovaná kontrola 15. 10. 2026, 23:12 SELČ. Výsledky se vztahují k tomuto okamžiku. Úplný seznam kontrolovaných adres ↓

01

Některým stránkám chybí jasný hlavní nadpis.

Priorita: vysoká11 z 29 bez H1

Jednoduše: hlavní nadpis je jako název kapitoly v knize. Návštěvník i vyhledávač mají rychle poznat, o čem stránka je. H1 na úvodní stránce dnes pojmenovává sekci otázek; nevyjadřuje hlavní službu firmy.

Co upravímeKaždá důležitá stránka dostane srozumitelný hlavní nadpis a navazující podnadpisy. Na úvodu například „Čištění fasád, střech a dlažby v Moravskoslezském kraji“.
Co tím získámeJasnější význam stránky a snadnější čtení. Samotné doplnění H1 nezaručí vyšší pozici a více H1 není automaticky postih.

Příklad: impregnace betonové dlažby ↗Zásady Google ↓

02

Titulky a popisy neodlišují stránky dostatečně.

Priorita: vysoká6 bez popisu · 3 dvojice titulků

Jednoduše: titulek je název výsledku ve vyhledávání. Popis je krátké vysvětlení pod ním. Dvě stránky se stejným názvem mohou být hůře rozlišitelné. Některé popisy se opakují i u rozdílných služeb; například ochrana fasády používá popis čištění.

Co upravímeVlastní titulek a popis pro každou hlavní službu. Text vysvětlí službu, skutečnou oblast působení a další krok. Odstraníme opakování názvu firmy v titulku úvodu.
Co je dobré vědětGoogle může název i úryvek přepsat. Meta description není přímý faktor pořadí, může ale pomoci člověku rozhodnout se pro kliknutí.

Příklad: ochrana fasády ↗Jak Google vytváří úryvky ↓

03

Stejné téma existuje na více adresách.

Priorita: vysokáKrátké a datované URL

Jednoduše: web má dvě „vizitky“ pro velmi podobný nebo stejný obsah. U vysokotlakého čištění a odstranění mechu jsou dostupné krátké i datované adresy. Obě verze odkazují canonicalem samy na sebe. U ochrany fasády jsou také dvě verze stejného tématu; obsah se liší.

Co upravímeUrčíme hlavní stránku podle významu a dostupných dat. Skutečné duplicity sloučíme, staré adresy přesměrujeme na relevantní novou adresu a opravíme odkazy i sitemap.
Co tím získámeKonzistentní signály o hlavní verzi. Nejde automaticky o penalizaci za duplicitu; problém je nejasná struktura a rozdělení pozornosti mezi adresy.

Vysokotlaké čištění — krátká URL ↗Vysokotlaké čištění — datovaná URL ↗Vysvětlení canonicalu ↓

04

Realizace ukazují výsledek, ale málo vysvětlují.

Priorita: vysoká104 / 107 prázdných alt u galerie fasád

Jednoduše: krásné fotografie jsou přesvědčivé, ale bez kontextu se hůře pozná, kde se pracovalo, co bylo za problém a jaké řešení firma zvolila. U galerie fasád má 104 ze 107 obrázků prázdný atribut alt.

Co upravímeZ vybraných zakázek uděláme stručné případové studie: obec, typ povrchu, původní stav, postup a výsledek. U významových fotografií doplníme věcný alternativní popis.
Důležitá výjimkaPrázdný alt je v pořádku u čistě dekorativních obrázků. Neznamená to 104 automatických chyb; jednotlivé fotografie posoudíme. Do popisů nebudeme hromadit klíčová slova.

Otevřít galerii fasád ↗Google: obrázky a popisy ↓

05

Chybí podrobnější označení firmy a služeb pro stroje.

Priorita: středníZákladní schema už existuje

Jednoduše: strukturovaná data jsou štítky ve zdrojovém kódu. Pomáhají strojům rozpoznat firmu, její služby a související informace. V kontrolovaném HTML nebyly nalezeny typy LocalBusiness, Organization ani Service.

Co upravímeDoplníme vhodná data pro skutečnou firmu a služby, navázaná na obsah viditelný na stránce. Nepřidáme falešné adresy, hodnocení ani nepodložené údaje.
Co neslibujemeStrukturovaná data nezaručí lepší pořadí ani rozšířený výsledek. Typ Service sám o sobě není zárukou zvláštního zobrazení v Googlu.

Google: údaje místní firmy ↓

06

Technickou náročnost prověříme skutečným měřením.

Priorita: podle měřeníÚvod: přibližně 320 kB HTML

Zdrojový HTML dokument úvodu má 320 138 bajtů, odkazuje na 25 externích skriptů a 26 stylových souborů. To je důvod prověřit nepotřebné doplňky a načítání. Není to důkaz, že se web konkrétnímu uživateli načítá pomalu. Nejde o objem přenesený sítí ani součet všech obrázků.

Co ověřímeNačtení hlavního obsahu, odezvu na kliknutí, poskakování rozložení a mobilní chování. Zvlášť laboratorní měření a skutečná uživatelská data, pokud jsou dostupná.
Co upravíme podle výsledkůVelikosti obrázků, způsob načítání, fonty, cache a nepotřebný JavaScript. Efekty nového webu musí mít rozumný výkon i statickou variantu.

Otevřít PageSpeed Insights — vložte adresu webu ↗Co jsou Core Web Vitals ↓

07

Starý web a vedlejší stránky potřebují jasnou roli.

Priorita: střední

Dřívější kontrola upozornila na dostupný starý ceník na Webnode. Aktuální ověření tohoto bodu je uvedené v poznámce níže. Zároveň je vhodné rozhodnout, zda mají ve vyhledávání samostatnou hodnotu autorské a kategoriální archivy WordPressu.

Co udělámeOvěříme vlastnictví starého webu, aktuálnost cen a možnosti přesměrování nebo omezení indexace. U archivů ponecháme jen to, co má vlastní užitečný obsah.
Proč opatrněStránky se nemají mazat hromadně. Nejdřív ověříme návštěvnost, odkazy a jejich účel. Mapa stránek má obsahovat hlavní požadované indexovatelné adresy.

Znovu ověřeno 15. 10. 2026: starý ceník vrací HTTP 200, obsahuje index/follow a canonical na sebe. To samo nedokazuje aktuální indexaci Googlu. Otevřít původní Webnode ceník — k ověření aktuálnosti ↗

A co původní hodnocení „SEO kolem 55 %“?V předchozí konzultaci zazněl orientační odhad 50–60 %, přibližně 55 %. Nebyl to výsledek standardizovaného auditu ani ukazatel, kolik zákazníků web získá. Pro rozhodování jsou přesnější výše uvedené konkrétní nálezy. SEO navíc nemá jednorázový stav „100 % hotovo“ — mění se hledání, konkurence i samotný web.
Zobrazit všech 29 kontrolovaných URL a jejich výsledky

Tabulka zachycuje zdrojový kód z 15. 10. 2026. „Popis ano“ znamená přítomnost meta description, nikoli potvrzení jeho kvality. Shodné titulky jsou označené zvlášť.

Zobrazeno 29 adres.

Adresa / titulekHTTPPočet H1Meta popisTitulek
/2025/07/29/vysokotlake-cisteni/ ↗Vysokotlaké čištění - Prémiové čištění2002AnoStejný na 2 URL
/2025/07/29/ochrana-fasady/ ↗Ochrana fasády - Prémiové čištění2001AnoStejný na 2 URL
/2025/07/29/odstraneni-mechu-z-fasady/ ↗Odstranění mechu z fasády - Prémiové čištění2001AnoStejný na 2 URL
/ ↗Prémiové čištění - Prémiové čištění2001AnoJedinečný v souboru
/cisteni-kobercu/ ↗Čištění koberců - Prémiové čištění2001AnoJedinečný v souboru
/cisteni-sedacek/ ↗Čištění sedaček - Prémiové čištění2001AnoJedinečný v souboru
/impregnace-na-betonovou-dlazbu/ ↗Impregnace na betonovou dlažbu - Prémiové čištění2000AnoJedinečný v souboru
/ochrana-fasady/ ↗Ochrana fasády - Prémiové čištění2001AnoStejný na 2 URL
/kontaktni-formular/ ↗Kontaktní formulář - Prémiové čištění2000ChybíJedinečný v souboru
/impregnace-na-zamkovou-dlazbu/ ↗Impregnace na zámkovou dlažbu - Prémiové čištění2001AnoJedinečný v souboru
/impregnace-strechy/ ↗Impregnace střechy - Prémiové čištění2001AnoJedinečný v souboru
/cisteni/ ↗Čištění - Prémiové čištění2000ChybíJedinečný v souboru
/cisteni-fasady/ ↗Čištění fasády - Prémiové čištění2001AnoJedinečný v souboru
/cisteni-zamkove-dlazby/ ↗Čištění zámkové dlažby - Prémiové čištění2001AnoJedinečný v souboru
/cisteni-strech/ ↗Čištění střech - Prémiové čištění2001AnoJedinečný v souboru
/odstraneni-mechu-z-fasady/ ↗Odstranění mechu z fasády - Prémiové čištění2001AnoStejný na 2 URL
/vysokotlake-cisteni/ ↗Vysokotlaké čištění - Prémiové čištění2001AnoStejný na 2 URL
/reference/ ↗Reference - Prémiové čištění2000ChybíJedinečný v souboru
/ochrana-osobnich-udaju/ ↗Ochrana osobních údajů - Prémiové čištění2001ChybíJedinečný v souboru
/kontakt/ ↗Kontakt - Prémiové čištění2000AnoJedinečný v souboru
/casto-kladene-dotazy/ ↗Často kladené dotazy - Prémiové čištění2000AnoJedinečný v souboru
/impregnace-fasady/ ↗Impregnace fasády - Prémiové čištění2001AnoJedinečný v souboru
/o-nas/ ↗O nás - Prémiové čištění2000AnoJedinečný v souboru
/reference-cisteni-zamkove-dlazby/ ↗Reference čištění zámkové dlažby - Prémiové čištění2000AnoJedinečný v souboru
/cenik/ ↗Ceník - Prémiové čištění2000AnoJedinečný v souboru
/reference-cisteni-fasady/ ↗Reference čištění fasády - Prémiové čištění2000AnoJedinečný v souboru
/impregnace/ ↗Impregnace - Prémiové čištění2000AnoJedinečný v souboru
/category/nezarazene/ ↗Nezařazené Archivy - Prémiové čištění2001ChybíJedinečný v souboru
/author/copywriting4weiron/ ↗Copywriting Weiron, Autor na Prémiové čištění2001ChybíJedinečný v souboru
03 / Od oprav k lepším poptávkám

SEO jako součást
celého nového webu.

Nejde jen doplnit několik polí. Potřebujeme propojit obsah, strukturu, důvěryhodné realizace, techniku a měření toho, co lidé skutečně poptávají.

Jak by vypadala stránka služby

  1. Řekne jasně, co a kde děláte.Čištění fasád v oblasti, kam firma skutečně dojíždí. Bez smyšlených poboček.
  2. Odpoví na praktické otázky.Jak postupujete, co rozhoduje o ceně, co musí zákazník připravit a kdy je potřeba prohlídka.
  3. Ukáže skutečné výsledky.Fotografie před a po s popisem zakázky. Reálná data, žádné vymyšlené reference.
  4. Usnadní další krok.Zavolání, zpráva nebo krátká poptávka s možností přiložit fotografie.
  5. Propojí související obsah.Odkaz na impregnaci, vhodnou realizaci, odpovědi na dotazy a kontakt.

Příklad výsledku ve vyhledávání

Proč nepíšeme desítky stejných stránek pro různá města?Pouhá výměna názvu obce nepřidává hodnotu. Lokální obsah má smysl tam, kde jsou skutečné realizace, dojezdové podmínky a užitečné informace pro dané místo.
OblastKonkrétní práceJak poznáme dokončení
Struktura služebHlavní samostatné stránky pro fasády, střechy, dlažbu a další skutečně poskytované služby. Odlišení čištění a impregnace.Každá důležitá služba má jasný účel, text, odkaz z navigace a vlastní URL.
Realizace a lokalityVýběr zakázek, věcné popisy, fotografie a návaznost na služby. Skutečná oblast dojezdu.Návštěvník pozná místo, zadání a výsledek; nevznikají prázdné lokální kopie.
Google a mapyPřístup do Search Console, kontrola indexace, ověření firemního profilu, správné kontakty, služby a oblasti působení.Máme dostupná data a ověřené nastavení, nikoli jen založené účty.
Měření poptávekOdlišení dokončeného formuláře, kliknutí na telefon a skutečně přijaté poptávky. Zachování zdroje v CRM tam, kde je dostupný a oprávněný.V reportu nejsou návštěvy zaměněné za zákazníky ani kliknutí na telefon za uskutečněné hovory.
Průběžné zlepšováníSledování dotazů a vstupních stránek, doplňování odpovědí a referencí podle skutečného zájmu.Pravidelný srozumitelný přehled: co se změnilo, jaké máme výsledky a co uděláme dál.

Při výměně webu zachováme návaznost.

PŘED SPUŠTĚNÍM

Sepíšeme staré adresy.

URL ze sitemap, důležité stránky z Search Console a případné odkazy zvenčí. Ke každé přiřadíme odpovídající novou stránku.

PŘI SPUŠTĚNÍ

Nastavíme přesměrování.

Trvalé přesměrování staré adresy na nejbližší relevantní obsah. Ne hromadně vše na úvod. Opravíme interní odkazy, canonical a sitemap.

PO SPUŠTĚNÍ

Zkontrolujeme dopad.

Odešleme novou sitemap, ověříme důležité URL, chyby a měření. Sledujeme indexaci i provoz; přechod může způsobit dočasné kolísání.

Nový web sám o sobě není hotové SEO.Design zlepšuje prezentaci a práci návštěvníka. SEO potřebuje navíc správnou strukturu a obsah, technické nastavení, migraci a průběžná data. Návrh redesignu je zatím prezentační koncept; finální SEO stránky a ostré propojení se dopracují v realizaci.

Google: změna adres a migrace ↓Google: místní výsledky ↓

04 / Podívejte se na prototyp nového webu

Nový vizuální směr.
Naživo.

Jde zatím o prototyp, který ukazuje navržený vizuální styl a hlavní interakce. Podstránky, podrobnosti o službách a další informace doplníme v další fázi přípravy webu.

Krása vašeho domu
nikam nezmizela.

Hero sekce se při scrollování postupně čistí lokálními tahy. Sekce „Náš přístup“ vypráví tři kroky a střídá odpovídající fotografie.

Fotorealistické heročištění při scrollování
Realizace před / poposuvné srovnání
Náš přístup3 navazující scény
Poptávkaprůvodce zadáním

Adresa prototypu: premiovecisteni.scorpynex.com ↗

Návrh je oddělený od současného veřejného webu. Zatím nemá ostré CRM napojení; poptávkový průvodce otevírá e-mailovou aplikaci. Mobilní hero má zapracované úpravy, ale před ostrým nasazením je potřeba vizuální test na reálném Androidu a iPhonu. Ilustrační fotografie jsou odlišené od skutečných referencí.

Otevřít současný veřejný web pro porovnání ↗

05 / Ze zprávy se stane přehledné zadání

Zákazník píše běžně.
Systém zapisuje.

Chatbot je automatický asistent. Jeho úkolem je získat podklady a předat je týmu. Zákazník zůstává v prostředí Facebooku nebo Instagramu, které už zná.

01 / ZPRÁVAFacebook / InstagramČlověk sám napíše firmě.
02 / DOPLNĚNÍAsistentZeptá se na chybějící údaje.
03 / PŘENOSOvěřené propojeníPošle údaje do firemního systému.
04 / PRÁCEKarta v CRMPracovník ověří stav a připraví nabídku.

Projděte si jednu poptávku krok za krokem.

Modelový příklad: čištění fasády v Havířově. Klikáním uvidíte, které informace se průběžně doplní. Fotografie i zákazník jsou pouze ilustrační; žádný přenos mimo tuto stránku neprobíhá.

INTERAKTIVNÍ UKÁZKA / SMYŠLENÁ DATAFB i IG mohou používat stejný postup
PČPrémiové čištěníautomatický asistent
CRM / PoptávkaPC-DEMO-001
Čekáme na zadání

Nový zájemce

Služba
Zatím neuvedena
Lokalita
Zatím neuvedena
Plocha
Neznámá
Kontakt
Konverzace na sociální síti
Fotografie
Čekáme
Zdroj
Instagram / modelový příklad
Další krok pracovníkaVyčkat na základní podklady.
Krok 1 z 7

Co bude asistent zjišťovat

  • Službu: fasáda, dlažba, střecha nebo jiná poskytovaná služba.
  • Místo: nejdřív obec; přesnou adresu podle potřeby dalšího kroku.
  • Rozsah: plochu, rozměry nebo odpověď „nevím“. Interval se uloží jako odhad zákazníka.
  • Fotografie: celkový pohled a vhodný detail. U střech bezpečně ze země.
  • Kontakt: pokračování ve zprávách, případně telefon nebo e-mail, který zákazník dobrovolně poskytne.
  • Přání: preferovaný termín a další službu. Přání není rezervace.

Co rozhodne pracovník firmy

  • Zda lze bezpečně použít konkrétní postup čištění.
  • Zda stačí fotografie, nebo je potřeba prohlídka.
  • Konečnou výměru, rozsah, cenu a potvrzený termín.
  • Nejasnou identitu zákazníka a případné sloučení karet.
  • Reklamace, nestandardní zakázky a dotazy mimo schválená pravidla.
Fotka není přesný metr.Z jedné fotografie bez měřítka nelze spolehlivě určit výměru fasády. Systém uchová interval 80–120 m² jako odhad; nepřepíše ho na „ověřených 100 m²“.

Jak zpráva technicky dorazí do CRM — lidsky

  1. Platforma oznámí novou zprávu.Oficiální propojení doručí upozornění s dostupnými údaji. Tomuto oznámení se říká webhook. Není potřeba ručně kopírovat text.
  2. Propojení ověří, odkud zpráva přišla.Zkontroluje oprávnění, platnost požadavku a jeho identifikátor. Náhodný požadavek z internetu nesmí měnit zákaznické karty.
  3. CRM najde správný kontakt a poptávku.Kanál, firemní účet, identifikátor zákazníka a otevřený případ pomohou přiřazení. Nová zakázka téhož člověka může dostat samostatnou kartu.
  4. Uloží se strukturované údaje i jejich původ.Nejen dlouhý text: služba zvlášť, lokalita zvlášť, odhad zvlášť. Je vidět, co řekl zákazník a co už ověřil pracovník.
  5. Přílohy se uloží k případu.Do soukromého úložiště se načtou povolené soubory a zkontroluje jejich typ a velikost. Samotný dočasný odkaz z platformy není dlouhodobý archiv.
  6. Vznikne úkol pro člověka.Například „Prověřit fotografie a doplnit nabídku“. Případ dostane odpovědnou osobu a termín dalšího kroku podle pravidel firmy.
SituaceJak se má systém zachovat
Zákazník dodá další fotkuDoplní stejnou otevřenou poptávku. Nesmí kvůli každé zprávě vzniknout nová zakázka.
Stejná událost přijde dvakrátRozpozná stejné ID a neprovede stejný zápis podruhé. To je ochrana proti duplicitám.
CRM je dočasně nedostupnéPožadavek zůstane ve frontě, přenos se zopakuje a při problému vznikne upozornění. „Uloženo“ se ukáže až po potvrzení CRM.
Člověk převezme konverzaciAutomatické odpovědi se pozastaví, aby pracovník a robot neodpovídali proti sobě.
Stejné jméno na FB a IGÚčty se nesloučí jen podle jména. Potvrdí se kontakt a případné propojení zkontroluje pracovník.
Zákazník opraví odhadNový odhad se zapíše s historií. Už schválenou cenu nebo potvrzený rozsah nesmí volná zpráva automaticky přepsat.
Možnosti realizace: hotový komunikační nástroj, nebo vlastní napojení?

Podporovaný nástroj, např. Manychat

Schválený konverzační scénář sbírá odpovědi. Pomocí externího HTTPS požadavku je předá našemu CRM. Předem se ověří tarif, dostupné přílohy, pole a podpora obou účtů.

Vlastní integrace přes oficiální Meta API

Více kontroly nad chováním, ale také více vývoje, schvalování, údržby a monitoringu. Je potřeba odpovídající účet, přístupová oprávnění a podle režimu aplikace schválení Meta.

Pevné otázky vs. AI: základ může mít připravené otázky a tlačítka. Pochopení volného textu, jako „fasáda v Havířově, tak sto metrů“, je samostatná rozšířená schopnost. AI musí vracet strukturovaný návrh, rozlišovat nejistotu a být otestovaná. Do CRM nesmí zapisovat libovolné instrukce z textu zákazníka.

Manychat: externí přenos ↓Meta: oficiální dokumentace ↓

Pravidla Facebooku a Instagramu ovlivňují odpovídání.U běžné příchozí soukromé zprávy počítáme se standardním 24hodinovým oknem pro automatickou reakci od způsobilé interakce. Speciální režimy a výjimky závisejí na konkrétním kanálu a scénáři; nejsou univerzálním povolením k pozdějšímu rozesílání. Před odesláním se ověří aktuální pravidla. Po uzavření okna může vzniknout interní úkol pro pracovníka — samotná evidence v CRM tím nekončí.

Rozsah tohoto návrhu: příchozí soukromé zprávy. Správa placených reklam, hromadné marketingové rozesílky, veřejné komentáře a kompletní import starých konverzací se řeší zvlášť. Telefon ani e-mail uživatele nejsou automaticky dostupné jen proto, že firmě napsal.

06 / Společná evidence zákazníků a práce

CRM je vaše
pracovní paměť.

Představte si přehlednou kartotéku, která se dá vyhledávat, doplňovat z mobilu a sdílet v týmu podle oprávnění. Každý vidí, co má udělat dál.

KARTA ZÁKAZNÍKA

Kdo si práci objednává

Jméno, společnost, poskytnuté kontakty, případné fakturační údaje a historie zakázek. Jeden zákazník může mít více adres a více samostatných realizací.

KARTA ZAKÁZKY

Co se má konkrétně udělat

Služba, místo realizace, výměra, fotografie, cenové nabídky, termín, odpovědný člověk, stav a další krok. Fotky střechy se nemíchají s dlažbou stejného zákazníka.

Nová poptávkaDoplňujeme podkladyPřipravujeme nabídkuNabídka odeslánaSchválenoNaplánovánoRealizace / předáníUzavřeno

Názvy stavů přizpůsobíme firmě. „Práce dokončena“, „předáno zákazníkovi“ a „zaplaceno“ jsou odlišné informace. Odmítnuté a odložené poptávky mají vlastní důvod uzavření.

FunkcePříklad v každodenním provozuPřínos
Další krok a odpovědnost„Zítra zavolat a ověřit přístup k vodě.“ Úkol má přiřazeného pracovníka.Je jasné, kdo případ posune dál.
Fotografie u zakázkyPříchozí podklady a oddělené fotky před / po.Není nutné hledat správné snímky v několika chatech.
Verze nabídkyZměna rozsahu vytvoří novou verzi. Zůstane dohledatelné, kterou zákazník přijal.Přehled o domluvené ceně a práci.
Kalendář a posádkaPotvrzený výjezd má adresu, pracovníky a potřebné vybavení.Snazší příprava a upozornění na kolize.
Předání a úhradaZáznam výsledku, předávací dokument a stav faktury.Dokončení práce se nezamění za zaplacení.
Přehled výsledkůPočet nových poptávek, odeslaných nabídek, přijatých zakázek a zdrojů zájmu.Rozhodování podle skutečné evidence, ne pocitu.

Co uvidí lidé v týmu

  • Majitel / správce: souhrnný přehled, nastavení, oprávnění a export.
  • Obchod / plánování: poptávky, nabídky, zákazníci a úkoly podle role.
  • Pracovník v terénu: potřebné informace k přiděleným zakázkám, dokumentace a předání.

Přesné role a rozsah se domluví při návrhu. Každý dostane vlastní přístup, aby bylo dohledatelné, kdo co změnil.

Jak se staráme o data

  • Ukládáme jen potřebné údaje a určujeme dobu jejich uchování podle účelu.
  • Fotografie zakázek zůstanou v neveřejném úložišti s řízeným přístupem.
  • Zálohujeme databázi i soubory a prakticky ověříme obnovu.
  • Zákazník má dostat informace o zpracování údajů; dodavatelé a přístupy se smluvně vymezí.
  • Vyřízení poptávky neznamená automatické svolení k marketingu nebo zveřejnění fotek domu.

Zásady ochrany dat — Evropská komise ↓

CRM nemusí hned obsahovat vlastní plnohodnotný Messenger.V první etapě může ukládat podstatné údaje, shrnutí, přílohy a dostupnou návaznost na konverzaci. Pracovník odpovídá v připojeném komunikačním nástroji. Kompletní chatovací rozhraní uvnitř CRM je samostatná část rozsahu.
07 / Dosavadní data nezadáváme znovu

Z tabulky
do pracovních karet.

Google Sheets může být dosavadní evidence. Přenosový skript projde vybrané řádky, zkontroluje je a předá je do připraveného vstupu CRM.

01TabulkaJeden řádek = jedna poptávka.
02KontrolaKontakty, služba, obec a odhady.
03PřenosOvěřené HTTPS API s potvrzením.
04CRM návrhKontrola a přiřazení pracovníkem.

Varianta A: jednorázový přechod

Připravíme kopii tabulky, zkušebně přeneseme několik záznamů a po kontrole převedeme dohodnutý rozsah. Pak se hlavní evidence přesune do CRM. Původní tabulka zůstane jako archiv podle dohody.

Doporučený začátek

Varianta B: dočasné průběžné doplňování

Po dobu přechodu se nové a změněné řádky mohou pravidelně kontrolovat, například přibližně po pěti minutách. Je potřeba určit, kdo kam zapisuje a kdy tento přechodný režim skončí.

Samostatně odsouhlasený režim
V tomto návrhu jde o jednosměrný přenos Sheets → CRM.Úprava v CRM se automaticky nevrací do tabulky. Skript ukládá importní návrh a původní podklady, aby nepřepsal již schválenou cenu nebo termín v CRM. Dvousměrná synchronizace by potřebovala vlastní pravidla pro konflikty a další implementaci.

Kam se které údaje přenesou

Sloupec v SheetsJednoduchý příkladVýznam v CRM
ZdrojoveIDTrvalý identifikátor; skript ho při ostrém přenosu doplní.Vazba na původní záznam. Nepřepisovat ani kopírovat do nové zakázky.
JmenoModelový zákazníkNávrh kontaktu. Samotné jméno nestačí ke sloučení lidí.
Telefon / EmailPoskytnutý kontakt; e-mail např. zakaznik@example.comMožnost navázat komunikaci. Šablona vyžaduje alespoň jeden kontakt.
Sluzba / ObecČištění fasády / HavířovCo a kde zákazník potřebuje. Obě hodnoty jsou v této šabloně povinné.
PlochaOd / PlochaDo80 / 120Odhad intervalu v m², ne ověřená výměra. Pokud ji neznáme, obě buňky prázdné.
PoznamkaZnečištění na severní straně domu.Původní doplňující informace zákazníka.
OdkazNaFotografieSoukromý HTTPS odkaz na složkuOdkaz jako podklad. Tento skript soubory nestahuje ani jim nemění přístupová práva.
CRM_IDID vrácené potvrzeným přenosemDoklad, ke kterému importnímu záznamu řádek patří.
ImportHashOtisk přenesených údajůRozpozná, zda se obsah změnil; stejný obsah se nemusí znovu posílat.
ImportStav / ImportCasPřeneseno do návrhu CRM / časViditelný výsledek a čas potvrzení. Chyba není vydávána za úspěch.

Jak se zabrání chybám při převodu

DUPLICITY

Stejný řádek má vlastní ID.

Číslo řádku nestačí, protože se může změnit řazení. CRM musí mít jedinečnou vazbu na zdroj a opakovaný požadavek přijmout bezpečně jen jednou.

NEÚPLNÉ ÚDAJE

Chybný záznam se označí.

Chybějící obec nebo neplatný e-mail nezastaví každou další poptávku. Řádek dostane srozumitelnou chybu a po opravě se může zpracovat znovu.

KONTROLA VÝSLEDKU

Porovnáme počty i obsah.

Nestačí „skript doběhl“. Sečteme přenesené, přeskočené a chybné záznamy a otevřeme vzorek karet. Ověříme diakritiku, odhady i kontakty.

Před hromadným během se domluví přestávka v úpravách a řazení tabulky. Technický zámek skriptu brání souběhu skriptů, nikoli ručním zásahům lidí. Kopie tabulky má jiné ID zdroje; její import se proto nesmí spouštět bez dohodnutého postupu, jinak by mohla představovat nový zdroj dat.

08 / Připravený integrační základ

Skript je zde.
I s návodem.

Google Apps Script je malý program běžící u Google Sheets. Níže je připravená šablona včetně kontroly dat, označování výsledků, opakování přenosu a ochrany před souběhem.

Nejdřív musí existovat cílové rozhraní CRM.Neznáme konkrétní adresu a datové schéma vašeho budoucího CRM. Proto je skript přizpůsobitelný integrační vzor, nikoli hotové živé propojení. Ve výchozím režimu pouze kontroluje data. V této stránce nejsou žádné skutečné klíče ani zákaznická data.
  1. 1. Uděláme kopii skutečné tabulky a vybereme vzorek.Na začátek stačí 5–10 různých poptávek. Včetně neúplné, odhadované a opakované zakázky. Nepoužijeme rovnou celou ostrou evidenci.
  2. 2. Připravíme list a názvy sloupců.List pojmenujeme Poptavky. Do prvního řádku vložíme níže uvedené názvy. Jde o šablonu, kterou vývojář upraví podle skutečné tabulky; telefon a ID nastavíme jako text.
  3. 3. Otevřeme editor skriptu.V Google Sheets zvolíme Rozšíření → Apps Script, vložíme přiložený kód a uložíme ho. Skript zůstává součástí firemní tabulky.
  4. 4. Vývojář nastaví přístup.V nastavení projektu, v části vlastností skriptu, doplní ID tabulky, název listu a skutečný importní endpoint CRM. Token se uloží sem, nikoli do buňky nebo veřejného HTML.
  5. 5. Nejdřív pustíme kontrolu bez přenosu.Funkce kontrolaImportu vypíše počty a čísla chybných řádků v protokolu spuštění. Nic neodesílá a nepřepisuje tabulku. Google při prvním oprávněném spuštění vyžádá potřebný přístup.
  6. 6. Ověříme malý skutečný přenos.Až s připraveným CRM změníme DRY_RUN na false a spustíme importDoCRM. Zkontrolujeme vrácené CRM_ID a karty v cílovém systému.
  7. 7. Přeneseme další dávky a potvrdíme výsledek.Jeden běh zpracuje nejvýše 25 nových či chybných záznamů a používá časový limit. Pokračování si pamatuje. Nezměněné řádky přeskočí.
  8. 8. Pravidelné spouštění zapneme jen v případě potřeby.Funkce zapnoutPravidelnyImport založí přibližný pětiminutový interval. Běží pod účtem, který spouštěč vytvořil, a podléhá limitům Googlu. vypnoutPravidelnyImport vypne spouštěče této funkce vytvořené daným účtem.
Přesné názvy sloupců a nastavení skriptu

Pořadí sloupců může být jiné; důležité jsou přesné a jedinečné názvy. Technické sloupce na konci patří skriptu. První řádek bez diakritiky usnadňuje spolehlivé mapování.

ZdrojoveID	Jmeno	Telefon	Email	Sluzba	Obec	PlochaOd	PlochaDo	Poznamka	OdkazNaFotografie	CRM_ID	ImportHash	ImportStav	ImportCas
Vlastnost skriptuCo do ní patří
SPREADSHEET_IDID skutečné tabulky z adresy mezi /d/ a následujícím lomítkem.
SHEET_NAMEPoptavky, případně jiný přesný název listu.
CRM_IMPORT_URLSkutečná adresa CRM zakončená /api/imports/google-sheets. Připraví vývojář; žádná taková adresa není tímto průvodcem zprovozněna.
CRM_IMPORT_TOKENOmezený serverový klíč jen pro import. Nikoli univerzální administrátorský klíč databáze. Přístup ke skriptu a jeho vlastnostem mají jen oprávnění lidé.
DRY_RUNtrue pro kontrolu. Pouze hodnota false povoluje přenos. Chybějící vlastnost znamená kontrolní režim.
Technická dohoda: co musí umět naše CRM API

API je vstupní místo, kterým si programy předávají údaje. Tuto část implementuje Scorpynex na straně CRM. Samotný skript její existenci nenahradí.

  • Přijmout autorizovaný HTTPS POST /api/imports/google-sheets, ověřit omezený token a zkontrolovat velikost i strukturu dat.
  • Vázat externalId na kombinaci ID tabulky, ID listu a trvalého ZdrojoveID. V databázi vynutit jedinečnost tohoto zdroje.
  • Zpracovat Idempotency-Key atomicky se zápisem. Po timeoutu a opakování stejného požadavku vrátit stejné potvrzení, nikoli založit další kartu.
  • mode: import_draft uloží návrh / zdrojové podklady. Automaticky nepřepíše ověřené údaje, schválenou cenu, termín ani ruční stav zakázky.
  • Rozlišit zákazníka a zakázku; při možné shodě kontaktu nabídnout kontrolované přiřazení. Nespojovat lidi jen podle jména.
  • Po skutečném uložení vrátit JSON {"status":"applied","recordId":"imp_123"}. Pouhé přijetí do fronty není potvrzením dokončení.
  • Odkaz na fotografie uchovat jako referenci. Případné stahování souborů je samostatná funkce s kontrolou přístupu, typu a povolených adres.

Význam odpovědí: 400/422 = opravit data; 401/403 = chybné oprávnění, zastavit; 409 = konflikt k vyřešení; 429 = omezení počtu požadavků; 5xx = dočasný problém serveru. Podrobné interní chyby ani tajné klíče se nemají vypisovat do tabulky.

{
  "schemaVersion": 1,
  "mode": "import_draft",
  "source": "google_sheets",
  "externalId": "TABULKA:LIST:TRVALE_ID",
  "revision": "otisk-prenaseneho-obsahu",
  "sourceRow": 2,
  "sourceSnapshot": {
    "name": "Modelový zákazník",
    "phone": "",
    "email": "zakaznik@example.com",
    "service": "Čištění fasády",
    "city": "Havířov",
    "areaMinM2": 80,
    "areaMaxM2": 120,
    "areaStatus": "customer_estimate",
    "note": "Plochu zákazník odhaduje.",
    "photoReference": ""
  }
}

Tento kontrakt je autorský návrh pro budoucí CRM, nikoli popis již existujícího endpointu. Skript má význam až společně s jeho implementací a testem na skutečné tabulce.

Google Sheets → CRM

Soubor scorpynex-sheets-do-crm.gs · výchozí režim bez odesílání
Zobrazit kompletní zdrojový kód
/**
 * SCORPYNEX / Prémiové čištění — integrační vzor, 15. 10. 2026.
 * Vyžaduje CRM endpoint podle smlouvy popsané v HTML průvodci.
 * Toto není připojení k existujícímu CRM. Výchozí režim nic neodesílá.
 * Script Properties: SPREADSHEET_ID, SHEET_NAME, CRM_IMPORT_URL,
 * CRM_IMPORT_TOKEN, DRY_RUN (výchozí true; pro ostrý import false).
 * Během ostrého přenosu tabulku neupravujte ani neřaďte.
 */
const IMPORT_INPUT = ['ZdrojoveID','Jmeno','Telefon','Email','Sluzba','Obec',
  'PlochaOd','PlochaDo','Poznamka','OdkazNaFotografie'];
const IMPORT_OUTPUT = ['CRM_ID','ImportHash','ImportStav','ImportCas'];

function onOpen() {
  SpreadsheetApp.getUi().createMenu('Scorpynex → CRM')
    .addItem('Zkontrolovat data (bez odeslání)', 'kontrolaImportu')
    .addItem('Spustit přenos podle nastavení', 'importDoCRM')
    .addToUi();
}

function nastaveniImportu_() {
  const props = PropertiesService.getScriptProperties();
  const id = props.getProperty('SPREADSHEET_ID');
  const name = props.getProperty('SHEET_NAME') || 'Poptavky';
  if (!id) throw new Error('Nastavte SPREADSHEET_ID ve vlastnostech skriptu.');
  const sheet = SpreadsheetApp.openById(id).getSheetByName(name);
  if (!sheet) throw new Error('List ' + name + ' neexistuje.');
  const headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getDisplayValues()[0].map(v=>v.trim());
  const map = {};
  headers.forEach((v,i)=>{
    if (!v) return;
    if (Object.prototype.hasOwnProperty.call(map,v)) throw new Error('Duplicitní sloupec: '+v);
    map[v]=i;
  });
  IMPORT_INPUT.concat(IMPORT_OUTPUT).forEach(v=>{
    if (!(v in map)) throw new Error('Chybí sloupec: '+v);
  });
  return {props,sheet,map,id,name};
}

function otisk_(value) {
  return Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256,value,Utilities.Charset.UTF_8)
    .map(b=>('0'+(b&255).toString(16)).slice(-2)).join('');
}

function cisloPlochy_(text) {
  const s=String(text||'').trim().replace(/\s/g,'').replace(',','.');
  if (!s) return null;
  if (!/^\d+(\.\d+)?$/.test(s)) throw new Error('Plocha musí být číslo, nebo prázdná buňka.');
  const n=Number(s);
  if (!Number.isFinite(n)||n<=0||n>1000000) throw new Error('Zkontrolujte výměru.');
  return n;
}

function zaznam_(row,map) {
  const val=k=>String(row[map[k]]||'').trim();
  if (!val('Sluzba')||!val('Obec')) throw new Error('Doplňte službu a obec.');
  if (!val('Telefon')&&!val('Email')) throw new Error('Doplňte telefon nebo e-mail; neúplné kontakty dořešte ručně.');
  const email=val('Email').toLowerCase();
  if (email&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) throw new Error('Zkontrolujte e-mail.');
  const phone=val('Telefon').replace(/[\s()\-]/g,'');
  if (phone&&!/^\+?\d{9,15}$/.test(phone)) throw new Error('Zkontrolujte telefon včetně předvolby.');
  const min=cisloPlochy_(val('PlochaOd')),max=cisloPlochy_(val('PlochaDo'));
  if ((min===null)!==(max===null)) throw new Error('Vyplňte obě hranice plochy, nebo obě ponechte prázdné.');
  if (min!==null&&max<min) throw new Error('PlochaDo nesmí být menší než PlochaOd.');
  const photo=val('OdkazNaFotografie');
  if (photo&&!/^https:\/\/[^\s]+$/i.test(photo)) throw new Error('Odkaz na fotografie musí začínat https://.');
  const result={name:val('Jmeno'),phone,email,service:val('Sluzba'),city:val('Obec'),
    areaMinM2:min,areaMaxM2:max,areaStatus:min===null?'unknown':'customer_estimate',
    note:val('Poznamka'),photoReference:photo};
  if (JSON.stringify(result).length>20000) throw new Error('Záznam je příliš dlouhý; zkraťte poznámku.');
  return result;
}

function radky_(cfg) {
  const count=cfg.sheet.getLastRow()-1;
  if (count<=0) return [];
  if (count>5000) throw new Error('Nad 5000 řádků použijte dávkový import připravený vývojářem.');
  const rows=cfg.sheet.getRange(2,1,count,cfg.sheet.getLastColumn()).getDisplayValues();
  const seen=new Set();
  rows.forEach(row=>{
    const id=String(row[cfg.map.ZdrojoveID]||'').trim();
    if (!id) return;
    if (!/^[a-zA-Z0-9_-]{1,100}$/.test(id)) throw new Error('ZdrojoveID obsahuje nepovolené znaky.');
    if (seen.has(id)) throw new Error('Duplicitní ZdrojoveID: přenos zastaven před odesláním.');
    seen.add(id);
  });
  return rows;
}

function prazdny_(row,map) {
  return IMPORT_INPUT.filter(k=>k!=='ZdrojoveID').every(k=>!String(row[map[k]]||'').trim());
}

function kontrolaImportu() {
  const cfg=nastaveniImportu_(), rows=radky_(cfg);
  let valid=0; const errors=[];
  rows.forEach((row,i)=>{
    if (prazdny_(row,cfg.map)) return;
    try { zaznam_(row,cfg.map);valid++; }
    catch(e) { errors.push('Řádek '+(i+2)+': '+e.message); }
  });
  const result={platne:valid,chyby:errors,pocetRadku:rows.length,odeslano:0};
  console.log(JSON.stringify(result)); // Jen počty a chyby, nikoli kontakty či token.
  return result;
}

function odeslat_(url,token,payload,key) {
  for (let attempt=0;attempt<3;attempt++) {
    let response;
    try {
      response=UrlFetchApp.fetch(url,{method:'post',contentType:'application/json',
        headers:{Authorization:'Bearer '+token,'Idempotency-Key':key},
        payload:JSON.stringify(payload),muteHttpExceptions:true,followRedirects:false});
    } catch(e) {
      if (attempt===2) throw new Error('Síťová chyba; výsledek ověří další běh se stejným klíčem.');
      Utilities.sleep(500*Math.pow(2,attempt));continue;
    }
    const code=response.getResponseCode();
    if (code>=200&&code<300) {
      let data;
      try {data=JSON.parse(response.getContentText());} catch(e){throw new Error('CRM nevrátilo platné JSON potvrzení.');}
      // HTTP 202 / přijetí do fronty se samo o sobě nepovažuje za uložený záznam.
      if (data.status!=='applied'||typeof data.recordId!=='string'||
          !/^[a-zA-Z0-9_-]{1,100}$/.test(data.recordId)) throw new Error('Chybí potvrzení skutečného uložení do CRM.');
      return data;
    }
    if ((code===429||code>=500)&&attempt<2) {Utilities.sleep(500*Math.pow(2,attempt));continue;}
    const error=new Error('CRM HTTP '+code+'; záznam nebyl označen jako přenesený.');
    error.stop=code===401||code===403||code===429;
    throw error;
  }
  throw new Error('Přenos se nepodařilo potvrdit.');
}

function importDoCRM() {
  const cfg=nastaveniImportu_();
  // Bez výslovného false zůstává zapnutá kontrola bez zápisu a bez sítě.
  if (cfg.props.getProperty('DRY_RUN')!=='false') return kontrolaImportu();
  const url=cfg.props.getProperty('CRM_IMPORT_URL')||'';
  const token=cfg.props.getProperty('CRM_IMPORT_TOKEN')||'';
  if (!/^https:\/\/[^\s?#@]+\/api\/imports\/google-sheets$/.test(url)||url.includes('.example')||!token)
    throw new Error('Vývojář musí nastavit skutečnou HTTPS adresu CRM a omezený importní token.');
  const lock=LockService.getScriptLock();
  if (!lock.tryLock(1000)) return {preskoceno:'Jiný běh právě importuje.'};
  let applied=0,skipped=0,errors=0,stop=false;
  const start=Date.now();
  try {
    const rows=radky_(cfg);if (!rows.length) return {applied,skipped,errors};
    const cursorKey='CURSOR_'+cfg.sheet.getSheetId();
    let cursor=Number(cfg.props.getProperty(cursorKey)||0);
    if (!Number.isInteger(cursor)||cursor<0) cursor=0;
    cursor%=rows.length;
    let visited=0;
    while (visited<rows.length&&applied+errors<25&&Date.now()-start<240000&&!stop) {
      const index=(cursor+visited)%rows.length, rowNumber=index+2, row=rows[index];visited++;
      if (prazdny_(row,cfg.map)) continue;
      const write=(key,value)=>cfg.sheet.getRange(rowNumber,cfg.map[key]+1).setValue(value);
      try {
        const snapshot=zaznam_(row,cfg.map),hash=otisk_(JSON.stringify(snapshot));
        let sourceId=String(row[cfg.map.ZdrojoveID]||'').trim();
        if (row[cfg.map.CRM_ID]&&!sourceId) throw new Error('U přeneseného řádku chybí ZdrojoveID. Obnovte původní ID, nevytvářejte nové.');
        if (row[cfg.map.ImportHash]===hash&&row[cfg.map.CRM_ID]) {skipped++;continue;}
        if (!sourceId) {sourceId=Utilities.getUuid();write('ZdrojoveID',sourceId);SpreadsheetApp.flush();}
        const externalId=cfg.id+':'+cfg.sheet.getSheetId()+':'+sourceId;
        const payload={schemaVersion:1,mode:'import_draft',source:'google_sheets',externalId,
          revision:hash,sourceRow:rowNumber,sourceSnapshot:snapshot};
        const result=odeslat_(url,token,payload,otisk_(externalId+':'+hash));
        const current=cfg.sheet.getRange(rowNumber,1,1,cfg.sheet.getLastColumn()).getDisplayValues()[0];
        if (String(current[cfg.map.ZdrojoveID]).trim()!==sourceId)
          throw Object.assign(new Error('Během přenosu se přesunuly řádky. Zastaveno; zkontrolujte evidenci.'),{stop:true,noJournal:true});
        // CRM ukládá importní návrh. Upravená tabulka vyvolá další revizi při příštím běhu.
        write('CRM_ID',result.recordId);write('ImportHash',hash);
        write('ImportStav','Přeneseno do návrhu CRM');write('ImportCas',new Date().toISOString());applied++;
      } catch(e) {
        errors++;stop=!!e.stop;
        if (!e.noJournal) write('ImportStav','Chyba: '+e.message);
      }
    }
    cfg.props.setProperty(cursorKey,String((cursor+visited)%rows.length));
    SpreadsheetApp.flush();
  } finally {lock.releaseLock();}
  console.log(JSON.stringify({applied,skipped,errors}));
  if (errors) throw new Error('Import: '+errors+' chyb. Podrobnosti jsou ve sloupci ImportStav.');
  return {applied,skipped,errors};
}

function zapnoutPravidelnyImport() {
  // Spusťte jen jednou pod určeným firemním účtem, až po úspěšném pilotu.
  const cfg=nastaveniImportu_();
  if (cfg.props.getProperty('DRY_RUN')!=='false') throw new Error('Nejdřív schvalte pilot a nastavte DRY_RUN=false.');
  const exists=ScriptApp.getProjectTriggers().some(t=>t.getHandlerFunction()==='importDoCRM');
  if (!exists) ScriptApp.newTrigger('importDoCRM').timeBased().everyMinutes(5).create();
}

function vypnoutPravidelnyImport() {
  ScriptApp.getProjectTriggers().filter(t=>t.getHandlerFunction()==='importDoCRM').forEach(t=>ScriptApp.deleteTrigger(t));
}

Tato ukázka neprovádí mazání CRM dat, obousměrnou synchronizaci ani stahování fotografií. Nezačne běžet stažením stránky nebo kódu. Vyžaduje instalaci do Apps Script, oprávnění a konfiguraci. Pro velké evidence nad 5 000 řádků se připraví jiný dávkový postup.

Co dělat, když import ukáže chybu
Co vidíteCo to znamenáDalší krok
Chybí sloupecNázev hlavičky nesedí se šablonou.Opravit název, nemazat ostatní data.
Chybí kontakt / obecŘádek nemá potřebné minimum pro tuto šablonu.Doplnit údaj, nebo případ dořešit ručně. Nevymýšlet kontakt.
Duplicitní ZdrojoveIDDva řádky mají stejné trvalé ID.Zastavit a určit, zda jde o kopii nebo novou poptávku. Nepřidělovat nové ID již importované zakázce naslepo.
HTTP 401 / 403CRM nepovolilo přístup.Vývojář zkontroluje token a oprávnění. Žádné opakování se změněnými zákaznickými daty.
Síťová chyba / HTTP 5xxPřenos selhal nebo není jisté potvrzení.Po opravě opakovat se stejnou identitou a otiskem. CRM musí zabránit duplikaci.
Chybí potvrzení uloženíServer nevrátil požadovaný stav a ID.Prověřit odpověď CRM; řádek se neoznačí jako úspěšný.
Přesun řádků během přenosuNěkdo tabulku seřadil nebo změnil.Zastavit úpravy, ověřit záznamy podle ZdrojoveID a pokračovat až po kontrole.

Při chybě ostrého běhu skript zapíše dostupný stav k řádku a skončí chybovým souhrnem. U pravidelného spouštění se sleduje přehled spuštění a upozornění Google; nespoléháme jen na to, že v tabulce nevidíme červenou buňku.

Google: HTTP požadavky ↓Nastavení skriptu ↓Automatické spouštění ↓Provozní limity ↓

09 / Jak z návrhu vznikne používaný systém

Postupně zavést.
Na skutečné práci ověřit.

Každá etapa má konkrétní výstup. Nejprve potvrdíme, co firma potřebuje, potom propojujeme jednotlivé části a kontrolujeme výsledek.

EtapaCo udělámeVýsledek pro firmu
1 / Podklady a pravidlaProjít anonymizované poptávky, tabulku, služby, role, způsob nabídky a plánování. Ověřit účty a přístupy.Schválený rozsah a názvy stavů. Víme, co se automatizuje a kdo schvaluje výjimky.
2 / Web a SEODokončit strukturu, obsah a důležité SEO stránky, měření, přesměrování a testy.Web připravený na ostré spuštění s návazností na původní adresy.
3 / Základ CRMKontakty, zakázky, úkoly, fotografie, nabídky a oprávnění v dohodnutém rozsahu.První funkční celek, který tým vyzkouší na modelových případech.
4 / Propojení a importChatbot, ověřené předávání údajů, chybové stavy a kontrolovaný import ze Sheets.Jedna poptávka projde od zprávy do správné karty bez ručního přepisování.
5 / Pilot a předáníŘízené používání, opravy, školení, obnova záloh, provozní dohled a export.Potvrzený pracovní postup a jasný způsob podpory.

Předchozí studie počítala orientačně s 8–12 týdny pro propojené CRM a automatizaci včetně pilotu. Jde o plánovací rámec, nikoli potvrzený termín této dodávky. Dostupnost podkladů, schválení Meta a finální rozsah mají na termín vliv. Cena a provozní paušál se stanoví samostatnou nabídkou.

Co potřebujeme od klienta

  • Pověřenou osobu pro rozhodování a schvalování textů.
  • Správcovský přístup do potřebných účtů přidělený bezpečnou cestou, nikoli hesla v dokumentu.
  • Přístup k Search Console, firemnímu profilu a případně měření; pokud nejsou založené, ověříme další postup.
  • Facebook stránku a vhodný instagramový účet s oprávněním k propojení.
  • Anonymizovaný vzorek zpráv a tabulky, skutečný popis práce a podmínky dojezdu.
  • Schválené fotografie, kontakty, obchodní pravidla a způsob práce s údaji.

Co společně při převzetí vyzkoušíme

Pracovní seznam pro schůzku. Zaškrtnutí se ukládá pouze v tomto prohlížeči, pokud to dovoluje; neposílá potvrzení dodavateli.

Co budeme hodnotit po spuštěníV SEO zobrazení, prokliky a relevantní poptávky. V komunikaci dostupnost podkladů a skutečný čas do převzetí člověkem. V CRM počet případů bez dalšího kroku, průchod nabídky do zakázky a chybovost přenosů. Cílové hodnoty stanovíme až po získání výchozích dat.
10 / Přeloženo do běžné češtiny

Bez slovníku
ajťáka.

Pojmy, se kterými se při společné práci setkáme. U každého stačí vědět, jak vám pomůže v praxi.

SEO

Úpravy webu a jeho obsahu, aby ho vyhledávače lépe chápaly a lidé našli relevantní odpovědi.

Indexace

Zařazení stránky do evidence vyhledávače. Zařazená stránka ještě nemusí být nahoře ve výsledcích.

H1 / hlavní nadpis

Název hlavního tématu stránky. Má popisovat, o čem stránka skutečně je.

Title / meta description

Název stránky a stručný popis ve zdrojovém kódu. Google je může použít pro výsledek hledání, nebo je upravit.

Canonical

Signál vyhledávači, kterou adresu považujeme za hlavní verzi podobného obsahu. Sám návštěvníka nepřesměruje.

Přesměrování 301 / 308

Trvalé převedení návštěvníka a vyhledávače ze staré adresy na odpovídající novou.

Sitemap / robots.txt

Mapa adres určená vyhledávačům a pravidla procházení webu. Nejsou zárukou indexace ani způsobem ochrany tajných dat.

Search Console

Nástroj Google pro kontrolu, jak vyhledávač vidí váš web a přes jaké dotazy na něj lidé přicházejí.

CRM

Společná evidence zákazníků, poptávek a zakázek. U každého případu vidíte podklady i další krok.

API

Dohodnutý vstup pro výměnu informací mezi programy. Skript pošle data a CRM vrátí výsledek.

Webhook

Automatické oznámení události jinému systému. Například „dorazila nová zpráva“.

Token

Přístupový klíč pro program. Musí mít omezená oprávnění a zůstat mimo veřejnou stránku.

Idempotence

Ochrana, díky které opakování stejného požadavku nevytvoří stejnou zakázku podruhé.

Dry run

Zkušební kontrola bez skutečného přenosu. Pomůže odhalit chyby před zápisem do CRM.

Hash / otisk

Krátký technický podpis obsahu. Když se údaje změní, změní se i otisk a skript změnu pozná.

Trigger / spouštěč

Pravidlo, které spustí program v určeném intervalu nebo po události.

Otázky, které stojí za to si vyjasnit

Zaručí SEO první místo na Googlu?
Ne. Můžeme slíbit konkrétní práci, měření a řešení zjištěných problémů. Pořadí určuje vyhledávač podle řady signálů a konkurence. Efekt se vyhodnocuje postupně; technická oprava a obchodní výsledek nejsou totéž.
Musí si zákazník instalovat CRM nebo vyplňovat dlouhý formulář?
Ne. Ze sociální sítě píše běžným způsobem. CRM používá firma. Asistent klade přiměřené otázky; neznámý údaj zaznamená a předá člověku.
Co když chatbot špatně pochopí zprávu?
Nejisté informace označí a nechá potvrdit. Při opakovaném neporozumění, reklamaci nebo žádosti zákazníka předá konverzaci člověku. Cena, technologie čištění a potvrzení termínu mají jasně určeného schvalovatele.
Načtou se automaticky všechny staré zprávy a fotografie?
To nelze slíbit bez ověření dostupnosti konkrétního rozhraní a účtu. Základ počítá s novými zprávami po spuštění. Historie a staré přílohy se posuzují jako samostatný převod.
Můžeme nadále upravovat Google Sheets i CRM současně?
Jen pokud je přesně určeno, které pole má hlavní zdroj a jak se řeší konflikt. Zde navržený přenos je jednosměrný a zapisuje importní návrhy. Po přechodu doporučujeme jednu závaznou pracovní evidenci v CRM.
Počítá se s placenou reklamou na Facebooku a Instagramu?
Tento návrh řeší příchozí komunikaci a její zpracování. Správa reklamních kampaní, rozpočty za reklamu a marketingové rozesílání nejsou jeho automatickou součástí.
Co se platí pravidelně?
Podle zvoleného řešení hosting, databáze a přílohy, případný komunikační nástroj, AI spotřeba a dohodnutá technická péče. Konkrétní poskytovatelé, tarify, limity a podpora budou uvedeny v nabídce. Tato stránka nestanovuje závaznou cenu ani nepředpokládá, že je celý provoz zdarma.
11 / Důležité adresy na jednom místě

Každý odkaz
má jasný účel.

Odkazy označené šipkou ↗ se otevírají v novém panelu. U nástrojů Google je potřeba přístup k vlastnímu účtu a správné službě.

Oficiální vysvětlení a zdroje

SEO nálezy vycházejí z vlastní veřejné kontroly webu. Níže jsou primární zdroje k doporučeným postupům a rozhraním. Pravidla služeb se mohou měnit; při implementaci se znovu ověří konkrétní oprávnění a dostupné funkce.

Google: základní průvodce SEO ↗Obsah, struktura a srozumitelnost webu.
Google: úryvky a meta description ↗Jak mohou vznikat popisy ve výsledcích hledání.
Google: hlavní verze a duplicitní adresy ↗Canonical, přesměrování a jednotné signály.
Google: obrázky a alternativní popisy ↗Souvislost obrázku s obsahem stránky.
Google: strukturovaná data místní firmy ↗Pravdivé údaje firmy v kódu stránky.
Google: Core Web Vitals ↗Načítání, odezva a stabilita rozložení.
Google: migrace webu a změny URL ↗Příprava, přesměrování a kontrola přechodu.
Google: místní výsledky ve vyhledávání ↗Souvislosti firemního profilu a lokálního hledání.
Meta: přehled Instagram Messaging ↗Oficiální integrace a pravidla komunikace; dokumentace může vyžadovat přihlášení nebo omezit načítání.
Meta: odesílání zpráv v Messengeru ↗Podmínky odpovídání podle interakce uživatele.
Manychat: externí požadavek do jiného systému ↗Jedna z možných cest předání údajů do našeho CRM.
Google Apps Script: UrlFetchApp ↗HTTPS přenos mezi skriptem a CRM.
Google Apps Script: vlastnosti skriptu ↗Uložení konfiguračních hodnot; přístup ke skriptu je potřeba omezit.
Google Apps Script: instalovatelné spouštěče ↗Pravidelné běhy a účet odpovědného správce.
Google Apps Script: aktuální limity ↗Čas běhu, počty požadavků a omezení podle typu účtu.
Evropská komise: zásady ochrany osobních údajů ↗Účel, přiměřenost, zabezpečení a uchování údajů.
Podklady a hranice tohoto průvodceNavazuje na konzultaci SEO z 14. 10. 2026 a klientskou studii „SCORPYNEX 03 — CRM a automatizace“ z 12. 10. 2026. SEO čísla byla znovu ověřena 15. 10. 2026. Obrazovky, konverzace, datové schéma a importní skript jsou návrh Scorpynex. Nejsou tvrzením o dnešních procesech, objemu poptávek nebo dosažené návratnosti firmy.