Technologijos 6 min. skaitymo

Dešimt užklausų vienu metu: kaip rezervuojame pasiūlytą susitikimo laiką

Kai keliems klientams pasiūlomas tas pats laisvas susitikimo laikas, jis atitenka tam, kuris patvirtina pirmas. Kitiems tenka siūlyti kitą. Todėl asistentas dabar laikinai rezervuoja kiekvieną pasiūlytą laiką.

Viktoras Lava CTO · Informacija apie Send4 funkcijas patikrinta 2026-11-05
Dalytis
Dešimt klientų parašo vienu metu. Pirmasis patvirtina susitikimą 09:00, o kitiems devyniems rezervuojama po atskirą laiką. Kai susitikimas trunka 30 minučių, o pertrauka po jo – 10 minučių, laikai išsidėsto kas valandą.
Turinys
  1. Kodėl paprastų sprendimų nepakanka
  2. Kuo laikina rezervacija skiriasi nuo patvirtinto susitikimo
  3. Kaip išvengti dvigubų registracijų: sistemos architektūra
  4. Ką matote Send4 kalendoriuje
  5. Ko rezervacija nepadaro
  6. Dažniausi klausimai

Viskas prasidėjo nuo konkretaus atvejo. Klientui buvo pasiūlytas laikas 9:15. Jis sutiko, bet užsiregistruoti nebegalėjo: kitas klientas tą patį laiką patvirtino keturiomis minutėmis anksčiau. Niekas nesuklydo. Mūsų dirbtinio intelekto (DI) asistentas abiem pasiūlė anksčiausią laisvą susitikimo laiką, o užsiregistruoti galėjo tik vienas.

Taip nutikdavo, kai užklausos ateidavo beveik vienu metu. SMS kampanija anksčiau užklausas pateikusiems klientams per minutę pradeda daugiausia 10 pokalbių (kampanijos prieinamos su „Business“ planu), todėl atsakymai grįžta beveik kartu. Taip būna ir prasidėjus reklamos kampanijai, kai daug žmonių vienu metu užpildo svetainės formą, arba per užklausų piką, pavyzdžiui, pirmadienio rytą. Kiekviename pokalbyje, pasiekusiame susitikimo planavimo žingsnį, asistentas matydavo tuos pačius anksčiausius laisvus darbo erdvės laikus, o užimtais buvo laikomi tik užregistruoti susitikimai. Todėl visiems būdavo pasiūloma 9:00. Laikas atitekdavo tam, kuris patvirtindavo pirmas. Kitiems tekdavo siūlyti kitą laiką, o dalis klientų per tą laiką pasitraukdavo iš pokalbio. Kalendoriuje tokios dvigubos registracijos nematyti: jame atsiranda tik vienas užregistruotas susitikimas.

Todėl pakeitėme, kaip Send4 DI asistentas siūlo susitikimų laikus. Pasiūlytą laiką jis dabar laikinai rezervuoja – pagal numatytuosius nustatymus dviem valandoms, o kitam klientui siūlo kitą laisvą laiką. Toliau pateiktoje demonstracijoje pirmiausia išjunkite pasiūlyto laiko rezervavimą ir paleiskite užklausas, tada pakartokite įjungę rezervavimą.

1 pav.Užklausų antplūdisSupaprastintas modelis
10 iš 10 užsiregistravo iš pirmo karto 0 teko siūlyti kitą laiką Baigta
  • AgnėUžregistruota Pr 09:00
  • BenasUžregistruota Pr 10:00
  • DaliaUžregistruota Pr 11:00
  • DariusUžregistruota Pr 12:00
  • EglėUžregistruota Pr 13:00
  • GytisUžregistruota Pr 14:00
  • IevaUžregistruota Pr 15:00
  • JonasUžregistruota Pr 16:00
  • KotrynaUžregistruota An 09:00
  • LukasUžregistruota An 10:00

Kai pasiūlytas laikas rezervuojamas, 10 klientų gavo 10 skirtingų laikų. Nė vienam nereikėjo siūlyti kito laiko.

