Все статьи
Интеграции // Geron Labs

Как подключить ИИ-бота к YCLIENTS и проверять свободные слоты

Partner Token, User Token, услуги, сотрудники, даты, слоты, запись, webhooks и защита от дублей в YCLIENTS.

Автор: Сергей Сидоров, основатель Geron Labs 17.10.2026 Код, API и границы решения

Для онлайн-записи бот использует Partner Token и booking endpoints: получает услуги, сотрудников, доступные даты и время, затем создаёт запись. Для клиентской истории и других management/CRM методов дополнительно нужен User Token технического пользователя с правами нужного филиала. Webhook сообщает об изменениях записей, но не заменяет API-запросы. После неоднозначного таймаута создание записи нельзя повторять вслепую.

Открытый виджет Алисы на сайте EST.EPIL

Виджет Алисы на сайте EST.EPIL: первый экран консультации и записи. Снимок 25.09.2026.

Открыть в полном размере ↗

Два уровня доступа

В проверенном проекте EST.EPIL заголовок строится так:

text
Authorization: Bearer <partner_token>, User <user_token>

Partner Token идентифицирует приложение и используется в клиентском контуре записи. User Token наследует права конкретного пользователя и нужен для management/CRM операций.

YCLIENTS отдельно объясняет, что системного пользователя приложения нужно добавить в филиал и выдать ему необходимые права. Сам факт создания пользователя не открывает клиентскую базу.

Последовательность онлайн-записи

Рабочий маршрут:

text
определить филиал и услугу
  → GET /book_services/{company_id}
  → GET /book_staff/{company_id}
  → GET /book_dates/{company_id}
  → GET /book_times/{company_id}/{staff_id}/{date}
  → подтвердить имя, телефон и время
  → при необходимости POST /book_code/{company_id}
  → POST /book_record/{company_id}
  → сохранить record_id и hash

Модель разбирает свободную фразу клиента. Код выбирает ID только из ответа API и валидирует дату.

Пример безопасного клиента

Секреты читаются на сервере:

python
import os
import requests

base = "https://api.yclients.ru/api/v1"
auth = f"Bearer {os.environ['YCLIENTS_PARTNER_TOKEN']}"
user = os.getenv("YCLIENTS_USER_TOKEN")
if user:
    auth += f", User {user}"

headers = {
    "Authorization": auth,
    "Accept": "application/vnd.yclients.v2+json",
    "Content-Type": "application/json",
}

response = requests.get(
    f"{base}/book_services/<company_id>",
    headers=headers,
    timeout=25,
)
response.raise_for_status()
services = response.json()

В настоящем журнале токены и company ID не печатаются.

Почему услуги могут расходиться

В YCLIENTS публичная онлайн-запись и управленческий каталог решают разные задачи. Услуга может существовать в CRM, но не быть опубликована в book_services. Бот не должен обещать запись по одной только management-карточке.

В проекте код различал эти источники и сообщал о несовпадении администратору.

Схема процессаGERON LABS

Когда запись можно считать созданной

  1. Услуга, филиал и дата

    Уточняем недостающие данные обращения.

  2. Свободные окна из YCLIENTS

    Проверяем доступные интервалы и получаем выбор клиента.

  3. Создание записи

    Выполняем вызов с нужными правами; не повторяем запись вслепую после таймаута.

  4. Подтверждение по результату API

    Сохраняем ID записи. Ошибку или недостающий доступ передаём администратору.

Схема онлайн-записи EST.EPIL. Приветствие виджета или событие CRM само по себе не доказывает успешную запись.

Запись без дублей

GET-запросы безопасно повторять при обрыве или 5xx. С POST /book_record ситуация другая: запись могла создаться, а ответ потеряться. Повтор создаст вторую.

Поэтому рабочий клиент:

  • не повторяет book_record автоматически;
  • сохраняет record_id и record_hash;
  • перед новым действием ищет подтверждение результата;
  • показывает оператору неоднозначный случай.

Для отмены записи, созданной через booking path, нужен сохранённый hash. Management API может быть недоступен роли технического пользователя.

Зачем нужен webhook

YCLIENTS отправляет webhook при создании, изменении и удалении записей и других объектов. Сервис принимает POST, проверяет запрос, быстро отвечает и обновляет локальную память идемпотентно.

text
YCLIENTS event
  → публичный HTTPS endpoint
  → проверка и dedup
  → очередь
  → обновление локального состояния
  → минимальный audit

Официальная справка рекомендует устойчивую обработку, логирование и идемпотентность. Настройка webhook зависит от приложения и подключения филиала.

Реальная ошибка 403

В EST.EPIL бот видел услуги и свободные окна, но поиск истории клиента отвечал 403. Причина была в правах User Token. Пользователя пригласили в филиал и выдали минимальную роль. Промт и модель здесь ни при чём.

Это хороший диагностический признак: если booking API работает, а CRM нет, сначала проверяются пользователь, филиал и роль.

На этом эпизоде удобно проверить своё подключение:

НаблюдениеЧто из него следуетЧто проверять дальше
Услуги и свободные окна загружаютсяКлиентский контур записи доступенНе считать это проверкой прав на историю клиентов
История клиента возвращает 403Этот CRM-запрос не разрешён текущему пользователюПриглашён ли технический пользователь в нужный филиал и выданы ли права
Приходит событие о записиСервис получил уведомлениеЕсть ли подтверждённый объект записи в целевой системе

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

Что остаётся человеку

Администратор подключается при конфликте услуги, переносе со сложными условиями, неоднозначном SMS-подтверждении, медицинском вопросе и любом неподтверждённом результате записи. Бот не выдаёт событие webhook за доказанную живую запись, пока целевая система не вернула объект.

Как тестировать

Проверьте три филиала или другие реальные варианты, услугу вне онлайн-записи, отсутствие мастера, пустой день, SMS-код, timeout после POST, повтор webhook, 403 CRM и отмену по hash. Логи должны показывать класс ошибки без телефона и клиентской истории.

Geron Labs может начать с read-only подключения расписания, а создание записи включить после проверки прав и дублей.

Читайте также: Как настроить данные, инструменты, память и эскалации ИИ-агента, Как ИИ-агент помогает продажам и когда передаёт клиента менеджеру.

Источники

Из практики студии

Как это устроено в наших проектах

Если нужна такая автоматизация

Разбор процесса

Подключить запись к вашему каналу общения

Укажите систему записи, филиал и канал, в котором пишут клиенты. Проверим доступ к расписанию и создание записи, а также передачу сложных случаев администратору.

SYS: COOKIE

Мы используем технические cookies для корректной работы сайта. Политика конфиденциальности