СВОБОДНОЕ ВРЕМЯ → ПОДТВЕРЖДЁННЫЙ ВИЗИТ
Запись.
Под контролем.
Услуга, специалист, свободное время и кабинет клиента. Владелец управляет расписанием и ценами в админке своего сайта.
01 / ПЕРВЫЙ ЗАПУСК
Настройте приём за пять шагов
- Выберите медицинское решение в конструкторе: врач, клиника или стоматология. Добавьте блок «Расписание и запись».
- В админке сайта создайте специалистов.
- Откройте «Онлайн-запись · услуги»: название, длительность, стоимость в копейках, специалисты. Например, 250000 коп. = 2500 ₽.
- В «Расписание приёма» создайте свободные интервалы и выберите услугу. Длительность интервала должна совпадать с услугой. Перерывы и выходные — интервалы без доступных слотов.
- В «Онлайн-запись · настройки» укажите горизонт записи, минимальное время до визита, правила переноса и отмены. Проверьте запись из отдельного браузера.
02 / ВЛАДЕЛЕЦ
Весь день перед глазами
/appointments/manage/ — журнал по дате и специалистам: свободные интервалы, имя и контакт клиента, ручная запись и отмена. Доступ только активным сотрудникам с правами просмотра, добавления или изменения записей.
В админке доступны поиск по имени и контакту, фильтры по специалисту, услуге и статусу. Telegram подключается в «Telegram · онлайн-запись»: токен хранится зашифрованным. Настройки принадлежат конкретному сайту.
03 / КЛИЕНТ
Выбрать. Записаться. Перенести.
Клиент выбирает услугу, специалиста, дату в календаре и свободное время, вводит имя и контакт, подтверждает согласие. Стоимость берётся с сервера и сохраняется в записи.
/appointments/ показывает только собственные записи. Без входа они доступны в том же браузере. После единого входа новые записи и гостевые записи текущей сессии привязываются к аккаунту и доступны после следующего входа. Старые гостевые записи не присваиваются по совпадению телефона.
Перенос доступен на свободный слот той же услуги. Отмена освобождает слот. Возможность и крайний срок изменения задаёт владелец. Изменившиеся цены не меняют стоимость уже оформленного визита.
04 / РАЗРАБОТЧИК
Одна механика для сайта и бота
from yeti3_studio.appointments import available, reschedule, client_cancel
from yeti3_studio.services import book
from uuid import uuid4
# Передавайте ID услуги из вашей базы, не текст клиента.
slots = list(available(service=service_id)[:120])
booking = book(
slot_id=slots[0].pk,
request_id=uuid4(), # сохраните для повторной отправки
session_key=request.session.session_key,
name="Тестовый клиент",
contact="test@example.invalid",
client_user=request.user if request.user.is_authenticated else None,
)
reschedule(booking_id=booking.pk, slot_id=new_slot_id,
session_key=request.session.session_key, user=request.user)
client_cancel(booking_id=booking.pk,
session_key=request.session.session_key, user=request.user)Перед вызовом создайте сессию, проверьте форму, согласие и CSRF. Для интеграции через ядро модуль предоставляет capability appointments.booking с методами slots, book, cancel и reschedule. Зависимость: yeti3-studio>=0.3.17,<0.4.
python -m pip install --extra-index-url https://engine.yeti3.ru/sdk/simple/ yeti3-appointments==1.1.2
python -m django migrate --noinput
python -m django collectstatic --noinputКоманды выполняются в настроенном окружении сайта с PostgreSQL, Django settings и действующей лицензией. Перед обновлением сделайте резервную копию базы.
05 / БЕЗОПАСНОСТЬ
Чужие визиты закрыты
- Публичное расписание не содержит имён и контактов клиентов.
- Бронирование сериализуется блокировкой строки; PostgreSQL не допускает две подтверждённые записи на слот или пересекающиеся интервалы одного специалиста.
- Перенос блокирует старый и новый слоты в одинаковом порядке. Занятое время не уничтожает исходную запись.
- Кабинет проверяет владельца на сервере; знание UUID не даёт доступ.
- CALMF и блокчейн фиксируют события без имён и контактов. Данные клиентов остаются в изолированной базе сайта.
06 / ГРАНИЦЫ
Самостоятельный модуль записи
Механика ориентируется на сценарии записи YCLIENTS. Это самостоятельная реализация без синхронизации аккаунтов YCLIENTS. Абонементы, зарплаты, склад, комбинации нескольких услуг, общие ресурсы кабинетов, SMS-напоминания и платежи за визит в этот выпуск не входят. Подтверждение записи не означает оплату. Единый вход требует регистрации callback для конкретного сайта.