Vývoj 7 min čtení

Deset poptávek, jeden termín v 9:00: jak náš AI asistent podrží nabídnutý termín a pomáhá vyhnout se dvojité rezervaci

Když dostane víc zákazníků najednou nabídku stejného nejbližšího termínu, získá ho ten, kdo první řekne „ano“, a všem ostatním je potřeba nabídnout jiný. Proto teď asistent každý nabídnutý termín podrží.

Viktoras Lava CTO · Fakta o produktu jsme ověřili v aplikaci 5. 11. 2026
Sdílet
Deset zákazníků napíše najednou. První si domluví 9:00 a každému z dalších devíti se podrží vlastní termín. Při 30minutových hovorech a 10minutové pauze jsou termíny hodinu od sebe.
Obsah článku
  1. Proč zjevná řešení nefungují
  2. Podržení není domluvená schůzka
  3. Jak se vyhnout dvojité rezervaci: návrh systému
  4. Co uvidíte v Send4
  5. Co podržení nedělá
  6. Časté otázky

Začalo to jedním drobným případem. Zákazník dostal nabídku na 9:15, souhlasil a dozvěděl se, že termín už je pryč: jiný zákazník souhlasil se stejným termínem o čtyři minuty dřív. Nikdo neudělal chybu. Náš asistent založený na umělé inteligenci (AI) nabídl oběma nejbližší volný termín a dostat ho mohl jen jeden z nich.

Stávalo se to pokaždé, když poptávky přišly krátce po sobě. SMS kampaň na starší poptávky zahájí nejvýš 10 konverzací za minutu (kampaně jsou v tarifu Business), takže odpovědi chodí ve vlnách. Stejně tak chodí formuláře vyplněné po spuštění reklamy nebo v pondělí ráno, kdy je nejrušněji. Každá konverzace, která došla ke kroku domlouvání termínu, dostala stejné podklady: nejbližší volné termíny v pracovním prostoru, přičemž za obsazené se počítaly jen domluvené schůzky. Všichni proto dostali nabídku na 9:00. První „ano“ termín získalo a všichni ostatní slyšeli: „Bohužel, ten už je obsazený. Nehodil by se jiný?“ A právě při tomhle dalším kole zpráv zákazníci odpadají. Je to dvojitá rezervace, kterou žádný kalendář neukáže, protože kalendář vidí jen tu jednu schůzku, která se opravdu domluvila.

Asistent Send4 proto teď nabídnutý termín podrží, ve výchozím nastavení na dvě hodiny, a dalšímu zákazníkovi nabídne další volný termín. Pusťte si nával poptávek níže nejdřív s vypnutým podržením a pak se zapnutým.

Obrázek 1Nával poptávekZjednodušený model
10 z 10 domluveno napoprvé 0 s nabídkou jiného termínu Hotovo
  • AdélaDomluveno Po 09:00
  • DavidDomluveno Po 10:00
  • EliškaDomluveno Po 11:00
  • FilipDomluveno Po 12:00
  • HanaDomluveno Po 13:00
  • JakubDomluveno Po 14:00
  • JanaDomluveno Po 15:00
  • KarelDomluveno Po 16:00
  • LucieDomluveno Út 09:00
  • MarekDomluveno Út 10:00

Se zapnutým podržením dostalo 10 zákazníků 10 různých termínů a nikomu nebylo nutné nabízet jiný.

Obrázek 1. Asistentovi napíše krátce po sobě 10 zákazníků, 10 za minutu. Každý dostane nabídku nejbližšího volného termínu a o pár minut později souhlasí. Model: 30minutové schůzky, 10minutová pauza, termíny po půlhodinách.

Proč zjevná řešení nefungují

Jako první napadnou tři řešení a žádné z nich nefunguje. Nabídnout místo jednoho termínu dva nepomůže, protože ani druhý termín není podržený a koliduje úplně stejně. Šli jsme proto opačnou cestou: asistent nabízí jeden termín jako otázku, na kterou stačí odpovědět ano, nebo ne. Nepomůže ani to, aby si AI pamatovala, co nabídla. Nabídnutý termín existoval jen jako text ve zprávě, takže ho nic nemohlo zablokovat. A kdybychom termín rovnou zapsali jako schůzku, kalendář by se zaplnil schůzkami, se kterými nikdo nesouhlasil.

Podržení není domluvená schůzka

