배포 가이드 2026-04-20

2026년 OpenClaw 텔레그램: 원격 물리 Mac에서 롱 폴링 vs 웹훅—HTTPS 역프록시, 등록·409/TLS 타임아웃 재현 Runbook(openclaw.json+FAQ)

OpenClawZoneMac 원격 물리 Mac텔레그램 봇에 붙이는 팀은 롱 폴링(getUpdates)과 웹훅 사이에서 자주 망설입니다. 전자는 공인 TLS 없이도 동작하기 쉽고, 후자는 지연이 낮아 7×24에 유리합니다. 본문은 의사결정 매트릭스, HTTPS 역프록시 요건, 안전한 setWebhook 순서, HTTP 409TLS 핸드셰이크 타임아웃 재현 트리아지, 복붙용 openclaw.json 구조와 FAQ를 담습니다. 웹훅 인증·토큰 경계는 원격 Mac 게이트웨이 Webhook·Hooks Runbook과 함께 보세요.

원격 Mac에서 OpenClaw 텔레그램 웹훅 HTTPS 역프록시

1. 범위와 전제

텔레그램 Bot API는 인바운드 업데이트를 롱 폴링(클라이언트가 getUpdates로 연결을 유지)과 웹훅(텔레그램이 HTTPS URL로 POST) 두 경로로 전달합니다. OpenClaw는 예측 가능한 전송 의미와 관측 가능한 실패 모드가 필요하고, 특히 역프록시 앞에 둔 원격 물리 Mac에서는 TLS·SNI·인증서 체인 이슈가 getWebhookInfolast_error_* 필드에 그대로 드러납니다.

SSH 접속과 openclaw.json 편집을 가정합니다. 전송 방식과 게이트웨이 버전을 한 창에서 동시에 바꾸기 전에 stable/beta 채널과 백업·롤백 규율을 먼저 정리하세요. 국경 간 RTT·지터가 롱 폴링 체감에 미치는 영향은 다중 리전 원격 물리 Mac RTT·SLO 검수 글의 체크리스트로 보완할 수 있습니다.

2. 자주 겪는 문제

  1. 웹훅에 필요한 공인 HTTPS를 과소평가함. 텔레그램은 검증 가능한 체인과 도달 가능한 HTTPS(보통 443)를 기대합니다. 자체 서명, 중간 인증서 누락, LAN에서만 풀리는 DNS는 TLS 오류나 무반응으로 이어집니다.
  2. HTTP 409는 무작위가 아님. 스테이징·프로덕션이 한 봇 토큰을 공유하거나, 예전 노드가 deleteWebhook 없이 남아 있으면 setWebhook 충돌이 납니다. 근본 원인은 등록 상태이지 OpenClaw 비즈니스 로직이 아닙니다.
  3. 롱 폴링도 비용이 있다. 국경 간 RTT와 장시간 유지 연결은 지터를 키우고, 일부 회선은 스로틀링합니다. PoC에는 좋지만 프로덕션은 보통 웹훅과 건강한 엣지로 돌아옵니다.

3. 롱 폴링 vs 웹훅 매트릭스

ZoneMac 원격 노드에 대한 가벼운 「아키텍처 사인오프」 용도로 쓰세요.

롱 폴링(getUpdates) 웹훅(HTTPS)
공인 DNS·인증서 아웃바운드 위주; 보통 공인 호스트 인증서 불필요 해석 가능한 도메인 + 신뢰 체인 필수
지연·백프레셔 폴링 간격 + 네트워크 지터 이벤트 기반; 엣지가 안정적이면 보통 더 낮은 지연
연결 형태 지속 아웃바운드, 장시간 유지 인바운드 POST—프록시 타임아웃·레이트 리밋과 짝
디버그 신호 클라이언트 로그, getUpdates 오류 getWebhookInfo(last_error_date 등)
전형적 용도 PoC, 엄격한 NAT, 짧은 실험 프로덕션 7×24, 다중 워커, 예측 가능한 지연

4. openclaw.json 스니펫(예시)

구조 예시일 뿐이며, 키 이름·중첩은 사용 중인 OpenClaw 버전과 일치해야 합니다. 프로덕션 파일은 백업 후 기존 gateway·자격 증명 블록과 수동 병합하세요. 게이트웨이를 컨테이너에 둘지 베어메탈에 둘지는 팀의 배포 표준과 헬스 프로브 가용성에 맞추면 됩니다.

4.1 텔레그램 채널: 웹훅 + 로컬 리스너

{
  "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"]
    }
  }
}

롱 폴링을 쓸 때는 transport"longPolling"(또는 해당 릴리스 동등 설정)으로 두고 timeout·allowed_updatesgetUpdates 옵션을 채웁니다. 텔레그램이 예전 URL로 웹훅을 가리키지 않도록 정리하세요.

4.2 역프록시(Caddy 스케치)

# TLS는 엣지에서 종료; Mac의 127.0.0.1:18789로 프록시.
# OpenClaw와 Host/경로 일치 유지; 본문 크기 한도는 게이트웨이 가이드에 맞출 것.

bot.example.com {
  reverse_proxy 127.0.0.1:18789 {
    header_up X-Forwarded-Proto {scheme}
    header_up X-Forwarded-For {remote_host}
  }
}

