최근에 크롤링에 대해서 공부했는데 매우 쉽고 금방 써먹을 수 있어서 이를 어떻게 응용해볼까 생각하다가 텔레그램을 활용한 챗봇을 만들어보고자 본 튜토리얼을 진행하게되었습니다.

저는 VScode에서 python으로 진행했습니다.

 

순서는 다음과 같습니다.

 

1. 텔레그램 설치(토큰 값 저장)

2. 메세지 보내고 응답받기

 

 

1. 텔레그램 설치

구글 스토어에서 텔레그램을 설치합니다.

돋보기 클릭 후 'botfather' 이라고 검색한 뒤 클릭합니다.

 

'/newbot' 입력 후 새 봇 이름을 설정해줍니다. (채팅방 이름)

이제 채팅방에 접속하기 위한 봇 이름(계정 이름 같은?) 을 설정합니다 . 끝자리는 무조건 'bot'이 들어가야하며 중복 에러 발생 시 새 이름을 지어야합니다.

메세지 중간 부분에 토큰 아이디가 나오는데 이를 복사 해 두도록 합니다. 이 정보를 이용해 챗봇과 연결할 수 있습니다.

이제 나가서 다시 돋보기로 봇이름을 검색해봅니다. 아래와 같이 나올것이며 접속 후 시작 버튼을 눌러줍니다.

 

2. 메세지 보내고 응답받기

채팅방에 접속하여 아무런 메세지나 입력해도 아무 반응이 없습니다.(정상입니다)

메세지를 보내기 위해 우리는 token값과 id정보를 이용해야 하는데 token값은 알고 있으니 id정보를 얻을차례입니다.

 

이제 vscode에서 터미널에 아래 명령어로 패키지를 깔아줍니다.

 

pip install python-telegram-bot

 

그리고 아래 코드를 입력 후, 실행해봅니다.

1
2
3
4
5
6
7
import telegram
 
token = '토큰 id'
bot = telegram.Bot(token=token)
updates = bot.getUpdates()
for u in updates:
    print(u.message)
cs

에러가 날 경우 채팅방에 몇마디 입력한 뒤 다시 실행합니다. 아래와 같은 정보들이 터미널에 뜰 텐데 id값을 복사하여 역시 복사해둡니다. 제 id는 1954654082네요.

 

이제 텔레그램 봇이 자동으로 나에게 하나의 메세지를 전달해보도록 하겠습니다.

아래 코드를 입력 후 실행합니다. 

1
2
3
4
5
6
7
import telegram
 
token = "토큰 id"
id = "터미널에서 확인한 id값"
 
bot = telegram.Bot(token)
bot.sendMessage(chat_id=id, text="테스트 코드")
cs

 

텔레그램에서 "테스트 코드"라는 메세지가 도착했을겁니다.

 

이제 우리가 메세지를 보내면 응답을 받는 코드를 작성해보겠습니다.

updater, start_polling, handler함수 등이 있는데 handler함수를 조절하여 메세지 핸들러를 생성한 후 이를 디스패처 변수의 add_handler함수를 이용하면 메세지가 푸쉬되는것입니다. 

handler함수를 조정하여 간단하게 테스트해보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import telegram
from telegram.ext import Updater
from telegram.ext import MessageHandler, Filters
 
token = "토큰 값"
id = "id 값"
 
bot = telegram.Bot(token)
 
 
# updater
updater = Updater(token=token, use_context=True)
dispatcher = updater.dispatcher
#봇 
updater.start_polling()
 
def handler(update, context):
    user_text = update.message.text 
    if user_text == "ㅋㅋ"#ㅋㅋ라고 보내면 왜웃냐고 답장
        bot.send_message(chat_id=id, text="왜 웃냐"# 답장 보내기
    elif user_text == "웃겨서"
        bot.send_message(chat_id=id, text="뭐가 웃긴데?"# 답장 보내기
 
echo_handler = MessageHandler(Filters.text, handler)
dispatcher.add_handler(echo_handler)
cs

 

결과는 아래와 같습니다. 

 

매우간단하죠?

 

오늘 간단한 챗봇 기능까지 구현하였고 다음시간부터 데이터 크롤링 + 오픈API를 사용하여 다양한 기능들을 추가해보겠습니다.

+ Recent posts