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

Что решить до записи
- Один источник доступности.
- Часовой пояс клиента и специалиста.
- Отдельные ветки для переноса и отмены.
- Тест двойной записи и устаревшего слота.
Как провести клиента до подтверждённого слота
- Сначала настрой календарь
Подключи рабочий календарь и задай часы, перерывы, буфер до и после встречи и минимальное время до записи. Не храни свободные слоты в промпте.
Что увидишь: Свободный слот берётся из календаря прямо перед показом клиенту.
Если не сработало: Синхронизируй один тестовый календарь и отключи запись в общий календарь.
- Сделай услугу отдельным объектом
Для каждой услуги укажи 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 и передай менеджеру точное время и исходный запрос. |
Что происходит после записи
Клиент видит реальные слоты, получает напоминание и переносит запись без ручной переписки. У команды остаётся журнал изменения времени и причины сбоя.

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