1 pav. 10 užklausų asistentą pasiekia per trumpą laiką, po 10 per minutę. Kiekvienam klientui pasiūlomas anksčiausias laisvas laikas. Po kelių minučių klientas jį patvirtina. Modelyje susitikimai trunka 30 minučių, po kiekvieno paliekama 10 minučių pertrauka, o pradžios laikai siūlomi kas pusvalandį.

Kodėl paprastų sprendimų nepakanka

Pirmiausia į galvą ateina trys sprendimai, tačiau nė vienas neveikia. Pasiūlyti du laikus vietoj vieno nepadeda: antrąjį laiką taip pat galima pasiūlyti keliems klientams. Todėl pasirinkome kitą sprendimą – asistentas siūlo vieną laiką ir klausia, ar jis tinka. Paprašyti DI prisiminti, ką pasiūlė, irgi nepadeda. Pasiūlytas laikas buvo paminėtas tik žinutėje, atskiro įrašo sistemoje nebuvo, todėl parenkant laiką kitam klientui nebuvo į ką atsižvelgti. O jei susitikimą registruotume vos pasiūlę laiką, kalendorius prisipildytų susitikimų, kurių klientai dar nepatvirtino.

Kuo laikina rezervacija skiriasi nuo patvirtinto susitikimo

Rezervaciją saugome kaip atskirą įrašą. Jei ji būtų susitikimo rūšis, visos sistemos dalys, naudojančios susitikimų duomenis – nuo kalendoriaus iki eksporto ir pranešimų kitoms sistemoms (webhooks), – turėtų atskirai ją atpažinti ir praleisti.

Pagal numatytuosius nustatymus rezervacija galioja dvi valandas. Trukmę nustatote kiekviename susitikimo planavimo žingsnyje: pasirinkę 0, rezervavimą išjungiate, o ilgiausia galima trukmė – 24 valandos. Rezervacija baigiasi anksčiau, jei susitikimą reikia užregistruoti likus nustatytam laikui iki jo pradžios. Pavyzdžiui, jei registruotis reikia bent prieš valandą, 08:55 pasiūlyto 10:00 susitikimo rezervacija baigsis 09:00, nes vėliau šiam laikui užsiregistruoti jau nebūtų galima. Naujos kliento žinutės rezervacijos nepratęsia, todėl ilgas pokalbis negali užimti laiko neribotai. Rezervacijos galioja visoje darbo erdvėje, o ne kiekvienam pardavėjui atskirai.

Rezervacija negarantuoja susitikimo, nes nenorime atsisakyti kliento, pasirengusio užsiregistruoti, vien dėl to, kad kitas dar svarsto. Parinkdamas laiką kitam klientui asistentas praleidžia jau rezervuotus laikus. Tačiau jei klientas pats paprašo konkretaus rezervuoto laiko, jis taip pat gali užsiregistruoti tam laikui, ir laikas atitenka tam, kuris patvirtina pirmas. Kitam klientui vėl parašius, asistentas praneša, kad laikas jau užimtas, ir pasiūlo kitą. Kai visi laisvi laikai jau rezervuoti, asistentas vis tiek pasiūlo anksčiausią, tik jo papildomai nerezervuoja. Geriau pasiūlyti laiką, į kurį pretenduoja ir kitas klientas, nei nepasiūlyti jokio.

Kaip išvengti dvigubų registracijų: sistemos architektūra

Pagrindinė taisyklė paprasta: nesiūlyti laiko, dėl kurio kitas klientas dar sprendžia. Pirmiausia nusprendėme, kad laiko nerinks pats DI modelis. Laiką parenka sistema, o asistentui nurodome siūlyti būtent jį. Jei klientas nori kito, asistentas turi iškviesti įrankį (tool call), kuris pakeičia rezervaciją. Taip kiekvienas pasiūlytas laikas turi atitinkamą įrašą sistemoje, o galutinį sprendimą priima registracijos įrankis. Toliau – detalės programuotojams ir visiems, kurie kuria klientų registracijos sistemą. Planą parašėme rugsėjo 25 d., o funkciją įdiegėme po dviejų dienų. Per dvi plano peržiūras numatėme daugumą toliau aprašytų ribinių atvejų (edge cases).

Pertraukos tarp susitikimų

