Управление конвейером собранных команд

Используйте это руководство после того, как вы уже включили функцию из раздела Собрание команды.

Эта страница опровергает: - операторские CLI-потоки - рутинное обслуживание подписок - устранение неисправностей -проверка перед запуском - развертывание рабочего стола

Основные команды оператора

Проверка снимка конфигурации

hermes teams-pipeline validate

Используйте эту команду после любых изменений конфигурации.

Проверка состояния токена

hermes teams-pipeline token-health
hermes teams-pipeline token-health --force-refresh

Используйте --force-refresh, если подозреваете, что режим аутентификации более открытый.

Проверка подписок

hermes teams-pipeline subscriptions

Продление подписки с одобренным сроком

hermes teams-pipeline maintain-subscriptions
hermes teams-pipeline maintain-subscriptions --dry-run

Автоматизация продления подписки (ОБЯЗАТЕЛЬНО для продакшена)

Подписки Microsoft Graph истекают максимум через 72 часа. Если их никто не продлевает, уведомления о собраниях бесшумно прекращаются через 3 дня, и конвейер выглядит «сломанным». Это базовая основа защиты сбоев для любого компонента на основе График.

Вы ОБЯЗАНЫ запустить «поддержание подписки» по расписанию. Выберите один из трех вариантов:

Вариант 1: Hermes cron (рекомендуется, если вы уже запускаете шлюз Hermes)

Гермес подключился к планировщику cron. Режим --no-agent запускает скрипт как задание (вместо использования LLM), --script должен быть в файле ~/.hermes/scripts/. Сначала создайте скрипт:

mkdir -p ~/.hermes/scripts
cat > ~/.hermes/scripts/maintain-teams-subscriptions.sh <<'EOF'
#!/usr/bin/env bash
exec hermes teams-pipeline maintain-subscriptions
EOF
chmod +x ~/.hermes/scripts/maintain-teams-subscriptions.sh

Затем зарегистрируйте задание cron только для скрипта, который запускает работу 12 часов (даёт 6-кратный запас на время 72-часового истечения окна):

hermes cron create "0 */12 * * *" \
  --name "teams-pipeline-maintain-subscriptions" \
  --no-agent \
  --script maintain-teams-subscriptions.sh \
  --deliver local

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

hermes cron list
hermes cron status        # статус планировщика

Вариант 2: таймер systemd (рекомендуется для продакшен-развертывания в Linux)

Создайте /etc/systemd/system/hermes-teams-pipeline-maintain.service:

[Unit]
Description=Hermes Teams pipeline subscription maintenance
After=network-online.target

[Service]
Type=oneshot
User=hermes
EnvironmentFile=/etc/hermes/env
ExecStart=/usr/local/bin/hermes teams-pipeline maintain-subscriptions

И /etc/systemd/system/hermes-teams-pipeline-maintain.timer:

[Unit]
Description=Run Hermes Teams pipeline subscription maintenance every 12 hours

[Timer]
OnBootSec=5min
OnUnitActiveSec=12h
Persistent=true

[Install]
WantedBy=timers.target

Включите:

sudo systemctl daemon-reload
sudo systemctl enable --now hermes-teams-pipeline-maintain.timer
systemctl list-timers hermes-teams-pipeline-maintain.timer

Вариант 3: Обычный кронтаб

0 */12 * * * /usr/local/bin/hermes teams-pipeline maintain-subscriptions >> /var/log/hermes/teams-pipeline-maintain.log 2>&1

Убедитесь, что окружение cron содержит учетные данные MSGRAPH_*. Самый простой способ: подключить ~/.hermes/.env в начале скрипта-обертки, который вызывает crontab.

Проверка работы продления

После настройки расписания проверьте продление активности после первого запланированного запуска:

hermes teams-pipeline subscriptions   # должно показывать, что expirationDateTime увеличилось
hermes teams-pipeline maintain-subscriptions --dry-run   # должно показывать "0 expiring soon" большую часть времени

Если вы когда-нибудь заметите, что ваш график вебхука «перестал работать» ровно через ~72 часа, это первое, что нужно проверить: действительно ли запускалось продление задания?

Просмотр последних заданий

hermes teams-pipeline list
hermes teams-pipeline list --status failed
hermes teams-pipeline show <job-id>

Повторный запуск сохраненного задания

hermes teams-pipeline run <job-id>

Пробное получение документов

hermes teams-pipeline fetch --meeting-id <meeting-id>
hermes teams-pipeline fetch --join-web-url "<join-url>"

Рутинный Runbook

После первоначальной настройки

Выполните в указанном порядке:

hermes teams-pipeline validate
hermes teams-pipeline token-health --force-refresh
hermes teams-pipeline subscriptions

Затем инициируйте или дождитесь возникновения событий и подтвердите:

hermes teams-pipeline list
hermes teams-pipeline show <job-id>

Ежедневные или периодические проверки

Перед изменением URL вебхуков или целевых каналов доставки

Устранение неисправностей

Задания не создаются

Проверьте: - включен ли msgraph_webhook - указывает ли публичный URL уведомлений на /msgraph/webhook - совпадает ли состояние клиента в подписке с MSGRAPH_WEBHOOK_CLIENT_STATE - существуют ли подписки удаленно и не истекли ли они

Задания остаются в состоянии повторной попытки или завершаются ошибкой до обобщения

Проверьте: - разрешения на расшифровку и доступность - разрешения на запись и доступность артефактов - доступность ffmpeg, если включен резервный вариант записи - состояние токена Graph

Сводки созданы, но не доставлены в Teams

Проверьте: - platforms.teams.enabled: true - delivery_mode - incoming_webhook_url для режима вебхука - chat_id или team_id плюс channel_id для режима Graph - конфигурацию аутентификации Teams, если используется отправка через Graph

Дублирующиеся или неожиданные повторные запуски

Проверьте: - не запускали ли вы вручную задание с помощью hermes teams-pipeline run - существует ли уже запись приемника для этого собрания - не включили ли вы намеренно путь повторной отправки в локальной конфигурации

Контрольный список запуска

Руководство по выбору режима доставки

Режим Когда использовать Компромисс
incoming_webhook вам нужна только простая отправка в Teams самая простая настройка, меньше контроля
graph вам нужна отправка в канал или чат через Graph больше контроля, больше настроек аутентификации и целевого канала

Рабочая таблица оператора

Заполните перед развертыванием:

Пункт Значение
Публичный URL уведомлений
Идентификатор клиента Graph (tenant ID)
Идентификатор приложения Graph (client ID)
Состояние клиента вебхука
Подписка на ресурс расшифровки
Подписка на ресурс записи
Режим доставки Teams
Идентификатор чата Teams или команды/канала
Идентификатор базы данных Notion
Идентификатор команды Linear
Путь к хранилищу (если переопределен)
Ответственный за ежедневные проверки

Рабочая таблица проверки изменений

Используйте перед изменением развертывания:

Вопрос Ответ
Меняем ли мы публичный URL вебхука?
Меняем ли мы учетные данные Graph?
Меняем ли мы режим доставки Teams?
Переходим ли мы на новый чат или канал Teams?
Нужно ли пересоздать или продлить подписки?
Нужен ли нам новый сквозной проверочный запуск?

Связанные документы