문제 설명
Telegram 채널을 설정한 후, OpenClaw의 Telegram 봇이 메시지를 수신하지 못하거나 사용자에게 응답하지 않는 현상이 발생할 수 있습니다. 일반적인 증상은 다음과 같습니다:
사용자가 Telegram에서 봇에게 메시지를 보낸 후 아무 반응이 없고, OpenClaw 로그에도 메시지 수신 기록이 보이지 않는 경우:
[openclaw:telegram] Bot started. Listening for messages...
로그에 시작 성공이 표시되지만 이후 메시지 처리 기록이 없습니다.
또는 로그에 오류가 표시되는 경우:
[openclaw:telegram] Error: 409 Conflict: terminated by other getUpdates request
또는:
[openclaw:telegram] GrammyError: Call to 'getMe' failed! (401: Unauthorized)
OpenClaw의 Telegram 채널은 grammY 프레임워크 기반으로 구축되어 있으며, Telegram Bot API를 통해 Telegram 서버와 통신합니다.
진단 단계
Bot Token 유효성 확인
먼저 설정에 사용된 Bot Token이 올바르고 유효한지 확인합니다:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getMe
정상 응답은 봇의 기본 정보를 반환해야 합니다:
{
"ok": true,
"result": {
"id": 123456789,
"is_bot": true,
"first_name": "MyBot",
"username": "my_openclaw_bot"
}
}
{"ok":false,"error_code":401,"description":"Unauthorized"}가 반환되면 Token이 유효하지 않습니다.
Webhook 충돌 확인
Telegram Bot API는 메시지를 수신하는 두 가지 방식을 제공합니다: 폴링(polling)과 Webhook. 이전에 Webhook을 설정했지만 현재 OpenClaw이 폴링 방식을 사용하고 있다면, Webhook이 존재하여 폴링으로 메시지를 수신할 수 없게 됩니다.
현재 Webhook 상태를 확인합니다:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getWebhookInfo
url 필드가 비어있지 않으면, Webhook 설정이 존재합니다.
OpenClaw 설정 확인
~/.openclaw/openclaw.json에서 Telegram 채널 설정을 확인합니다:
cat ~/.openclaw/openclaw.json | grep -A 10 telegram
botToken 필드가 존재하고 비어있지 않은지 확인합니다.
해결 방안
문제 1: Bot Token이 유효하지 않거나 만료된 경우
Token이 유효하지 않으면 다시 받아야 합니다:
- Telegram에서 @BotFather를 찾습니다
/mybots을 보내 봇 목록을 확인합니다- 해당 봇을 선택하고 "API Token"을 클릭합니다
- Token을 재설정해야 하면 "Revoke current token"을 클릭하여 새 Token을 생성합니다
새 Token을 설정 파일에 업데이트합니다:
{
"channels": {
"telegram": {
"botToken": "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
}
}
}
그런 다음 OpenClaw을 재시작합니다:
openclaw restart
문제 2: Webhook 충돌 (409 오류)
409 Conflict 오류는 보통 다른 프로세스가 같은 Bot Token으로 getUpdates를 호출하고 있거나, 남은 Webhook 설정이 있음을 나타냅니다.
Webhook을 삭제합니다:
curl https://api.telegram.org/bot<YOUR_BOT_TOKEN>/deleteWebhook
같은 Bot Token을 사용하는 다른 프로그램이 없는지 확인합니다. 중복 OpenClaw 인스턴스가 실행 중인지 확인합니다:
ps aux | grep openclaw
여러 인스턴스가 발견되면 불필요한 프로세스를 중지합니다.
문제 3: 봇 권한 미설정
봇이 그룹에서 메시지를 수신할 수 없다면 그룹 프라이버시 모드가 활성화되지 않았기 때문일 수 있습니다:
- BotFather에서
/mybots을 보냅니다 - 봇 선택 → Bot Settings → Group Privacy
- Privacy mode를 Disabled로 설정합니다
이렇게 하면 봇이 그룹의 모든 메시지를 수신할 수 있으며, /로 시작하는 명령 메시지만이 아닙니다.
문제 4: grammY 프레임워크 오류
로그에 grammY 관련 예외가 나타나면, 상세 로그를 활성화하여 문제를 해결합니다:
DEBUG=openclaw:telegram*,grammy* openclaw start
일반적인 grammY 오류 및 처리 방법:
-
ETELEGRAM: 429 Too Many Requests: 메시지 전송이 너무 빈번하여 Telegram에 의해 속도 제한됨. OpenClaw은 기본적으로 속도 제한이 설정되어 있지만, 설정을 수정한 경우 제한 설정을 확인하세요. -
EFATAL: Polling stopped: 치명적 오류로 인해 폴링이 중지됨. 전체 오류 스택을 확인하세요. 보통 네트워크 문제 또는 Token 실효입니다. -
Error: getaddrinfo ENOTFOUND api.telegram.org: DNS 확인 실패. 네트워크 연결과 DNS 설정을 확인하세요.
문제 5: 네트워크 접근 제한
일부 지역에서는 Telegram API에 직접 접근할 수 없을 수 있습니다. 프록시를 설정합니다:
{
"channels": {
"telegram": {
"botToken": "YOUR_TOKEN",
"proxy": {
"url": "socks5://127.0.0.1:1080"
}
}
}
}
OpenClaw의 Telegram 채널은 HTTP 및 SOCKS5 프록시를 지원합니다.
수정 검증
수정 후 봇이 정상적으로 작동하는지 확인합니다:
openclaw start
그런 다음 Telegram에서 봇에게 테스트 메시지를 보내고, OpenClaw의 로그 출력에 메시지 수신 및 처리 기록이 나타나는지 확인합니다. 로그에 다음과 비슷한 출력이 보여야 합니다:
[openclaw:telegram] Received message from user 123456: "안녕하세요"
[openclaw:gateway] Processing message for channel telegram, user 123456
[openclaw:telegram] Sent reply to user 123456
모든 것이 정상이면, 봇이 Telegram에서 메시지에 응답합니다.