Бот для записи не показывает свободные слоты: Полное руководство по диагностике и исправлению ошибок

“Извините, свободных окон для записи нет”. Ваш клиент видит это сообщение, закрывает чат и, скорее всего, уходит к конкуренту. Вы же в это время смотрите в свой абсолютно пустой календарь и не понимаете, что пошло не так. Знакомая ситуация? Это одна из самых коварных и дорогостоящих ошибок в работе автоматизированных систем записи. Неработающий бот — это не просто технический сбой, это прямые финансовые и репутационные потери.

Эта проблема кажется сложной, но на самом деле она раскладывается на несколько понятных и решаемых компонентов. Ваш бот — это не черный ящик. Это программа, работающая по четким правилам. Если он не показывает слоты, значит, одно из правил нарушено.

Почему эта статья вам необходима? Потому что здесь мы не будем говорить общими фразами. Мы проведем вас за руку по всему процессу отладки: от простой проверки до глубокого анализа кода и серверной части. Вы научитесь самостоятельно диагностировать и устранять 95% причин этой проблемы, сэкономив время на общении с техподдержкой, деньги на услугах разработчиков и, что самое главное, сохранив лояльность ваших клиентов.

Мы разберем пять ключевых “болевых точек”, где чаще всего и кроется ошибка:

  1. Рассинхронизация с календарями (Google Calendar, YCLIENTS).
  2. Некорректный расчет времени (длительность услуги + перерывы).
  3. Игнорирование реального графика мастера (выходные, отпуска, обеды).
  4. Скрытые ошибки в коде (таймзоны, логические операторы).
  5. Проблемы с производительностью (нагрузка на сервер и базу данных).

Приготовьтесь, мы начинаем детальный разбор.

Шаг 0: Экспресс-диагностика бота для записи — с чего начать?

Прежде чем погружаться в технические дебри, нужно провести быструю первичную диагностику. Это поможет сузить круг поисков и сэкономить массу времени. Действуйте как детектив, собирая улики.

1. Проверка “в лоб”: есть ли свободное время в реальности?

Откройте ваш рабочий календарь (Google Calendar, YCLIENTS, любую другую CRM), который подключен к боту. Посмотрите на завтрашний день. Есть ли там очевидные свободные “окна”? Например, с 12:00 до 15:00 абсолютно пусто. Теперь попробуйте через бота записаться на 13:00 завтра. Если бот говорит “нет слотов” — проблема точно есть, и она не в отсутствии времени.

2. Изолируем проблему: ошибка у всех или у одного?

Если у вас несколько сотрудников (мастеров, врачей, специалистов), проведите перекрестную проверку:

  • Попросите бота показать слоты для Мастера А.
  • Попросите бота показать слоты для Мастера Б.

Если у одного мастера слоты показываются, а у другого нет — проблема, скорее всего, кроется в индивидуальных настройках календаря или графика этого конкретного специалиста. Если же слоты не показывает ни у кого, то ошибка носит глобальный характер (проблема с кодом бота, сервером или общей логикой).

3. Собираем “анамнез”: когда это началось?

Вспомните, после каких действий могла возникнуть проблема:

  • Обновляли ли вы настройки в CRM-системе?
  • Меняли пароль от аккаунта Google, к которому привязан календарь?
  • Переносили бота на другой хостинг?
  • Программист вносил какие-либо изменения в код?
  • Вы добавляли новую услугу с нестандартной длительностью?

Часто ответ на вопрос “что менялось?” напрямую указывает на причину поломки. Если вы ничего не меняли, возможно, проблема на стороне сервиса, с которым интегрирован бот (например, временные сбои API у Google).

Проблема №1: Ошибка синхронизации календаря (Google Calendar, YCLIENTS)

Бот для записи — это лишь “зеркало”, отражающее ваш реальный календарь. Если зеркало кривое или грязное, отражение будет искаженным. Рассинхронизация — самая частая причина, по которой бот не показывает свободные слоты.

