Документация › Инструменты бота › Запись на время
Запись на время
Бот сам показывает свободное время и записывает клиента: простым способом через Google Calendar или «движком окошек» для нескольких специалистов.
⏱ 12 мин · 👤 для владельца · 🟢 live
За 30 секунд:
- Три способа записи: выберите под свой бизнес (ниже шпаргалка).
- Google Calendar: один специалист, простой график.
- Движок окошек: несколько мастеров, график в таблице, обеды/отпуска/ограничения.
- Google Таблицы, если вы уже ведёте слоты строками в таблице.

Как выбрать способ
| Ваша ситуация | Способ |
|---|---|
| Один мастер/кабинет, простой график | Google Calendar: бот смотрит занятость календаря и записывает |
| Несколько одинаковых объектов: бани, кабинеты, корты, столики, домики | Google Calendar: один календарь на группу, «Записей на одно время» = сколько объектов в группе |
| Несколько специалистов, график в таблице, есть обеды, отпуска, ограничения по дням/возрасту | Движок окошек: сервер сам считает свободные слоты, бот не ошибается |
| Вы уже ведёте слоты строками в таблице | Google Таблицы (см. статью про Таблицы) |
Способ A. Google Calendar (один специалист)
Что понадобится
- ☐ Google-календарь
- ☐ Доступ для сервис-аккаунта (одна кнопка в настройках функции)
Шаги
Проект → Функции → Создать → Из готового шаблона → Запись на время → группа «Google Calendar». Здесь 5 готовых действий: проверить свободное время, записать, перенести, показать записи, отменить.- Сначала откройте доступ. Наверху настроек функции есть панель с адресом сервис-аккаунта и кнопкой «Скопировать». В Google Календаре: нужный календарь → «Настройки и общий доступ» → «Доступ для отдельных пользователей» → добавьте этот адрес с правом «Внесение изменений в мероприятия». Без этого шага проверка на шаге 4 не пройдёт, боту просто некуда смотреть.
- Укажите Календарь это ID вашего календаря: для основного его ID = ваш email в Google (например
ivan@gmail.com), для отдельного календаря адрес вида...@group.calendar.google.com(он лежит там же, в настройках календаря, раздел «Интеграция календаря»). Можно вставить ссылку из адресной строки, ID вытащится сам. ⚠️ Словоprimaryне подойдёт, так бот попадёт в свой технический календарь, вам не видимый, и записи «пропадут». - Нажмите «Проверить подключение». Зелёный ответ покажет, сколько событий бот видит, красный назовёт причину.
- Настройте расписание работы: рабочие дни, часы, обед, длительность слота, минимальный запас до записи. Это настройки самой функции: бот будет предлагать только время внутри них.
⚠️ Важно. Расписание работы задаётся прямо в настройках функции «Проверить свободное время». Бот предлагает слоты строго в этих рамках.
📌 Пример (стоматология). Функция «Записать клиента» с длительностью слота 60 минут, рабочие дни Пн-Сб 9:00-19:00, запас 60 минут. Бот не запишет на ближайший час и не предложит воскресенье.
Если объектов несколько и они одинаковые
Бани, кабинеты, корты, столики, домики: бот не выбирает конкретный объект, он считает, СКОЛЬКО их занято на это время. Кто именно поедет в баню номер 3, решаете вы, как и сейчас.
- Заведите один календарь на группу одинаковых объектов.
- В функции «Проверить свободное время» поставьте «Записей на одно время» = сколько объектов в группе. Четыре бани, значит 4: пятого клиента на это время бот уже не запишет.
- То же число продублируйте в функции «Записать клиента». Без этого она возьмёт вместимость у первой попавшейся функции проверки, и при нескольких группах числа перепутаются.
Объекты разной вместимости или цены это разные группы. У каждой свой календарь и своя пара функций «проверить» и «записать», иначе бот отправит компанию из 25 человек туда, где помещается 10.
📌 Пример (база отдыха). 4 бани, 7 юрт до 10 гостей и 2 больших юрты. Это 3 календаря и 6 функций: check_bath_slots и book_bath (вместимость 4), check_yurt_small_slots и book_yurt_small (7), check_yurt_big_slots и book_yurt_big (2). Имена функций должны отличаться, имя правится в мастере, раздел «Расширенные настройки».
💡 Свои брони, которые вы ставите руками, вносите в тот же календарь. Бот считает занятость по нему целиком и не различает, кто создал событие.
Способ B. Движок окошек (несколько специалистов)
Одна функция вместо цепочки «прочитай график → возьми занятость → посчитай сам». Сервер сам учитывает часы по дням, обеды, отпуска, ограничения дней и возраст, и отдаёт боту готовый список свободных слотов с именами специалистов.
Что понадобится
- ☐ Google-таблица с графиком специалистов
- ☐ Список услуг (заполняется в конструкторе: без JSON руками)
- ☐ (если берёте занятость из CRM) подключённая Education CRM
Формат листа-графика
Лист должен содержать колонки: специалист, услуга (предмет), минимальный возраст, дни работы с часами, обеды, комментарии. Имена колонок по умолчанию: «Преподаватель», «Предмет», «Минимальный возраст», «Обеды», «Комментарии». Если у вас они называются иначе в настройках функции есть раздел «Колонки в листе называются иначе?».
Дни ведутся одним из двух способов, сервер определяет его сам по заголовкам:
| Способ | Как выглядят колонки | Когда удобнее |
|---|---|---|
| Неделя | семь колонок пн вт ср чт пт сб вс, одна и та же неделя повторяется | график стабильный, меняется редко |
| Календарь | по колонке на дату: 22.06.2026, 23.06.2026, … | часы плавают, отпуска и подмены видно прямо в ячейке дня |
В календарном режиме день, для которого колонки ещё нет, считается «расписание не заведено» и не показывается: бот не будет записывать в дату, которую вы не заполняли. Если весь запрошенный период за последней заполненной колонкой, функция так и скажет, вместо пустого списка, который читается как «все заняты». Держите заполненными хотя бы 2-3 недели вперёд.
В ячейках дней пишутся часы работы: 11:00-18:00, можно с перерывом 11:00-15:00 и 16:00-21:00. Пустая ячейка, в, вых или слово Отпуск означают, что в этот день специалист не работает. Маркеры в ячейке: (без ПЗ) это «в этот день новых на пробное не ставим», (день ПЗ) это «день выделен под пробные».
Какие фразы в колонке «Комментарии» сервер понимает
Пишите как удобно: понятные формы разбираются мгновенно, а необычную формулировку дочитывает ИИ (один раз, результат запоминается). Самые надёжные формы:
| Пишите так | Как поймёт сервер |
|---|---|
| «Пробные только во вторник, четверг и субботу» | пробные разрешены лишь в эти дни |
| «Ни в одно воскресенье не ставить пробные» | воскресенье вычёркивается |
| «Пробные занятия не ставить» | специалист не берёт пробных вообще |
| «Не работает 13 и 14 августа», «Отпуск с 2.08 по 7.08», «больничный до 15.08» | эти даты вычёркиваются |
Одна мысль на фразу, разделяйте точкой.
💡 Условие, которое выполняет человек («по договорённости», «после согласования с мастером»), не прячет специалиста: бот покажет его время и предупредит клиента, что запись подтвердит менеджер, а бронировать сам не станет.
⚠️ Если смысл фразы непонятен даже ИИ, специалист скрывается с пометкой менеджеру. Лучше не показать того, кого можно, чем записать клиента к тому, кого нельзя. Такие случаи видно на экране «Проверка графика», и о них приходит уведомление.
Шаги
Создать → Запись на время → Свободные окошки для записи.- Укажите ID Google-таблицы с графиком и нажмите проверку подключения. Затем «Найти лист автоматически»: сервер сам выберет лист с графиком и определит, как названы колонки, вам останется подтвердить.
- Услуги заполняются в конструкторе, для каждой услуги: название (как в колонке «Предмет»), синонимы через запятую, минимальный возраст, и (если занятость из CRM)
branch_id/subject_idиз вашей Education CRM. - Источник занятости: «Education CRM» (берёт занятые уроки из CRM) или «Только график» (без CRM).
- Параметры окна: длительность слота, за сколько дней минимум можно записаться, горизонт показа (максимум 14 дней), окно работы бизнеса, таймзона.
💡 Совет. Не вводите JSON руками: конструктор услуг и колонок соберёт его за вас. Кнопка «Редактировать как JSON» оставлена на случай тонкой правки.
Напоминание клиенту перед визитом
Записали человека, дальше он про это забывает. Бот может напомнить сам, в тот же чат, где записывался.
Где включить: Функции → ваша функция «Записать клиента» → тумблер «Напоминать клиенту о записи». Включите, и сразу появится первое напоминание «за 1 день». Кнопкой «Добавить напоминание» добавьте второе, например «за 2 часа».
- У каждого напоминания своя строка текста прямо под сроком. Оставите пустой, возьмётся общий текст из поля внизу. Так «за сутки» скажет «не забудьте про завтра», а «за 2 часа» скажет «выезжайте, ждём вас».
- Подстановки:
{{client_name}},{{date}},{{time}}. - Перенос записи двигает напоминания за собой, отмена снимает их. Опоздавшее больше чем на 3 часа не уходит вдогонку.
- Если WhatsApp ограничил номер, напоминание не отправится и помечается неотправленным сразу, а не после трёх часов попыток.
- Отправленное напоминание видно в переписке с пометкой «Напоминание», поэтому вы всегда знаете, что именно бот написал клиенту и когда.
- В тест-чате напоминания не отправляются, это не сбой.
- ⚠️ Напоминание встаёт только на запись, которую оформил бот. Занесли бронь в календарь руками, бот про неё не знает и не напомнит.
- ⚠️ Если объектов несколько и у каждого свой календарь (баня 1, баня 2), тумблер включается в каждой функции записи отдельно. Настройки не наследуются.
- ⚠️ Тумблера нет в функции «Проверить свободное время», и это правильно: напоминания читает только та функция, которая создаёт запись.
Проверь, что работает
Движок окошек: откройте функцию → «Проверить график». Это главный экран самопроверки: он показывает, что сервер понял из вашей таблицы: кого видит, что вычитал из каждого комментария, кто скрыт и почему, до какой даты заполнено расписание. Если кто-то из специалистов не появляется у клиентов, ответ будет здесь.
Дальше «Проверить» → передайте услугу (и возраст, если нужен) → вернётся список свободных слотов. Для Calendar: проверьте, что слоты попадают в ваши рабочие часы.
⚠️ Когда график мешает записи (лист переименовали, специалиста пришлось скрыть, колонки с датами кончились), приходит уведомление владельцу: не чаще раза в сутки, чтобы не превратиться в шум.
Частые ошибки
| Симптом | Причина | Что нажать |
|---|---|---|
| Бот предлагает время вне рабочих часов | Расписание не настроено или взяты дефолты | Откройте функцию «Проверить свободное время», задайте часы/дни |
| «нет специалистов по услуге» | Название услуги не совпадает с колонкой «Предмет» | Сверьте название/синонимы в конструкторе услуг |
| Не считается занятость | Не подключена Education CRM или нет branch_id | Подключите CRM, заполните branch_id/subject_id |
| «Лист … не найден», в ответе перечислены другие листы | Лист переименовали в таблице | Впишите новое имя листа в настройках функции |
| «не найдены ни колонки дней недели, ни колонки с датами» | Поменяли раскладку листа или дни лежат не в заголовках | Верните дни в заголовки колонок: либо пн…вс, либо даты ДД.ММ.ГГГГ |
| «в графике нет колонок на даты …» | Календарный лист заполнен по прошедшую дату | Дозаполните колонки на 2-3 недели вперёд |
| Специалист работает, но бот его не предлагает | Комментарий в графике не распознан, либо он не сматчился с CRM по имени | Проверьте формулировку (см. таблицу выше); имя в графике должно совпадать с именем в CRM |
Вопросы, которые обычно возникают
Можно показывать запись на сегодня?
Да: поставьте «Запись минимум за» = 0.
Сколько дней вперёд показывает движок окошек?
До 14 дней (горизонт настраивается).
Под капотом
- Движок окошек:
builtin_booking(find_free_slots), пересечение графика из Sheets ∩ RU-ограничений из комментариев ∩ занятости из edu-CRM. Модель не делает табличную математику: получает готовый ответ. - Google Calendar:
builtin_calendar; расписание читается из настроек функции (builtin_config): рабочие дни/часы/слот/запас/таймзона. - Услуги хранятся в
services_json, имена колонок: вcolumns_json; конструктор сериализует их за вас.
Простыми словами
Представьте администратора, который наизусть знает график всех мастеров: кто когда работает, у кого обед, кто в отпуске, кого нельзя ставить детям. Клиент говорит «хочу на гитару»: администратор мгновенно называет реальные свободные окошки. Движок окошек это и есть такой администратор внутри бота. А если мастер один, хватит простого календаря.
Дальше: → Бот выставляет счёт
Связано: Google Таблицы · Google Calendar
Не получилось? → Функция не срабатывает