[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