Как это работает? Бот отправляет запрос к API (программному интерфейсу) вашего календаря с вопросом: “Какие интервалы времени свободны у Мастера А завтра с 9:00 до 18:00?”. Календарь отвечает ему списком занятых интервалов. Задача бота — из всего рабочего дня “вычесть” эти занятые интервалы и показать клиенту оставшиеся свободные. Если на этапе запроса или ответа происходит сбой, бот получает неверные данные и считает весь день занятым.

Диагностика синхронизации с Google Calendar

Google Calendar — популярный и удобный инструмент, но его интеграция требует внимания к деталям.

  1. Проверка API-ключа и прав доступа. Убедитесь, что API-ключ, который использует ваш бот, активен в Google Cloud Console. Самое главное — проверьте права доступа (OAuth 2.0 Scopes). Для корректной работы боту нужны как минимум следующие разрешения:
    • https://www.googleapis.com/auth/calendar.events.readonly — право на чтение событий из календаря. Без него бот не увидит уже существующие записи.
    • https://www.googleapis.com/auth/calendar.freebusy — право запрашивать информацию о занятости без доступа к деталям самих событий. Это самый эффективный и безопасный способ проверять слоты.
    • https://www.googleapis.com/auth/calendar.events — право создавать и изменять события (необходимо для создания новой записи через бота).
  2. Правильный ID календаря. У каждого календаря в Google есть свой уникальный идентификатор (ID), который выглядит как email-адрес. Убедитесь, что в настройках бота прописан ID именно того календаря, который вы используете для записей. Очень частая ошибка — использовать ID основного календаря аккаунта, в то время как записи ведутся в специально созданном календаре “Записи клиентов”.
  3. Доступ к календарю. Проверьте настройки доступа к самому календарю. Он должен быть открыт для того “сервисного аккаунта” или пользователя, от имени которого бот делает запросы.

Особенности работы с YCLIENTS и другими CRM

Специализированные CRM-системы, такие как YCLIENTS, имеют свои нюансы.

  • Токен авторизации (Bearer Token). Для доступа к API YCLIENTS используется временный токен. Убедитесь, что ваш бот умеет его вовремя обновлять. Если токен “протух”, все запросы к CRM будут отклоняться.
  • ID филиала и сотрудника. В YCLIENTS все сущности (сотрудники, услуги) имеют числовые ID. Проверьте, что в настройках бота для каждого мастера указан корректный company_id (ID филиала) и staff_id (ID сотрудника). Ошибка в одной цифре — и бот будет запрашивать расписание несуществующего мастера.
  • Лимиты API. Все крупные сервисы ограничивают количество запросов в минуту. Если ваш бот слишком “болтлив” (например, при каждом сообщении от пользователя заново запрашивает все расписание на месяц вперед), он может превысить лимит, и API временно его заблокирует.

Проблема №2: Некорректный расчет времени услуги + перерыв

Допустим, синхронизация работает идеально. Бот получает правильный список занятых слотов. Но теперь ему предстоит сложная математическая задача: нарезать рабочий день на “окна”, равные длительности услуги. И здесь кроется множество подводных камней.

Пример: Мастер работает с 10:00 до 18:00. Услуга “Стрижка” длится 60 минут. У мастера есть запись на 12:00. Казалось бы, бот должен предложить слоты 10:00, 11:00, 13:00, 14:00, 15:00, 16:00, 17:00. Но что, если…

“Подводные камни” длительности услуги

  • Переменная длительность. Услуга “Окрашивание” может длиться от 2 до 4 часов. Как бот это обрабатывает? Если в настройках жестко зашито 2 часа, он может предложить запись в 15:00, хотя мастер будет занят до 18:00. Правильное решение — либо брать максимальную длительность, либо (в продвинутых ботах) запрашивать у клиента уточнение.
  • Услуги разной длительности. Если у вас есть услуги на 30, 60 и 90 минут, логика расчета слотов усложняется. Бот должен предлагать слоты, подходящие под конкретную выбранную услугу. Частая ошибка: бот всегда ищет окна по 60 минут, даже если клиент выбрал услугу на 30 минут, и поэтому не показывает подходящие “половинчатые” слоты.

