OpenClaw 2026: шлюз и установка на MeshMac
Исходите из той же модели, что и в руководстве по мультиузловому развёртыванию MeshMac: один логический шлюз (отдельная небольшая ВМ, bastion или выделенный Mac) запускает сервисы OpenClaw, владеет исходящими интеграциями и читает секреты с диска или запечатанного тома. На каждом builder задайте OPENCLAW_CONFIG_ROOT, если разводите деревья по проектам, как в конфигурации и логах по проекту, но не копируйте URL Teams webhook на все узлы: воркеры кладут в очередь записи «сборка завершена», а POST в Microsoft выполняет только шлюз.
После установки OpenClaw 2026 пройдите стандартный onboard, проверки doctor и хвост логов, чтобы процесс стартовал под LaunchDaemon с ожидаемым окружением. Внутреннюю доставку свяжите с общей очередью из материала про единый деплой и синхронизацию очереди, чтобы handoff CI между Mac не плодил разные пути уведомлений. Общие принципы подписи и окон повторов пересекаются с webhook общей сборки — дисциплина та же, даже если Teams Incoming Webhook в первую очередь опирается на URL как на bearer, а не на HMAC. Дополнительные статьи — на хабе OpenClaw.
Коннектор Teams и безопасность URL
В целевом канале Microsoft Teams добавьте коннектор Incoming Webhook (или эквивалент, который разрешает тенант в 2026 году), сгенерируйте URL один раз и считайте всю строку bearer-учётными данными: любой, кто может POST, может заспамить канал. Храните значение вроде /etc/openclaw/secrets.d/teams/build-status.url с правами 0440, владелец root, группа узкой роли вроде openclaw-notify, по образцу секретов и минимальных прав на узлах MeshMac.
- Полный URL в логи не пишите. Для отладки — хост и последние символы токена в пути.
- Ротация заменой. Удалить коннектор, создать новый webhook, обновить файл, перезагрузить шлюз; процедуру зафиксируйте рядом с каналами тревог и ротацией токенов.
- Разделение сред. У staging и production разные каналы и URL, чтобы тестовый сценарий не рисовал «зелёное» руководству.
- Тело запроса. Используйте поддерживаемый Microsoft JSON (например MessageCard:
@type, summary, title, text). Ответ400из-за битой схемы легко спутать с «падением Teams».
Если классические коннекторы запрещены политикой, запасной путь — Power Automate или Logic App с узким HTTPS endpoint, который вызывает только шлюз; модель «один секрет, один отправитель, аудируемая ротация» сохраняется.
Шлюз, прокси и исходящий allowlist
Узлы MeshMac часто сидят за корпоративным forward proxy или межсетевым экраном с фильтрацией исходящих. Именно хост шлюза должен выполнять HTTPS POST к endpoint webhook Microsoft. Согласуйте с ИБ разрешение TLS к реальным именам вашего тенанта — типично зоны outlook.office.com и *.webhook.office.com — и учтите перехват TLS на прокси (доверенный корень, SNI). Прямой интернет с self-hosted runner к Microsoft не открывайте: пусть только шлюз имеет исключение.
Операционный чеклист: с оболочки шлюза выполните curl -I к хосту webhook с теми же HTTP_PROXY/HTTPS_PROXY, что у демона; если CONNECT режется, OpenClaw не достучится до Teams при «зелёных» юнит-тестах локально. Закрепите разделение «CI говорит со шлюзом» / «шлюз говорит с SaaS» — одна политика исходящего трафика к Microsoft проще в сопровождении.
Если раньше каждый Mac вызывал webhook напрямую, уберите эти исключения после консолидации: уменьшается поверхность атаки, а учения по отказоустойчивости и правам кластера упрощаются — обновлять allowlist нужно только для IP шлюза.
Дизайн полей для агрегации статуса с нескольких узлов
Каждый провайдер CI шлёт свой JSON. На шлюзе нормализуйте структуру до общего объекта, затем рендерьте текст или карточку Teams — так канал остаётся читаемым при смене runner или узла пула.
| Нормализованный ключ | Примеры источника | Зачем в Teams / эксплуатации |
|---|---|---|
workflow | GitHub workflow, GitLab pipeline.name | Жирный заголовок: какой сценарий сработал |
state | conclusion, status, result | Успех / провал / отмена / running и согласованные эмодзи |
branch | ref, head_branch | Вторая строка: релиз vs feature |
commit | sha, commit.id | Короткий префикс и ссылка на прогон |
run_url | html_url, web_url | Глубокая ссылка на логи и артефакты |
mesh_node_id | имя runner, hostname, метка пула | Футер: какой Mac в пуле исполнил job |
provider_run_id | run_id, id pipeline, номер build | Стабильный ключ идемпотентности вместе с state |
По желанию добавьте duration_sec и queued_sec, если метрики очереди приходят из той же ткани задач, что и в очереди и повторах OpenClaw: медленный пул заметят раньше, чем по сырому URL логов.
Повторы и идемпотентность
Microsoft может ответить 429 при throttling или временным 5xx на периметре. Используйте экспоненциальную задержку с джиттером, ограничьте число попыток (например пять за две минуты) и пишите последний HTTP-код в лог шлюза, а не в stdout CI. Таймауты и разделение «повтор сети» / «повтор сборки» согласуйте с шагами очереди и повторов.
Идемпотентность: ключ provider_run_id + state (или эквивалент); если тот же переход уже был успешно отправлен в окне до 72 часов, вторую карточку не шлите. Храните ключи в SQLite, Redis или маленьком файле при низком трафике. Без этого быстрые повторы после «медленного» HTTP дублируют сообщения и канал отключают уведомления.
На 400 и 401 слепо не ретраить: исправьте JSON или обновите URL. 404 по webhook трактуйте как «коннектор удалили» и эскалируйте владельцам Teams.
FAQ: не приходят сообщения в Teams
| Симптом | Что проверить |
|---|---|
| Шаг CI зелёный, канал пуст | Шлюз реально выполнил POST и залогировал код; тестовый curl с минимальным JSON с того же хоста; коннектор на месте (иногда отключают legacy tenant-wide) |
| Сбои только с части узлов | Старый прямой вызов Teams или обход прокси — принудительно единый путь через шлюз, снимите per-node egress |
| HTTP 200, но пустая или битая карточка | Teams принял запрос, но не смог отрисовать payload: проверьте @type, обязательные summary/title, лимиты длины для мобильных клиентов |
| В пятницу работало, в понедельник — нет | Ротация сертификата на прокси, DNS к endpoint Microsoft, ночной скрипт, затронувший не тот файл секрета; сверка с runbook ротации токенов |
Дальше без входа в аккаунт
Главная, каталог блога, справочный центр и страница оформления аренды открываются сразу — регистрация для просмотра контекста цен и документации не требуется. Это удобно, когда вы масштабируете пул и сверяете чеклисты с командой без лишних шагов.
Масштабируйте сетку Mac — один канал Teams остаётся источником правды
Когда одного builder недостаточно, нужны согласованная семантика очереди, общие секреты и резервные узлы — а не три копии одного и того же webhook. Откройте главную Meshmac, чтобы подобрать дополнительную ёмкость MeshMac под несколько CI-полос; загляните в блог за чеклистами развёртывания и в справку перед оформлением. Покупка и расширение сценария «несколько узлов» удобнее планировать, когда шлюз и уведомления уже выровнены по этому HowTo.