텔레그램 AI 봇 만들기 – Python으로 나만의 비서 봇 구축법
카카오톡이나 슬랙 같은 메신저를 매일 사용하면서, ‘이 메신저에서 바로 AI한테 물어볼 수 있으면 좋겠다’고 생각해 본 적 있으신가요? ChatGPT 앱을 따로 열지 않아도, 평소 쓰는 메신저 안에서 AI가 즉시 답해주는 환경을 직접 만들 수 있습니다. 그 가장 쉬운 방법이 바로 텔레그램 봇입니다.
텔레그램은 봇 API가 완전히 무료이고, 문서화가 잘 되어 있어서 개인 개발자가 챗봇을 만들기에 가장 좋은 플랫폼입니다. 여기에 최근 무료 또는 저렴하게 사용할 수 있는 AI API를 연동하면, 24시간 동작하는 나만의 AI 비서를 뚝딱 만들 수 있습니다. 프로그래밍 경험이 조금이라도 있다면, 이 글을 따라 하면 오늘 안에 자신만의 AI 봇을 완성할 수 있습니다.
이 글에서는 텔레그램 봇을 처음 만드는 분도 따라 할 수 있도록, 봇 생성부터 Python 코드 작성, AI API 연동, 그리고 실전 활용 아이디어까지 단계별로 안내합니다.

텔레그램 봇이 뭔가요? 왜 텔레그램인가요?
텔레그램 봇은 텔레그램 메신저 안에서 동작하는 자동화된 프로그램입니다. 일반 사용자처럼 채팅방에 존재하지만, 사람이 아닌 서버의 프로그램이 메시지를 받아 처리하고 응답을 보냅니다. 마치 24시간 대기하는 비서가 메신저에 상주하는 것과 같습니다.
텔레그램을 선택하는 이유
다른 메신저가 아닌 텔레그램을 선택하는 데는 분명한 이유가 있습니다. 첫째, 봇 API가 완전히 무료입니다. 카카오톡 챗봇은 비즈니스 채널 등록이 필요하고, 슬랙 봇은 워크스페이스 제한이 있지만, 텔레그램은 누구나 무료로 봇을 만들고 운영할 수 있습니다.
둘째, API가 매우 단순합니다. REST API 기반이라 HTTP 요청만 보낼 줄 알면 어떤 언어로든 봇을 만들 수 있고, Python에는 python-telegram-bot이라는 훌륭한 라이브러리가 있어서 코드 몇 줄이면 동작하는 봇을 완성할 수 있습니다.
셋째, 메시지 길이 제한이 넉넉합니다. 한 메시지에 4,096자까지 보낼 수 있어서 AI의 긴 답변도 문제없이 전달됩니다. 마크다운 서식도 지원해서 코드 블록, 볼드, 링크 등을 깔끔하게 표시할 수 있습니다.
넷째, 보안이 뛰어납니다. 텔레그램은 종단간 암호화를 지원하고, 봇과의 대화도 기본적으로 암호화됩니다. 개인적인 질문을 AI에게 하더라도 상대적으로 안심할 수 있습니다.
어떤 것들을 만들 수 있나요?
텔레그램 봇으로 만들 수 있는 것은 무궁무진합니다. 대표적인 예시를 몇 가지 들어보겠습니다.
- AI 대화 비서 – ChatGPT나 Claude처럼 자연어로 질문하면 답해주는 개인 AI 비서
- 일정 알림 봇 – 매일 아침 오늘의 일정, 날씨, 뉴스를 요약해서 보내주는 봇
- 번역 봇 – 외국어 텍스트를 보내면 즉시 한국어로 번역해주는 봇
- 가계부 봇 – “커피 4500원”처럼 메시지를 보내면 자동으로 지출을 기록하는 봇
- 요약 봇 – 긴 기사나 PDF 링크를 보내면 핵심만 요약해주는 봇
- 코드 리뷰 봇 – 코드를 보내면 개선점을 알려주는 봇
이 글에서는 이 중에서 가장 활용도가 높은 AI 대화 비서 봇을 만들어 보겠습니다.
1단계: BotFather로 텔레그램 봇 생성하기
텔레그램 봇을 만드는 첫 단계는 BotFather를 통해 봇을 등록하는 것입니다. BotFather는 텔레그램이 공식적으로 제공하는 봇 관리 도구로, 새 봇의 생성, 설정 변경, 토큰 관리 등을 담당합니다.
봇 생성 절차
텔레그램 앱을 열고 검색창에 @BotFather를 입력하여 대화를 시작합니다. BotFather에게 /newbot 명령을 보내면, 봇의 이름과 사용자명을 묻는 대화가 시작됩니다.
먼저 봇의 표시 이름(display name)을 입력합니다. 이것은 채팅 목록에 보이는 이름으로, 한국어도 가능합니다. 예를 들어 “나의 AI 비서”라고 입력할 수 있습니다.
다음으로 봇의 사용자명(username)을 입력합니다. 이것은 반드시 영문이어야 하고, “bot”으로 끝나야 합니다. 예를 들어 “my_ai_helper_bot”처럼 입력합니다. 이미 누군가 사용 중인 이름이면 다른 이름을 선택해야 합니다.
등록이 완료되면 BotFather가 API 토큰을 발급해 줍니다. 이 토큰은 “1234567890:ABCdefGHIjklMNOpqrsTUVwxyz”와 같은 형식의 긴 문자열인데, 이것이 봇의 신분증이자 비밀번호입니다. 이 토큰은 절대로 외부에 공개하면 안 됩니다. 코드에 직접 쓰지 말고, 환경 변수나 별도의 설정 파일로 관리하는 것이 좋습니다.
봇 프로필 꾸미기
봇을 만들었으면 BotFather에서 추가 설정을 할 수 있습니다. /setdescription으로 봇 소개 문구를 설정하고, /setabouttext로 프로필에 표시되는 짧은 설명을 추가합니다. /setuserpic으로 프로필 사진도 설정할 수 있습니다. 이런 디테일이 봇을 더 전문적으로 보이게 만들어 줍니다.