Как бот должен учитывать обязательные перерывы

Это критически важный пункт. Если между записями не заложен технический перерыв (на уборку, дезинфекцию, отдых), бот может создать расписание “встык”, что физически невозможно выполнить.

  • Проверьте настройки. В вашем боте или CRM должна быть настройка “Перерыв после услуги” или “Буферное время”. Установите там необходимое значение (например, 15 минут).
  • Как это работает в логике? Теперь бот при расчете должен считать длительность слота не как ДлительностьУслуги, а как ДлительностьУслуги + ДлительностьПерерыва. Если стрижка длится 60 минут, а перерыв 15, бот должен искать свободные окна длительностью 75 минут. Если он этого не делает, он может предложить запись в 11:00 клиенту А и в 12:00 клиенту Б, не оставив мастеру времени на перерыв.

Логика “шага сетки” (Booking Grid)

Многие боты для простоты “нарезают” день с фиксированным шагом, например, 30 минут. То есть предлагают запись на 10:00, 10:30, 11:00 и т.д. Если у вас есть услуга длительностью 45 минут, такой бот никогда не сможет ее корректно обработать и, скорее всего, просто не покажет для нее слоты. Убедитесь, что “шаг” в настройках бота соответствует минимальной длительности ваших услуг или перерывов.

Проблема №3: Бот не понимает график мастера: Выходные, отпуска и плавающие смены

Бот может идеально синхронизироваться с календарем и правильно считать время, но если он не знает, когда мастер в принципе работает, он будет пытаться найти слоты в его законный выходной.

Стандартные выходные vs. Индивидуальный график

  • Стандартный график. Самый простой случай: мастер работает с понедельника по пятницу с 9:00 до 18:00. Эти настройки обычно легко задаются в CRM или прямо в конфигурации бота. Проверьте, что они не сбились.
  • Индивидуальный, “плавающий” график (2/2, 3/1). Здесь все сложнее. Бот не может просто смотреть на день недели. Он должен иметь доступ к графику смен. В хороших CRM (как YCLIENTS) можно настроить цикличность смен. Убедитесь, что эта настройка корректна. Если ваш бот самописный, его логика должна уметь вычислять рабочий день на основе даты начала цикла и схемы (например, “2 дня работает, 2 отдыхает”).

Как правильно настроить отпуска и больничные

Это критически важно. Мастер ушел в отпуск на две недели, а бот продолжает активно записывать к нему клиентов. Результат — катастрофа.

  • Используйте события “на весь день”. В Google Calendar и других системах можно создать событие и отметить его как “Весь день”. Назовите его “Отпуск” или “Больничный”.
  • Научите бота понимать такие события. Логика бота должна быть следующей: перед тем, как искать слоты на определенный день, он должен сначала проверить, нет ли на этот день события типа “Весь день”. Если есть — день считается полностью нерабочим, и поиск слотов даже не начинается. Если бот этого не умеет, он проигнорирует отпуск и будет показывать слоты.

Обработка нерабочих часов и обеденного перерыва

Даже в рабочий день есть время, когда мастер недоступен.

  • Рабочие часы. Проверьте, что в настройках бота или CRM правильно указан интервал рабочего времени (например, с 10:00 до 19:00). Бот не должен предлагать запись на 9 утра или 8 вечера.
  • Обеденный перерыв. Лучший способ настроить обед — создать в календаре ежедневное повторяющееся событие, например, с 14:00 до 15:00 с названием “Обед”. Так как бот видит это событие как “занятое” время, он автоматически не будет предлагать на него запись. Это надежнее, чем пытаться зашить логику обеда в код.

Проблема №4: Глубокая отладка: Ошибки в коде и логике бота

Если вы проверили все вышеперечисленное, а проблема осталась, скорее всего, она кроется глубже — в самом коде и логике работы вашего чат-бота. Это самая сложная для диагностики область, но и здесь есть типичные ошибки.

Война с часовыми поясами (Timezones): самая частая головная боль

