Telegram Bot API
🌐 한국어

텔레그램 봇 만들기: @BotFather로 생성하고 첫 메시지 보내기

· 8 분 분량

텔레그램 봇 만들기는 텔레그램 앱에서 @BotFather에게 /newbot 명령을 보내는 것으로 시작합니다. 봇의 이름과 username을 정하면 봇 계정이 즉시 생성되고, Bot API를 호출할 때 쓰는 토큰이 발급됩니다. 이 가이드에서는 봇 생성, 토큰 확인(getMe), chat id 찾기(getUpdates), 첫 메시지 전송(sendMessage)까지 10분 안에 끝낼 수 있도록 단계별로 설명합니다.

시작하기 전에 준비할 것

봇 계정 자체는 코딩 없이 만들 수 있지만, 봇이 메시지에 답하게 하려면 Bot API를 호출하는 프로그램이 반드시 있어야 합니다. 이 글의 예제는 그 프로그램의 가장 작은 형태라고 보면 됩니다.

1단계: @BotFather에서 /newbot으로 텔레그램 봇 만들기

  1. 텔레그램에서 @BotFather를 엽니다. 이름이 비슷한 사칭 계정이 있으므로 검색보다 이 링크로 여는 편이 안전합니다.
  2. 시작(Start)을 누른 뒤 /newbot을 보냅니다.
  3. 봇의 이름(name)을 입력합니다. 대화 목록과 프로필에 보이는 표시 이름으로 한글도 쓸 수 있고, 나중에 /setname으로 바꿀 수 있습니다. 예: 날씨 알림 봇
  4. 봇의 username을 입력합니다. 5~32자의 라틴 문자, 숫자, 밑줄(_)만 쓸 수 있고 반드시 bot으로 끝나야 합니다(예: tetris_bot, TetrisBot). 대소문자는 구분하지 않으며, 이미 사용 중인 username이면 다른 이름을 요구합니다.
  5. 생성에 성공하면 BotFather가 봇 링크 t.me/<username>과 함께 HTTP API에 접근할 때 쓰는 토큰을 보내 줍니다.

username은 검색, 멘션, t.me 링크에 쓰이며 이름과 달리 나중에 변경할 수 없습니다. 서비스 이름과 맞춰 신중하게 정하십시오. 채팅 명령 대신 같은 기능을 제공하는 BotFather의 Mini App 화면을 써도 결과는 같습니다.

2단계: 봇 토큰 복사하고 안전하게 보관하기

토큰은 123456789:AAEexampleTokenReplaceWithYours처럼 숫자, 콜론(:), 영문·숫자 문자열로 이루어집니다. 콜론 앞 숫자는 봇 자신의 ID이고 뒤쪽이 비밀 값입니다. 토큰을 아는 사람은 누구나 봇을 완전히 제어할 수 있으므로 비밀번호처럼 다뤄야 합니다.

# macOS·Linux 터미널에서 현재 세션에만 등록
export TELEGRAM_BOT_TOKEN="123456789:AAEexampleTokenReplaceWithYours"

토큰 형식, 기존 토큰 찾기, 재발급 절차는 텔레그램 봇 토큰 가이드에서 자세히 다룹니다.

3단계: getMe로 토큰이 동작하는지 확인하기

모든 Bot API 요청은 https://api.telegram.org/bot<token>/메서드이름 형식입니다. 토큰 바로 앞에 bot이라는 글자가 붙는다는 점에 주의하십시오. 가장 먼저 호출할 메서드는 봇 자신의 정보를 돌려주는 getMe입니다.

curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getMe"

토큰이 올바르면 봇의 User 객체가 반환됩니다. 아래는 주요 필드만 추린 예시입니다.

{
  "ok": true,
  "result": {
    "is_bot": true,
    "first_name": "날씨 알림 봇",
    "username": "weather_alert_bot",
    "can_join_groups": true,
    "can_read_all_group_messages": false,
    "supports_inline_queries": false
  }
}

can_read_all_group_messages가 false라면 그룹 프라이버시 모드가 켜져 있다는 뜻입니다(기본값). 반대로 {"ok":false,"error_code":401,"description":"Unauthorized"}가 나오면 토큰이 틀렸거나 폐기된 것이니, 복사할 때 앞뒤 공백이나 줄바꿈이 섞이지 않았는지 확인하십시오. 터미널 없이 확인하려면 Bot API Tester의 getMe에 토큰을 붙여 넣고 실행하면 됩니다.

4단계: /start를 보내고 첫 메시지 전송하기

봇은 사용자에게 먼저 말을 걸 수 없습니다. 사용자가 대화를 시작해야 봇이 그 채팅으로 메시지를 보낼 수 있으므로, 먼저 내 계정으로 봇에게 말을 걸어 chat id를 알아냅니다.

  1. t.me/<username> 링크로 봇을 열고 시작을 누릅니다. 봇에게 /start 메시지가 전달됩니다.
  2. getUpdates를 호출해 봇이 받은 업데이트를 확인합니다.
  3. 응답에서 message.chat.id 값을 찾습니다. 이것이 나와 봇 사이 개인 채팅의 chat id입니다.
