텔레그램 봇 토큰: 발급부터 확인, 폐기, 안전한 보관까지
텔레그램 봇 토큰은 @BotFather가 봇을 만들 때 발급하는 비밀 키로, 123456789:AAEexampleTokenReplaceWithYours와 같은 형식입니다. 새 봇은 /newbot을 보내면 토큰이 바로 발급되고, 이미 만든 봇의 토큰은 /mybots → 봇 선택 → API Token에서 확인할 수 있습니다. 이 글에서는 토큰 발급과 확인, getMe를 이용한 유효성 검사, 유출 시 폐기 방법, 그리고 n8n이나 AI 비서에 연결할 때 필요한 bot token과 chat id까지 차례로 정리합니다.
텔레그램 봇 토큰이란: 형식과 역할
Bot API에는 별도의 로그인 절차가 없습니다. 요청 URL에 들어 있는 토큰이 곧 인증 정보이며, 텔레그램 서버는 이 값으로 어느 봇의 요청인지 판단합니다. 토큰 앞에는 항상 bot이라는 글자가 붙습니다.
https://api.telegram.org/bot<token>/getMe
https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getMe
| 부분 | 예시 | 의미 |
|---|---|---|
| 콜론 앞 숫자 | 123456789 | 봇 자신의 ID입니다. 메시지를 보낼 chat id와는 다른 값입니다. |
| 콜론 | : | 두 부분을 나누는 구분자입니다. |
| 콜론 뒤 문자열 | AAEexampleTokenReplaceWithYours | 비밀 값입니다. 영문 대소문자, 숫자, _, -로 이루어집니다. |
공식 문서는 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11을 예시로 듭니다. 이 글의 토큰도 설명용 예시이므로 실제로 호출할 때는 자신의 토큰으로 바꿔야 합니다. 토큰을 아는 사람은 누구나 여러분의 봇으로 메시지를 보내고, 업데이트를 가져가고, 웹훅 주소를 바꿀 수 있습니다. 즉 토큰은 봇 계정의 비밀번호와 같습니다.
새 봇의 텔레그램 봇 토큰 발급받기: /newbot
- 텔레그램에서 @BotFather를 열고
/newbot을 보냅니다. - 봇 이름을 입력합니다. 한글도 쓸 수 있으며 나중에
/setname으로 바꿀 수 있습니다. - username을 입력합니다. 5~32자의 라틴 문자, 숫자, 밑줄만 쓸 수 있고 반드시
bot으로 끝나야 합니다(예:my_alert_bot). - BotFather의 완료 메시지에 들어 있는 토큰을 복사해 비밀번호 관리자나 서버 환경 변수에 저장합니다.
봇을 만드는 전체 과정과 첫 메시지 전송은 텔레그램 봇 만들기 가이드에서 단계별로 설명합니다.
이미 만든 봇의 토큰 찾기: /mybots → API Token
토큰을 어디에 저장했는지 잊어버렸다면 BotFather에서 현재 토큰을 다시 볼 수 있습니다. 토큰을 새로 만들 필요는 없습니다.
- @BotFather에
/mybots를 보냅니다. - 목록에서 토큰이 필요한 봇을 누릅니다.
- API Token 버튼을 누르면 현재 유효한 토큰이 표시됩니다.
주의: 기존 토큰을 확인하려는 목적이라면/token명령을 쓰지 마십시오./token은 새 토큰을 생성하는 명령이어서, 기존 토큰을 쓰던 서버와 자동화 도구가 더 이상 인증되지 않고401 Unauthorized로 멈출 수 있습니다.
BotFather의 Mini App 화면에서도 같은 기능을 쓸 수 있습니다. 어느 방법이든 토큰은 봇을 소유한 텔레그램 계정에서만 볼 수 있으므로, 팀원이 토큰을 요청하면 메신저로 보내기보다 서버의 시크릿 저장소를 통해 공유하는 편이 안전합니다.
텔레그램 봇 토큰 확인: getMe로 유효성 검사하기
토큰이 살아 있는지 확인하는 가장 확실한 방법은 getMe를 호출하는 것입니다. 아무것도 변경하지 않는 읽기 전용 메서드라서 언제 호출해도 안전합니다.
curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getMe"
정상이라면 "ok": true와 함께 봇의 User 객체가 반환됩니다(아래는 일부 필드). username이 의도한 봇과 같은지도 꼭 확인하십시오. 여러 봇을 운영하다 보면 다른 봇의 토큰을 넣는 실수가 잦습니다.
{
"ok": true,
"result": {
"is_bot": true,
"first_name": "알림 봇",
"username": "my_alert_bot",
"can_join_groups": true,
"can_read_all_group_messages": false,
"supports_inline_queries": false
}
}
스크립트로 확인하려면 다음처럼 작성합니다.
import os
import requests
token = os.environ["TELEGRAM_BOT_TOKEN"]
r = requests.get(f"https://api.telegram.org/bot{token}/getMe", timeout=10).json()
if r["ok"]:
print("유효한 토큰입니다:", "@" + r["result"]["username"])
else:
print("확인 실패:", r["error_code"], r["description"])
| 응답 | 원인 | 해결 |
|---|---|---|
401 Unauthorized | 토큰이 틀렸거나 폐기됨, 다른 봇의 토큰과 혼동 | BotFather의 API Token에서 현재 값을 다시 복사합니다. |
401 Unauthorized: invalid token specified | 콜론이 빠졌거나 일부만 복사되는 등 형식이 잘못됨 | 토큰 전체를 다시 복사하고 따옴표나 줄바꿈이 섞이지 않았는지 확인합니다. |
404 Not Found | URL에 bot 접두사가 없거나 메서드 이름에 오타가 있음 | /bot<token>/getMe 형식인지 확인합니다. |
브라우저에서 바로 확인하려면 Bot API Tester의 getMe에 토큰을 붙여 넣고 실행하십시오. 토큰은 브라우저의 localStorage에만 저장되며 요청은 api.telegram.org로 직접 전송됩니다.
토큰이 유출됐을 때: /revoke로 폐기하고 새로 발급하기
토큰을 GitHub에 커밋했거나, 단체 채팅방에 붙여 넣었거나, 앱 코드에 포함해 배포했다면 유출된 것으로 보고 즉시 폐기해야 합니다. 저장소에서 파일을 지워도 커밋 기록에는 남아 있으므로, 삭제보다 폐기가 먼저입니다.
- @BotFather에
/revoke를 보내고 해당 봇을 선택합니다./mybots→ 봇 선택 → API Token 화면의 Revoke 버튼으로도 같은 작업을 할 수 있습니다. - 기존 토큰은 무효가 되고 새 토큰이 발급됩니다. 이후 예전 토큰으로 보낸 요청은
401 Unauthorized를 받습니다. - 서버 환경 변수, CI 시크릿, 자동화 도구와 AI 비서에 입력해 둔 토큰 등 예전 토큰을 넣어 둔 모든 곳을 새 값으로 바꿉니다.
- 새 토큰으로
getMe를 호출해 정상 동작을 확인합니다. 웹훅을 쓰고 있다면getWebhookInfo로 웹훅 상태도 함께 점검합니다.
유출이 확인되지 않았더라도 토큰을 알던 팀원이 프로젝트를 떠났거나, 토큰이 저장된 노트북을 분실했거나, 외부 업체에 잠시 토큰을 공유했다면 같은 절차로 교체해 두는 것이 좋습니다. 교체 작업은 몇 분이면 끝나지만, 유출된 토큰으로 봇이 스팸을 보내기 시작하면 사용자 신뢰를 되찾기 어렵습니다.
토큰을 안전하게 보관하는 방법
- 환경 변수로 주입: 코드에는
TELEGRAM_BOT_TOKEN같은 변수 이름만 두고, 값은 서버 환경 변수, Git에서 제외한.env파일, 클라우드 시크릿 저장소에서 읽습니다. - 클라이언트 코드에 넣지 않기: 웹 페이지의 JavaScript, 모바일 앱, Mini App 프런트엔드는 누구나 열어 볼 수 있습니다. 토큰이 필요한 호출은 반드시 서버에서 합니다.
- 로그 주의: 요청 URL에 토큰이 들어가므로 URL 전체를 로그에 남기면 토큰도 함께 기록됩니다. 로그와 오류 보고에서는 토큰 부분을 가립니다.
- 용도별로 봇 분리: 개발용과 운영용, 연동 도구별로 봇을 따로 만들면 한 곳에서 유출돼도 그 봇만 폐기하면 되고, 테스트가 실제 사용자에게 영향을 주지도 않습니다.
# .env 파일 (반드시 .gitignore에 추가)
TELEGRAM_BOT_TOKEN=123456789:AAEexampleTokenReplaceWithYours
// Node.js: 서버 코드에서만 사용합니다
const token = process.env.TELEGRAM_BOT_TOKEN;
if (!token) throw new Error("TELEGRAM_BOT_TOKEN 환경 변수가 없습니다");
개발용 토큰과 운영용 토큰 분리하기
운영 중인 봇의 토큰으로 새 기능을 시험하면 실제 사용자가 테스트 메시지를 받거나, 개발 PC의 getUpdates가 운영 서버로 가야 할 업데이트를 가져가 버리는 사고가 생깁니다. 텔레그램 공식 문서도 같은 코드를 다른 봇 계정으로 하나 더 실행해 테스트하라고 권장합니다.
- @BotFather에서
/newbot으로 테스트 전용 봇을 하나 더 만듭니다(예:my_alert_dev_bot). - 개발 환경에는 테스트 봇의 토큰을, 운영 서버에는 운영 봇의 토큰을 환경 변수로 넣습니다. 코드는 그대로 두고 환경 변수만 바꾸는 구조가 이상적입니다.
- 파일을 다시 보낼 때 쓰는
file_id는 봇마다 다르므로, 운영 봇이 저장한file_id를 테스트 봇에서 그대로 쓸 수 없습니다. 테스트 봇에서는 파일을 다시 업로드해야 합니다.
더 엄격하게 분리하고 싶다면 텔레그램의 테스트 환경을 쓸 수 있습니다. 테스트 환경은 운영 환경과 완전히 분리되어 있어 테스트 서버용 사용자 계정과 봇을 새로 만들어야 하고, 요청 주소에 /test/가 들어갑니다. 테스트 환경이라고 해서 전송 한도가 완화되지는 않으므로 재시도 처리는 운영과 똑같이 구현해야 합니다.
curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/test/getMe"
n8n·AI 비서 연동에 필요한 텔레그램 bot token과 chat id
최근에는 n8n 같은 자동화 도구나 OpenClaw 같은 AI 비서를 텔레그램에 연결하려고 봇 토큰을 찾는 경우가 많습니다. 이런 도구는 대개 두 가지 값을 요구합니다.
- bot token: 도구가 여러분의 봇 이름으로 메시지를 받고 보내는 데 사용합니다.
- chat id: 알림을 보낼 대상 채팅이나 봇과 대화할 사용자를 지정하는 데 사용합니다.
chat id는 봇에게 먼저 메시지를 보낸 뒤 getUpdates를 호출해 message.chat.id에서 읽습니다. 개인 채팅, 그룹, 채널별 방법은 텔레그램 chat id 확인방법에 정리했습니다. 두 값을 얻었다면 스크립트에서 다음처럼 바로 알림을 보낼 수 있습니다.
export TELEGRAM_BOT_TOKEN="123456789:AAEexampleTokenReplaceWithYours"
export TELEGRAM_CHAT_ID="123456789"
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
-d chat_id="${TELEGRAM_CHAT_ID}" \
--data-urlencode text="배포가 완료되었습니다"
연동할 때 자주 겪는 문제도 알아 두십시오. 하나의 토큰으로 업데이트를 받는 프로그램은 하나여야 합니다. 도구가 웹훅을 등록해 둔 상태에서 직접 getUpdates를 호출하면 409 Conflict: can't use getUpdates method while webhook is active가, 두 프로그램이 동시에 폴링하면 409 Conflict: terminated by other getUpdates request가 반환됩니다. 현재 웹훅 상태는 getWebhookInfo로 확인할 수 있으며, 가장 깔끔한 해결책은 연동용 봇을 따로 만드는 것입니다. 메시지 전송 옵션은 텔레그램 봇 API 메시지 보내기에서 자세히 다룹니다.
자주 묻는 질문
이미 만든 봇의 텔레그램 봇 토큰은 어디서 확인하나요?
@BotFather에 /mybots를 보내고 봇을 선택한 뒤 API Token 버튼을 누르면 현재 토큰이 표시됩니다. /token 명령은 새 토큰을 생성하므로 기존 토큰을 확인하는 용도로 쓰지 마십시오.
텔레그램 봇 토큰 예시와 형식은 어떻게 되나요?
123456789:AAEexampleTokenReplaceWithYours처럼 숫자로 된 봇 ID, 콜론(:), 영문·숫자·_·-로 된 비밀 문자열로 구성됩니다. 공식 문서의 예시는 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11입니다.
토큰이 유효한지 어떻게 확인하나요?
https://api.telegram.org/bot<token>/getMe를 호출해 "ok": true와 봇 정보가 돌아오면 유효합니다. 401 Unauthorized가 나오면 토큰이 틀렸거나 이미 폐기된 것입니다.
봇 토큰이 유출되면 어떻게 해야 하나요?
@BotFather에서 /revoke를 보내고 해당 봇을 선택하거나 /mybots → 봇 선택 → API Token → Revoke로 기존 토큰을 폐기하고 새 토큰을 받습니다. 그다음 서버와 연동 도구에 저장된 토큰을 모두 새 값으로 바꾸십시오.
OpenClaw 같은 AI 비서에 텔레그램 봇 토큰을 입력해도 되나요?
토큰은 봇의 모든 권한을 주는 값이므로 신뢰할 수 있는 도구에만 입력하십시오. 연동마다 별도의 봇을 만들어 두면 문제가 생겼을 때 그 봇의 토큰만 폐기하면 됩니다.
bot token과 chat id는 무엇이 다른가요?
bot token은 어떤 봇의 요청인지 증명하는 비밀 키이고, chat id는 메시지를 주고받을 채팅의 번호입니다. 자동화 도구나 알림 스크립트는 보통 두 값을 모두 요구하며, chat id는 봇에게 메시지를 보낸 뒤 getUpdates로 확인합니다.
관련 가이드
텔레그램 봇 만들기: @BotFather로 생성하고 첫 메시지 보내기
텔레그램 봇 만들기 가이드입니다. @BotFather의 /newbot으로 봇을 생성하고 토큰을 getMe로 확인한 뒤, getUpdates와 sendMessage로 첫 메시지를 보내는 과정을 curl과 Python 예제로 설명합니다.
텔레그램 봇 API로 메시지 보내기: sendMessage 사용법과 예제
텔레그램 봇 API 메시지 보내기 가이드입니다. sendMessage를 curl·Python·JavaScript로 호출하는 예제, HTML·MarkdownV2 서식, 인라인 버튼, 그룹·채널 전송, 400·403·429 오류 해결법을 정리했습니다.
텔레그램 웹훅 설정 가이드: setWebhook, secret_token, getWebhookInfo
텔레그램 봇 웹훅 설정 방법을 단계별로 정리했습니다. setWebhook 파라미터, secret_token 헤더 검증 코드, getWebhookInfo 상태 확인, deleteWebhook으로 되돌리기, 409·HTTPS 오류 해결까지 다룹니다.
텔레그램 chat id 확인방법: 개인, 그룹, 채널, 토픽별 chat id 찾기
텔레그램 chat id 확인방법을 개인 채팅, 그룹, 슈퍼그룹, 채널, 포럼 토픽별로 정리했습니다. getUpdates로 chat id를 찾는 법, -100으로 시작하는 ID의 의미, 결과가 비어 있을 때 해결법까지 설명합니다.