V kalendářích se tomu obvykle říká předběžná rezervace: termín zůstává stranou, dokud se zákazník rozhoduje, a schůzka zatím není potvrzená. V Send4 je podržení samostatný záznam, ne druh schůzky. Kdyby to byl druh schůzky, muselo by se ho naučit přeskakovat všechno, co se schůzkami pracuje, od kalendáře po exporty a webhooky.

Podržení trvá ve výchozím nastavení dvě hodiny. Délku nastavíte u každého kroku domlouvání termínu, od 0, což podržení vypne, až po 24 hodin. Skončí dřív, když se termín přiblíží natolik, že by už nesplnil minimální předstih. Při předstihu jedné hodiny vyprší podržení termínu v 10:00, které začalo v 8:55, už v 9:00, protože potom by si ho stejně nikdo domluvit nemohl. Další zprávy podržení neprodlužují, takže upovídaný zákazník si termín nemůže držet donekonečna. Podržení platí v celém pracovním prostoru, ne pro jednotlivé obchodníky.

Podržení je jen předběžné, protože nechceme odmítnout zákazníka, který je připravený si termín domluvit, kvůli jinému, který se teprve rozhoduje. Dokud je k dispozici volný termín, který nikdo nedrží, asistent termíny podržené pro jiné zákazníky přeskakuje. Zákazník, který si řekne přesně o podržený termín, si ho ale domluvit může a dostane ho ten, kdo potvrdí jako první. Až druhý zákazník příště napíše, asistent mu řekne, že termín už je pryč, a nabídne jiný. Když je podržený každý volný termín, asistent nabídne ten nejbližší i tak, aniž by vytvořil další podržení. Nabídnout termín, o který stojí i někdo jiný, je lepší než nenabídnout žádný.

Jak se vyhnout dvojité rezervaci: návrh systému

Pravidlo se řekne snadno: nenabízet termín, o kterém se rozhoduje někdo jiný. Jako první jsme se rozhodli, že termíny nebude vybírat AI model. Termín vybere náš kód a asistent dostane pokyn nabídnout přesně ten. Když zákazník chce jiný, asistent musí zavolat nástroj (tool call), který podržení přesune. Každý termín, který navrhne, je tak záznam, ne jen slova ve zprávě. Poslední slovo má nástroj, který schůzku domlouvá. Zbytek je pro vývojáře a pro každého, kdo sám vytváří rezervační systém. Plán jsme sepsali 25. září, o dva dny později bylo hotovo a většinu okrajových případů (edge cases), které popisujeme níže, přidaly dvě revize plánu.

Pauza mezi schůzkami

Při 30minutových schůzkách a 10minutové pauze dostane druhý zákazník nabídku na 10:00, ne na 9:30. Kdyby oba souhlasili, schůzka v 9:30 by začínala ještě v pauze po první schůzce a rezervace by se zamítla. Mezi koncem první schůzky a začátkem další proto musí být mezera alespoň tak dlouhá jako delší z obou pauz:

mezera mezi schůzkami ≥ max(pauza A, pauza B)

Delší z obou proto, že dva kroky domlouvání termínu mohou mít různě dlouhé pauzy. Posuňte níže délky schůzek a pauz a sledujte, kde může začít další schůzka.

Obrázek 2Pauza mezi schůzkamiZjednodušený model
mezera mezi schůzkami ≥ max(pauza A, pauza B) 30 min ≥ max(10, 10) = 10 min

Dalšímu zákazníkovi se nabídne termín 10:00. Mezi koncem schůzky prvního zákazníka a začátkem další je mezera 30 min a delší z obou pauz má 10 min. Schůzka od 09:30 by nechala mezeru jen 0 min, méně než 10 min, takže by ji systém odmítl.

Obrázek 2. V jednom kroku domlouvání termínu je pro prvního zákazníka podržený termín v 9:00. Obrázek ukazuje, kde může začít schůzka dalšího zákazníka, jehož krok má vlastní délku schůzky a pauzu. Model nabízí termíny po půlhodinách.

Stejně tak záleží na délce schůzky. Krok domlouvání termínu může nabízet služby různé délky. Dokud si zákazník službu nevybere, držíme v kalendáři časový úsek pro nejdelší z nich. Služba na 30 minut a služba na 90 minut tak posunou dalšího zákazníka na 11:00. Po výběru úsek upravíme podle délky zvolené služby. Výběr termínu hlídá kolize termínů: každý termín porovná se schůzkami i s podrženími ostatních zákazníků a podrží první, který kontrolou projde:

