Выберите источник, которому доверяют все каналы
Для владельца процесса главный вопрос — где окончательно меняется занятость. Ручная тетрадь, календарь сотрудника и бот с отдельной таблицей создают несколько конкурирующих версий. Опишите, кто вправе создавать, переносить и отменять визиты и как изменения попадают в общий источник.
Слот — это не только время начала. Важны продолжительность услуги, исполнитель, кабинет или оборудование, перерыв и часовой пояс. Если услугой одновременно пользуются несколько клиентов, задаётся вместимость. Правило «один слот — один человек» подходит не для каждого процесса.
Разберите конфликт по шагам
Таблицу можно прокрутить по горизонтали.
| Момент | Клиент А | Клиент Б |
|---|---|---|
| Расписание прочитано | Видит свободное 15:00 | Видит свободное 15:00. |
| Первый запрос принят | Сервис создаёт запись и занимает ресурс | Пока выбирает. |
| Второй запрос поступил | Запись уже подтверждена | Сервис отклоняет пересечение и возвращает понятный статус. |
| Продолжение диалога | Получает подтверждение | Получает новое свободное время или помощь администратора. |
Проверка и фиксация занятости должны быть согласованы на стороне источника записи. Например, в документации PostgreSQL описаны ограничения пересекающихся диапазонов. Это один технический способ для собственной системы, а не утверждение о внутреннем устройстве вашей CRM. При готовом сервисе нужно проверить его фактическое поведение.
Не повторяйте создание вслепую после тайм-аута
Сервис может создать запись, а ответ до агента не дойдёт. Тогда «повторить» не обязательно означает «создать ещё раз». Интеграции нужен способ узнать результат исходной операции: ключ повторной отправки, идентификатор запроса или поиск по надёжному признаку — в пределах возможностей сервиса.
Если результат нельзя однозначно восстановить, агент сообщает, что подтверждение уточняется, и передаёт задачу. Нельзя уверенно заявить ни успех, ни отсутствие записи только по тайм-ауту. Отдельно согласуйте время удержания временной брони, если она есть, и освобождение при незавершении клиентом.
Проверьте пять конфликтных сценариев
- Два клиента выбирают один ресурс и время почти одновременно.
- Администратор вручную занимает окно между предложением и подтверждением.
- Клиент меняет услугу на более длительную перед записью.
- Создание прошло, но ответ потерян; повтор не создаёт вторую запись.
- Перенос освобождает старое время только согласно согласованной механике.
Для каждого теста нужны ожидаемый статус клиента и фактическое состояние расписания. Снимок красивого диалога недостаточен. До завершения таких проверок можно использовать сбор пожеланий с ручным подтверждением: это отдельный честный режим, а не автоматическая запись.
Конкурентный тест: ожидаемый результат
Вход: один ресурс и слот 15:00, два независимых ключа. Тест одновременно запускает две попытки записи. При уникальном ограничении одна получает accepted, другая conflict. Повтор успешного ключа возвращает тот же booking ID; число строк остаётся 1.
Учебная SQLite-модель защищает одинаковые слоты. Она не покрывает интервалы 60 и 90 минут, несколько ресурсов, часовые пояса или API внешнего календаря. Для проекта эти проверки добавляются отдельно; ссылка на range types PostgreSQL объясняет возможный механизм пересечений, но не доказывает нашу интеграцию.
Как повторить локальный стенд
Скачайте самодостаточный Python-стенд и выполните python3 service-demos.py. Нужен Python 3, только стандартная библиотека; сеть, CRM, LLM и внешние сообщения не используются. Скрипт проверяет продажи, знания и конкуренцию за слот, выводит JSON с before/after и проверяет результат через assert. Временная база удаляется после запуска.
Ожидается: sales — 2 строки в наивном варианте и 1 после повтора по ключу; support — answer до проверки актуальности и handoff после; booking — два успешных предварительных чтения против одной атомарной записи и конфликта. Эти узкие модели не заменяют испытания реальной системы.
Основания и источники
Примеры и расчёты — иллюстрации, а не результаты клиентов. Ссылки ниже подтверждают названные технические возможности; матрицы и критерии проверки — редакционные рекомендации ЛидПотока. Проверено 27 октября 2026.
- PostgreSQL: ограничения пересечения временных диапазонов
Ограничения пересечения диапазонов PostgreSQL. Скачиваемый стенд использует SQLite и только одинаковые слоты.
- Под запись: отдельные правила отмены и переноса
Отдельные правила отмены и переноса в сервисе «Под запись». Срок 12 часов в нашем примере условный и не взят из тарифа или настроек этого сервиса.
- Локальный воспроизводимый стенд: правила повторов, знания и слоты. Не интеграция платформы.
Самодостаточная локальная модель правил: повтор операции, просроченное знание, конкурентная запись. Без LLM и внешних интеграций.