Управление конвейером собраний Teams
Используйте это руководство после того, как вы уже включили функцию из раздела Собрания Teams.
Эта страница охватывает:
- основные команды CLI для оператора
- регулярное обслуживание подписок
- устранение неисправностей
- проверки перед запуском
- рабочая таблица развёртывания
Основные команды оператора
Проверка снимка конфигурации
vibeos teams-pipeline validate
Используйте эту команду первой после любого изменения конфигурации.
Проверка состояния токенов
vibeos teams-pipeline token-health
vibeos teams-pipeline token-health --force-refresh
Используйте --force-refresh, если подозреваете, что состояние аутентификации устарело.
Проверка подписок
vibeos teams-pipeline subscriptions
Продление подписок с истекающим сроком
vibeos teams-pipeline maintain-subscriptions
vibeos teams-pipeline maintain-subscriptions --dry-run
Автоматизация продления подписок (ОБЯЗАТЕЛЬНО для продакшена)
Подписки Microsoft Graph истекают максимум через 72 часа. Если их никто не продлевает, уведомления о собраниях бесшумно прекращаются через 3 дня, и конвейер выглядит «сломанным». Это основная причина сбоев в работе любой интеграции на основе Graph.
Вы ОБЯЗАНЫ запускать maintain-subscriptions по расписанию. Выберите один из трёх вариантов:
Вариант 1: VibeOS cron (рекомендуется, если вы уже используете шлюз VibeOS)
VibeOS поставляется со встроенным планировщиком cron. Режим --no-agent запускает скрипт как задачу (вместо использования LLM), а --script должен указывать на файл в каталоге ~/.vibeos/scripts/. Сначала создайте скрипт:
mkdir -p ~/.vibeos/scripts
cat > ~/.vibeos/scripts/maintain-teams-subscriptions.sh <<'EOF'
#!/usr/bin/env bash
exec vibeos teams-pipeline maintain-subscriptions
EOF
chmod +x ~/.vibeos/scripts/maintain-teams-subscriptions.sh
Затем зарегистрируйте задачу cron только для скрипта, которая запускается каждые 12 часов (даёт 6-кратный запас относительно 72-часового окна истечения):
vibeos cron create "0 */12 * * *" \
--name "teams-pipeline-maintain-subscriptions" \
--no-agent \
--script maintain-teams-subscriptions.sh \
--deliver local
Проверьте, что задача зарегистрирована, и посмотрите время следующего запуска:
vibeos cron list
vibeos cron status # статус планировщика
Вариант 2: systemd timer (рекомендуется для продакшен-развёртываний на Linux)
Создайте /etc/systemd/system/vibeos-teams-pipeline-maintain.service:
[Unit]
Description=Обслуживание подписок конвейера собраний VibeOS Teams
After=network-online.target
[Service]
Type=oneshot
User=vibeos
EnvironmentFile=/etc/vibeos/env
ExecStart=/usr/local/bin/vibeos teams-pipeline maintain-subscriptions
И /etc/systemd/system/vibeos-teams-pipeline-maintain.timer:
[Unit]
Description=Запуск обслуживания подписок конвейера собраний VibeOS Teams каждые 12 часов
[Timer]
OnBootSec=5min
OnUnitActiveSec=12h
Persistent=true
[Install]
WantedBy=timers.target
Включите:
sudo systemctl daemon-reload
sudo systemctl enable --now vibeos-teams-pipeline-maintain.timer
systemctl list-timers vibeos-teams-pipeline-maintain.timer
Вариант 3: Обычный crontab
0 */12 * * * /usr/local/bin/vibeos teams-pipeline maintain-subscriptions >> /var/log/vibeos/teams-pipeline-maintain.log 2>&1
Убедитесь, что окружение cron содержит учётные данные MSGRAPH_*. Самый простой способ: подключить ~/.vibeos/.env в начале скрипта-обёртки, который вызывает crontab.
Проверка работы продления
После настройки расписания проверьте активность продления после первого запланированного запуска:
vibeos teams-pipeline subscriptions # должно показывать, что expirationDateTime сдвинулось
vibeos teams-pipeline maintain-subscriptions --dry-run # большую часть времени должно показывать «0 expiring soon»
Если вы когда-нибудь заметите, что ваш вебхук Graph «перестал работать» ровно через ~72 часа, это первое, что нужно проверить: действительно ли запускалась задача продления?
Просмотр последних задач
vibeos teams-pipeline list
vibeos teams-pipeline list --status failed
vibeos teams-pipeline show <job-id>
Повторный запуск сохранённой задачи
vibeos teams-pipeline run <job-id>
Пробное получение артефактов собрания
vibeos teams-pipeline fetch --meeting-id <meeting-id>
vibeos teams-pipeline fetch --join-web-url "<join-url>"
Регулярная инструкция
После первоначальной настройки
Выполните по порядку:
vibeos teams-pipeline validate
vibeos teams-pipeline token-health --force-refresh
vibeos teams-pipeline subscriptions
Затем инициируйте или дождитесь реального события собрания и подтвердите:
vibeos teams-pipeline list
vibeos teams-pipeline show <job-id>
Ежедневные или периодические проверки
- выполните
vibeos teams-pipeline maintain-subscriptions --dry-run - проверьте
vibeos teams-pipeline list --status failed - убедитесь, что целевой чат или канал Teams для доставки всё ещё правильный
Перед изменением URL вебхуков или целей доставки
- обновите публичный URL уведомлений или конфигурацию целевого канала Teams
- выполните
vibeos teams-pipeline validate - продлите или пересоздайте затронутые подписки
- подтвердите, что новые события попадают в ожидаемый приёмник
Устранение неисправностей
Задачи не создаются
Проверьте:
- включён ли
msgraph_webhook - указывает ли публичный URL уведомлений на
/msgraph/webhook - совпадает ли состояние клиента в подписке с
MSGRAPH_WEBHOOK_CLIENT_STATE - существуют ли подписки удалённо и не истекли ли они
Задачи остаются в состоянии повторных попыток или завершаются ошибкой до создания сводки
Проверьте:
- права доступа к расшифровке и её доступность
- права доступа к записи и доступность артефактов
- доступность
ffmpeg, если включён резервный вариант записи - состояние токена Graph
Сводки созданы, но не доставлены в Teams
Проверьте:
platforms.teams.enabled: truedelivery_modeincoming_webhook_urlдля режима вебхукаchat_idилиteam_idплюсchannel_idдля режима Graph- конфигурацию аутентификации Teams, если используется отправка через Graph
Дубликаты или неожиданные повторные запуски
Проверьте:
- не запускали ли вы вручную задачу с помощью
vibeos teams-pipeline run - существует ли уже запись приёмника для этого собрания
- не включили ли вы намеренно путь повторной отправки в локальной конфигурации
Чек-лист запуска
- Учётные данные Graph присутствуют и корректны
-
msgraph_webhookвключён и доступен из публичного интернета -
MSGRAPH_WEBHOOK_CLIENT_STATEзадан и соответствует подпискам - Создана подписка на расшифровку
- Создана подписка на запись, если требуется резервный вариант STT
-
ffmpegустановлен, если включён резервный вариант записи - Целевой канал доставки Teams настроен и проверен
- Приёмники Notion и Linear настроены только в случае реальной необходимости
-
vibeos teams-pipeline validateвозвращает успешный снимок -
vibeos teams-pipeline token-health --force-refreshвыполняется успешно - Запланировано
maintain-subscriptions(VibeOS cron, systemd timer или crontab — см. Автоматизация продления подписок). Без этого подписки Graph бесшумно истекают в течение 72 часов. - Реальное сквозное событие собрания создало сохранённую задачу
- Хотя бы одна сводка достигла целевого приёмника доставки
Руководство по выбору режима доставки
| Режим | Когда использовать | Компромисс |
|---|---|---|
incoming_webhook | Нужна только простая отправка в Teams | Самая простая настройка, меньше контроля |
graph | Нужна отправка в канал или чат через Graph | Больше контроля, больше настроек аутентификации и цели |
Рабочая таблица оператора
Заполните перед развёртыванием:
| Пункт | Значение |
|---|---|
| Публичный URL уведомлений | |
| ID тенанта Graph | |
| ID клиента Graph | |
| Состояние клиента вебхука | |
| Подписка на ресурс расшифровки | |
| Подписка на ресурс записи | |
| Режим доставки Teams | |
| ID чата Teams или команда/канал | |
| ID базы данных Notion | |
| ID команды Linear | |
| Переопределение пути хранения, если есть | |
| Ответственный за ежедневные проверки |
Рабочая таблица проверки изменений
Используйте перед изменением развёртывания:
| Вопрос | Ответ |
|---|---|
| Меняем ли мы публичный URL вебхука? | |
| Меняем ли мы учётные данные Graph? | |
| Меняем ли мы режим доставки Teams? | |
| Переходим ли мы в новый чат или канал Teams? | |
| Нужно ли пересоздать или продлить подписки? | |
| Нужен ли нам свежий сквозной тестовый запуск? |