Pseudokód
# Vybere jeden termín, který nabídne zákazníkovi, a podrží ho.
function offerTime(lead):
    for time in openTimes(after: now + minimumNotice):
        if clashes(time, meetings): continue
        if clashes(time, holdsOfOtherLeads): continue
        hold(time, lead, until: earliest(now + holdLength, time − minimumNotice))
        return time
    # Všechny volné termíny jsou podržené: nabídne nejbližší i tak, bez podržení.
    return firstOpen(openTimes, ignoring: holds)

# Dvě schůzky jsou v kolizi, když je mezera mezi koncem jedné a začátkem druhé příliš malá.
function clashes(a, b):
    return gap(a, b) < max(a.buffer, b.buffer)
Jak asistent vybírá termín, který nabídne. Zjednodušeno, názvy jsou změněné.

Kdy podržení přestane platit

Podržení platí jen tak dlouho, dokud je jeho konverzace v kroku domlouvání termínu. Jakmile konverzace skončí nebo přejde k dalšímu kroku, termín přestane blokovat, takže žádná z cest, kterými konverzace krok opouští, nemusí po sobě uklízet. Když konverzaci převezme někdo z vašeho týmu, podržený termín se může nabízet i dalším zákazníkům. A termín, který zákazník odmítne, se v tu chvíli znovu uvolní k nabízení.

Než asistent podržený termín nabídne znovu, ověří ho podle stejných pravidel jako rezervaci. Pracovní doba se mohla změnit, mohl přibýt zablokovaný den nebo mohl někdo domluvit schůzku ručně. Termín, který už nevyhovuje, se uvolní a zákazník dostane nabídku jiného. Pozdní „ano“ funguje obráceně. Když zákazník souhlasí o tři hodiny později a termín je pořád volný, dostane přesně ten termín. Asistent ho nevymění za nový, protože zákazník souhlasil s konkrétním termínem, ne s čímkoli, co je zrovna volné.

Testy do toho vůbec nezasahují. Testovací konverzace v editoru scénářů nikdy nezabere termín skutečného zákazníka a schůzka domluvená v testu nikdy nezabere termín podržený pro skutečného zákazníka.

Souběh (race condition) v našem rezervačním systému

Na tuhle chybu jsme narazili cestou a je to učebnicový problém dvojité rezervace (double booking problem): dvě rezervace stejného volného termínu ve stejném okamžiku mohly projít obě. Kontrola před rezervací zamykala schůzky, které už v daném termínu byly, a volný termín žádné nemá, takže nebylo co zamknout. Obě rezervace termín zkontrolovaly, obě nic nenašly a obě uložily schůzku. Frontu úloh pro AI obsluhovaly dva pracovní procesy (workers), takže dvě „ano“ se opravdu mohla zpracovat ve stejném okamžiku, a tabulka schůzek neměla žádné omezení (constraint), které by to zachytilo.

Opravili jsme to, když jsme stavěli podržení. Výběr termínu i rezervace teď používají stejný zámek (lock), jeden na účet, takže druhá rezervace počká, uvidí tu první a zákazník dostane nabídku jiného termínu. Když zámek získat nejde, rezervace proběhne stejně jako dřív, protože zákazníkovo „ano“ nesmí nikdy selhat kvůli naší mezipaměti (cache). Projděte si to níže krok za krokem bez zámku a se zámkem.

Obrázek 3Dvakrát „ano“ ve stejnou chvíliZjednodušený model
Adélina rezervace Hotovo
Davidova rezervace Zamítnuto. Asistent nabídne termín 10:00
Schůzky v 09:00
  • 09:00 Adéla
Zámek: volný

Krok 7 z 7

Se zámkem Davidova rezervace počkala, našla Adélinu schůzku a systém ji zamítl. Asistent nabídl Davidovi nejbližší volný termín, 10:00.

Obrázek 3. Adéla a David ve stejnou chvíli souhlasí se stejným volným termínem v 9:00. Podržení je jen předběžné, takže zákazník, který si o podržený termín sám řekne, si ho může domluvit taky. Projděte si to krok za krokem bez zámku a pak se zámkem.

Co uvidíte v Send4

Podržené termíny se v kalendáři Send4 zobrazují jako šrafované bloky „Offered to …“ vedle už domluvených hovorů. Nejsou to schůzky a jako schůzky se nepočítají. Kliknutím na blok otevřete jeho konverzaci.

Obrázek 4. Kalendář Send4 se dvěma termíny podrženými pro zákazníky, kteří ještě neodpověděli. Ukázkový pracovní prostor.

