텔레그램 봇 메시지 보내기 3가지 방법(curl, python)

텔레그램에서 특정 채팅방으로 메시지 보내고 싶으시죠? 매우 간단합니다. 텔레그램 봇 메시지 보내기 위한 방법 3가지 지금부터 같이 살펴보겠습니다.

텔레그램 봇 메시지 보내기 개요

텔레그램 채팅방에 메시지를 보내려면 우선 봇을 만들고, 봇이 사용할 API Key를 받아야 합니다. 그리고 텔레그램 서버에 요청해서 채팅방 ID를 얻어야 하고요. 마지막으로 텔레그램 서버에 요청해서 메시지를 보내면 됩니다.

구체적으로 서버와 통신하는 방법으로는 curl을 이용해서 보내는 방법과 python 라이브러리 requests, 그리고 python-telegram-bot으로 메시지 보내는 방법을 알아보도록 하겠습니다.

텔레그램 봇 만들기

텔레그램 봇으로 메시지를 보내려면 제일 먼저 할 일은 BotFather를 통해서 텔레그램 봇(Telegram Bot)을 만드는 일입니다.

우선 @BotFather를 검색합니다. 다른 BotFather 유사 아이디들도 나오지만 다 무시하고 인증 표시가 있는 BotFather를 선택합니다. 똑같은 이미지로 BotFather인 척 하는 봇들도 있으니 주의하시기 바랍니다.

그림 1. BotFather 검색
그림 1. BotFather 검색

BotFather를 선택하면 그림 2와 같이 BotFather로 무엇을 할 수 있는지, 관련 매뉴얼 링크 등을 안내해 주죠. START를 눌러서 BotFather와의 대화를 시작합니다.

그림 2. BotFather와의 대화 시작
그림 2. BotFather와의 대화 시작

시작하면 다양한 명령어들을 소개해 주는데, 굳이 여기에서 다 설명할 필요는 없으니 직접 확인하고 필요한 명령어를 사용하면 되겠습니다.

일단 우리는 텔레그램 봇을 만들 거기 때문에 /newbot 명령어를 사용할 것입니다. 봇의 이름을 먼저 적어 주어야 합니다. 한글이나 영문이나 상관 없습니다. 저는 “나루봇”이라고 이름을 지어봤습니다. 그 다음엔 봇의 username을 물어봅니다. narubot이라 했으나, 이미 사용 중이라고 다른 이름을 사용하라고 하네요.

그림 3. 봇의 name과 username 정하기
그림 3. 봇의 name과 username 정하기

테스트를 위해 만들 거니까, 저는 test1234tmp_bot이라고 이름을 지어봤습니다. 드디어 성공했습니다. 그림 4의 API Token은 이따가 사용할 거니까 잘 챙겨두세요.

그림 4. 봇 생성 성공 및 API Token 정보
그림 4. 봇 생성 성공 및 API Token 정보

텔레그램 봇 초대하기

봇도 어디엔가 채팅방에 초대되어 있어야 봇이 메시지를 보낼 수 있겠죠. New Group으로 새로운 대화방을 만들어도 되고, 일방향성인 Channel을 만들어도 됩니다. 저는 New Group을 사용해서 새로운 대화방을 만들 것입니다.

그림 5. 새로운 대화방 만들기
그림 5. 새로운 대화방 만들기

방 이름은 NARU TEST로 정했습니다. Next를 누릅니다.

그림 6. 그룹명 설정
그림 6. 그룹명 설정

위에서 만든 나루봇 아이디 @test1234tmp_bot을 입력해서 선택한 후, Create를 눌러줍니다.

그림 7. 텔레그램 봇 초대하기
그림 7. 텔레그램 봇 초대하기

NARU TEST라는 새로운 방에 이제 제 개인 계정과 나루봇 계정 두 계정이 멤버로 참여하고 있습니다. 만약 새로 방을 만드는 게 아니라면 기존 방에서 해당 계정을 초대해도 됩니다.

CURL로 텔레그램 채팅방에 메시지 보내기

curl로 chat_id 구하기

curl로 대화방에 메시지를 보내려면 우선 대화방의 아이디인 chat_id가 필요합니다. 이 또한 curl로 구할 수 있습니다. API_TOKEN 부분에 BotFather에서 받은 토큰을 넣어줍니다.

curl https://api.telegram.org/botAPI_TOKEN/getUpdates
ShellScript

엇, 이게 무슨 일일까요? ok는 true 값을 전달 받았는데, result에 아무것도 없습니다.

그림 8. curl로 chat id 확인하기: 실패
그림 8. curl로 chat id 확인하기: 실패

