DOS AI/ Документация
ОтзывыДля когоАгентствамВозможностиЦенаFAQОбучениеДокиВойтиСтарт
← Документация/Руководство
↓ Скачать целиком
Старт
  • Что такое DOS AI
  • Как бот думает
  • Быстрый старт: первый бот за 30 минут
  • Карта кабинета (навигация)
  • Глоссарий
  • Как выбрать чат-бота для WhatsApp
Проект и бот
  • Создание проекта
  • Системный промпт (характер бота)
  • JSON-ответ бота (статусы, стадии, флаги)
  • Выбор AI-модели
  • Тестовый чат
  • Продвинутые настройки бота
  • Загрузить знания о бизнесе в бота (что куда)
Каналы
  • Обзор каналов
  • Подключить WhatsApp (по QR)
  • Подключить Telegram-бота
  • Гигиена и антибан (WhatsApp)
Инструменты бота
  • Функции (инструменты бота)
  • База знаний (RAG)
  • Медиа-библиотека
  • Дожимы (follow-up)
  • Теги и сегментация
  • Уведомления владельцу (Telegram, WhatsApp и почта)
  • Запись на время (Calendar и движок окошек)
  • Бот выставляет счёт (Kaspi)
  • Письмо клиенту
  • Рассылки по базе контактов
  • Исходящие диалоги (бот пишет первым)
Работа с клиентами
  • Диалоги, лента, перехват, «AI на паузе»
  • Лиды и их статусы
  • Стадии диалога (воронка)
  • Аналитика
  • Логи событий
  • Авто-отчёты владельцу (Telegram и почта)
Интеграции
  • Обзор интеграций + сервисный аккаунт Google
  • Google Sheets
  • Google Calendar
  • Gmail
  • CRM, Bitrix24 / amoCRM / AlphaCRM
  • Вебхуки и безопасность (SSRF)
  • МойСклад: наличие и цены в ответах бота
Деньги
  • Биллинг проекта: токены, подписка, пополнение
  • Сколько стоит сообщение
  • Приём оплат от клиентов (Kaspi)
  • Промокоды и партнёрская программа
Команда и аккаунт
  • Роли и права (viewer / tester / editor / admin / owner)
  • Участники и приглашения
  • Профиль, пароль, безопасность
  • Уведомления и личные настройки
  • Удаление, передача, дублирование проекта
Для разработчиков
  • Публичный API и ключи dos_sk_live_…
  • Кастомные вебхуки (продвинутый режим)
  • Язык выражений (expressions)
  • Формат данных и интеграция фронта
  • Подключить ИИ-агента: Claude Code, Codex, Cursor (MCP)
Решение проблем
  • Бот не отвечает, диагностика
  • Функция не вызывается / падает
  • Канал отвалился / WhatsApp забанили
  • Платёж не прошёл
  • Частые вопросы (FAQ)
  • Лиды из рекламы приходят с задержкой
Справочники
  • Каталог встроенных функций
  • Справочник настроек (agent_config)
  • Коды ошибок и состояния
  • Стадии, статусы лида, типы клиента
  • Лимиты и квоты
  • Переменные и хелперы выражений
  • Типы уведомлений

Документация › Инструменты бота › Запись на время

Запись на время

Бот сам показывает свободное время и записывает клиента: простым способом через Google Calendar или «движком окошек» для нескольких специалистов.

⏱ 12 мин · 👤 для владельца · 🟢 live

За 30 секунд:
  • Три способа записи: выберите под свой бизнес (ниже шпаргалка).
  • Google Calendar: один специалист, простой график.
  • Движок окошек: несколько мастеров, график в таблице, обеды/отпуска/ограничения.
  • Google Таблицы, если вы уже ведёте слоты строками в таблице.
Каталог функций: шаблон записи на свободные окошки (Google Календарь / движок слотов)
Каталог функций: шаблон записи на свободные окошки (Google Календарь / движок слотов)

Как выбрать способ

Ваша ситуацияСпособ
Один мастер/кабинет, простой графикGoogle Calendar: бот смотрит занятость календаря и записывает
Несколько одинаковых объектов: бани, кабинеты, корты, столики, домикиGoogle Calendar: один календарь на группу, «Записей на одно время» = сколько объектов в группе
Несколько специалистов, график в таблице, есть обеды, отпуска, ограничения по дням/возрастуДвижок окошек: сервер сам считает свободные слоты, бот не ошибается
Вы уже ведёте слоты строками в таблицеGoogle Таблицы (см. статью про Таблицы)

