paypal-telegram (2)

jinvicky·2023년 10월 12일
0

Spring & Java

목록 보기
5/23
post-thumbnail

저번에 이어서 텔레그램봇에 메세지를 전달해 보자.
환경 : spring boot 2 + gradle

  1. Component를 작성한다. 텔레그램봇 연동할 key값들은 iv로 선언한다.
import com.google.gson.Gson;
import com.jinvicky.telegrambot.domain.AlertMsg;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

@Slf4j
@Component
public class TelegramAlert {

    private Logger logger = LoggerFactory.getLogger(TelegramAlert.class);

    @Value("${notification.telegram.enabled}")
    private boolean telegramEnabled;

    @Value("${notification.telegram.bot.token}")
    private String token;

    @Value("${notification.telegram.chat.id}")
    private String chatId;

    public void sendAlert (String contents) {
        BufferedReader in = null;
        String url = "https://api.telegram.org/bot" + token + "/sendMessage?chat_id="+ chatId + "&text=";

        try {
            // 메세지 생성
            StringBuffer sb = new StringBuffer();
            sb.append("주문 결과 : ").append(contents);

            url += sb.toString();

            URL obj = new URL(url); // 호출할 url
            HttpURLConnection con = (HttpURLConnection)obj.openConnection();
            con.setRequestMethod("GET");
            in = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

            String line;
            StringBuffer buffer = new StringBuffer();
            while((line = in.readLine()) != null) { // response를 차례대로 출력
                buffer.append(line);
            }
        } catch(Exception e) {
            e.printStackTrace();
        } finally {
            if(in != null) {
                try {
                    in.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 다른 방법
    public void sendAlert2 (String contents) {
        String url = "https://api.telegram.org/bot" + token + "/sendMessage";
        try {
            AlertMsg telegramAlert = new AlertMsg(chatId, contents);
            String param = new Gson().toJson(telegramAlert);

            RestTemplate restTemplate = new RestTemplate();
            HttpHeaders headers = new HttpHeaders();
            headers.set("Content-Type", MediaType.APPLICATION_JSON_VALUE);

            HttpEntity<String> entity = new HttpEntity<>(param, headers); 
            restTemplate.postForEntity(url, entity, String.class);
        } catch (Exception e) {
            logger.error("telegram alert send failed", e);
        }
    }
}

텔레그램봇에 들어가는 기본 key 정보들은 별도 application.properties에 저장하고
@Value 애너테이션을 통해서 주입해서 사용한다.
resources 폴더 및에 application.properties를 생성하고 아래처럼 작성한다.

server.port=8085
notification.telegram.enabled=true또는 false 설정, 필수 아님.
notification.telegram.bot.token=토큰아이디
notification.telegram.chat.id=채팅아이디

텔레그램 알림 전송에는 두 가지 방법이 있다.
1. HttpUrlConnection
2. RestTemplate

피드백 : 1번은 성공률이 높은 쉬운 방법이지만, 1번을 기본으로 알고 2번으로 바꾸어 쓸 수 있어야 한다.
위 코드를 참고하고 비교해보자.

  1. Controller를 만들어 경로를 맵핑해 호출 시 알림을 보낸다.

@Slf4j
@Controller
@RequestMapping("/alert")
public class TelegramController {

	@GetMapping("/")
    public String sendAlert() throws Exception { 
    String content = "test msg";
        telegramAlert.sendAlert2(content);
        return "orderDetail";
    }
 }

이제 /alert 경로로 접근하면 test msg라고 텔레그램봇 메세지가 도착하게 된다.
다음에는 페이팔 결제 연동을 해보자.

profile
Front-End와 Back-End 경험, 지식을 공유합니다.

0개의 댓글