API/Telegram

[Telegram Bot API] 1. Bot 생성 및 API Key, Bot id 얻기(python)

hzoooo 2021. 10. 3. 07:21

카카오톡으로 공모주 정보를 전달하려는데, 너무 제약이 많다.

카카오톡 채널을 생성하고 친구 추가한 모두에게 메시지를 전송하려면 건당 금액이 들고,

친구에게 보내는 API는 너무 제한적이어서(친구가 KaKao Developers 가입 및 애플리케이션에 가입) 사용이 불가능한 API이기 때문에,

openCV를 이용하여 화면을 제어하여 자동화 하려고 했으나 로컬이 아닌 서버에서 했을 때 자동화가 불가능할 것 같아서,

텔레그램, 슬랙 중 먼저 텔레그램 봇을 생성하려고 한다.

 

1. 텔레그램에서 봇 생성 후 API Key 발급하기

더보기
[사진 1] BotFather 검색 후 대화 시작하기

 

web, app 상관 없이, 'botFather'를 검색해서, 녹색 체크박스가 아닌 파랑 체크가 붙은 아이디를 더블 클릭하여 대화를 시작하고,

START 버튼을 누르면 위와 같이 command들이 나온다.

 

여기서 /newbot을 누르거나, 직접 검색하자.

 

[사진 2] 봇 생성하기

 

Step 1: 봇 이름을 설정하고

Step 2: 그다음 봇의 username을 정하는데 끝을 bot으로 설정한 상태로 이름을 설정해야 된다.

Step 1, 2를 완료하면, 생성한 봇의 토큰(API Key)을 받게 되는데, json파일이나 config.yaml 파일과 같이 암호화할 수 있는 파일에 넣어두자.

 

[사진 3] 봇 정보 확인하기

 

만약 봇 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

[사진 4] Telegram Bot API requests

 

위 사진과 같이 텔레그램 봇 API는 https://api.telegram.org/bot<bot_token>/METHOD_NAME 형식으로,

URL query String으로 HTTPS Query를 보내야 한다.

또한, request는 GET&POST 방법을 지원하며 response는 JSON 객체로 리턴되며 'ok' 필드와 'result' 필드로 구성된다고 한다.

 

[사진 5] Telegram Bot API : getMe

 

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()))
[사진 6] html requests를 이용하여 id 받아오기

 

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
[사진 7] telegram 라이브러리를 이용하여 id 받아오기

 

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

 

[사진 8] 두 방법으로 얻어 온 아이디가 똑같은지, double check

 

두 방법 모두 잘 작동하며, 동일한 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가 제공되고 있는 것 같아서,

다른 기능이 기능들도 잘 될 거라고 생각(메시지 전송 및 서버와 연동하는 과정에서)하여 미리 블로그 포스팅하였다.

 

사실 블로그 포스팅할 때 글을 대충 쓰고 싶지 않아서 글 하나를 쓰는데 시간을 많이 쓰기 때문에 공모주 알리미 만들 시간이 줄어드는데,

매사에 대충대충 하는 걸 지극히 싫어해서 열심히 쓰고 있다.

좀 바보 같지만, 누군가에게 꼭 도움이 돼서 다른 사람들 개발 블로그처럼 댓글이 많이 달리는 날까지 화이팅👊👊👊