Как подойти к задаче без лишней магии
Я бы не хранил расписание в промпте. Бот может красиво предложить слот, но единственным источником свободного времени должен быть календарь, проверенный прямо перед созданием встречи.
Ошибка, которую я бы сразу убрал: Сообщение «записал вас на 15:00» ещё не означает, что событие создано. Двойной клик, часовой пояс и параллельная запись легко превращают одну встречу в две.

Что подготовить и какой результат ждать
- На выходе: Клиент выбирает доступный слот, получает подтверждение и напоминание, а перенос не создаёт вторую встречу.
- Создайте таблицу услуг: service_id, длительность, буфер, календарь, рабочие часы, часовой пояс, кто подтверждает исключения.
- Сохраните исходные данные и права доступа отдельно от результата, чтобы можно было проверить, что сделал AI-запись на услугу.
- Проверьте запись, занятый слот, перенос, отмену, летнее время и заявку из другого часового пояса.
Настройте запись, напоминания и переносы
- Сначала настройте календарь
Подключите рабочий календарь и задайте часы, перерывы, буфер до и после встречи и минимальное время до записи. Не храните свободные слоты в промпте.
Проверьте: Свободный слот берётся из календаря прямо перед показом клиенту.
Если не сработало: Синхронизируйте один тестовый календарь и отключите запись в общий календарь.
- Сделайте услугу отдельным объектом
Для каждой услуги укажите service_id, длительность и нужного сотрудника. AI может понять название услуги, но длительность и цену берите из таблицы.
Проверьте: Одна и та же услуга даёт одинаковый слот независимо от формулировки клиента.
Если не сработало: Замените свободный текст на список кнопок или допустимых значений.
- Подтвердите слот перед созданием встречи
После выбора времени снова запросите availability, затем создайте событие с именем, контактом, услугой и часовым поясом. Сохраните event_id.
Проверьте: Двойной клик или повтор webhook не создаёт две встречи.
Если не сработало: Проверяйте event_id и блокируйте повторную запись.
- Разделите перенос и новую запись
Перенос должен найти существующий event_id, проверить новый слот и изменить событие. Если id не найден, переводите запрос человеку.
Проверьте: В истории остаются старое и новое время.
Если не сработало: Не удаляйте старое событие до подтверждения нового.

Настройка, которая спасает от двойных записей
В таблице услуг задайте service_id, duration_minutes, buffer_before, buffer_after, calendar_id и timezone. AI может понять, что человек хочет «консультацию», но длительность и календарь берите из таблицы.
После выбора слота снова вызовите availability, затем создайте событие и сохраните event_id. При повторном webhook сначала ищите event_id или client_request_id. Для переноса сначала создайте новый слот, а старое событие удаляйте только после подтверждения.
- Проверьте летнее время и заявку из другого часового пояса.
- Не обещайте слот, пока календарь не вернул подтверждённый event_id.
Что оставить человеку
Отдайте сотруднику несколько случаев: VIP-клиент, оплата не прошла, нет подходящего специалиста, перенос за пределами правил и конфликт календарей. В остальных случаях AI может собрать данные, но финальное действие всё равно должно пройти через календарный API.
Проверяю слот дважды, а не обещаю из памяти
В календаре храните `event_id`, `client_request_id`, `service_id`, `duration_minutes`, `buffer_before`, `buffer_after` и `timezone`. После выбора времени снова вызовите availability и только потом create event. Если повторный webhook пришёл с тем же `client_request_id`, верните существующий `event_id`, а не создавайте новую встречу.
Для переноса сначала забронируйте новый слот, получите подтверждение, затем измените старое событие. Если новый слот не создан, старую встречу не удаляйте. Это простое правило спасает от ситуации «бот отменил старую, но новую не поставил».
Что должно измениться после настройки
Клиент выбирает доступный слот, получает подтверждение и напоминание, а перенос не создаёт вторую встречу.

Почему бот записывает людей в несуществующие слоты
Хранить расписание в промпте вместо календаря.
Не учитывать часовой пояс клиента.
Считать отправленное подтверждение гарантией созданного события.
Разрешать перенос без проверки, какую встречу меняют.
Когда запись становится системой бронирования
Нужен специалист, если есть несколько сотрудников, разные длительности, оплаты, медицинские или юридические ограничения.
Что протестировать до открытия записи
Кому подходит этот способ работы с AI-запись на услугу?
Автоматическая запись должна видеть реальные свободные слоты, учитывать длительность и часовой пояс, а переносить или отменять встречу — только после проверки личности и правил бизнеса.
С чего начать, если всё пока делается вручную?
Создайте таблицу услуг: service_id, длительность, буфер, календарь, рабочие часы, часовой пояс, кто подтверждает исключения.
Как проверить, что настройка не навредит?
Проверьте запись, занятый слот, перенос, отмену, летнее время и заявку из другого часового пояса.
Что делать при непонятном результате?
Не обещайте слот в сообщении: поставьте заявку в needs_confirmation и передайте менеджеру точное время и исходный запрос.







