Как связать чат-бота с календарём мастера без двойной записи

Как связать чат-бота с календарём мастера без двойной записи

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

Где вести расписание, к которому подключится чат-бот?

Начните с календаря, где мастер или администратор уже ведёт запись. Бот должен получать свободное время из этого же источника и добавлять туда новые визиты. Если администратор продолжит записывать клиентов в отдельную таблицу, бот не увидит эти встречи и предложит занятые часы.

Источником расписания может быть календарь или система онлайн-записи. Для подключения нужен API — способ, с помощью которого программы обмениваются запросами. Проверьте в документации выбранного сервиса, позволяет ли он получать занятость, создавать запись и менять её статус. Само наличие API ещё не означает, что сервис защищает от пересечений.

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

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

Для бизнеса в Беларуси проверьте, что бот показывает клиенту местное время. Особенно внимательно проверьте настройки, если календарь и сервер используют разные часовые пояса: время в сообщении должно совпадать со временем записи у мастера.

Как бот должен проверять и занимать свободное время?

Разделите выбор времени и подтверждение записи. Кнопка со свободным часом показывает доступность на момент запроса. Она ещё не закрепляет место за клиентом: пока человек читает сообщение, другой клиент или администратор может занять этот интервал.

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

  1. Бот уточняет услугу и мастера, чтобы определить нужную длительность визита.
  2. Система возвращает доступные интервалы с учётом перерывов и существующих записей.
  3. Клиент выбирает время, а система пытается закрепить за ним весь интервал услуги.
  4. При успехе бот получает идентификатор записи и отправляет подтверждение.
  5. Если время уже занято, бот запрашивает актуальное расписание и предлагает другой вариант.

Если сервис календаря разрешает пересекающиеся события, простая связка «проверить занятость, затем создать событие» оставляет риск конфликта. Нужен механизм бронирования, который управляет конкурирующими запросами. Причём через него должны проходить и заявки бота, и ручная запись администратора. Блокировка только внутри бота не защитит от события, которое сотрудник добавит напрямую в календарь.

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

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

Что делать при сбое, повторном нажатии и переносе?

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

Отдельно проверьте случай, когда календарь создал запись, но ответ до бота не дошёл. Сообщение об ошибке связи не доказывает, что бронирование не состоялось. Сначала интеграция должна проверить результат по ключу запроса, затем сообщить клиенту статус. До проверки нельзя уверенно писать ни «Вы записаны», ни «Запись не создана».

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

При переносе важно сохранить исходную запись, пока система не закрепит новое время. Конкретный порядок зависит от возможностей календаря: он может менять интервал существующей записи либо создавать новую и затем отменять прежнюю. В обоих случаях проверьте, что сбой посередине не оставляет клиента без визита или с двумя активными записями.

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

Как проверить интеграцию перед запуском?

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

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

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

В задании на интеграцию зафиксируйте источник расписания, правила бронирования и поведение при сбоях. Эти условия определяют объём разработки точнее, чем формулировка «нужен бот для записи». Если календарь уже работает, сначала проверьте его API: менять всю систему ради чат-бота потребуется не всегда.

Типичные ошибки при подключении чат-бота к календарю

  • Бот показывает часы из заранее составленного списка. Исправление: получать доступность из рабочего расписания и повторно проверять её при бронировании.
  • Система проверяет только время начала визита. Исправление: учитывать весь интервал услуги и необходимые перерывы.
  • Администратор и бот ведут независимые записи. Исправление: направить оба потока через общий механизм, который проверяет пересечения.
  • Бот подтверждает визит сразу после нажатия кнопки. Исправление: отправлять подтверждение только после успешного ответа системы бронирования.
  • Повторный запрос создаёт новое событие. Исправление: передавать ключ операции и возвращать результат первой попытки.

Сейчас откройте рабочий календарь и проверьте один ближайший визит: указаны ли в нём начало и конец услуги. Это первая деталь, которую нужно уточнить перед подключением бота.