Jak dlouho se termín podrží, nastavíte u každého kroku domlouvání termínu. Postup najdete v nápovědě: jak funguje podržení nabízených termínů.

Co podržení nedělá

Podržení je jen předběžné, takže se dva zákazníci pořád mohou sejít na stejném termínu, když si jeden z nich řekne o termín podržený pro druhého. Není to záruka. Navíc počítá jen s kalendářem Send4. Kontroluje asistent před nabídnutím termínu vlastní kalendář obchodníka?

Zatím ne. Domluvené hovory se zapisují do kalendáře Send4.

Nedá se ani nastavit dostupnost jednotlivých obchodníků: každý krok domlouvání termínu nabízí termíny, které jsou volné v jediném kalendáři Send4. A velký nával poptávek může podrženími zaplnit celé dopoledne, takže pozdější zákazníci dostanou nabídku na odpoledne nebo na další den. Když se to stane, zkraťte podržení v daném kroku domlouvání termínu.

Pokud se zákazníky domlouváte hovory, přesně tohle v Send4 umí domlouvání obchodních schůzek: asistent se zákazníka zeptá na to, co potřebujete vědět, podrží termín a domluví hovor v jedné konverzaci.

Časté otázky

Co je dvojitá rezervace?

Dvě schůzky ve stejném termínu, nebo dva lidé, kterým někdo řekl, že stejný termín patří jim. Když AI asistent odpovídá mnoha zákazníkům najednou, častější je ten druhý případ, protože všichni dostanou nabídku nejbližšího volného termínu.

Jak se vyhnout dvojité rezervaci?

Podržte termín, dokud ho nabízíte, nechte mezi schůzkami pauzu a ve chvíli, kdy zákazník souhlasí, termín znovu ověřte. AI asistent Send4 ve výchozím nastavení podrží každý nabídnutý termín na dvě hodiny, takže dalšímu zákazníkovi nabídne další volný termín.

Co je předběžná rezervace?

Termín, který někomu držíte, dokud se rozhoduje, aniž byste ho domluvili. V Send4 se tomu říká podržení a je jen předběžné. Dokud je k dispozici volný termín, který nikdo nedrží, asistent termíny podržené pro jiné zákazníky přeskakuje. Když je podržený každý volný termín, nabídne ten nejbližší, aniž by vytvořil další podržení. Zákazník, který si řekne přesně o podržený termín, si ho pořád může domluvit a dostane ho ten, kdo potvrdí jako první.

K čemu slouží pauza mezi schůzkami?

Nechává po jedné schůzce čas, než může začít další. V Send4 má ve výchozím nastavení 10 minut. U dvou podržených termínů musí být mezi koncem první schůzky a začátkem další mezera alespoň tak dlouhá jako delší z jejich dvou pauz.

Umí AI domlouvat schůzky?

Ano. AI asistent Send4 domlouvá hovory přes SMS, v tarifu Business i e-mailem, zapisuje je do kalendáře Send4 a každý nabídnutý termín podrží, dokud se zákazník rozhoduje.

Jak se AI asistent liší od rezervačního systému?

V rezervačním systému si zákazník sám vybere volný termín v kalendáři. AI asistent Send4 odpoví na poptávku přes SMS, v tarifu Business i e-mailem, položí vaše otázky a nabídne jeden termín. Ten zůstane podržený, dokud se zákazník rozhoduje, a domluvený hovor se zapíše do kalendáře Send4.

Funguje Send4 s Google Meet nebo Microsoft Teams?

Zatím ne. Hovor se domluví v Send4 a odkaz zákazníkovi pošlete sami.

Kontroluje asistent před nabídnutím termínu můj vlastní kalendář?

Zatím ne. Domluvené hovory se zapisují do kalendáře Send4.

Zapisují se podržené termíny do mého kalendáře?

Ne. Podržení existuje jen v Send4. V kalendáři Send4 se zobrazuje jako šrafovaný blok a není to schůzka.

Viktoras Lava

CTO

Viktoras vyvíjí produkt Send4. Podržení nabízených termínů spustil v září 2026.

Kde to v Send4 najdete Domlouvání schůzek AI prověří každou poptávku přes SMS nebo e-mailem, předá ji obchodníkovi, který je na řadě, a domluví hovor.

Každá poptávka dostane odpověď.
A vy – domluvený hovor.

14 dní zdarma s vaším vlastním číslem u Twilio nebo Vonage.