curl "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/getUpdates"
{
  "ok": true,
  "result": [
    {
      "update_id": 870000001,
      "message": {
        "message_id": 1,
        "from": {"id": 123456789, "is_bot": false, "first_name": "민준", "language_code": "ko"},
        "chat": {"id": 123456789, "first_name": "민준", "type": "private"},
        "date": 1793266200,
        "text": "/start"
      }
    }
  ]
}

chat id를 알았다면 sendMessage로 첫 메시지를 보냅니다. 한글 텍스트를 URL에 직접 넣으면 인코딩 문제가 생기기 쉬우므로 POST와 JSON 본문을 쓰는 편이 간단합니다.

curl -X POST "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{"chat_id": 123456789, "text": "안녕하세요! 첫 번째 봇 메시지입니다."}'

같은 과정을 Python으로 작성하면 다음과 같습니다. 가장 최근 메시지의 chat id를 읽어 그 채팅에 답장합니다.

import os
import requests

TOKEN = os.environ.get("TELEGRAM_BOT_TOKEN", "123456789:AAEexampleTokenReplaceWithYours")
API = f"https://api.telegram.org/bot{TOKEN}"

updates = requests.get(f"{API}/getUpdates", timeout=10).json()
if not updates["ok"]:
    raise SystemExit(f'{updates["error_code"]}: {updates["description"]}')

messages = [u["message"] for u in updates["result"] if "message" in u]
if not messages:
    raise SystemExit("메시지가 없습니다. 봇에게 /start를 먼저 보내십시오.")

chat_id = messages[-1]["chat"]["id"]
resp = requests.post(f"{API}/sendMessage",
                     json={"chat_id": chat_id, "text": "Python에서 보낸 첫 메시지입니다."},
                     timeout=10).json()
if not resp["ok"]:
    raise SystemExit(f'{resp["error_code"]}: {resp["description"]}')
print("전송 완료, message_id =", resp["result"]["message_id"])

휴대폰에 봇의 메시지가 도착했다면 텔레그램 봇 만들기의 핵심 과정은 끝났습니다. 그룹이나 채널의 chat id를 찾는 방법은 텔레그램 chat id 확인방법에, 서식과 버튼을 넣는 방법은 텔레그램 봇 API 메시지 보내기에 정리했습니다.

5단계(선택): 소개 문구와 명령어 메뉴 설정

사용자가 봇을 처음 열었을 때 무엇을 하는 봇인지 바로 알 수 있도록 프로필을 채워 둡니다. 모두 @BotFather에서 설정합니다.

명령설정 내용
/setdescription대화가 비어 있을 때 표시되는 소개 문구(최대 512자)
/setabouttext프로필 페이지에 보이고, 봇 링크를 공유할 때 함께 전송되는 짧은 소개(최대 120자)
/setuserpic프로필 사진
/setcommands입력창에 /를 입력하면 나타나는 명령어 목록
/setprivacy그룹에서 봇이 받을 메시지의 범위(프라이버시 모드)

/setcommands에서는 한 줄에 하나씩 명령어 - 설명 형식으로 입력합니다. 같은 작업을 코드로 하려면 setMyCommands를 호출합니다. 명령어는 1~32자의 영문 소문자, 숫자, 밑줄만 쓸 수 있고 설명은 1~256자이며, 한 번에 최대 100개까지 등록할 수 있습니다. language_code를 ko로 지정하면 앱 언어가 한국어인 사용자에게만 보이는 목록을 따로 둘 수 있습니다.

curl -X POST "https://api.telegram.org/bot123456789:AAEexampleTokenReplaceWithYours/setMyCommands" \
  -H "Content-Type: application/json" \
  -d '{
    "commands": [
      {"command": "start", "description": "봇 시작하기"},
      {"command": "help", "description": "사용 방법 보기"},
      {"command": "settings", "description": "알림 설정"}
    ],
    "language_code": "ko"
  }'

language_code 없이 한 번 더 호출해 기본 목록도 등록해 두면 다른 언어 사용자에게도 메뉴가 보입니다. 텔레그램은 모든 봇이 /start와 /help를, 설정 기능이 있다면 /settings도 지원하도록 권장합니다.

텔레그램 AI 봇 만들기: 무엇이 달라지나

대화형 AI 모델을 연결한 텔레그램 AI 봇도 만드는 순서는 같습니다. @BotFather로 봇을 만들고 토큰을 받은 다음, 서버 코드가 다음 작업을 반복합니다.

  1. getUpdates 또는 웹훅으로 사용자 메시지를 받습니다.
  2. 메시지 텍스트를 사용하는 AI 모델의 API에 전달합니다.
  3. 생성된 답변을 sendMessage로 같은 chat id에 보냅니다.