Это причина №1 необъяснимых проблем с расписанием. Суть проблемы: Ваш сервер, на котором работает бот, может находиться в Германии и жить по времени UTC+1. Ваша студия находится в Москве (UTC+3). А клиент, который пытается записаться, может быть туристом из Екатеринбурга (UTC+5). Если бот не умеет корректно обрабатывать часовые пояса, начнется хаос.

  • Золотое правило: Все операции со временем на сервере (в коде бота) должны производиться в едином стандарте — UTC (Всемирное координированное время).
  • Как должно быть:
    1. Бот получает от клиента желаемое время и дату (например, “15:00, 25 декабря”).
    2. Бот знает (или спрашивает) часовой пояс клиента (например, Europe/Moscow).
    3. Он конвертирует “15:00 Europe/Moscow” в UTC. Получается “12:00 UTC”.
    4. Именно с “12:00 UTC” он идет в API календаря (Google Calendar по умолчанию работает в UTC).
    5. Получив доступные слоты в UTC, он конвертирует их обратно в часовой пояс клиента (Europe/Moscow) и только потом показывает их пользователю.
  • Где искать ошибку: Проверьте, не сравнивает ли ваш бот “напрямую” время от клиента (МСК) со временем из календаря (UTC). Это все равно что сравнивать метры с футами. Результат всегда будет неверным.

Ошибки в булевой логике: когда И, ИЛИ, НЕ работают против вас

Логика поиска слота — это, по сути, большой набор условий, которые должны выполниться одновременно. Слот считается свободным, если: (Это рабочий день ДЛЯ ДАННОГО МАСТЕРА) И (Время находится ВНУТРИ рабочих часов) И (В это время НЕТ других записей) И (В это время НЕТ обеда) И (Длительность свободного окна >= Длительность услуги + Перерыв)

Очень часто разработчики допускают ошибки, путая операторы И (AND) и ИЛИ (OR). Например, если в коде написано (Это рабочий день ИЛИ Время внутри рабочих часов), бот будет считать выходной день рабочим, просто потому что время (например, 12:00) попадает в “рабочий” интервал.

“Жестко закодированные” значения (Hardcode): скрытая угроза

Иногда разработчики для скорости или простоты вписывают некоторые параметры прямо в код, вместо того чтобы выносить их в настройки.

  • Пример: В коде жестко прописана длительность услуги duration = 60;. Вы добавляете новую услугу на 90 минут через админ-панель, но бот о ней ничего не знает и продолжает искать только часовые окна, поэтому для новой услуги он никогда не найдет слот.
  • Что делать: Проверьте код на наличие “магических чисел” и строк. Все параметры (длительность услуг, ID мастеров, время перерывов) должны подгружаться из настроек или базы данных, а не быть зашиты в коде.

Как читать логи (logs) для поиска ошибок

Логи — это “черный ящик” вашего бота. Это текстовые файлы, куда программа записывает все свои действия, а главное — ошибки.

  • Попросите доступ к логам у вашего разработчика или найдите их на хостинге.
  • Ищите сообщения об ошибках: Error, Exception, Failed, Timeout.
  • Смотрите на запросы и ответы: В логах часто видно, с каким именно запросом бот обратился к API календаря и какой ответ получил. Вы можете увидеть, что в ответ на запрос расписания приходит ошибка “Authorization Failed” (провалилась авторизация) или “Invalid calendarId” (неверный ID календаря). Это сразу укажет на причину проблемы.

Проблема №5: Сервер не справляется: Нагрузка, база данных и кэширование

Иногда код бота идеален, настройки верны, но он все равно “тормозит” и не отдает слоты. Причиной может быть окружение, в котором он работает — его сервер, хостинг и база данных. Эта проблема особенно актуальна для популярных ботов с большим количеством пользователей.

Диагностика нагрузки на сервер и хостинг

