[Telegram Bot API] 1. Bot 생성 및 API Key, Bot id 얻기(python)
카카오톡으로 공모주 정보를 전달하려는데, 너무 제약이 많다.
카카오톡 채널을 생성하고 친구 추가한 모두에게 메시지를 전송하려면 건당 금액이 들고,
친구에게 보내는 API는 너무 제한적이어서(친구가 KaKao Developers 가입 및 애플리케이션에 가입) 사용이 불가능한 API이기 때문에,
openCV를 이용하여 화면을 제어하여 자동화 하려고 했으나 로컬이 아닌 서버에서 했을 때 자동화가 불가능할 것 같아서,
텔레그램, 슬랙 중 먼저 텔레그램 봇을 생성하려고 한다.
1. 텔레그램에서 봇 생성 후 API Key 발급하기

web, app 상관 없이, 'botFather'를 검색해서, 녹색 체크박스가 아닌 파랑 체크가 붙은 아이디를 더블 클릭하여 대화를 시작하고,
START 버튼을 누르면 위와 같이 command들이 나온다.
여기서 /newbot을 누르거나, 직접 검색하자.

Step 1: 봇 이름을 설정하고
Step 2: 그다음 봇의 username을 정하는데 끝을 bot으로 설정한 상태로 이름을 설정해야 된다.
Step 1, 2를 완료하면, 생성한 봇의 토큰(API Key)을 받게 되는데, json파일이나 config.yaml 파일과 같이 암호화할 수 있는 파일에 넣어두자.

만약 봇 Token을 까먹거나, 수정사항이 있다면 /mybots를 선택하거나 입력하여 재확인할 수 있다.
2. Bot Id 가져오기(HTML Request)
Telegram Bot API
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
core.telegram.org

위 사진과 같이 텔레그램 봇 API는 https://api.telegram.org/bot<bot_token>/METHOD_NAME 형식으로,
URL query String으로 HTTPS Query를 보내야 한다.
또한, request는 GET&POST 방법을 지원하며 response는 JSON 객체로 리턴되며 'ok' 필드와 'result' 필드로 구성된다고 한다.

getMe 함수 : 1번에서 발급한 bot의 API key를 이용하여, parameter 없이 User 객체를 리턴 받으며,
Telegram Bot API
The Bot API is an HTTP-based interface created for developers keen on building bots for Telegram. To learn how to create…
core.telegram.org
위 레퍼런스를 확인하면, User 객체 내에 id와 bot 여부인지 등의 정보를 담고 있으므로, 봇 아이디를 얻을 수 있다.
import requests
def get_bot_id_html():
# get_telegram_api_key() 함수로 bot api key를 얻어옴.
url = 'https://api.telegram.org/bot' + get_telegram_api_key() + '/getMe'
response = requests.get(url, params='')
if response.json()['ok'] == True:
print('id 받아오기 성공')
result = response.json()['result']
bot_id = result['id']
return bot_id
else:
print('id 받아오기 실패' + str(response.json()))

Reference에서 제공한 방법 그대로, GET Method를 이용하여, id를 받아왔다.
하지만, 더 쉬운 방법도 있었다. 3번을 보자.
3. Bot Id 가져오기(telegram 라이브러리 이용) - 쉬운 방법, 추천
먼저, 패키지를 설치하자.
- pip install python-telegram-bot
이후, 위에서 길게 설명해둔 방법과 같이 https://api.telegram.org/bot<bot_token>/METHOD_NAME 형식의 뒷부분인 메서드들을,
import telegram을 하여 쉽게 사용할 수 있다.
import telegram
def get_bot_id():
bot_token = get_telegram_api_key()
bot = telegram.Bot(token=bot_token)
me = bot.getMe()
bot_id = me['id']
return bot_id

라이브러리를 이용하면, 더 쉽게 id를 얻을 수 있다!

두 방법 모두 잘 작동하며, 동일한 ID를 받아온다.(ID는 고윳값이기 때문에 당연한 결과이긴 하다😅)
4. 오류 <AttributeError: module 'telegram' has no attribute 'Bot'>
1) python script 파일 이름이 telegram.py 이거나, telegram 폴더 내 script 파일 일 경우
- 나 같은 경우, src/reminder/telegram.py 였기 때문에, 위와 같은 오류 코드를 얻어서 몇 번의 구글링 후에 telegram_bot.py로 이름을 변경해서 다음과 같은 오류를 해결하였다.
2) uninstall 후 reinstall 하기
- pip uninstall python-telegram-bot telegram
- pip install python-telegram-bot
Error: AttributeError: module 'telegram' has no attribute 'Bot'
Hello, working in Python. When: 1. import telegram 2. bot = [telegram.Bot](https://telegram.Bot)(token="xxxxxxxxxxxxxxxxxxxxxxxxxxx") I get the...
www.reddit.com
카카오톡 API를 사용하다가 텔레그램을 사용하니 API 사용법도 어느 정도 익혀있을 뿐만 아니라,
카카오에 비해 너무 편리하게 API가 제공되고 있는 것 같아서,
다른 기능이 기능들도 잘 될 거라고 생각(메시지 전송 및 서버와 연동하는 과정에서)하여 미리 블로그 포스팅하였다.
사실 블로그 포스팅할 때 글을 대충 쓰고 싶지 않아서 글 하나를 쓰는데 시간을 많이 쓰기 때문에 공모주 알리미 만들 시간이 줄어드는데,
매사에 대충대충 하는 걸 지극히 싫어해서 열심히 쓰고 있다.
좀 바보 같지만, 누군가에게 꼭 도움이 돼서 다른 사람들 개발 블로그처럼 댓글이 많이 달리는 날까지 화이팅👊👊👊