2단계: 개발 환경 준비하기
봇 개발에 들어가기 전에 개발 환경을 세팅해야 합니다. Python 3.10 이상이 설치되어 있다면 바로 시작할 수 있습니다.
프로젝트 폴더 구성
작업할 폴더를 만들고, 가상 환경을 생성합니다. 가상 환경은 프로젝트별로 패키지를 분리 관리하기 위한 Python의 기본 기능입니다.
mkdir my-telegram-bot
cd my-telegram-bot
python -m venv venv
가상 환경을 활성화합니다. Windows라면 venv\Scripts\activate, Mac이나 Linux라면 source venv/bin/activate를 실행합니다.
필수 패키지 설치
다음 세 가지 패키지를 설치합니다.
pip install python-telegram-bot openai python-dotenv
- python-telegram-bot – 텔레그램 봇 API를 Python에서 쉽게 사용할 수 있게 해주는 공식 권장 라이브러리입니다. 비동기(async) 방식으로 동작해서 여러 사용자의 메시지를 동시에 처리할 수 있습니다.
- openai – OpenAI의 GPT API를 호출하기 위한 공식 라이브러리입니다. Claude나 다른 AI를 사용할 경우 해당 SDK로 대체하면 됩니다.
- python-dotenv – .env 파일에서 환경 변수를 읽어오는 라이브러리입니다. API 토큰을 코드에 직접 쓰지 않기 위해 사용합니다.
환경 변수 설정
프로젝트 폴더에 .env 파일을 만들고, API 토큰들을 저장합니다.
TELEGRAM_BOT_TOKEN=여기에_BotFather에서_받은_토큰
OPENAI_API_KEY=여기에_OpenAI_API_키
이 .env 파일은 반드시 .gitignore에 추가하여 실수로 GitHub 등에 올라가지 않도록 해야 합니다. API 키가 유출되면 요금 폭탄이나 보안 사고로 이어질 수 있습니다.
3단계: 기본 에코 봇 만들기
본격적으로 AI를 붙이기 전에, 먼저 사용자가 보낸 메시지를 그대로 되돌려 보내는 에코 봇을 만들어서 기본 구조를 이해해 보겠습니다.
bot.py 기본 코드
import os
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
load_dotenv()
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"안녕하세요! 저는 AI 비서 봇입니다. 무엇이든 물어보세요."
)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_message = update.message.text
await update.message.reply_text(f"받은 메시지: {user_message}")
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, echo))
print("봇이 시작되었습니다...")
app.run_polling()
if __name__ == "__main__":
main()
코드 구조를 하나씩 살펴보겠습니다. Application은 봇 애플리케이션의 핵심 객체입니다. 여기에 핸들러(handler)를 등록해서, 특정 유형의 메시지가 들어왔을 때 어떤 함수를 실행할지 지정합니다.
CommandHandler는 /start, /help 같은 슬래시 명령을 처리합니다. MessageHandler는 일반 텍스트 메시지를 처리합니다. filters.TEXT는 텍스트 메시지만, ~filters.COMMAND는 명령이 아닌 것만 필터링합니다.
run_polling()은 텔레그램 서버에 주기적으로 “새 메시지 있나요?”라고 물어보는 방식(롱 폴링)으로 메시지를 받습니다. 개발 단계에서 가장 간편한 방식이고, 서버 설정 없이도 동작합니다.
이 코드를 python bot.py로 실행한 뒤, 텔레그램에서 자신의 봇을 찾아 /start를 보내보세요. 인사 메시지가 오고, 아무 텍스트나 보내면 그대로 되돌려 보낼 것입니다. 여기까지 성공했다면, 봇의 기본 골격은 완성된 것입니다.
4단계: AI API 연동하기
이제 에코 봇을 AI 비서 봇으로 업그레이드할 차례입니다. 사용자의 메시지를 AI API에 전달하고, AI의 답변을 텔레그램으로 보내주면 됩니다.
AI API 선택 가이드 (2026년 기준)
2026년 현재 개인 프로젝트에서 활용할 수 있는 AI API는 여러 가지입니다. 각각의 특징을 비교해 보겠습니다.
- OpenAI GPT-4o mini – 가장 대중적인 선택입니다. 입력 100만 토큰당 약 0.15달러로 매우 저렴하면서도 성능이 우수합니다. 일상적인 대화나 질문 답변에 충분합니다.
- Anthropic Claude 3.5 Haiku – 빠른 응답 속도와 정확한 한국어 처리가 강점입니다. 긴 문맥을 잘 유지해서 대화가 길어져도 앞뒤 맥락을 놓치지 않습니다.
- Google Gemini Flash – 구글 AI Studio에서 무료 tier를 제공합니다. 분당 요청 수 제한이 있지만, 개인 사용 수준에서는 충분합니다.
- 로컬 LLM (Ollama) – 비용이 전혀 들지 않지만, GPU가 있는 PC가 필요하고 응답 속도가 느릴 수 있습니다. 이전 포스트에서 다뤘던 Ollama를 활용하면 됩니다.
이 글에서는 가장 보편적인 OpenAI API를 기준으로 설명하되, 다른 API로 교체하는 방법도 함께 안내합니다.