답변 생성에 몇 초 이상 걸린다면 개인 채팅에서 sendMessageDraft로 작성 중인 답변을 스트리밍할 수 있습니다. 같은 draft_id로 텍스트를 계속 갱신하면 변경이 애니메이션으로 이어지고, 빈 텍스트를 보내면 "Thinking..." 자리 표시가 나타납니다. 초안은 약 30초 동안만 보이는 임시 미리보기이므로 완성된 답변은 반드시 sendMessage로 다시 보내야 채팅에 남습니다. can_stop을 켜면 사용자가 생성을 멈출 수 있고, 이때 봇은 stopped_message_generation 업데이트를 받습니다.

이미 만들어진 AI 비서나 n8n 같은 자동화 도구를 텔레그램에 연결하는 경우에도 첫 단계는 이 글과 같습니다. 이런 도구는 대부분 봇 토큰과 chat id를 요구하므로 1~4단계에서 얻은 값을 그대로 입력하면 됩니다.

자주 막히는 부분

다음 단계: 폴링과 웹훅, 라이브러리, Mini App

자주 묻는 질문

텔레그램 봇 만들기는 무료인가요?

네. @BotFather에서 봇을 만들고 Bot API를 호출하는 데에는 비용이 들지 않습니다. 봇 코드를 실행할 서버 요금은 별도이며, 초당 약 30건을 넘겨 대량 발송하려고 유료 브로드캐스트(allow_paid_broadcast)를 쓸 때만 메시지당 0.1 Telegram Stars가 차감됩니다.

텔레그램 봇 username은 어떤 규칙으로 정하나요?

5~32자의 라틴 문자, 숫자, 밑줄(_)만 쓸 수 있고 반드시 bot으로 끝나야 합니다. 예: tetris_bot, TetrisBot. 이름(name)과 달리 username은 나중에 바꿀 수 없으므로 신중하게 정하십시오.

코딩을 몰라도 텔레그램 봇을 만들 수 있나요?

봇 계정은 @BotFather와 대화하는 것만으로 코딩 없이 만들 수 있습니다. 하지만 봇이 메시지에 응답하려면 Bot API를 호출하는 프로그램이 필요하므로, 직접 코드를 작성하거나 n8n 같은 자동화 도구에 봇 토큰을 연결해야 합니다.

봇이 사용자에게 먼저 메시지를 보낼 수 있나요?

아니요. 사용자가 먼저 봇과 대화를 시작(/start)하거나 봇을 그룹에 추가해야 합니다. 그 전에는 sendMessage가 보통 400 Bad Request: chat not found 오류를 반환합니다.

봇 이름이나 프로필 사진은 나중에 바꿀 수 있나요?

네. @BotFather에서 /setname으로 이름을, /setuserpic으로 프로필 사진을, /setdescription과 /setabouttext로 소개 문구를 언제든 바꿀 수 있습니다. /mybots에서 봇을 선택해 메뉴로 수정해도 됩니다.

텔레그램 AI 봇을 만들려면 무엇이 더 필요한가요?

봇 생성과 토큰 발급 과정은 같습니다. 여기에 사용자 메시지를 받아 AI 모델 API에 전달하고 답변을 sendMessage로 돌려주는 서버 코드가 필요합니다. 개인 채팅에서는 sendMessageDraft로 생성 중인 답변을 실시간으로 보여 줄 수 있습니다.

텔레그램 봇 API로 메시지 보내기: sendMessage 사용법과 예제

텔레그램 봇 API 메시지 보내기 가이드입니다. sendMessage를 curl·Python·JavaScript로 호출하는 예제, HTML·MarkdownV2 서식, 인라인 버튼, 그룹·채널 전송, 400·403·429 오류 해결법을 정리했습니다.

텔레그램 봇 토큰: 발급부터 확인, 폐기, 안전한 보관까지

텔레그램 봇 토큰을 @BotFather에서 발급받는 법, 기존 봇의 토큰 찾기, getMe로 유효성 확인, 유출 시 폐기 방법을 정리했습니다. n8n·AI 비서 연동에 필요한 bot token과 chat id도 안내합니다.

텔레그램 웹훅 설정 가이드: setWebhook, secret_token, getWebhookInfo

텔레그램 봇 웹훅 설정 방법을 단계별로 정리했습니다. setWebhook 파라미터, secret_token 헤더 검증 코드, getWebhookInfo 상태 확인, deleteWebhook으로 되돌리기, 409·HTTPS 오류 해결까지 다룹니다.

텔레그램 chat id 확인방법: 개인, 그룹, 채널, 토픽별 chat id 찾기

텔레그램 chat id 확인방법을 개인 채팅, 그룹, 슈퍼그룹, 채널, 포럼 토픽별로 정리했습니다. getUpdates로 chat id를 찾는 법, -100으로 시작하는 ID의 의미, 결과가 비어 있을 때 해결법까지 설명합니다.