[все дашборды](index.html) · категория: Инфраструктура и рутины · [← HANDOFF-alpha-recall-comments](HANDOFF-alpha-recall-comments.md) · [HANDOFF-monitor-session →](HANDOFF-monitor-session.md)

# HANDOFF — продолжение сессии «бот-бронировщик звонков»

> **Инструкция твоему Claude (вставь это целиком и продолжай):**
> Ты продолжаешь живую рабочую сессию Антона по боту-бронировщику звонков
> (модуль BB Platinum). Ниже — полное состояние на момент передачи. Прими его
> как свой контекст и продолжай С ТОЧКИ «ПРОДОЛЖАЙ ОТСЮДА» в конце. Не
> пересказывай — просто работай дальше. Машина-исполнитель = ХАБ
> `A-2022BAYAREA` (код и демон живут там; см. «Границы»).

**Сессия-источник:** `5ef092e4-9e5b-4ed4-969e-eff8946a8a75` (хаб A-2022BAYAREA).
**Оператор продолжения:** Ruslana (Mac). **Дата передачи:** 2026-06-24.
**Канон задачи:** `reglament-buking-zvonkov-bb-platinum.md` (Руслана, 2026-06-23, финал).

---

## РЕШЕНИЯ (что и почему)
- Букинг-модуль = **2-й модуль того же бота звонков** (брат «монитор+follow-up»).
  Букаем **ТОЛЬКО в BB Platinum** (`**********department@gmail.com`); Детковский
  A2 (`*******vskiy.a2@gmail.com`) — **только читаем** на конфликты, НЕ букаем.
- Заявка = просто кинуть ссылку на Calendly лида в чат «Календарь» (`-5446556156`),
  без называния календаря и без @тега. Бот предлагает слот → на `+` букает + скрин.
- Правило BB-strict: слот должен иметь **≥30 мин до и после ЛЮБОГО события** в
  ОБОИХ календарях; окно **06:00–24:00 Лиссабон**; время показываем в Лиссабоне (+
  локаль лида). Никогда не букать молча — всегда «что рядом».
- Аллоулист (кто заказывает/жмёт `+`, по числовому ID): Руслана `1078123160`,
  Наташа `227162473`, Антон `432963868`/`1842936036`/`263625473`. Оксану и
  Анастасию УБРАЛИ.
- DRY_RUN **включён по умолчанию** (читает+логирует, НИЧЕГО не шлёт/не букает) —
  снимаем только после Google-консента и явного «+» Антона.
- Авто-бронирование на Calendly НЕ подключали намеренно: внешний сайт + captcha
  (канон: captcha→человек) + нужен скрин = браузер-воркер, следующий слой.

## СДЕЛАНО И ПРОВЕРЕНО (всё на хабе, `E:\Obsidian\_imports\call-bot\`)
- `slot_engine.py` — движок слотов/конфликтов. Тесты `test_slot_engine.py`
  **15/15 зелёных**.
- `calendly.py` — чтение открытых слотов лида через публичный API Calendly.
  `test_calendly.py --live` **11/11**, вживую вытянул 43 реальных слота.
- `booking_daemon.py` — Telethon-watcher на чате «Календарь», аллоулист,
  approve-gate `+/−`, идемпотентность. Selftest всего конвейера прошёл; бот-аккаунт
  **T0x0AA подключается и читает чат** (последнее сообщение id 89467).
- `config.py` (все канон-значения), `gcal_auth.py` + `gcal_busy.py` (календарь,
  готовы к консенту), `book.py` (заглушка-граница для брони), `README.md`.

## ПУТИ И ЗНАЧЕНИЯ
- Код бота: `E:\Obsidian\_imports\call-bot\` — **ТОЛЬКО на хабе** (`_imports` НЕ
  синкается на Mac; см. Границы).
- Чат «Календарь» `-5446556156`; чат follow-up «CALLS 889» `-1001667807572`.
- Telethon-сессии: `E:\Obsidian\_imports\dialogs\.env` (T0X0AA_/TONYSSD_/… ) +
  `C:\mcp\telegram-mcp\.env`. Бот-аккаунт = `T0X0AA` (env `CALLBOT_ACCOUNT`).
- Google OAuth: `E:\!CLAUDE-PaloAltoPC-June26\gmail\` (сейчас только Gmail-скоуп;
  календарные токены лягут в `call-bot\gcal_tokens\`).
- Calendly публичный API (разобран): `/api/booking/profiles/{slug}/event_types`
  → uuid; `/api/booking/event_types/{uuid}/calendar/range?timezone=&range_start=&range_end=`.

## ОТКРЫТО / БЛОКЕРЫ (нужен Антон)
1. **Google Calendar консент** (ядро проверки конфликтов; сейчас токены без
   календарного скоупа): на хабе `python gcal_auth.py bb` и `… a2` → клик Allow.
2. **Исполнитель брони** `book.py` — не подключён (браузер-воркер + captcha→человек
   + скрин). Пока на `+` бот говорит «слот одобрен — забукайте вручную».

## ИНСТРУМЕНТЫ / КОНТРАКТЫ
- Selftest без Telegram: `python booking_daemon.py --selftest "<calendly url>"`.
- Live (после консента + «+» Антона): `set CALLBOT_DRY_RUN=0` → `python booking_daemon.py`.
- Зависимости стоят (telethon 1.44, google-api, requests, tzdata, zoneinfo).

## ГРАНИЦЫ (важно для Mac-сессии)
- **Код бота на Mac НЕ синкается** (`_imports` вне синка). Эту беседу/контекст ты
  видишь, но файлы `call-bot\*` живут на хабе. Правки кода и запуск демона —
  только сидя за хабом (или удалёнкой в него).
- **Живой тест звонков = только хаб** (там Telethon-сессии, календари, демон).
  «Кинуть ссылку в чат Календарь и смотреть ответ бота» можно с любого устройства
  через Telegram — реагирует демон на хабе.

---

## ➤ ПРОДОЛЖАЙ ОТСЮДА (точка с запятой)
Бот собран и в безопасном DRY_RUN. Следующий разумный шаг — **довести до живого
теста**: (1) провести Google-консент `gcal_auth.py bb` + `a2` (нужен клик Антона),
(2) прогнать `booking_daemon.py --selftest` на реальной ссылке лида и убедиться,
что слот считается с учётом занятости, (3) обсудить/подключить браузер-воркер для
самой брони. Спроси Антона/Руслану, с чего начать, и продолжай вести задачу.
