尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证Astor Butler — Telegram-дворецкий для HoReCa: гость ↔ персонал ↔ менеджер, сценарии в FSM. Каналы: Telegram, WEB, MAX (за флагом), очки Astor Glass. Пилот в AERIS. Сайт: https://astor-ai.ru
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Telegram-дворецкий для HoReCa: гость ↔ персонал ↔ менеджер. Сценарии живут в конечном автомате (FSM) — он единственный источник истины, а Telegram, веб-виджет, MAX и очки Astor Glass — только транспорт и UI. Модели (Yandex, Sber, локальные) понимают речь и помогают с текстом, но не подтверждают брони, счета и поручения — это делают FSM, доменные сервисы и человек.
Первое заведение — гастробар AERIS (Екатеринбург). На той же инфраструктуре живут боты c3flex и Smart Solution (отдельные профили compose, свои сценарии).
| Канал | Состояние | Где описано |
|---|---|---|
| Telegram (long polling) | основной рабочий транспорт: гость, staff / admin / system / analytics-чаты, карточки хостес с «Да / Нет» | FSM_SCENARIOS.md, FSM viewer |
| WEB (виджет сайта) | POST /api/astor/messages — тот же FSM, quick replies, лимиты и retention (#118) | WEB_CHANNEL_ADAPTER.md |
| MAX (VK) | фаза 1 за флагом ASTOR_MAX_ENABLED, по умолчанию выключен; живой бот не подключался (#116) | MAX_ADAPTER_PLAN.md |
| Astor Glass (очки + iPhone) | информационные вопросы (POST /api/glasses/assist) и первое действие — поручение голосом «Задача: …» → astor_staff_tasks (#121) | GLASSES_ASSIST_PILOT.md, GLASSES_VOICE_TASKS.md, ADR |
| Astor Concierge | отдельный репозиторий Astor_Concierge: гостевой ИИ-консьерж. В Butler гость приходит по deep-link ?start=lunch_aeris… или через веб-канал, бронь — по API Butler | CONCIERGE_BUTLER_HANDOFF_DRAFT.md, BUSINESS_LUNCH_FIRST_TEST.md §1.1 |
Сценарии гостя: согласие и контакт, бронь стола с подтверждением хостес, бизнес-ланч (блюда, пожелания, пометка кухне), счёт и оценка, чаевые, предпочтения, запросы консьержа. Интеграция с кассой Saby Presto (СБИС) — за флагами, см. ниже.
main = ed7c037 (merge #191). Всё ниже взято из документов репозитория и влитых PR; что именно выложено на ВМ,
сверяется по тегу образа и логам (HANDOVER_2026-10-10.md §1).
Одна ВМ, общая с порталом Vedal; наружу смотрит только общий edge-Caddy. Адреса и секреты — в runbook и в
.env.production на ВМ, не здесь.
astor-api-gateway (nginx) с allow-list публичных путей; остальной /api/* — только с внутренним токеном
(PUBLIC_API_GUARD.md).astor-site, домен astor-ai.ru (infra/astor-site/, #112, #124, #139).Выложено 10.10 (HANDOVER §2): STT очков через Yandex SpeechKit (#119), поручения голосом (#121), телефон гостя для Saby (#117),
защита API (#123), веб-канал (#118), MAX фаза 1 (#116), фундамент мультиязычности (#114), сайт (#112, #124).
Волна 12.10 по интервью команды AERIS (#155–#191) влита в main и выложена на ВМ вечером 12.10 (образ бота, шлюз,
очки v10); все новые функции выехали выключенными и включаются флагами в .env.production.
План — BUSINESS_LUNCH_FIRST_TEST.md: два статиста оформляют ланч через бота.
Первый прогон — полуавтомат: заявка → карточка хостес «Да / Нет» → подтверждение гостю; нужен только id staff-чата.
Второй — автомат с Saby после ключей и read-only smoke. Критерий: гость сел, заявка дошла до хостес, подтверждение
вернулось, бронь видна в Saby (HANDOVER §5). Откат — флагами на ВМ и /stop менеджера смены.
Подготовка: SABY_STAFF_MEMO_DASHA.md (памятка менеджеру зала: что должно быть
в Presto, люди для справочника), SHIFT_BRIEFING.md (сводки смены, /status_butler),
MENU_COMPOSITION_FOR_BOT.md, интервью AERIS № 1–№ 6 (см. «Документы»).
Имена — как в application.yaml; в docker-compose*.yml им соответствуют алиасы AERIS_*. Полная таблица с дефолтами
и пробросом в контейнер — BUSINESS_LUNCH_FIRST_TEST.md §1.6.
| Флаг | Что включает | PR |
|---|---|---|
ASTOR_MAX_ENABLED | канал MAX: текст, кнопки, согласие и контакт (фаза 1, long polling) | #116 |
ASTOR_I18N_ENABLED, ASTOR_I18N_MT_ENABLED | определение языка гостя, каталог ru/en, машинный перевод | #114 |
ASTOR_TELEGRAM_VOICE_REPLIES (off) | голосовые ответы бота + короткая текстовая сводка, /voice on|off | #105 |
ASTOR_STAFF_TASKS_ENABLED | поручения из очков в astor_staff_tasks без стаф-портала | #121 |
ASTOR_GLASSES_TRANSCRIPT_RELAY_ENABLED | релей вопросов и ответов очков в системный чат | #70 |
ASTOR_SHIFT_BRIEFING_ENABLED | утренний план и вечерняя сводка смены в аналитическом чате | #67 |
ASTOR_LUNCH_SCOREBOARD_ENABLED | табло ланча: оценки 5★, хит-парад блюд, /табло | #189 |
ASTOR_KILL_SWITCH_ENABLED | стоп-кнопка менеджера смены: /stop с саммари, /start_butler, /status_butler | #172 |
ASTOR_BOOKING_AUTO_CONFIRM_ENABLED | таймер карточки хостес: автоподтверждение, /manual on, передача менеджеру | #159 |
ASTOR_BOOKING_MORNING_CHECK_ENABLED | утреннее переподтверждение гостю: «в силе / перенести / отменить» | #158 |
ASTOR_BOOKING_HOLD_EXPIRY_ENABLED | истечение удержания стола по TTL, стол освобождается | #169 |
ASTOR_BOOKING_STAFF_EDIT_ENABLED | кнопка «Изменить» на карточке хостес: стол, время, гости | #171 |
ASTOR_BOOKING_SEATED_ENABLED | кнопка «Гость сел», статус SEATED, маппинг состояний Saby | #182, #183 |
ASTOR_WAITER_GUEST_CARD_ENABLED | карточка гостя официанту после «гость сел» | #190 |
ASTOR_REVIEW_MOMENT (after-close) |
Включено по умолчанию: сценарий бизнес-ланча (ASTOR_BUSINESS_LUNCH_ENABLED), Kafka и outbox (KAFKA_ENABLED,
KAFKA_OUTBOX_ENABLED). Стаф-портал за JWT (astor.staff.enabled) выключен — нет OIDC-издателя
(STAFF_PORTAL_RUNBOOK.md, репетиция миграций —
STAFF_PORTAL_REHEARSAL_2026-10-11.md).
confirmedByVenue: false, #91).Спецификация — 2026-10-14-astor-negotiation-design.md, включение и откат — NEGOTIATION_ROLLOUT.md.
/api/negotiation/v1/turn и инструменты Capability API v1 (/api/capabilities/v1/*); ответ ресторана приходит в чат Консьержа с подписью AERIS · Батлер:.ASTOR_WEBHOOK_SECRET).visit_turns — все реплики гостя, агентов, персонала и Saby под одним id визита; телефоны маскируются, текст Консьержа — только с согласия гостя. По закрытому визиту — саммари и уроки агентам.ASTOR_BOARD_TOKEN.false): ASTOR_LEDGER_ENABLED, ASTOR_BOARD_ENABLED, ASTOR_VISIT_SUMMARY_ENABLED, ASTOR_CAPABILITIES_ENABLED, ASTOR_CONCIERGE_WEBHOOK_ENABLED, ASTOR_AGENT_ENABLED + ASTOR_AGENT_ALLOWLIST; у Консьержа LEDGER_ENABLED, AGENT_ENABLED + AGENT_ALLOWLIST. Агенты — GigaChat-2-Pro (GigaChat-3-Pro недоступна на скоупе PERS, проверено 14.10), саммари — GigaChat-2-Max. С 15.10 агентов можно отдельно от остального перевести на OpenAI-совместимый API программы Sber500 × Disrupt: ASTOR_AGENT_PROVIDER=openai-compatible (у Консьержа AGENT_LLM_PROVIDER), модель из GET /models; проверка API, нагрузка и стоимость — SBER500_LLM_ACCEPTANCE.md, выкладка и откат — SBER500_LLM_ROLLOUT.md.Telegram · WEB-виджет · MAX · Astor Glass (iPhone → runtime очков) · REST
│ transport adapters (TelegramRouter, WebChatController, MAX long polling, /api/glasses/*)
▼
Message Gateway ──► Scenario Router ──► FSM Runtime (единственный источник истины)
│
Domain services: booking · business lunch · billing · tips · staff tasks · preference · concierge
│
PostgreSQL + pgvector (факты, outbox, семантическая память) · Redis (горячее состояние FSM, черновики)
Kafka / Redpanda (события, аналитика) · MinIO / S3 (медиа, фото-подтверждения) · MongoDB (документы)
│
Проекции: staff / admin / system / analytics чаты Telegram · Saby Presto (адаптер) · модели через Model Gateway
Инвариант: бизнес-решения = FSM + доменные сервисы; модель (Yandex AI Studio, Sber GigaChat / Cloud.ru FM, OpenAI-совместимые, Spring AI / Ollama) — только понимание, извлечение слотов и черновики текста. Подробно: ARCHITECTURE.md, DATABASE_MODEL.md; ADR: очки → поручение, колонки Салют; планы: MAX, мультиязычность, веб-канал.
Стек: Java 25, Spring Boot 4.1, Spring AI 2.0, Maven 3.9, Liquibase, Docker Compose (pom.xml, Dockerfile).
scripts/start_local_infra.sh # api-gateway, postgres, redis, mongo, kafka, redpanda-console, minio, prometheus, grafana
scripts/run_local_app.sh [.env] # Spring Boot из Maven с переменными из .env
mvn -B test # тот же прогон, что в CI (.github/workflows/ci.yml)
Без локального JDK 25: docker run --rm -v "$PWD":/workspace -v "$HOME/.m2":/root/.m2 -w /workspace maven:3.9-eclipse-temurin-25 mvn -B test.
Профили docker-compose.yml: telegram (бот AERIS), app (бот c3flex), smart-solution, frontend (C3AG), nlu (Natasha),
ai (llm-gateway, Ollama). Оверлеи: docker-compose.prod.yml; docker-compose.cloudru.yml (дополнительно graph-timeline,
kafka-tools, observability); docker-compose.saby-stub.yml (стаб Saby для локального прогона автомата).
Локально: Swagger http://localhost:8080/swagger-ui/index.html, health http://localhost:8080/actuator/health,
Redpanda Console http://localhost:8081, MinIO Console http://localhost:9001.
Переменные окружения — только имена; значения в локальном .env, который не коммитится:
| Группа | Переменные | Назначение |
|---|---|---|
| Хранилища | POSTGRES_URL, POSTGRES_USER, POSTGRES_PASSWORD, REDIS_HOST, REDIS_PORT, REDIS_PASSWORD, MONGODB_URI, KAFKA_BOOTSTRAP_SERVERS, S3_ENDPOINT, S3_ACCESS_KEY, S3_SECRET_KEY, S3_BUCKET_MEDIA, S3_BUCKET_DOCUMENTS | базы, брокер, объектное хранилище |
| Telegram | TELEGRAM_BOT_ENABLED, TELEGRAM_BOT_TOKEN, TELEGRAM_BOT_USERNAME, TELEGRAM_HOSTESS_CHAT_ID, TELEGRAM_ADMIN_CHAT_ID, TELEGRAM_SYSTEM_CHAT_ID, TELEGRAM_ANALYTICS_CHAT_ID, TELEGRAM_BOOKING_MANAGER_CHAT_ID, TELEGRAM_PROXY_HOST, TELEGRAM_PROXY_PORT, TELEGRAM_PROXY_TYPE | бот и служебные чаты; в compose для AERIS — AERIS_ASTOR_BUTLER_*_CHAT_ID |
| Модели и речь | ASTOR_MODEL_PROVIDER (spring-ai · yandex · gigachat · cloudru · openai-compatible), YANDEX_*, GIGACHAT_*, CLOUDRU_*, ASTOR_STT_PROVIDER (cloudru · yandex · local), ASTOR_TTS_PROVIDER, YANDEX_SPEECHKIT_*, ASTOR_SEMANTIC_EMBEDDINGS_PROVIDER | выбор провайдера — конфигурация, не логика сценариев (SBER_AI_ACTIVATION.md) |
| Безопасность | ASTOR_INTERNAL_API_TOKEN, ASTOR_GLASSES_RELAY_TOKEN | внутренний токен непубличного API; токен релея очков |
| Интеграции | SABY_APP_CLIENT_ID, SABY_APP_SECRET, SABY_SECRET_KEY, SABY_POINT_ID, SABY_HALL_ID, SABY_PRICE_LIST_ID, MAX_BOT_TOKEN, MAX_API_BASE_URL |
Runbook — CLOUDRU_DEPLOY_RUNBOOK.md; состояние стенда и ручной путь — HANDOVER_2026-10-10.md; охрана API — PUBLIC_API_GUARD.md.
main (GitHub Actions deploy-cloudru-vm.yml → GHCR astor-butler:sha-<sha>), на ВМ ничего не
собирается. Деплой произвольного sha запрещён: откат на старый коммит — revert в main..env.production на ВМ (в git не попадает). Новая функция выезжает выключенной и включается флагом.deploy-yandex-vm.yml, AERIS_SCOPED_DEPLOY.md) устарел,
триггеры отключены.Правила: ветка → PR в main → ревью до мержа → зелёный CI (ci.yml: тесты, проверка guard-скриптов, поиск секретов
в репозитории). Общий edge-Caddy меняет только Михаил. Production-операции требуют отдельной авторизации (CLAUDE.md).
Карта docs/ — docs/README.md. Приоритет источников: FSM viewer →
ARCHITECTURE.md → FSM_SCENARIOS.md → docs/obsidian/.
| Пакет | Что внутри |
|---|---|
| docs/operations/ | runbooks (Cloud.ru, API guard, стаф-портал, Telegram-прокси), передача руля 10.10, план первого теста, сводки смены, очки (GLASSES_*.md) |
| Интервью AERIS | № 1 менеджер смены (ответы) · № 2 хостес (ответы) · № 3 менеджер зала, второй круг · № 4 официант (ответы) · № 5 шеф-повар (ответы) · () |
Как в HANDOVER_2026-10-10.md; контакты — не здесь.
| Кто | Роль |
|---|---|
| Михаил | владелец продукта и стенда: ВМ, общий Caddy, ключи и DNS, решения по продукту, ревью |
| Дима | принял руль 10.10: бэкенд и эксплуатация (#122, #126, #128–#135, #137), сторона Saby, Консьерж |
| Егор | бэкенд и фронтенд C3AG, мультиязычность (#115) |
| Рома | Astor Glass (iOS и runtime), кабинет персонала (#93), контракт Concierge → Butler → Saby |
| Codex, Claude | агенты-исполнители: ветки и PR, обязательное ревью человека |
| AERIS | Дарья Анатольевна — менеджер зала, подтверждает заявки на тесте; Дарья Вячеславовна — хостес; Тариэль — доступы (группа, ключи Saby); официанты и бармен — в справочнике astor_staff_members |
Лицензия — Apache 2.0 (docs/LICENSE). Репозиторий публичный; статус — MVP в пилоте с одним заведением (AERIS), не публичный релиз и не магазинное приложение. Связанные репозитории команды: Astor_Concierge, MuseonUrania (Vedal), smart-solution-website, Astor_Butler_Legacy; секреты и базы гостей между ними не делятся.
Не коммитить: .env, .env.*, target/, build/, .idea/*, .codex*, локальные медиа-оригиналы. Перед push проверять
diff на секреты и build-артефакты (CLAUDE.md, AGENTS.md).
on-bill: оценка до оплаты, кнопка «Счёт» у хостес |
| #157 |
ASTOR_GUEST_BILL_REQUEST_ENABLED | гость просит счёт в боте: карточка команде и отзыв | #178 |
ASTOR_TIPS_PERSONAL_ENABLED | чаевые лично официанту стола: /официант, /чаевые | #179 |
ASTOR_LUNCH_WISHES_ENABLED | пожелания к блюдам и напиткам, состав блюд из меню | #180 |
ASTOR_LUNCH_PREORDER_MARK_ENABLED | пометка кухне «ПРЕДЗАКАЗ: готовить ко времени» | #191 |
ASTOR_STAFF_HANDOFF_ENABLED | персональная ссылка / QR сотрудника, лог входа гостя, /ссылка | #181 |
ASTOR_GUIDING_QUESTION_ENABLED | направляющий вопрос в конце ответа бота | #177 |
ASTOR_STAFF_EVIDENCE_ENABLED | фото-подтверждение этапа поручения в приватном S3 | #141 |
ASTOR_SABY_ENABLED, SABY_WRITE_ENABLED, SABY_PAYMENT_ENABLED, ASTOR_BILLING_ENABLED | Saby Presto: чтение занятости, запись заказа, ссылка оплаты, счета гостя | SABY_PRESTO_BOOKING_API.md, #117, #140 |
| Saby Presto и MAX |
| Очки | ASTOR_GLASSES_TENANT, ASTOR_GLASSES_STAFF_ROLE, ASTOR_GLASSES_TRANSCRIPT_RELAY_URL | tenant справочника сотрудников, роль автора поручений, адрес релея |
docs/product/ | планы фич по интервью: гостевой путь, официант, кухня, носитель очков, карточка гостя, направляющий вопрос |
| docs/architecture/ | архитектура, модель данных, локальные БД, ADR, планы MAX / i18n / веб-канала |
| docs/fsm/ | текстовые companion-документы FSM, бронь стола, план реализации |
| docs/contracts/ | API, Kafka / outbox, Telegram Stars, Concierge → Butler → Saby |
docs/integrations/ | Saby Presto: карта API, счета, сценарий показа; карточка гостя и склейка каналов |
docs/content/, docs/commercial/, docs/frontend/, docs/research/ | медиа и RAG-источники; бренд-бук, КП, договор AERIS; фронтенд-handoff; исследования |
docs/obsidian/, docs/analytics/, docs/archive/ | проектная память агентов; отчёты прогонов; история |
infra/ | Cloud.ru: Terraform, cloud-init, бэкап, Telegram-egress; сайт Astor |
clients/ | пилотные клиенты очков: ios-glasses, android-glasses |