텔레그램 봇 무응답 진단 + 복구
결론
완전 복구 판정은 못 냈다. 핵심 원인은 3개다.
- @openclaw_harybot은 현재 수신 불가 상태다.
com.openclaw.claude-listener프로세스는 살아 있지만 2026-04-15 12:31 KST에도HTTP 409 Conflict가 반복된다. 같은 토큰을 다른 인스턴스가getUpdates로 polling 중이라는 뜻이다. - @ronclawBot은 프로세스와 Telegram TCP 연결은 살아 있다. 다만
claude-to-imdoctor는 Codex 샌드박스의ps/DNS 제한 때문에 token/PID 검증을 실패로 냈다. 관리용 PID 파일이 틀려 있어1235로 정정했다. - @RONforMAC_Bot/Hermes 경로는 PID 41269가 살아 있고 Telegram TCP 연결도 있다. 다만
gateway.log의getUpdates 200 OK가 12:14:56 이후 멈췄고, 12:15에 들어온 Hermes agent 작업 이후 polling 로그가 재개되지 않았다. Hermes Gateway는 죽이지 않았다.
Codex 실행 샌드박스에서 api.telegram.org DNS와 launchctl kickstart가 막혀 있어, 직접 API getMe/라이브 ping/launchd 재시작은 완료하지 못했다. 대신 로컬 launchd/lsof/log/DB 근거로 상태를 판정했다.
봇별 상태 표
| 봇 | 토큰 유효 | 프로세스 alive | 최근 활동 | 진단 | 복구조치 | 최종상태 |
|---|---|---|---|---|---|---|
@openclaw_harybot |
유효 추정: 409는 인증 통과 후 polling 충돌 | ✅ com.openclaw.claude-listener pid 66858 |
2026-04-15 12:31:43/51/59에 HTTP 409 Conflict 반복 |
현재 수신 불가. 동일 봇 토큰의 다른 poller가 있음. 또 코드가 DM이 아니라 collab_chat_id=-1003522748967만 처리함 |
launchctl kickstart 시도 → Operation not permitted. 코드/토큰 변경은 하지 않음 |
❌ 미복구. 중복 poller 제거 또는 토큰 재발급 필요 |
@ronclawBot |
유효 추정: 과거 409와 현재 Telegram TCP 연결 | ✅ com.claude-to-im.bridge pid 1235 |
로그 마지막 오류 2026-04-15 03:49:23 fetch failed; 현재 149.154.166.110:443 ESTABLISHED |
Codex 직접 연결은 살아 있는 쪽에 가깝다. 예전 409는 disabled된 codex_telegram_listener와 충돌했던 것으로 보이며 현재 해당 launchd 서비스는 로드되어 있지 않음 |
/Users/ron/.claude-to-im/runtime/bridge.pid를 stale 1732 → 1235로 정정, 백업 생성 |
⚠️ 부분 복구. 실제 Harry DM round-trip은 샌드박스 DNS 제한 때문에 미검증 |
@RONforMAC_Bot |
유효 확인: Hermes 로그에 getUpdates 200 OK 다수 |
✅ Hermes Gateway pid 41269, 127.0.0.1:18789 LISTEN, Telegram TCP ESTABLISHED |
2026-04-15 12:14:56까지 getUpdates 200 OK, 이후 session flush만 있음 |
송신/수신 기반은 살아 있으나 polling 로그가 12:15 이후 멈춤. Gateway 장시간 agent 작업 또는 polling loop 정체 가능성 | 채널 설정 변경 없음. Gateway kill/restart 안 함. live ping 시도는 network request 실패 | ⚠️ 부분 장애 의심. Gateway Telegram polling 재확인 필요 |
확인한 구조
토큰/설정 위치
~/.openclaw/bot_tokens.jsonclaude.bot_username=openclaw_harybot, token83820953…GkLwcodex.bot_username=ronclawBot, token84231387…WFCUclaude_bridge.bot_username=ronbridgebot, token87122366…I__Ucollab_chat_id=-1003522748967~/.hermes/.envTELEGRAM_BOT_TOKEN=85485086…b0xoTELEGRAM_ALLOWED_USERS=492860021,976052688~/.claude-to-im/config.envCTI_TG_BOT_TOKEN=84231387…WFCUCTI_TG_CHAT_ID=492860021
프로세스/launchd
com.openclaw.claude-listener/usr/bin/python3 -u ~/.openclaw/workspace/scripts/claude_telegram_listener.py- running, pid
66858 com.claude-to-im.bridge/usr/local/bin/node ~/.codex/skills/claude-to-im/dist/daemon.mjs- running, pid
1235 ai.hermes.gateway- launchd에는 enabled로 보이나
launchctl print gui/501/ai.hermes.gateway는 service not found - 실제 foreground/수동 프로세스로 pid
41269가127.0.0.1:18789LISTEN com.openclaw.codex-telegram-listener- disabled / 현재 launchd service not found
com.claude-to-im.bridge-claude- enabled지만 not running, token은
ronbridgebot용으로 이번 3개 대상 아님
구체적 문제
1) @openclaw_harybot — 409 Conflict 현재진행형
근거:
- 로그:
/Users/ron/.openclaw/logs/claude-listener.err - 최신 tail:
2026-04-15 12:31:43,856 [claude-listener] WARNING 폴링 실패: HTTP Error 409: Conflict2026-04-15 12:31:51,590 ... 4092026-04-15 12:31:59,231 ... 409- 프로세스는 살아 있음: launchctl pid
66858 - lsof: pid
66858이149.154.166.110:443에 ESTABLISHED
판정: 로컬 프로세스는 Telegram에 접속하고 있으나, Telegram 서버가 다른 getUpdates 요청에 의해 종료시킨다. 로컬에서 확인 가능한 중복 launchd 서비스는 없어서, 다른 세션/원격/수동 실행 poller가 같은 @openclaw_harybot 토큰을 잡고 있을 가능성이 높다.
추가 구조 문제:
claude_telegram_listener.py는 현재 DM이 아니라 협업방만 처리한다.- 코드 조건:
if chat_id != get_collab_chat_id(): continue CLAUDE.md기준은해리 DM | @openclaw_harybot이므로 현재 동작과 기준 문서가 불일치한다.
2) @ronclawBot — 직접 연결은 살아 있으나 관리 상태 불일치
근거:
- launchctl:
com.claude-to-im.bridgerunning pid1235 - lsof: pid
1235가149.154.166.110:443에 ESTABLISHED - 이전 409 로그는 2026-04-14 14:46 KST 부근까지 반복 후 SIGTERM. 현재
com.openclaw.codex-telegram-listener는 disabled/service not found라 같은 로컬 중복은 보이지 않음. claude-to-imdoctor:- PID file stale 실패
- Telegram getMe 실패는 Codex 샌드박스 DNS 제한과 동일 증상
조치:
/Users/ron/.claude-to-im/runtime/bridge.pid를1732에서 실제 launchd pid1235로 정정.- 백업:
/Users/ron/.claude-to-im/runtime/bridge.pid.bak-20260415_123331
3) @RONforMAC_Bot / Hermes Gateway — polling 정체 의심
근거:
- lsof: pid
41269가127.0.0.1:18789LISTEN, Telegram149.154.166.110:443ESTABLISHED /Users/ron/.hermes/logs/gateway.log:- 11:35~12:14까지
POST .../getUpdates "HTTP/1.1 200 OK"가 10초 간격으로 반복 - 12:15 agent 실행 이후
getUpdates로그가 끊기고, 12:18/12:23/12:28 session flush만 기록 /Users/ron/.hermes/channel_directory.json최신 갱신:2026-04-15T12:31:39, Telegram DM492860021인식
판정: Gateway 자체는 살아 있으나 Telegram polling loop가 12:15 이후 정상 주기로 로그를 남기지 않는다. Gateway를 죽이지 말라는 지시가 있어 재시작하지 않았다.
API/getMe / webhook / ping 테스트
Codex shell에서 직접 API 확인은 네트워크 제한으로 실패했다.
getMe,getWebhookInfo:URLError(gaierror(8, 'nodename nor servname provided, or not known'))api.telegram.orgDNS/TLS: 동일 DNS 실패curl http://127.0.0.1:18789/v1/health: sandbox에서 연결 실패. 단,lsof는 pid41269LISTEN 확인.openclaw message send --channel telegram --target 492860021 ...:Network request for 'sendMessage' failed!
따라서 이번 세션에서 실제 Telegram 메시지 왕복 성공은 확인하지 못했다. 다만 host 프로세스 자체는 Telegram IP로 직접 연결되어 있어, 이 실패는 Codex 실행환경의 네트워크 제한과 별개일 가능성이 크다.
큐/연쇄 영향
~/.openclaw/data/ops_multiagent.db 확인:
bus_commands:queued=4,claimed=1,done=17,failed=6- 최근
queued에는 drift-recovery/KPI/codex 작업이 남아 있음. notification_center_log에는 Telegram 발송 실패가 보임:raw_error=<urlopen error [Errno 8] nodename nor servname provided, or not known>quiet_hours로 차단된 정상 억제도 있음.
추가로 ~/.openclaw/workspace/telegram-outbox에 1172개 파일이 남아 있다. 알림 발송 실패 누적이 크며, 봇 응답 장애와 별개로 송신 backlog도 정리 대상이다.
적용한 복구 조치
- 토큰/프로세스 매핑 완료. 토큰은 전부 마스킹 기록.
@ronclawBot의 stale PID 파일 정정.- 변경:
/Users/ron/.claude-to-im/runtime/bridge.pid - 이전값 백업:
/Users/ron/.claude-to-im/runtime/bridge.pid.bak-20260415_123331 - 새 값:
1235 launchctl kickstart -k로 아래 둘 재기동 시도:com.claude-to-im.bridgecom.openclaw.claude-listener- 둘 다
Operation not permitted로 실패. 프로세스는 기존 PID로 계속 running. @RONforMAC_Bot채널 설정은 변경하지 않음.- Hermes Gateway pid
41269는 지시대로 죽이지 않음.
잔존 이슈 / 다음 조치
- @openclaw_harybot 409 해결이 최우선.
- 로컬에서 보이는 중복 launchd는 없음.
- 다른 터미널/원격/과거 세션에서 같은
83820953…GkLw토큰으로getUpdates중인 프로세스를 찾아 중지해야 한다. - 못 찾으면 BotFather에서
@openclaw_harybot토큰 재발급 후~/.openclaw/bot_tokens.json갱신이 가장 확실하다. - @openclaw_harybot DM 라우팅 불일치 수정 필요.
- 현재 코드는 협업방만 처리한다.
- 해리 DM에서 답하게 하려면
claude_telegram_listener.py가chat_id == 492860021도 처리하고, 응답도 같은 DM으로 보내도록 수정해야 한다. - Hermes Gateway Telegram polling 정체 재확인 필요.
- 12:15 이후
getUpdates로그가 멈췄다. - Gateway를 재시작하려면 별도 명시 지시가 필요하다. 현재 지시상 PID
41269는 유지했다. - 텔레그램 outbox 1172건 정리 필요.
- 실패 누적이 매우 크다.
- 이번 작업 범위에서는 삭제/재발송하지 않았다.
- Codex 샌드박스 네트워크 제한 때문에 live ping/getMe가 불가.
- 실제 host 터미널에서는 아래 확인이 필요하다:
bash curl -s "https://api.telegram.org/bot<TOKEN>/getMe" launchctl kickstart -k gui/501/com.claude-to-im.bridge launchctl kickstart -k gui/501/com.openclaw.claude-listener
자체평가
- 정확성: 4/5 — 파일·launchd·lsof·로그·DB 근거로 장애 원인을 특정했다. 단 live API는 환경 제한으로 미확인.
- 완성도: 3.5/5 —
@ronclawBot관리 상태는 일부 정정했지만,@openclaw_harybot409와 Hermes polling 정체는 이 세션 권한으로 복구 못 했다. - 검증: 3.5/5 — launchctl/lsof/log/doctor/DB 검증 완료. 실제 Telegram round-trip은 실패.
- 최소 변경: 5/5 — PID 파일 1개만 백업 후 정정. 봇 토큰/채널/Hermes Gateway/코드는 변경하지 않음.
종합: 4.0/5