Способ A. Google Calendar (один специалист)

Что понадобится

  • ☐ Google-календарь
  • ☐ Доступ для сервис-аккаунта (одна кнопка в настройках функции)

Шаги

  1. Проект → Функции → Создать → Из готового шаблона → Запись на время → группа «Google Calendar». Здесь 5 готовых действий: проверить свободное время, записать, перенести, показать записи, отменить.
  2. Сначала откройте доступ. Наверху настроек функции есть панель с адресом сервис-аккаунта и кнопкой «Скопировать». В Google Календаре: нужный календарь → «Настройки и общий доступ» → «Доступ для отдельных пользователей» → добавьте этот адрес с правом «Внесение изменений в мероприятия». Без этого шага проверка на шаге 4 не пройдёт, боту просто некуда смотреть.
  3. Укажите Календарь это ID вашего календаря: для основного его ID = ваш email в Google (например ivan@gmail.com), для отдельного календаря адрес вида ...@group.calendar.google.com (он лежит там же, в настройках календаря, раздел «Интеграция календаря»). Можно вставить ссылку из адресной строки, ID вытащится сам. ⚠️ Слово primary не подойдёт, так бот попадёт в свой технический календарь, вам не видимый, и записи «пропадут».
  4. Нажмите «Проверить подключение». Зелёный ответ покажет, сколько событий бот видит, красный назовёт причину.
  5. Настройте расписание работы: рабочие дни, часы, обед, длительность слота, минимальный запас до записи. Это настройки самой функции: бот будет предлагать только время внутри них.

⚠️ Важно. Расписание работы задаётся прямо в настройках функции «Проверить свободное время». Бот предлагает слоты строго в этих рамках.

📌 Пример (стоматология). Функция «Записать клиента» с длительностью слота 60 минут, рабочие дни Пн-Сб 9:00-19:00, запас 60 минут. Бот не запишет на ближайший час и не предложит воскресенье.

Если объектов несколько и они одинаковые

Бани, кабинеты, корты, столики, домики: бот не выбирает конкретный объект, он считает, СКОЛЬКО их занято на это время. Кто именно поедет в баню номер 3, решаете вы, как и сейчас.

  1. Заведите один календарь на группу одинаковых объектов.
  2. В функции «Проверить свободное время» поставьте «Записей на одно время» = сколько объектов в группе. Четыре бани, значит 4: пятого клиента на это время бот уже не запишет.
  3. То же число продублируйте в функции «Записать клиента». Без этого она возьмёт вместимость у первой попавшейся функции проверки, и при нескольких группах числа перепутаются.

Объекты разной вместимости или цены это разные группы. У каждой свой календарь и своя пара функций «проверить» и «записать», иначе бот отправит компанию из 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»эти даты вычёркиваются

Одна мысль на фразу, разделяйте точкой.

💡 Условие, которое выполняет человек («по договорённости», «после согласования с мастером»), не прячет специалиста: бот покажет его время и предупредит клиента, что запись подтвердит менеджер, а бронировать сам не станет.

⚠️ Если смысл фразы непонятен даже ИИ, специалист скрывается с пометкой менеджеру. Лучше не показать того, кого можно, чем записать клиента к тому, кого нельзя. Такие случаи видно на экране «Проверка графика», и о них приходит уведомление.

Шаги

  1. Создать → Запись на время → Свободные окошки для записи.
  2. Укажите ID Google-таблицы с графиком и нажмите проверку подключения. Затем «Найти лист автоматически»: сервер сам выберет лист с графиком и определит, как названы колонки, вам останется подтвердить.
  3. Услуги заполняются в конструкторе, для каждой услуги: название (как в колонке «Предмет»), синонимы через запятую, минимальный возраст, и (если занятость из CRM) branch_id / subject_id из вашей Education CRM.
  4. Источник занятости: «Education CRM» (берёт занятые уроки из CRM) или «Только график» (без CRM).
  5. Параметры окна: длительность слота, за сколько дней минимум можно записаться, горизонт показа (максимум 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
Не получилось? → Функция не срабатывает