API를 문서를 읽지 않고, 도전하는 개발자의 실수
# 사전준비 #
가. 텔레그램 계정 : 기존 보유자도 Setting(환경설정)에서 '@' 로 시작하는 이름이 있는지 확인. 없다면 '편집'에서 Username에 입력하면, @홍길동 으로 등록
나. 챗 검색에서 'BotFather'를 검색한후, New Bot 을 생성하고, 아래 그림에서 가려진 부분이 토큰(Token)값임.
다. 챗 검색으로 나와, New Bot을 검색한 후, 대화 1~2개를 던짐
라. 텔레그램은 채팅방마다 Chat-ID를 부여하는데, 나와 Bot의 Chat-id를 찾아야 함
브라우저창에 'https://api.telegram.org/Bot생성시 받은 TOKEN값/getUpdates' 을 입력하면 결과 나옴
(아래의 id 가 Chat-ID 값임)
{"ok":true,"result":[{"update_id":770558652,
"message":{"message_id":3,"from":{"id":5113991,"is_bot":false,"first_name":"Kam","last_name":"dh","username":"teleno0","language_code":"ko"},"chat":{"id":5113991,"first_name":"Kam","last_name":"dh","username":"teleno0","type":"private"},"date":1677135418,"text":"Fjdjdjd"}}]}
여기서 잠깐 트러블 슈팅!!!
저 화면이 안나오는 경우는 2가지
하나. ok는 정상인데, 아래와 깉이 id 값이 없음. 이럴 때는 다시 Bot에게 대화를 한 후 브라우저에 동일하게 접속하면 나옴
{"ok":true,"result":{"id":603078,"is_bot":true,"first_name":"Tellm0","username":"Tellm0_bot","can_join_groups":true,"can_read_all_group_messages":false,"supports_inline_queries":false}}
둘. 토큰값 잘못 입력.
브라우저에 입력할 'https://api.telegram.org/Bot생성시 받은 TOKEN값/getUpdates' 에서 Token값에는 '603~~Xc0' 앞에 'bot'이라는 접두어를 붙어야 한다. 만약 그래도 오류가 나면, 값을 타이핑치지 말고 복사&붙여넣기로 입력..
# 대화시도 #
import telegram, asyncio # 정책변경으로 async만 가능
CHAT_ID = '5113996' # 상수는 대문자로 선언
TELE_TOKEN = '6030794********dXc0' # 상수는 대문자로 선언
async def send_text(bot, text) :
await bot.send_message(CHAT_ID, text)
msg = 'new is start yes'
bot = telegram.Bot(token=TELE_TOKEN)
asyncio.run(send_text(bot, msg))
사전 확인한 CHAT_ID와 토큰으로 메시지를 보내면 된다. crontab 등으로 특정시간대가 되면, 웹크롤링을 수행하여 텔레그램으로 전달해주면 일일이 사이트를 조사할 필요없이 편리하게 이용 가능할 것 같다. 다른 예제들로는 Bot에게 특정어를 입력하면 해당 업무를 수행할 수 있도록 개발할 수도 있다.
# 트러블 슈팅 #
telegram.error.Forbidden: Forbidden: bot can't send messages to bots
Bot이 Bot에게 메시지를 전달할 수없다. 아마 여러분이 이용하고 입력한 CHAT_ID가 사용자나 사용자와 대화하고 있는 채팅방ID가 아닌 BotID일 수 있다. 다시 확인해보자.
RuntimeWarning: coroutine 'Bot.send_message' was never awaited
텔레그램 정책 변경으로 동기방식의 메시지 전송이 불가능하다. 인터넷의 대부분의 예제가
bot = telegram.Bot(token=TELE_TOKEN)
bot.send_message(CHAT_ID, msg)
이와 유사한데, 이제는 이렇게 보낼 수 없다. 위의 방식대로 asyncio.run()을 이용한 비동기 방식을 이용하자.
'개발자 넋두리 > 파이썬(Python)' 카테고리의 다른 글
(업무자동화) 파이썬 XPATH 활용법(예제 포함), 쓰레드 등 (5/5) (0) | 2023.03.08 |
---|---|
(업무자동화) 별첨. 파이썬 문제 해결 사례 (0) | 2023.03.06 |
(업무자동화) 별첨. 파이썬 웹로딩 기다리는 방법2가지 (0) | 2023.03.02 |
(업무자동화) 파이썬 selenium을 활용한 게시글 읽기(4/5) (0) | 2023.02.28 |
(업무자동화) 파이썬 네이버 메일 보내기(3/5) (0) | 2023.02.27 |