Tarkime, pirmasis susitikimas prasideda 09:00, trunka 30 minučių, o po jo būtina 10 minučių pertrauka. Kitam klientui siūloma 10:00, o ne 09:30. Susitikimas 09:30 prasidėtų dar nepasibaigus būtinai pertraukai, todėl jo registracija būtų atmesta. Nuo pirmojo susitikimo pabaigos iki antrojo pradžios turi likti bent tiek laiko, kiek trunka ilgesnė iš abiem susitikimams nustatytų pertraukų:

tarpas tarp susitikimų ≥ max(pertrauka A, pertrauka B)

Atsižvelgiame į ilgesnę pertrauką, nes skirtinguose susitikimo planavimo žingsniuose jos gali skirtis. Toliau pateiktoje demonstracijoje keiskite susitikimų trukmę ir pertraukas ir stebėkite, kada gali prasidėti kitas susitikimas.

2 pav.Pertraukos tarp susitikimųSupaprastintas modelis
tarpas tarp susitikimų ≥ max(pertrauka A, pertrauka B) 30 min. ≥ max(10, 10) = 10 min.

Kitam klientui siūlomas susitikimas 10:00. Po pirmojo susitikimo iki jo liktų 30 min., o būtina pertrauka – 10 min. Susitikimas 09:30 paliktų tik 0 min. tarpą. Reikia bent 10 min., todėl šis laikas netinka.

2 pav. Pirmajam klientui rezervuotas susitikimo laikas 09:00. Keiskite abiejuose planavimo žingsniuose nustatytas susitikimų trukmes ir pertraukas. Stebėkite, kada gali prasidėti kito kliento susitikimas. Modelyje pradžios laikai siūlomi kas pusvalandį.

Lygiai taip pat svarbi ir paslaugos trukmė. Viename susitikimo planavimo žingsnyje galima siūlyti skirtingos trukmės paslaugas. Kol klientas nepasirenka paslaugos, rezervuojamas ilgiausiai paslaugai reikalingas laiko tarpas: jei siūlomos 30 ir 90 minučių paslaugos, o pirmasis susitikimas prasidėtų 09:00, kitam klientui siūloma 11:00. Klientui pasirinkus paslaugą, jai rezervuotas laiko tarpas pritaikomas prie pasirinktos paslaugos trukmės. Parinkdama laiką funkcija tikrina šią sąlygą tiek su patvirtintais susitikimais, tiek su kitų klientų rezervacijomis ir rezervuoja pirmą tinkamą laiką:

Pseudokodas
# Parenka vieną laiką, kurį pasiūlyti klientui, ir jį rezervuoja.
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
    # Visi laikai rezervuoti: siūlomas anksčiausias, be papildomos rezervacijos.
    return firstOpen(openTimes, ignoring: holds)

# Susitikimai nesuderinami, kai tarpas tarp jų per mažas.
function clashes(a, b):
    return gap(a, b) < max(a.buffer, b.buffer)
Kaip asistentas parenka siūlomą laiką. Supaprastinta, pavadinimai pakeisti.

Kada rezervacija nustoja galioti

Rezervacija galioja tik tol, kol pokalbis yra susitikimo planavimo žingsnyje. Pokalbiui pasibaigus arba perėjus į kitą žingsnį, rezervuotas laikas vėl gali būti siūlomas kitiems. Taip rezervacija nustoja galioti nepriklausomai nuo to, kuriuo keliu pokalbis pasitraukia iš susitikimo planavimo žingsnio. Kai pokalbį perima jūsų komandos narys, rezervuotas laikas taip pat gali būti siūlomas kitiems klientams, o klientui atsisakius pasiūlyto laiko, jis tuoj pat vėl gali būti siūlomas kitiems.

Prieš dar kartą siūlydamas rezervuotą laiką, asistentas patikrina, ar jis vis dar tinkamas, ir taiko tas pačias taisykles kaip registruojant susitikimą. Darbo valandos gali pasikeisti, gali atsirasti nedarbo diena arba kas nors gali užregistruoti susitikimą rankiniu būdu. Nebetinkamo laiko rezervacija panaikinama, o klientui pasiūlomas kitas laikas. Su pavėluotu „taip“ – atvirkščiai. Jei klientas sutinka po trijų valandų, o pasiūlytas laikas vis dar laisvas, jis gali užsiregistruoti tam pačiam laikui. Asistentas jo nekeičia kitu: klientas sutiko su konkrečiu pasiūlymu, o ne su bet kuriuo tuo metu laisvu laiku.