AI 비서 봇 전체 코드
에코 봇을 AI 비서 봇으로 확장한 전체 코드입니다.
import os
from dotenv import load_dotenv
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from openai import OpenAI
load_dotenv()
TOKEN = os.getenv("TELEGRAM_BOT_TOKEN")
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
# 사용자별 대화 히스토리 저장
conversation_history = {}
SYSTEM_PROMPT = """당신은 친절하고 도움이 되는 한국어 AI 비서입니다.
사용자의 질문에 정확하고 이해하기 쉽게 답변합니다.
필요하면 예시를 들어 설명하고, 핵심을 먼저 말한 뒤 부연합니다."""
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_id = update.effective_user.id
conversation_history[user_id] = []
await update.message.reply_text(
"안녕하세요! AI 비서 봇입니다.\n"
"무엇이든 물어보세요.\n\n"
"/reset - 대화 초기화\n"
"/help - 도움말"
)
async def reset(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_id = update.effective_user.id
conversation_history[user_id] = []
await update.message.reply_text("대화가 초기화되었습니다. 새로운 주제로 시작하세요!")
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_id = update.effective_user.id
user_message = update.message.text
# 대화 히스토리 초기화 (처음 대화하는 사용자)
if user_id not in conversation_history:
conversation_history[user_id] = []
# 사용자 메시지를 히스토리에 추가
conversation_history[user_id].append(
{"role": "user", "content": user_message}
)
# 히스토리가 너무 길어지면 최근 20개만 유지
if len(conversation_history[user_id]) > 20:
conversation_history[user_id] = conversation_history[user_id][-20:]
# '입력 중...' 표시
await context.bot.send_chat_action(
chat_id=update.effective_chat.id, action="typing"
)
try:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
*conversation_history[user_id]
],
max_tokens=2000,
temperature=0.7
)
ai_reply = response.choices[0].message.content
# AI 답변을 히스토리에 추가
conversation_history[user_id].append(
{"role": "assistant", "content": ai_reply}
)
# 텔레그램 메시지 길이 제한(4096자) 처리
if len(ai_reply) > 4000:
for i in range(0, len(ai_reply), 4000):
await update.message.reply_text(ai_reply[i:i+4000])
else:
await update.message.reply_text(ai_reply)
except Exception as e:
await update.message.reply_text(
f"죄송합니다. 오류가 발생했습니다: {str(e)}"
)
def main():
app = Application.builder().token(TOKEN).build()
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("reset", reset))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
print("AI 비서 봇이 시작되었습니다...")
app.run_polling()
if __name__ == "__main__":
main()
코드 핵심 포인트 해설
이 코드에서 가장 중요한 부분은 대화 히스토리 관리입니다. conversation_history 딕셔너리에 사용자 ID별로 이전 대화를 저장하고, AI API를 호출할 때 이 히스토리를 함께 전달합니다. 이렇게 하면 AI가 이전 대화 맥락을 기억하며 답변할 수 있습니다.
예를 들어 사용자가 “파이썬이 뭐야?”라고 물은 뒤 “그걸로 뭘 만들 수 있어?”라고 이어서 물으면, 히스토리 덕분에 AI는 “그것”이 파이썬을 가리킨다는 것을 알고 적절히 답변합니다.
히스토리 길이 제한(20개)은 비용과 성능을 위한 것입니다. 대화가 길어지면 API에 보내는 토큰 수가 늘어나 비용이 증가하고 응답도 느려집니다. 최근 20개 메시지면 충분한 맥락을 유지하면서도 비용을 합리적으로 관리할 수 있습니다.
send_chat_action(“typing”)은 사용자에게 봇이 응답을 준비 중이라는 것을 시각적으로 보여줍니다. AI API 호출에 2~5초 정도 걸릴 수 있으므로, 이 표시가 없으면 사용자가 봇이 멈춘 것으로 오해할 수 있습니다.
시스템 프롬프트는 AI의 성격과 행동 방식을 정의합니다. 이 부분을 바꾸면 봇의 성격을 완전히 다르게 만들 수 있습니다. 예를 들어 영어 선생님 봇, 요리 전문가 봇, 운동 코치 봇 등 원하는 캐릭터로 설정할 수 있습니다.
다른 AI API로 교체하는 방법
OpenAI 대신 다른 AI를 사용하고 싶다면, API 호출 부분만 바꾸면 됩니다. Anthropic Claude를 사용하는 경우 다음과 같이 수정합니다.
# pip install anthropic
from anthropic import Anthropic
client = Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
# handle_message 함수 내부
response = client.messages.create(
model="claude-haiku-4-5-20251001",
max_tokens=2000,
system=SYSTEM_PROMPT,
messages=conversation_history[user_id]
)
ai_reply = response.content[0].text
Ollama 로컬 LLM을 사용하려면 OpenAI 라이브러리의 base_url만 변경하면 됩니다.
client = OpenAI(
base_url="http://localhost:11434/v1",
api_key="ollama" # 아무 값이나 넣어도 됨
)
# model을 "llama3" 등 설치된 모델명으로 변경
이렇게 코드 구조를 잘 분리해 두면, 나중에 더 좋은 AI 모델이 나왔을 때 간단히 교체할 수 있습니다.
5단계: 실전 기능 확장하기
기본 AI 대화 봇이 완성되었으니, 이제 실제로 유용하게 쓸 수 있는 기능들을 추가해 보겠습니다.
기능 1: 음성 메시지 처리
텔레그램의 음성 메시지를 텍스트로 변환해서 AI에게 전달하는 기능입니다. 타이핑이 귀찮을 때 말로 질문할 수 있어서 매우 편리합니다.
from telegram.ext import MessageHandler, filters
async def handle_voice(update: Update, context: ContextTypes.DEFAULT_TYPE):
# 음성 파일 다운로드
voice = await context.bot.get_file(update.message.voice.file_id)
voice_path = f"voice_{update.effective_user.id}.ogg"
await voice.download_to_drive(voice_path)
# Whisper API로 텍스트 변환
with open(voice_path, "rb") as audio_file:
transcript = client.audio.transcriptions.create(
model="whisper-1",
file=audio_file,
language="ko"
)
# 변환된 텍스트를 AI에게 전달
update.message.text = transcript.text
await handle_message(update, context)
os.remove(voice_path) # 임시 파일 삭제
# main()에 추가
app.add_handler(MessageHandler(filters.VOICE, handle_voice))
OpenAI의 Whisper API를 사용하면 한국어 음성도 높은 정확도로 인식합니다. 분당 약 0.006달러 수준의 비용이며, 하루에 수십 건 정도는 부담 없이 사용할 수 있는 수준입니다.
기능 2: URL 요약 기능
뉴스 기사나 블로그 포스트 URL을 보내면 내용을 요약해주는 기능입니다. 이동 중에 긴 글을 읽기 어려울 때 유용합니다.
import re
import httpx
from bs4 import BeautifulSoup
async def summarize_url(url: str) -> str:
"""URL의 본문 텍스트를 추출하여 AI로 요약"""
async with httpx.AsyncClient() as http_client:
resp = await http_client.get(url, follow_redirects=True)
soup = BeautifulSoup(resp.text, "html.parser")
# 본문 텍스트 추출
for tag in soup(["script", "style", "nav", "footer"]):
tag.decompose()
text = soup.get_text(separator="\n", strip=True)[:5000]
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "주어진 웹페이지 내용을 한국어로 3~5문장으로 핵심만 요약하세요."},
{"role": "user", "content": text}
],
max_tokens=500
)
return response.choices[0].message.content
handle_message 함수에서 URL이 포함된 메시지를 감지하면 이 함수를 호출하도록 분기 처리를 추가하면 됩니다. 정규식 re.search(r’https?://\S+’, user_message)로 URL을 감지할 수 있습니다.
기능 3: 이미지 분석 기능
사진을 보내면 AI가 이미지를 분석해서 설명해주는 기능입니다. GPT-4o나 Claude 같은 멀티모달 AI 모델이 이를 지원합니다.
import base64
async def handle_photo(update: Update, context: ContextTypes.DEFAULT_TYPE):
photo = update.message.photo[-1] # 가장 큰 사이즈
file = await context.bot.get_file(photo.file_id)
photo_path = f"photo_{update.effective_user.id}.jpg"
await file.download_to_drive(photo_path)
with open(photo_path, "rb") as f:
image_data = base64.b64encode(f.read()).decode()
caption = update.message.caption or "이 이미지를 설명해 주세요."
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": caption},
{"type": "image_url", "image_url": {
"url": f"data:image/jpeg;base64,{image_data}"
}}
]
}],
max_tokens=1000
)
await update.message.reply_text(response.choices[0].message.content)
os.remove(photo_path)
app.add_handler(MessageHandler(filters.PHOTO, handle_photo))
이 기능을 활용하면 음식 사진을 찍어서 칼로리를 물어보거나, 외국어 간판 사진을 보내서 번역을 요청하거나, 수학 문제 사진을 보내서 풀이를 요청하는 등 다양한 활용이 가능합니다.
기능 4: 사용량 제한과 비용 관리
AI API는 사용량에 따라 비용이 발생하므로, 무제한으로 사용할 수 있게 두면 예상치 못한 비용이 발생할 수 있습니다. 간단한 사용량 제한 기능을 추가하는 것이 좋습니다.
from datetime import datetime, timedelta
# 사용자별 일일 사용량 추적
usage_tracker = {}
DAILY_LIMIT = 50 # 하루 최대 50회
def check_usage(user_id: int) -> bool:
now = datetime.now()
if user_id not in usage_tracker:
usage_tracker[user_id] = {"count": 0, "reset_at": now + timedelta(days=1)}
tracker = usage_tracker[user_id]
if now > tracker["reset_at"]:
tracker["count"] = 0
tracker["reset_at"] = now + timedelta(days=1)
if tracker["count"] >= DAILY_LIMIT:
return False
tracker["count"] += 1
return True
handle_message 함수 시작 부분에 이 체크를 추가하면, 일일 사용량을 초과한 경우 안내 메시지를 보내고 API 호출을 하지 않도록 할 수 있습니다.
6단계: 봇을 24시간 실행하기
개발은 끝났지만, PC를 끄면 봇도 멈춥니다. 24시간 동작하는 봇을 위한 몇 가지 방법을 알아보겠습니다.
방법 1: 집에 있는 NAS나 미니 PC 활용
이미 시놀로지 NAS나 라즈베리 파이 같은 홈 서버가 있다면, Docker로 봇을 실행하는 것이 가장 좋은 방법입니다. 추가 비용이 들지 않고, 데이터도 집에 보관할 수 있습니다.
Dockerfile을 작성합니다.
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "bot.py"]
requirements.txt 파일에 필요한 패키지를 정리하고, 다음 명령으로 빌드 및 실행합니다.
docker build -t my-ai-bot .
docker run -d --name ai-bot --restart unless-stopped --env-file .env my-ai-bot
–restart unless-stopped 옵션 덕분에 NAS가 재부팅되어도 봇이 자동으로 다시 시작됩니다.
방법 2: 무료 클라우드 서비스 활용
홈 서버가 없다면 무료 클라우드 서비스를 활용할 수 있습니다. Oracle Cloud Free Tier는 ARM 기반 인스턴스를 영구 무료로 제공합니다. 4코어 24GB RAM까지 무료이므로, 텔레그램 봇 정도는 넉넉하게 돌릴 수 있습니다.
Fly.io도 소규모 앱에 무료 크레딧을 제공하며, 배포가 매우 간편합니다. fly.toml 설정 파일 하나로 전 세계 어디서든 접근 가능한 서버에 봇을 띄울 수 있습니다.
Railway는 월 5달러 크레딧을 무료로 제공하며, GitHub 저장소와 연결하면 코드를 push할 때마다 자동으로 재배포됩니다. 봇을 업데이트하기가 매우 편리합니다.
방법 3: 집 PC에서 백그라운드 실행
가장 간단한 방법은 집 PC에서 항상 실행해 두는 것입니다. Windows라면 시작 프로그램에 등록하거나, 작업 스케줄러를 이용해서 PC가 켜질 때 자동으로 봇을 시작하도록 설정할 수 있습니다. 다만 PC를 끄면 봇도 멈추므로, 안정적인 운영에는 앞의 두 방법이 더 적합합니다.
비용은 얼마나 들까?
비용이 가장 궁금하실 텐데, 개인 사용 수준에서는 거의 무시할 수 있는 수준입니다. 하루 평균 30회 정도 대화한다고 가정하면 다음과 같습니다.
- 텔레그램 봇 API – 완전 무료
- GPT-4o mini – 월 약 0.5~1달러 (한화 약 700~1,400원)
- Claude Haiku – 월 약 0.3~0.8달러 (한화 약 400~1,100원)
- Gemini Flash (무료 티어) – 0원
- Ollama 로컬 LLM – 0원 (전기료 제외)
- 서버 운영 – Docker/NAS 또는 Oracle Cloud 무료 티어 사용 시 0원
즉, 한 달에 커피 한 잔 값도 안 되는 비용으로 24시간 AI 비서를 운영할 수 있습니다. GPT-4o 같은 고성능 모델을 사용하면 비용이 좀 더 올라가지만, 대부분의 일상적인 질문에는 mini 모델로 충분합니다.
실전 활용 시나리오 5가지
만들어 놓고 활용 방법을 모르면 의미가 없겠죠. 실제로 유용하게 쓸 수 있는 시나리오 다섯 가지를 소개합니다.
시나리오 1: 출퇴근 브리핑 봇
시스템 프롬프트를 수정하고 스케줄러를 추가하면, 매일 아침 7시에 오늘의 날씨, 뉴스 헤드라인, 일정 요약을 자동으로 보내주는 브리핑 봇으로 만들 수 있습니다. python-telegram-bot의 JobQueue 기능을 사용하면 정해진 시간에 메시지를 보내는 것이 가능합니다.
시나리오 2: 영어 공부 파트너
시스템 프롬프트에 “사용자가 한국어로 말하면 영어로 번역해주고, 영어로 말하면 문법을 교정해 줘”라고 설정하면 즉석 영어 선생님이 됩니다. 출퇴근길에 영어 한 문장씩 보내면서 교정받는 식으로 활용하면 효과적입니다.
시나리오 3: 레시피 추천 봇
“냉장고에 있는 재료를 말하면 그걸로 만들 수 있는 요리를 추천해 줘”라는 시스템 프롬프트면 충분합니다. 사진 분석 기능까지 연동하면, 냉장고 사진을 찍어서 보내기만 해도 요리를 추천받을 수 있습니다.
시나리오 4: 독서 노트 정리 봇
책을 읽으면서 인상 깊은 구절이나 생각을 봇에게 보내면, AI가 자동으로 정리하고 주제별로 분류해 줍니다. 데이터베이스(SQLite 등)를 연동하면, 나중에 “지난달에 읽은 책에서 리더십 관련 내용 정리해 줘”라고 요청하는 것도 가능합니다.
시나리오 5: 코딩 도우미 봇
시스템 프롬프트를 “Python 전문 개발자로서 코드 리뷰와 디버깅을 도와줘”로 설정하면, 에러 메시지를 붙여넣기만 해도 원인과 해결 방법을 알려주는 코딩 도우미가 됩니다. 마크다운 지원 덕분에 코드 블록도 깔끔하게 표시됩니다.
보안 주의사항
텔레그램 봇을 운영할 때 반드시 주의해야 할 보안 사항들이 있습니다.
- API 토큰 관리 – 텔레그램 봇 토큰과 AI API 키는 절대 코드에 직접 쓰지 마세요. 환경 변수나 .env 파일로 관리하고, GitHub에 올릴 때는 반드시 .gitignore에 추가하세요.
- 사용자 제한 – 봇을 나만 사용하려면, 허용된 사용자 ID만 응답하도록 화이트리스트를 구현하세요. update.effective_user.id를 체크하는 간단한 if문이면 충분합니다.
- 입력 검증 – 사용자가 보내는 메시지를 AI에 전달하기 전에 길이 제한을 두세요. 악의적으로 매우 긴 메시지를 보내면 API 비용이 급증할 수 있습니다.
- 민감 정보 주의 – AI API에 전달되는 대화 내용은 해당 서비스 제공자의 서버를 경유합니다. 개인정보나 민감한 업무 내용은 보내지 않는 것이 좋습니다. 프라이버시가 중요하다면 Ollama 로컬 LLM을 사용하세요.
마무리: 나만의 AI 비서, 오늘 바로 만들어 보세요
텔레그램 봇과 AI API를 조합하면, 놀라울 정도로 적은 코드와 비용으로 24시간 동작하는 개인 AI 비서를 만들 수 있습니다. 이 글에서 소개한 기본 구조만 갖춰 두면, 이후에는 본인의 필요에 맞게 얼마든지 기능을 확장할 수 있습니다.
프로그래밍 경험이 적더라도 걱정하지 마세요. 이 글의 코드를 그대로 복사해서 토큰만 바꿔 넣으면 바로 동작합니다. 그리고 봇을 만드는 과정 자체가 Python과 API를 배우는 좋은 방법이기도 합니다.
텔레그램 봇의 세계는 생각보다 넓습니다. 인라인 키보드, 웹앱 연동, 결제 기능 등 텔레그램이 제공하는 다양한 기능을 활용하면, 단순한 채팅 봇을 넘어 본격적인 서비스까지 만들 수 있습니다. 오늘 작은 에코 봇에서 시작해서, 점점 더 똑똑한 나만의 AI 비서를 키워 나가 보세요.
이미지는 Leonardo AI 로 생성되었습니다.
이미지는 Claude AI 로 생성되었습니다.


