Telegram 포럼(토픽)이 켜진 슈퍼그룹에서는 MessageThreadId 유무로 transcript 경로가 갈라지고 Heartbeat·도구 응답이 루트 채팅으로 떨어질 수 있습니다. OpenClaw v2026.4.14 전후 4.x를 가정해 통증 분해, 의사결정 매트릭스, 증상·로그·대응 표, Webhook·롱폴링 운영 차이, 8단계 재현 절차, 인용 메모, VNC 검수까지 한 번에 정리합니다.
1) 문제 분해
- 스레드 ID 누락: 전달 메시지 등 일부 경로에서
message_thread_id가 빠지면 같은 사용자도 transcript가 둘로 갈라집니다. General 루트 토픽과 자식 토픽을 섞으면 사람의 인지와 Gateway 로그가 어긋납니다. - Heartbeat 표류:
last나 명시 대상이 없으면 자동 메시지가 그룹 루트로 갑니다. 본문에 도구 호출·긴 URL을 넣으면 활발한 포럼에서 사실상 방송이 됩니다. 주기·@all 허용·루트 게시 정책을 Runbook에 적습니다. - 도구 outbound 불일치: 수신 스레드를 재사용하지 않으면 “A 토픽 질문, 루트 답변”이 됩니다. 검색·파일 쓰기 같은 카드형 플러그인은 내부 큐가 갈라져 승인 UI와 최종 답이 다른 스레드로 갈 수 있습니다. 송신 헬퍼는 항상 최근 수신 thread id를 실어 보내는 규율이 필요합니다.
표면 증상과 로그
티켓에 붙여 넣기 좋게 표로 정리했습니다. VNC 세션에서 Telegram UI·Gateway 콘솔·로컬 로그를 동시에 봅니다.
| 채팅에서 보이는 것 | 먼저 모을 로그 증거 | 우선 조치(모델 변경 없음) | 지속 시 |
|---|---|---|---|
| 같은 사람이 갑자기 맥락 상실 | 두 수신 이벤트의 transcript 경로나 키가 다름 / 한쪽에 thread 없음 | 테스트 계정을 단일 자식 토픽에 고정, 전달 체인 금지 | 토픽당 봇 분리 또는 포럼 해제 |
| 정기 Heartbeat가 다른 스레드 방해 | 송신 JSON에 thread 없음·오래된 id | 명시 토픽 또는 last에 고정 후 Gateway 재시작 | 간격 완화·지터, 본문을 한 줄 기호로 |
| 도구 결과가 “다른 방”에 게시 | 수신엔 thread 있음, 송신엔 없음/기본 chat | thread 없으면 자동 전송 거부(assert) | reply_to_message_id로 스레드 추종 |
다채널 글과 같이 단일 경로 스모크 후 확장이 안전합니다.
2) 매트릭스
| 협업 | 토폴로지 | 비용 | 리스크 |
|---|---|---|---|
| 토픽 분리 | 포럼+단일 봇+엄격 라우팅 | 높음 | ID 누락 |
| 소규모 단일 | 일반 슈퍼그룹 | 낮음 | 포럼 과잉 |
| 강한 격리 | 봇/그룹 분할 | 운영↑ | 토큰 표면↑ |
| 방송만 | 채널 분리 | 중 | 다턴 에이전트와 상성 |
| 이미 멀티 IM | Telegram 포럼 시험창 분리 | 중 | 원인 추적 난이도 |
7) 증상·로그·수정·전송 방식
느낌으로 설정을 돌리면 끝이 없습니다. 순서는 이벤트가 Gateway에 도착하는지 → thread 필드 → 마지막에 모델/도구 허용입니다. Webhook은 리버스 프록시·인증서·중복 전달에서, 롱폴링은 원격 Mac 절전과 만나 “스레드 유실”처럼 보이는 허위 신호를 만듭니다.
| 전송 | 포럼에 유리한 점 | 흔한 장애 | VNC 활용 |
|---|---|---|---|
| Webhook | 즉시성, HTTP 로그 상관 | 공개 입구, 프록시 타임아웃 | 원격 Mac 브라우저로 헬스 URL 헤더·TLS 캡처 |
| Long polling | 실험실에 단순 | 워커 정지 시 상태기 정지 | top과 Telegram 타임스탬프 동시 관찰 |
마스킹된 수신 샘플로 눈을 훈련합니다. 필드 암기보다 thread 존재·null·reply 정합입니다.
{
"update_id": 100000000,
"message": {
"message_id": 2048,
"chat": { "id": -1001234567890, "title": "Demo", "is_forum": true },
"message_thread_id": 99,
"from": { "id": 12345, "is_bot": false },
"text": "이 토픽에서 이전 단계 도구 체인 계속"
}
}
"message_thread_id": null이면 전달·크로스 인용을 끄고 순수 텍스트로 재현부터 확인합니다.
3) 8단계
클라이언트에서 포럼 활성 확인
설정·토픽 목록 스크린샷, chat_id 기록.
macOS Telegram Desktop에서 기본 작성 위치가 General인지 확인하고 테스터의 마지막 토픽과 Gateway last를 맞춥니다.
봇 권한 최소화(VNC 점검)
서비스 메시지 읽기 필요 시 정책에 명시.
금지 시 고정 토픽 제목 화이트리스트 등 대안을 문서화합니다.
단일 토픽에서 도구 다턴 완주
두 번째 토픽 전 동시 스팸 스트레스로 transcript 경쟁 확인.
마스킹 JSON으로 message_thread_id 추적
forum_topic_created, reply_to_message 함께.
같은 초의 수신+송신 쌍으로 누락이 수신인지 송신인지 분리합니다.
Heartbeat 대상 고정
변경 후 Gateway 재시작.
GW=ok thread=99 같은 한 줄 기계 가독 포맷 권장.
플러그인 승인·outbound 스레드 확인
카드형·플레인 각각 실행.
openclaw doctor·버전 지문
티켓에 openclaw --version 첨부.
TLS 경고는 리버스 프록시 글과 분리합니다.
일반 그룹 롤백 Runbook
포럼 끄기, webhook 폐기, 설정 복원.
롤백 후에도 포럼 이전 transcript 보관 위치를 감사용으로 남깁니다.
4) 인용
5) VNC 검수
릴리스 직전 10분 게이트로 돌립니다. 마이너 업마다 재스모크하지 않으면 “지난주엔 됐다” 퇴행에 취약합니다.
- □ 기대 thread id가 수신에 존재
- □ Heartbeat 오발송 없음
- □ 병렬 토픽 transcript 무결
- □ 롤백 스크린샷
- □ 승인 카드와 최종 답이 동일 스레드(분기 시 큐 이름 기록)
- □ 과도한 절전 비활성(NIC 절전은 죽은 Gateway 위장)
- □ 인증서·리버스 프록시 만료를 캘린더화해 TLS를 thread 버그와 혼동 금지
6) FAQ
Q: 버전 고정? 설치된 바이너리 기준.
Q: Slack/Teams 동시? 다채널 글 순서 준수.
결론: VNCMac VNC 원격 Mac으로 Telegram 데스크톱과 Gateway UI를 한 증거면으로 묶으면 포럼 운영이 쉬워집니다.