4.2 KiB
| name | description | metadata | ||||
|---|---|---|---|---|---|---|
| gcal | Use when Alex asks in TG to schedule a call/meeting ("сделай звонок на X с Владой", "запланируй созвон", "поставь встречу") — creates a Google Calendar event with guest invites in a workday slot (Alex's «3 через 3» cycle), or checks the schedule. Powered by tools/gcal.py. |
|
gcal: команда из TG → событие в календаре Alex
Одна команда из TG должна решаться одним прогоном этого скилла: интеншн → валидный слот (рабочий день!) → событие с приглашением → ответ в чат.
Шаг 1 — разобрать команду
Из сообщения извлечь:
- что: тема (по умолчанию «Звонок: <тема/имя гостя>»);
- когда: день (сегодня/завтра/дата) и время; длительность (по умолчанию 30 мин);
- кого: email гостей. Известные контакты: Влада — videoprodshema@gmail.com. Email НЕ известен → спросить у Alex ДО создания (угадывать адрес нельзя);
- время: Alex в Минске (UTC+3). Время из TG трактовать как минское, в инструмент передавать UTC.
Шаг 2 — валидация слота (строго до создания)
./venv/bin/python tools/gcal.py next-workdays # ближайшие рабочие
./venv/bin/python tools/gcal.py create ... --dry-run # что попадёт в Google
Guard'ы (встроены в create, не обходить):
- Только рабочий день — цикл «3 через 3» (docs/alex-schedule.md). Якорь цикла: env GCAL_WORK_ANCHOR (по умолчанию 2026-10-02). Сдвиг цикла Alex сообщил в TG → обновить docs/alex-schedule.md и якорь.
- Не позже 2ч до начала (GCAL_MIN_LEAD_MIN=120) — анти-паттерн рекордера (t-261008155708: встречи, созданные <2 мин до старта, не заходятся).
Выходной/поздний слот → НЕ создавать, ответить Alex с ближайшими рабочими днями и попросить подтвердить слот.
Шаг 3 — создать событие
./venv/bin/python tools/gcal.py create \
--title "Звонок: Влада" --day YYYY-MM-DD --time HH:MM \
--duration 30 --guests "videoprodshema@gmail.com" --timezone Europe/Minsk
sendUpdates=all — приглашения уходят гостям автоматически.
Ответ в чат: ссылка на событие (htmlLink), слот, гости.
Ключ (один раз, если не настроен)
tools/gcal.py check печатает готовность и шаги:
Google Cloud → Calendar API → service account → JSON-ключ → дать
client_email право «Вносить изменения» на календаре Alex → положить в
secrets/gcal-service-account.json (0600). Ключа нет → работать dry-run'ом
и попросить Alex прислать ключ (это может сделать только владелец аккаунта).
Критерии качества
- Слот — рабочий день цикла; иначе отказ с предложением ближайших рабочих
- До начала ≥2ч (или осознанный --force по явной просьбе Alex)
- Гости получили приглашения (sendUpdates=all), email не угадан
- В ответе Alex — время в его зоне (Минск) и ссылка на событие
checkзелёный; ключ лежит в secrets/ с правами 0600