[Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)

[Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
Photo by Dima Solomin / Unsplash

지난 편에서 텔레그램 봇을 생성했고, 본격적으로 서버에 작업을 하기 전에 PC에서 메시지를 발송해보는 테스트를 해보려고 한다. 메시지를 발송하는 방법은 아주 간단하게 웹브라우저에서 특정 URL을 호출하는 방식으로 해볼 수 있다.


연관 포스트

  1. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #1 (봇생성편)
  2. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #2 (메시지발송편)
  3. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #3 (명령어로 메시지발송 테스트)
  4. [Ubuntu] SSH 접속 시 텔레그램 알람보내기 #4 (최종편)

A. API Token 재확인

만약에 텔레그램 봇의 API Token을 적어두지 않았으면 다시 봇파더에게 물어본다.

텔레그램 메신저 캡쳐화면 1 (직접 캡쳐 후 편집)

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

텔레그램 메신저 캡쳐화면 2 (직접 캡쳐 후 편집)

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

텔레그램 메신저 캡쳐화면 3 (직접 캡쳐 후 편집)
텔레그램 메신저 캡쳐화면 4 (직접 캡쳐 후 편집)

여러 개의 버튼이 나오는데.. 그 중에서 API Token을 클릭하면, 기존에 발행받은 API Token을 재확인 할 수 있다.[1]


  1. 이렇게 원할 때 확인이 가능하므로 굳이 다른 곳에 저장해둘 필요는 없다.(괜히 저장해뒀다가 타인에게 노출되면 더 피곤..) ↩︎

B. 봇 상태 확인

API Token을 확인했으면 이제 봇의 상태를 확인하기 위한 URL을 만들어본다.

※ 본 포스트에는 API Token을 보호하기 위해서 [API_TOKEN]으로 대체하겠다. 각자 생성한 봇의 API Token으로 대체하면 된다.

웹브라우저를 열고서 아래의 URL을 호출한다.[1]

  • URL sample : https://api.telegram.org/bot[API_TOKEN]/getUpdates
  • example
    • API Token : 57412121:AAEF-Zjsdlsd-----YPk[2]
    • URL : https://api.telegram.org/bot57412121:AAEF-Zjsdlsd-----YPk/getUpdates[3]

  1. 가능하면 메모장과 같은 곳에 URL을 완성하고 붙여넣는 것을 추천한다. ↩︎

  2. 예제로 사용한 Token은 발급받은 Token의 중간부분을 임의로 변경한 것이므로 동작하지 않는다. ↩︎

  3. https://api.telegram.org/bot 바로 뒤에 발급받은 Token을 바로 붙여넣으면 된다. ↩︎

엣지 웹브라우저 (직접 캡쳐 후 편집)

C. 내 Chat_id 확인

지금 하려는 작업은 ssh로 누군가가 로그인을 하면, Telegram bot을 통해서 나한테 특정한 메시지를 보내는 것을 만들고 있다.

Telegram bot이 특정 사용자에게 메시지를 보내려면, 그 사용자의 chat_id를 알아야하는데 봇에게 임의의 메시지를 발송하고 getUpdates 명령어를 이용하면 확인할 수 있다.

텔레그램 메신저 캡쳐화면 5 (직접 캡쳐 후 편집)

텔레그램봇에게 임의의 텍스트를 발송한다. 그 뒤에 앞서 실행했던 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 데이터를 대략적으로 정리하면 아래와 같다.

  1. "ok":true : getUpdates를 정상적으로 수행했다.
  2. `"result":[~~~] : getUpdates의 결과를 반환했다.
  3. "update_id":103310160 : getUpdates를 수행한 id는 103310160이다.[2]
  4. "message":{~~~} : 새로운 메시지가 들어왔다.
  5. "message_id":2 : 새로운 메시지의 id는 2이다.
  6. "from":{~~~} : 새로운 메시지를 발송한 사용자의 정보
  7. "id":55450--869 : 새로운 메시지를 발송한 사용자의 ID(chat_id)는 55450--869이다.
  8. 이하는 생략...

어차피 내가 알고자하는 값은... 내 텔레그램 계정의 id(chat_id)이므로 여기에서 확인된 값은 55450--869이다.


  1. 실제로 반환된 데이터는 위 처럼 정리된 형태가 아니고 한줄로 이어진 Text로 반환된다. 위는 보기 편하게 하기 위해서 Json Formatter로 정렬한 것이다. ↩︎

  2. 텔레그램 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

위의 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_botSIMPLISM(chat_id가 55450--869인 사용자)에게 test라는 text 메시지를 보냈다라는 내용이다.

텔레그램 메신저 캡쳐화면 6 (직접 캡쳐 후 편집)

위 처럼 봇이 보낸 test라는 메시지를 수신한 것을 확인할 수 있다.

E. 마치면서..

정상적으로 메시지가 봇을 통해서 나한테 발송되는 것을 확인했으니... 이제 대망의 bash shellscript를 작성할 차례다. 그나마 1,2편은 스크린샷이 있어서 크게 어렵지 않았을 것 같은데 bash shellscript 부분은 소스코드가 거의 대부분이라서 읽는 사람한테 잘 전달되도록 글 작성이 가능할까?

좀 걱정은 되지만 계속 해보자!

F. 참고문서

  1. Telegram Bot API, Telegram 공식홈페이지, unknown author, 2023/04/21 updated

Read more

AI 환각 (AI Hallucination)에 대한 단상

AI 환각 (AI Hallucination)에 대한 단상

ℹ️단상 (斷想, 생각나는 대로의 단편적인 생각) 생각을 어떻게든 적어두지 않으면 시간이 지나 잊혀져서 약간은 두서없을 나의 생각을 적는 다는 의미로 "~에 대한 단상"이라는 글들을 적어보려고 한다. 오픈 AI의 ChatGPT가 촉발한 생성형 AI는 기념비적인 과학기술의 발전으로 진보할 것이라는 기대감과 다른 한 편으로는 이 놀라운 신기술로 촉발될 부작용에

By simplism
[리뷰] 켄싱턴 오르빗 (Kensington Orbit) 트랙볼 마우스

[리뷰] 켄싱턴 오르빗 (Kensington Orbit) 트랙볼 마우스

* 구매처 : 알리익스프레스 * 가격 : 35.15 $ (50,220원) 난 하루 종일 컴퓨터를 사용하는 직업이라서... 모니터, 키보드, 마우스는 중요하다. 키보드는 몇 번에 걸쳐서 바꿔왔지만, 마우스는 일반적인 마우스 -> 버티컬 마우스로 바꿔서 꽤 오랫동안 써왔던거 같다. 버티컬 마우스로 바꾸고나서 손목과 오른 팔의 통증이 많이 사라져서 만족하고 있었는데... QHD 해상도 2대의 모니터를 주력으로

By simplism
[F1] 2024년 시즌초반 감상평 및  팀별 단상

[F1] 2024년 시즌초반 감상평 및 팀별 단상

작년에 이어서 올해도 쿠팡플레이를 통해서 전 시즌 F1 중계를 볼 수 있다. 딱히 다른 스포츠에 대해서 관심이 유독 없는데... 홍대병(마이너 취향??)인건지 사이버포뮬러의 영향(어릴 때 많이 보고.. 어른이 되서도 몇 번을 다시 본 것 같음..)인 것인지 F1이 너무 재미있더라. 넷플릭스에서 F1 다큐시리즈(본능의 질주, 빈디젤이 나오는 분노의

By simplism
[Ubuntu] NFS 클라이언트 설치 및 NFS볼륨 마운트작업

[Ubuntu] NFS 클라이언트 설치 및 NFS볼륨 마운트작업

사용환경 * OS : Ubuntu 22.04 LTS (Jammy Jellyfish) * Dokuwiki : Release 2024-02-06a "Kaos" * NAS : Synology DSM 7.1.1 A. 시작하기 전에.. 미니PC에 dokuwiki 설치하고 본격적으로 운영하기 전에 정기적인 백업을 해야할 것 같다. 그렇다고... 수동으로 주기적으로 하기에는 너무 번거롭고.. 윈도우즈 PC에서 사용하던 백업솔루션이 ubuntu도 지원해서 그 백업솔루션을 설치하기 전에

By simplism