이 경우에는 봇과의 대화를 시작(/start)하고, 사용하려는 대화방에 메시지를 하나 남겨주시면 아래와 같이 응답되는 결과를 통해 chat_id를 확인할 수 있습니다. 저는 메시지도 /start를 이용했습니다.

아래에 노란 박스는 봇과의 1:1 대화창에 대한 정보이며, 오른쪽 빨간 표시에 보면 그룹명이 NARU TEST인 것을 볼 수 있습니다. 왼쪽에 있는 음수로 표기된 chat id를 사용하면 됩니다.

그림 9. curl로 chat id 확인하기: 성공
그림 9. curl로 chat id 확인하기: 성공

curl로 텔레그램 봇 메시지 보내기

이제 텔레그램 메신저로 I Love You 메시지를 보내겠습니다. API_TOKEN에는 토큰 값을 넣어주시고, CHAT_ID에는 위에서 확인한 chat id 값을 넣어주시면 됩니다.

curl https://api.telegram.org/botAPI_TOKEN/sendMessage?chat_id=CHAT_ID&text=I%20Love%20You
ShellScript

그림 10과 같이 제대로 메시지가 도착하는 걸 확인할 수 있습니다.

그림 10. 텔레그램 봇 메시지 보내기 성공
그림 10. 텔레그램 봇 메시지 보내기 성공

Python requests로 텔레그램 채팅방에 메시지 보내기

requests로 chat_id 구하기

CURL을 통해서 보내는 것에서 확인해서 아시겠지만, API는 모두 GET Method를 사용하기 때문에 Python에서도 requests를 이용하면 간단히 보낼 수 있습니다.

import requests

API_TOKEN = "6289362217:AAFKac9PwNq8DZfwA8vC2mxYCRfLgmD5Xlc"
r = requests.get(f"https://api.telegram.org/bot{API_TOKEN}/getUpdates")

def print_chat_ids(r):
  j = json.loads(r.text)
  for item in j["result"]:
    if 'message' not in item.keys():
      continue
    message = item["message"]
    if "chat" not in message.keys() or "title" not in message["chat"].keys():
      continue
    print(message["chat"]["id"], message["chat"]["title"])
Python

requests.get으로 받은 결과를 print_chat_ids에 넘겨주면 그 중에 chat title이 있는 메시지만 찾아서 chat id와 title을 출력해 줍니다. chat_id는 이런식으로 확인하면 됩니다.

requests로 텔레그램 봇 메시지 보내기

메시지를 보내는 과정은 매우 간단합니다. requests의 get 메서드로 params를 전달해 주면 메시지가 전송됩니다.

import requests

API_TOKEN = "6289362217:AAFKac9PwNq8DZfwA8vC2mxYCRfLgmD5Xlc"
url = f"https://api.telegram.org/bot{API_TOKEN}/sendMessage"
params = {
  'chat_id': -807079955,
  'text': 'I Love You',
}
r = requests.get(url, params=params)
Python

python-telegram-bot으로 텔레그램 채팅방에 메시지 보내기

python-telegram-bot으로 chat_id 구하기

마지막으로 python-telegram-bot 라이브러리를 통해서 chat_id 구하는 방법을 살펴보겠습니다.

import asyncio
import telegram
API_TOKEN = "6289362217:AAFKac9PwNq8DZfwA8vC2mxYCRfLgmD5Xlc"
bot = telegram.Bot(token=API_TOKEN)
r = asyncio.run(bot.get_updates())
for update in r:
  if update['message'] is None or update['message']['chat']['title'] is None:
    continue
  print(update['message']['chat']['id'], update['message']['chat']['title'])
Python

python-telegram-bot으로 텔레그램 봇 메시지 보내기

Python 라이브러리 python-telegram-bot은 2022년 5월 7일자로 배포된 v20부터 asyncio로 작동하기 때문에 비동기 처리를 해 주어야 합니다. 그러지 않으면 “RuntimeWarning: coroutine ‘Bot.send_message’ was never awaited”라는 메시지를 받게 됩니다.

import asyncio
import telegram
API_TOKEN = "6289362217:AAFKac9PwNq8DZfwA8vC2mxYCRfLgmD5Xlc"
bot = telegram.Bot(token=API_TOKEN)
asyncio.run(bot.send_message(chat_id=-864286208, text="I Love You"))
Python

여기까지 텔레그랫 봇 메시지 보내기 방법 3가지를 알아보았습니다. 필요한 분들께 도움이 되길 바랍니다.

관련 자료

텔레그램 API 공식 문서에서 이 외에도 자세한 사용법이 나와 있으니 더 필요한 내용이 있다면 참고하시기 바랍니다.

같이 읽으면 좋은 글

Leave a Comment