YETI³ / SDKAPPOINTMENTS · 1.1

СВОБОДНОЕ ВРЕМЯ → ПОДТВЕРЖДЁННЫЙ ВИЗИТ

Запись.
Под контролем.

Услуга, специалист, свободное время и кабинет клиента. Владелец управляет расписанием и ценами в админке своего сайта.

appointments.bookingМодуль SDK · pip: yeti3-appointments1 слот · 1 клиентЗащита в PostgreSQL10 секундОбновление свободного времени

01 / ПЕРВЫЙ ЗАПУСК

Настройте приём за пять шагов

  1. Выберите медицинское решение в конструкторе: врач, клиника или стоматология. Добавьте блок «Расписание и запись».
  2. В админке сайта создайте специалистов.
  3. Откройте «Онлайн-запись · услуги»: название, длительность, стоимость в копейках, специалисты. Например, 250000 коп. = 2500 ₽.
  4. В «Расписание приёма» создайте свободные интервалы и выберите услугу. Длительность интервала должна совпадать с услугой. Перерывы и выходные — интервалы без доступных слотов.
  5. В «Онлайн-запись · настройки» укажите горизонт записи, минимальное время до визита, правила переноса и отмены. Проверьте запись из отдельного браузера.
Модуль не придумывает свободные слоты. Если расписание пусто, клиент увидит, что свободного времени пока нет. В preview формы не отправляют данные.

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 для конкретного сайта.

Официальная справка YCLIENTS: сценарии онлайн-записи ↗