Bandomieji pokalbiai realių klientų laikų neliečia. Bandomasis pokalbis scenarijų kūrimo įrankyje neužima klientams skirtų susitikimo laikų, o bandomoji registracija negali užimti klientui rezervuoto laiko.

Kai du klientai vienu metu patvirtina tą patį laiką

Kurdami rezervavimo funkciją aptikome ir lenktynių sąlygą (race condition) registracijos sistemoje: du klientai galėjo vienu metu sėkmingai užsiregistruoti tam pačiam laisvam laikui. Prieš registraciją sistema užrakindavo tuo metu jau suplanuotų susitikimų įrašus. Tačiau kai susitikimų dar nebuvo, nebuvo ir ko užrakinti. Abi registracijos užklausos patikrindavo tą patį laiką, nerasdavo susitikimų ir įrašydavo po vieną. Mūsų DI užduočių eilę aptarnavo du procesai (workers), todėl du „taip“ iš tiesų galėjo būti apdoroti tuo pačiu metu, o susitikimų lentelėje nebuvo apribojimo, kuris tai aptiktų.

Tai ištaisėme: dabar ir laiko parinkimas, ir susitikimo registracija naudoja tą patį užraktą (lock) – po vieną kiekvienai paskyrai. Antroji užklausa palaukia, kol bus baigta pirmoji registracija. Tada sistema aptinka jau įrašytą susitikimą ir klientui pasiūlo kitą laiką. Jei užrakto gauti nepavyksta, registracija vyksta kaip anksčiau, nes nenorime, kad klientui nepavyktų užsiregistruoti dėl mūsų podėlio (cache) sutrikimo. Toliau peržiūrėkite registracijos eigą be užrakto ir su juo.

3 pav.Du „taip“ tuo pačiu metuSupaprastintas modelis
Agnės registracijos užklausa Baigta
Beno registracijos užklausa Atmesta. Asistentas siūlo 10:00
Susitikimai 09:00
  • 09:00 Agnė
Užraktas: laisvas

7 žingsnis iš 7

Beno registracijos užklausa buvo vykdoma tik baigus Agnės registraciją. Sistema aptiko Agnės susitikimą ir Beno registraciją atmetė. Asistentas Benui pasiūlė kitą laisvą laiką – 10:00.

3 pav. Agnė ir Benas vienu metu patvirtina tą patį laisvą susitikimo laiką – 09:00. Laikina rezervacija negarantuoja susitikimo: kitas klientas, paprašęs būtent šio laiko, taip pat gali užsiregistruoti tam laikui. Peržiūrėkite registracijos eigą be užrakto, paskui su juo.

Ką matote Send4 kalendoriuje

Rezervuoti laikai Send4 kalendoriuje rodomi kaip brūkšniuoti blokai su užrašu „Offered to …“ šalia jau užregistruotų skambučių. Tai dar nėra patvirtinti susitikimai, todėl jie neįtraukiami į susitikimų skaičių. Spustelėję bloką atversite atitinkamą pokalbį.

4 pav. Send4 kalendorius su dviem laikais, rezervuotais dar neatsakiusiems klientams. Demonstracinė darbo erdvė.

Rezervacijos trukmę nustatote kiekviename susitikimo planavimo žingsnyje. Instrukciją rasite pagalbos centre: kaip pažymimas pasiūlytas laikas.

Ko rezervacija nepadaro

Laikina rezervacija negarantuoja susitikimo: kitas klientas, paprašęs būtent rezervuoto laiko, taip pat gali užsiregistruoti tam laikui. Be to, ji atsižvelgia tik į Send4 kalendorių. Ar prieš siūlydamas laiką asistentas patikrina paties pardavėjo kalendorių?

Kol kas ne. Susitikimai įrašomi į Send4 kalendorių.