Как это работает: Когда пользователь запрашивает слоты, бот выполняет множество вычислений и запросов. Если одновременно это делают 50 человек, а ваш бот живет на самом дешевом тарифе хостинга, его ресурсы (процессор и оперативная память) могут закончиться.

  • Симптомы: Бот отвечает очень долго или не отвечает совсем (выдает ошибку Timeout).
  • Что делать: Зайдите в панель управления вашим хостингом и посмотрите на графики загрузки CPU и RAM. Если они постоянно находятся на уровне 90-100%, вашему боту тесно. Решение — перейти на более мощный тарифный план.

Оптимизация запросов к базе данных (БД)

Если ваш бот хранит расписания, услуги и настройки в своей базе данных (например, MySQL или PostgreSQL), неэффективные запросы могут “положить” всю систему.

  • Пример неэффективности: Бот для каждого пользователя запрашивает из БД ВЕСЬ список услуг и ВЕСЬ список мастеров, хотя мог бы сделать это один раз и запомнить.
  • Что делать: Это задача для программиста. Необходимо проанализировать “медленные” SQL-запросы и оптимизировать их, например, с помощью добавления индексов к таблицам в базе данных.

Роль кэширования: как ускорить работу и снизить нагрузку

Кэширование — это сохранение результатов часто выполняемых операций, чтобы не выполнять их заново каждый раз. Это один из самых мощных инструментов оптимизации.

  • Что можно кэшировать:
    • Список услуг и их длительность. Он меняется редко, нет смысла запрашивать его из БД при каждом сообщении. Можно кэшировать на несколько часов.
    • График работы мастеров. Если график стандартный (пн-пт), его можно кэшировать надолго.
    • Свободные слоты. Можно кэшировать результат поиска слотов на короткое время (1-2 минуты). Если за это время придет другой пользователь и запросит то же самое, бот отдаст ему готовый результат, не нагружая API календаря и сервер.
  • Как это помогает: Кэширование радикально снижает количество запросов к внешним API и базе данных, уменьшает нагрузку на сервер и многократно ускоряет ответ бота для пользователя. Если ваш бот не использует кэширование, он работает в десятки раз медленнее, чем мог бы.

Чек-лист для быстрой проверки: 10 шагов к рабочему боту

  1. Календарь доступен? Откройте календарь вручную. Свободное время есть?
  2. Проблема у всех или у одного? Проверьте запись к разным мастерам.
  3. API-ключи и токены активны? Проверьте ключи Google/YCLIENTS, не истек ли срок их действия.
  4. ID календаря/мастера верны? Сверьте каждую цифру и букву в настройках.
  5. Длительность услуги + перерыв заданы корректно?
  6. График работы, выходные и отпуска внесены в календарь?
  7. Обед настроен как повторяющееся событие?
  8. Часовой пояс (timezone) в настройках бота указан верно? (В идеале, он должен работать в UTC).
  9. Сервер не перегружен? Посмотрите статистику загрузки CPU/RAM на хостинге.
  10. Проверьте логи ошибок. Есть ли там очевидные сообщения о сбоях?

Заключение: от хаоса к контролю

Проблема “бот не показывает свободные слоты” кажется пугающей и сложной, но, как мы увидели, она почти всегда сводится к одной из пяти понятных категорий: синхронизация, математика времени, логика графика, ошибки в коде или производительность сервера.

Ключ к решению — это не магия, а систематический подход. Не паникуйте, а действуйте по нашему алгоритму: начните с самой простой и вероятной причины — рассинхронизации с календарем — и двигайтесь вглубь, к более сложным техническим аспектам. Используйте наш чек-лист как дорожную карту.

Помните, что ваш бот для онлайн-записи — это не просто модная игрушка. Это ваш круглосуточный администратор, мощнейший инструмент продаж и лицо вашего клиентского сервиса. Каждый час его простоя — это упущенная прибыль и разочарованный клиент. Потратив время на то, чтобы разобраться в его работе и научиться диагностировать проблемы, вы делаете инвестицию в стабильность и рост вашего бизнеса. Надежный и предсказуемый бот — это ваше неоспоримое конкурентное преимущество. Не позволяйте мелким техническим ошибкам его аннулировать.