2026: OpenClaw Telegram — длинный опрос или webhook на удалённом физическом Mac? HTTPS-обратный прокси, регистрация и runbook по 409 / TLS (openclaw.json + FAQ)
Команды, которые подключают OpenClaw к боту Telegram на удалённом физическом Mac ZoneMac, часто выбирают между длинным опросом (getUpdates) и webhook: первый обходится без публичного TLS; второй даёт меньшую задержку и лучше подходит для 7×24. В материале — матрица решений, основы HTTPS reverse proxy, безопасная последовательность setWebhook и воспроизводимый разбор HTTP 409 и таймаутов TLS, с готовой структурой openclaw.json и FAQ. О путях авторизации вебхуков см.
вебхуки и hooks OpenClaw на удалённом Mac.
1. Введение и область
Telegram Bot API доставляет входящие обновления двумя путями: длинный опрос (клиент вызывает getUpdates и держит соединение) и webhook (Telegram шлёт POST на ваш HTTPS). OpenClaw требует предсказуемой семантики транспорта и наблюдаемых сбоев — особенно когда обратный прокси стоит перед удалённым физическим Mac: TLS, SNI и цепочка сертификатов проявляются в getWebhookInfo в полях last_error_*.
Дальше предполагается SSH-доступ и правки openclaw.json. Прежде чем в одном окне менять транспорт и версию шлюза, согласуйте дисциплину релизов с материалом
сравнение вариантов глобального развёртывания OpenClaw (2026).
2. Типичные боли
- Недооценка публичного HTTPS для webhook. Telegram ждёт проверяемую цепочку и доступный HTTPS (часто порт 443). Самоподписанные сертификаты, отсутствие промежуточных или DNS только в LAN дают ошибки TLS или «тихую» недоставку.
- HTTP 409 — не случайный шум. Общий токен между staging и prod или старый узел без
deleteWebhookприводят к конфликтамsetWebhook: корень — состояние регистрации, а не бизнес-логика OpenClaw. - Long polling не бесплатен. Трансграничный RTT и долгоживущие соединения усиливают джиттер; у операторов возможен троттлинг. Для PoC сойдёт; в проде обычно возвращаются к webhook и здоровому периметру.
3. Матрица: long polling vs webhook
Лёгкая «архитектурная подпись» для узлов ZoneMac.
| Измерение | Long polling (getUpdates) | Webhook (HTTPS) |
|---|---|---|
| Публичный DNS и сертификаты | Исходящий путь; обычно не нужен публичный hostname с cert | Нужны резолвящийся домен и доверенная цепочка |
| Задержка и backpressure | Интервал опроса + джиттер сети | Событийная модель; при стабильном периметре обычно ниже задержка |
| Форма соединений | Постоянный исходящий, долгоживущий | Входящий POST — сочетается с таймаутами и лимитами прокси |
| Сигналы отладки | Логи клиента, ошибки getUpdates |
getWebhookInfo (last_error_date и др.) |
| Типичное применение | PoC, жёсткий NAT, короткие эксперименты | Продакшен 7×24, несколько воркеров, предсказуемая задержка |
4. Фрагменты openclaw.json (иллюстративно)
Только структурный пример — имена ключей и вложенность должны совпадать с вашей версией OpenClaw. Делайте резервные копии и сливайте вручную с существующими секциями gateway и учётными данными; держите локальный слушатель на loopback и согласуйте экспозицию с политикой периметра.
4.1 Канал Telegram: webhook и локальный слушатель
{
"channels": {
"telegram": {
"enabled": true,
"botTokenRef": "env:TELEGRAM_BOT_TOKEN",
"transport": "webhook",
"webhook": {
"publicUrl": "https://bot.example.com/openclaw/telegram/webhook",
"path": "/openclaw/telegram/webhook",
"secretTokenRef": "env:TELEGRAM_WEBHOOK_SECRET",
"maxConnections": 40,
"dropPendingUpdates": false
},
"localServer": {
"bind": "127.0.0.1",
"port": 18789,
"readTimeoutSeconds": 30,
"writeTimeoutSeconds": 30
}
}
},
"gateway": {
"reverseProxy": {
"trustedProxies": ["10.0.0.0/8"],
"forwardedHeaders": ["X-Forwarded-For", "X-Forwarded-Proto"]
}
}
}
Для long polling выставьте transport в "longPolling" (или эквивалент в вашем релизе) и задайте опции getUpdates, например timeout / allowed_updates; убедитесь, что Telegram не указывает webhook на старый URL.
4.2 Обратный прокси (набросок Caddy)
# TLS на периметре; прокси на 127.0.0.1:18789 на Mac.
# Согласуйте Host/путь с OpenClaw; лимиты тела — по рекомендациям шлюза.
bot.example.com {
reverse_proxy 127.0.0.1:18789 {
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-For {remote_host}
}
}
5. Семишаговый runbook (удалённый физический Mac)
- Зафиксировать режим транспорта. Должен быть активен только один путь. При переходе с long polling на webhook сначала остановите процесс опроса, чтобы избежать двойной доставки.
- Проверить TLS end-to-end. Из интернета проверьте порт 443: полная цепочка, SNI, правила файрвола для диапазонов Telegram (по актуальной документации).
- Слить openclaw.json.
cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M); задайтеpublicUrl, ссылки на секреты и локальный bind. - Очистить старое состояние webhook.
getWebhookInfo→ при неверном URLdeleteWebhook→setWebhookиз одного места, чтобы реже ловить 409. - Перезагрузить и проверить здоровье процесса. Перезагрузка по вашей схеме; убедитесь, что порт слушается и в логах launchd нет циклов падений.
- Позитивные и негативные тесты. Тестовое сообщение; запросы с неверным
secret_tokenдолжны быстро отклоняться; следите заpending_update_count. - Архивация. Зафиксируйте домен, владельца продления сертификата, параметры
setWebhookи процедуру отката на long polling.
6. Разбор 409 и таймаутов TLS
| Симптом | Вероятная причина | Действие |
|---|---|---|
setWebhook 409 |
Webhook уже зарегистрирован для токена или параллельная регистрация | getWebhookInfo → убрать лишнее → deleteWebhook → одна повторная попытка |
last_error_message про TLS / сертификат |
Неполная цепочка, неверный SNI или только HTTP на периметре | openssl s_client -connect; исправить промежуточные; принудительный HTTPS |
| Медленный handshake, редкие успехи | Трансграничный RTT; короткий proxy_read_timeout |
Увеличить read timeout периметр→origin; ближе edge; не блокировать воркеры |
| 401 / 403 на пути webhook | Несовпадение secret_token с шлюзом |
Выровнять переменные окружения и setWebhook; ротировать синхронно |
| Задержки сообщений без ошибки TLS | Очередь или перегрузка шлюза | Смотреть pending_update_count; масштабировать воркеры; ограничить QPS к моделям |
7. Цифры и пункты чек-листа
- getUpdates long poll: по документации Bot API
timeoutобычно 0–50 секунд; на каналах с высоким RTT начните с консервативных значений. - Локальный HTTP: пример
127.0.0.1:18789остаётся на loopback; TLS и публичное лицо — у прокси — в духе SSH-first узлов ZoneMac. - Параллелизм webhook: согласуйте
maxConnectionsс числом воркеров и QPS к upstream-моделям, чтобы ingress не принимал быстрее, чем ядро успевает разгребать.
8. FAQ
В: Почему setWebhook возвращает 409?
О: Обычно для этого токена уже зарегистрирован другой webhook или не сделали очистку. Проверьте getWebhookInfo, вызовите deleteWebhook на неиспользуемых стеках и повторите setWebhook из одной точки входа.
В: Как ловить таймауты TLS handshake?
О: Замерьте openssl s_client и curl снаружи; проверьте SNI и промежуточные; смотрите обрывы HTTP/2 на edge. Через несколько минут снова откройте getWebhookInfo.last_error_message.
В: Когда long polling на удалённом Mac оправдан?
О: Когда ещё нельзя выдать доверенный для Telegram TLS на публичном hostname — PoC, жёсткий NAT или сырой cert automation. Платите постоянным исходящим трафиком и чувствительностью к RTT.
В: Где применяется secret_token?
О: На шлюзе или входе OpenClaw: несовпадение → 401. Меняйте синхронно с setWebhook и конфигом.
9. Итог: почему Mac mini здесь уместен
Выбор между long polling и webhook — не про «новизну», а про готовность принять продакшен-качество HTTPS и единый источник правды по регистрации. Webhook переносит наблюдаемость в getWebhookInfo; long polling держит сложность в исходящих соединениях и сопровождении процессов.
На удалённом физическом Mac ZoneMac узел класса Mac mini M4 сочетает низкое энергопотребление в простое (порядка нескольких ватт), нативный Unix и удобные для launchd демоны — на одной машине можно держать обратный прокси и OpenClaw для круглосуточного шлюза. Усиление macOS (Gatekeeper, SIP, FileVault) снижает долгосрочные риски по сравнению с типичным Windows-хостом утилит.
Если нужны вход Telegram, TLS и OpenClaw на тихом и предсказуемом железе, Mac mini M4 остаётся сильным соотношением цена/стабильность — арендуйте удалённый физический Mac у ZoneMac и прогоните этот runbook на реальном metal.
Нужен удалённый физический Mac под webhook OpenClaw + Telegram?
ZoneMac — аренда Mac mini в облаке: локальный слушатель, reverse proxy и шлюз на одном узле, чтобы воспроизвести openclaw.json и HTTPS-runbook от начала до конца.