Kiekvieno pardavėjo užimtumas atskirai taip pat nevertinamas: visuose susitikimo planavimo žingsniuose siūlomi laikai iš vieno Send4 kalendoriaus. O dėl didelio užklausų antplūdžio visi rytiniai laikai gali būti rezervuoti, tada vėlesniems klientams siūloma popietė arba kita diena. Jei taip nutinka, sutrumpinkite rezervacijos trukmę atitinkamame susitikimo planavimo žingsnyje.

Jei skambučius su klientais planuojate patys, sužinokite, kaip veikia Send4 DI asistentas pardavimams: jis užduoda jūsų klausimus, rezervuoja pasiūlytą laiką ir suplanuoja skambutį tame pačiame pokalbyje.

Dažniausi klausimai

Kas yra dviguba registracija?

Tai du susitikimai tuo pačiu laiku arba tas pats susitikimo laikas, pažadėtas dviem klientams. Kai DI asistentas vienu metu bendrauja su daug klientų, dažnesnis antrasis atvejis: keliems klientams pasiūlomas tas pats anksčiausias laisvas laikas.

Kaip išvengti dvigubų registracijų?

Laikinai rezervuokite klientui pasiūlytą laiką, palikite pertrauką tarp susitikimų ir dar kartą patikrinkite užimtumą, kai klientas sutinka. Send4 DI asistentas pagal numatytuosius nustatymus pasiūlytą laiką rezervuoja dviem valandoms, o kitam klientui siūlo kitą laisvą laiką.

Kodėl rezervacija negarantuoja susitikimo?

Laikas laikinai rezervuojamas, tačiau kitas klientas, paprašęs būtent jo, taip pat gali užsiregistruoti tam laikui. Jis atitenka tam, kuris patvirtina pirmas. Kai visi laisvi laikai jau rezervuoti, asistentas vis tiek pasiūlo anksčiausią, tik jo papildomai nerezervuoja.

Kam reikalinga pertrauka tarp susitikimų?

Kad vienam susitikimui pasibaigus liktų laiko iki kito pradžios. Send4 ši pertrauka pagal numatytuosius nustatymus trunka 10 minučių. Tarp dviejų siūlomų susitikimų paliekama bent ilgesnė iš abiem susitikimams nustatytų pertraukų.

Ar DI gali registruoti susitikimus?

Taip. Send4 DI asistentas susitikimo laiką su klientu suderina SMS žinutėmis, o su „Business“ planu – ir el. paštu. Patvirtintą susitikimą įrašo į Send4 kalendorių. Kol klientas apsisprendžia, pasiūlytas laikas rezervuojamas.

Kuo DI asistentas skiriasi nuo klientų registracijos sistemos?

Klientų registracijos sistemoje klientas pats pasirenka laisvą laiką kalendoriuje. Send4 DI asistentas į užklausą atsako SMS žinute, o su „Business“ planu – ir el. laišku, užduoda jūsų klausimus ir pasiūlo vieną laiką. Kol klientas apsisprendžia, tas laikas rezervuojamas, o patvirtintas susitikimas įrašomas į Send4 kalendorių.

Ar Send4 veikia su „Google Meet“ ar „Microsoft Teams“?

Kol kas ne. Skambutis užregistruojamas Send4, o nuorodą klientui išsiunčiate patys.

Ar prieš siūlydamas laiką asistentas patikrina mano kalendorių?

Kol kas ne. Susitikimai įrašomi į Send4 kalendorių.

Ar rezervuoti laikai atsiranda mano kalendoriuje?

Ne. Rezervacija saugoma tik Send4. Send4 kalendoriuje ji rodoma kaip brūkšniuotas blokas, tačiau tai dar nėra patvirtintas susitikimas.

Viktoras Lava

CTO

Viktoras kuria Send4 produktą. 2026 m. rugsėjį jis įdiegė pasiūlyto laiko rezervavimo funkciją.

Kur tai rasite Send4 Pardavimų susitikimai Išsiaiškinkite kliento poreikius SMS žinutėmis ar el. paštu, priskirkite užklausą pardavėjui ir sutarkite dėl skambučio.

Nuo pirmos kliento žinutės
iki sutarto skambučio.

Išbandykite 14 dienų su savo „Twilio“ arba „Vonage“ numeriu.