5. 7단계 Runbook(원격 물리 Mac)

  1. 전송 방식을 고정합니다. 활성 경로는 하나만. 롱 폴링에서 웹훅으로 바꿀 때는 이중 전달을 피하기 위해 먼저 폴링 프로세스를 중지합니다.
  2. TLS를 끝에서 끝으로 검증합니다. 인터넷에서 443을 테스트합니다. 전체 체인, SNI, 방화벽(현행 텔레그램 문서의 소스 대역)을 확인합니다.
  3. openclaw.json을 병합합니다. cp openclaw.json openclaw.json.bak.$(date +%Y%m%d%H%M)publicUrl·시크릿 참조·로컬 바인드를 설정합니다.
  4. 오래된 웹훅 상태를 정리합니다. getWebhookInfo → URL이 잘못됐으면 deleteWebhook → 한 곳에서 setWebhook으로 409를 줄입니다.
  5. 리로드 후 프로세스 건강을 확인합니다. 배포 방식에 맞게 리로드하고, 리슨 포트와 launchd 로그에 크래시 루프가 없는지 봅니다.
  6. 양·음성 테스트. 테스트 메시지를 보내고, 잘못된 secret_token 요청은 빠르게 실패해야 하며 pending_update_count를 주시합니다.
  7. 아카이브합니다. 도메인, 인증서 갱신 담당, setWebhook 파라미터, 롱 폴링으로의 롤백 절차를 기록합니다.

6. 409·TLS 타임아웃 트리아지

증상 가능한 원인 조치
setWebhook 409 이미 해당 토큰에 웹훅이 등록됨 또는 동시 등록 getWebhookInfo → 유실 항목 정리 → deleteWebhook → 단일 재시도
last_error_message에 TLS·인증서 언급 체인 불완전, 잘못된 SNI, HTTP만 열린 엣지 openssl s_client -connect; 중간 인증서 보강; HTTPS 강제
핸드셰이크가 느리거나 간헐적 성공 국경 간 RTT; 짧은 proxy_read_timeout 엣지→오리진 읽기 타임아웃 상향; 엣지를 가깝게; 워커 블로킹 완화
웹훅 경로에서 401/403 secret_token과 게이트웨이 불일치 환경 변수와 setWebhook을 함께 맞추고 동시에 로테이션
TLS 오류 없이 메시지 지연 큐 적체 또는 게이트웨이 과부하 pending_update_count 확인; 워커 확장; 상위 모델 호출 스로틀

7. 인용 가능한 수치·체크 항목

  • getUpdates 롱 폴: Bot API 문서상 timeout은 보통 0–50초; RTT가 큰 링크에서는 보수적으로 시작합니다.
  • 로컬 HTTP: 예시 127.0.0.1:18789는 루프백에만 머무르고, 프록시가 TLS와 공개 면을 담당합니다—SSH 우선 ZoneMac 노드와 맞습니다.
  • 웹훅 동시성: maxConnections를 게이트웨이 워커·상위 모델 QPS와 함께 예산화해 인그레스가 코어보다 빨리 받아들이지 않게 합니다.

8. FAQ

Q: setWebhook가 409를 내는 이유는?
보통 해당 봇 토큰에 다른 웹훅이 이미 등록되어 있거나 정리가 생략된 경우입니다. getWebhookInfo를 확인하고 유휴 스택에서 deleteWebhook 후 한 진입점에서 setWebhook을 다시 시도하세요.

Q: TLS 핸드셰이크 타임아웃은 어떻게 추적하나요?
외부에서 openssl s_clientcurl을 시간 측정하며 실행하고 SNI·중간 인증서·HTTP/2 또는 엣지 절단을 확인합니다. 몇 분 뒤 getWebhookInfo.last_error_message를 다시 봅니다.

Q: 원격 Mac에서 언제 롱 폴링이 정당화되나요?
공인 호스트에 텔레그램이 신뢰하는 TLS를 아직 제시하기 어려울 때—PoC, 엄격한 NAT, 인증서 자동화 미성숙 단계입니다. 지속 아웃바운드 트래픽과 RTT 민감도를 감수합니다.

Q: secret_token은 어디서 강제하나요?
게이트웨이 또는 OpenClaw 인그레스에서 불일치 시 401. setWebhook과 설정을 함께 로테이션하세요.

9. 요약과 Mac mini가 이 스택에 맞는 이유

롱 폴링과 웹훅의 선택은 「최신이냐」가 아니라 프로덕션급 HTTPS와 단일 등록 소스를 받아들일지입니다. 웹훅은 관측성을 getWebhookInfo 쪽으로 밀고, 롱 폴링은 아웃바운드 경로와 프로세스 감시에 복잡도가 남습니다.

ZoneMac 원격 물리 Mac에서 Mac mini M4급 노드는 대기 전력이 수 와트 수준이고, Unix 네이티브 서비스와 역프록시·OpenClaw를 한 기기에서 launchd 친화적으로 돌리기 좋아 무인 게이트웨이에 맞습니다. Gatekeeper·SIP·FileVault 같은 macOS 하드닝은 Windows 범용 호스트 대비 장기 노출 부담을 줄여 줍니다.

텔레그램 인그레스·TLS·OpenClaw를 조용하고 예측 가능한 하드웨어에서 돌리고 싶다면 Mac mini M4는 가격 대비 안정성이 강한 출발점입니다. ZoneMac으로 원격 물리 Mac을 받아 이 Runbook을 실제 금속 위에서 리허설해 보세요.

기간 한정

OpenClaw 텔레그램 웹훅을 돌릴 원격 물리 Mac이 필요하신가요?

ZoneMac은 고성능 Mac mini 클라우드 임대를 제공합니다. 로컬 리스너·역프록시·게이트웨이를 한 박스에 두고 openclaw.json과 HTTPS Runbook을 끝까지 재현할 수 있습니다.

온디맨드 물리 하드웨어 SSH 직접
macOS 클라우드 렌탈 초저가 한정 특가
지금 구매