[Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
지난 편에서 텔레그램 봇을 생성했고, 본격적으로 서버에 작업을 하기 전에 PC에서 메시지를 발송해보는 테스트를 해보려고 한다. 메시지를 발송하는 방법은 아주 간단하게 웹브라우저에서 특정 URL을 호출하는 방식으로 해볼 수 있다.
연관 포스트
- [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #1 (봇생성편)
 - [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
 - [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #3 (명령어로 메시지발송 테스트)
 - [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #4 (최종편)
 
A. API Token 재확인
만약에 텔레그램 봇의 API Token을 적어두지 않았으면 다시 봇파더에게 물어본다.

봇파더의 메뉴에서 /mybots를 선택한다.

내 계정에서 생성한 봇의 목록이 나오고, 그 봇을 클릭하면...


여러 개의 버튼이 나오는데.. 그 중에서 API Token을 클릭하면, 기존에 발행받은 API Token을 재확인 할 수 있다.[1]
이렇게 원할 때 확인이 가능하므로 굳이 다른 곳에 저장해둘 필요는 없다.(괜히 저장해뒀다가 타인에게 노출되면 더 피곤..) ↩︎
B. 봇 상태 확인
API Token을 확인했으면 이제 봇의 상태를 확인하기 위한 URL을 만들어본다.
※ 본 포스트에는 API Token을 보호하기 위해서
[API_TOKEN]으로 대체하겠다. 각자 생성한 봇의 API Token으로 대체하면 된다.
웹브라우저를 열고서 아래의 URL을 호출한다.[1]
- URL sample : 
https://api.telegram.org/bot[API_TOKEN]/getUpdates - example
 

C. 내 Chat_id 확인
지금 하려는 작업은 ssh로 누군가가 로그인을 하면, Telegram bot을 통해서 나한테 특정한 메시지를 보내는 것을 만들고 있다.
Telegram bot이 특정 사용자에게 메시지를 보내려면, 그 사용자의 chat_id를 알아야하는데 봇에게 임의의 메시지를 발송하고 getUpdates 명령어를 이용하면 확인할 수 있다.

텔레그램봇에게 임의의 텍스트를 발송한다. 그 뒤에 앞서 실행했던 getUpdates를 실행하면...
{
   "ok":true,
   "result":[
      {
         "update_id":103310160,
         "message":{
            "message_id":2,
            "from":{
               "id":55450--869,
               "is_bot":false,
               "first_name":"SIMPLISM",
               "language_code":"ko"
            },
            "chat":{
               "id":55450--869,
               "first_name":"SIMPLISM",
               "type":"private"
            },
            "date":1688536120,
            "text":"what is my chat id?"
         }
      }
   ]
}
웹브라우저에 위와 같은 json 데이터가 반환된다.[1]
위 JSON 데이터를 대략적으로 정리하면 아래와 같다.
"ok":true: getUpdates를 정상적으로 수행했다.- `"result":[~~~] : getUpdates의 결과를 반환했다.
 "update_id":103310160: getUpdates를 수행한 id는 103310160이다.[2]"message":{~~~}: 새로운 메시지가 들어왔다."message_id":2: 새로운 메시지의 id는 2이다."from":{~~~}: 새로운 메시지를 발송한 사용자의 정보"id":55450--869: 새로운 메시지를 발송한 사용자의 ID(chat_id)는 55450--869이다.- 이하는 생략...
 
어차피 내가 알고자하는 값은... 내 텔레그램 계정의 id(chat_id)이므로 여기에서 확인된 값은 55450--869이다.
실제로 반환된 데이터는 위 처럼 정리된 형태가 아니고 한줄로 이어진 Text로 반환된다. 위는 보기 편하게 하기 위해서 Json Formatter로 정렬한 것이다. ↩︎
텔레그램 API 문서를 확인하면 result로 반환된 값의 상세 설명을 확인할 수 있다.(영어로...) ↩︎
D. 메시지 발송테스트
지금까지는 getUpdates 메소드를 이용했는데, 새로운 메소드를 이용한다.(sendMessage 얼마나 직관적인가..ㅎㅎ)
- URL sample : 
https://api.telegram.org/bot[API_TOKEN]/sendMessage?chat_id=[CHAT_ID]&text=[MESSAGE] - example
- API_TOKEN : 
57412121:AAEF-Zjsdlsd-----YPk - CHAT_ID : 
55450--869 - MESSAGE : 
test - URL : 
https://api.telegram.org/bot57412121:AAEF-Zjsdlsd-----YPk/sendMessage?chat_id=55450--869&text=test 
 - API_TOKEN : 
 
위의 sample과 example를 참고해서 최종 URL을 만든 뒤에 웹브라우저로 실행해보면...
{
   "ok":true,
   "result":{
      "message_id":3,
      "from":{
         "id":6215768963,
         "is_bot":true,
         "first_name":"simplism-ssh-alarm",
         "username":"simplism_ssh_alarm_bot"
      },
      "chat":{
         "id":55450--869,
         "first_name":"SIMPLISM",
         "type":"private"
      },
      "date":1688537969,
      "text":"test"
   }
}
위와 같은 JSON 데이터가 반환된다. 대략적으로 JSON 데이터를 설명해보면, simplism_ssh_alarm_bot이 SIMPLISM(chat_id가 55450--869인 사용자)에게 test라는 text 메시지를 보냈다라는 내용이다.

위 처럼 봇이 보낸 test라는 메시지를 수신한 것을 확인할 수 있다.
E. 마치면서..
정상적으로 메시지가 봇을 통해서 나한테 발송되는 것을 확인했으니... 이제 대망의 bash shellscript를 작성할 차례다. 그나마 1,2편은 스크린샷이 있어서 크게 어렵지 않았을 것 같은데 bash shellscript 부분은 소스코드가 거의 대부분이라서 읽는 사람한테 잘 전달되도록 글 작성이 가능할까?
좀 걱정은 되지만 계속 해보자!
F. 참고문서
- Telegram Bot API, Telegram 공식홈페이지, unknown author, 2023/04/21 updated