티스토리 뷰
텔레그램 봇을 만들자
사용자에게 메세지를 푸시해 줄 수 있고 API를 쉽게 사용할 수 있는 텔레그램을 택했다.
우선 갓파더 말론 브란도 닮은 봇파더로 들어가 텔레그램으로 봇을 만든다.
그럼 Bot Token을 발급해 주는데, 이 토큰으로 봇을 요리볶고 조리볶고 할 수 있다.
일반적인 봇 처럼 대화형식으로 만들려면 여기에 친절하게 설명되어 있다.
하지만 대화하는 봇이 아닌 단순 알리미 봇이기에 조금 다른 방법으로 접근해야 했다.
https://api.telegram.org/bot + (봇 토큰)/sendMessage?chat_id=(채팅아이디)&text=(보낼 텍스트)
이런 식으로 포스트맨 혹은 URL 창에 입력해주면 지정된 채팅아이디로 보낼 텍스트가 보내진다.
그럼 채팅 아이디를 얻어야하는데,
https://api.telegram.org/bot111:AACC(봇 토큰)/getUpdates 를 통해 얻을 수 있다.
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
26
|
{
"ok": true,
"result": [
{
"update_id": 000000000,
"message": {
"message_id": 000,
"from": {
"id": 0000000000,
"is_bot": false,
"first_name": "name",
"last_name": "Lee",
"language_code": "ko"
},
"chat": {
"id": 0000000000,
"first_name": "name",
"last_name": "Lee",
"type": "private"
},
"date": 0000000000,
"text": "ㅇ"
}
}
]
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
|
해당 봇으로 채팅을 한 번 입력하면 이렇게 방금 채팅한 사람의 정보를 얻을 수 있는데, 여기서 chat id를 가져온다.
이제 모든 준비는 끝났으니 텔레그램 메세지를 보내는 클래스를 만든다.
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
26
27
28
29
30
31
32
|
import org.springframework.stereotype.Component;
import javax.ws.rs.core.UriBuilder;
@Component
public class TelegramMsgUtil {
@Value("${bot.token}")
private String botToken;
@Value("${bot.chatId}")
private String botChatId;
String message = "떴다!!! 예매하러 가자ㅏㅏㅏㅏㅏㅏㅏㅏㅏ";
public void sendMsg() throws Exception {
HttpClient client = HttpClients.custom().build();
UriBuilder builder = UriBuilder
.fromUri("https://api.telegram.org/")
.path("bot" + botToken)
.path("/sendMessage")
.queryParam("chat_id", botChatId)
.queryParam("text", message);
client.execute(new HttpGet(builder.build()));
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
나는 resource/application.properties에 token과 chat id를 저장해서 받아왔다.
(처음엔 형상관리 할 때 보안상의 이유로 따로 관리하기 위한 목적으로다가 하지만 git private으로 돌려서 무의미...)
이전에 HttpURLConnection을 이용해 API를 송신 테스트를 해본 적이 있다. (이전글)
그 때 이렇게 즐비하게 쓸게 아니라 아예 유틸을 만들어서 사용하면 어떨까... 만들어서 메이븐에 올려볼까?
생각도 했었는데, 역시나 선배 개발자들은 미리 다 개발을 해놓았다.
우선 메이븐 레파지토리 사이트에서 httpClients 의존성을 추가해주고 UriBuilder로 송신할 URI를 만든다.
(JAVA 8 API Docs - UriBuilder)
httpClients.execute로 만든 URI를 호출하면 끝!
스케줄링을 하자
1
2
3
4
5
|
@Service
public class TheaterService {
@PostConstruct
public void getMovieListAtCineNForet() {
|
이전 작업에서 테스트 용도로 @PostConstruct를 사용했었다.
이젠 서버가 올라갈 때 한번 돌릴게 필요한게 아니라, 주기적으로 돌려야한다.
1
2
3
4
5
|
@Service
public class TheaterService {
@Scheduled(cron="0 0/15 07-23 * * *")
public void getMovieListAtCineNForet() {
|
@Sceduled과 cron 표현식을 활용해 스케줄링 작업을 시켜준다.
0 : 0초마다
0/15 : 0분부터 15분마다 (그냥 15분마다)
07-23 : 7시부터 23시까지 (어차피 잘 때 예매 알림 울린다한들 예매 못할거니깐!!!)
* : 매일 매달 매년
1
2
3
4
5
6
|
//떴으면 알림
if(line.contains("info-movie")) {
System.out.println("Give Me The Alert!!!");
telegramMsgUtil.sendMsg();
break;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
그리고 이전 소스에 영화가 뜬 부분에, 방금 만든 텔레그램 유틸을 넣어주면 끝!
(@Autowired로 유틸 클래스를 의존성 주입해서 사용)
'토이프로젝트' 카테고리의 다른 글
CGV 특별관 영화 예매 알림 봇 만들기 with 텔레그램 (3) (0) | 2019.12.27 |
---|---|
CGV 특별관 영화 예매 알림 봇 만들기 with 텔레그램 (1) (0) | 2019.12.25 |
코르도바(Apache Cordova) 사용기 (2) | 2019.04.20 |
- Total
- Today
- Yesterday
- 노션트렐로광고X
- java
- 카카오인턴
- AWS
- 프로그래머스
- 맵 api
- 알고리즘
- 기능개발
- FrogJmp
- 다음 맵 api
- 객체지향과 디자인패턴
- 파이팅코리아
- 최솟값
- Spring
- 텔레그램
- 더 나은 내일
- 124 나라의 숫자
- 스프링 부트
- API
- 자바
- cgv
- 안드로이드 스튜디오
- codility
- 타겟 넘버
- 완주하지 못한 선수
- json
- 예매 알림
- K번째수
- 문자열 내 마음대로 정렬하기
- 쇠막대기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 26 | 27 | 28 |
29 | 30 | 31 |