본문 바로가기

노력을 이기는 재능은 없고
노력을 외면하는 결과도 없다.
- 이창호 9단

D E V E L O P M E N T/TELEGRAM

나만의 텔레그램 봇(TELEGRAM BOT) 만들기 - 2. 웹 상에서 메세지 보내기

  Junesker   2020. 3. 13.
반응형

텔레그램 BotFather 봇을 통해 만든 @StudyJ001Bot을 통해 텔레그램 봇 API 공식 홈페이지에서 제공해주는 API를 가지고 웹 환경에서 메세지를 보내보고자 한다. 텔레그램 봇 API 공식 홈페이지에서 친절하게 해당 API기능별 URL, Parameter, method 등등 여러 정보를 알려주고 있다. 텔레그램 봇 API를 이용해 웹 환경에서 메세지를 보내려고 할때 필요한 것이 있는데 보낼 채팅 아이디(chat_id)와 본문(text)내용이 필요하다. 웹 환경에서 메세지를 보내기 위해 알아야하고 어떻게 보낼 수 있는지에 대한 내용을 알아보자.

 

 

 

 

 

텔레그램 봇 API

Bot API는 Telegram 용 봇 구축에 관심이있는 개발자를 위해 만든 HTTP 기반 인터페이스입니다.
봇을 만들고 설정하는 방법을 알아 보려면    소개 FAQ 를 참조하십시오 .

 

텔레그램 BotFather 봇을 통해 만든 나만의 봇 토큰과 API에서 제공해주는 기능별 URL을 통해 기능을 실행할 수 있고, 내가 원하는 데이터를 가져와 확인할 수 있다. 텔레그램 봇에는 고유한 인증 토큰이 제공되고, 123456:ABC-DEF1234ghj-zyx52WUid23oii11과 같은 값의 형태를 띄고 있다. 텔레그램 봇 토큰을 얻고 새로운 토큰을 생성하는 방법에 대해 알고싶다면 여기 링크를 통해 확인할 수 있다. 텔레그램 봇 API에 대한 모든 쿼리는 HTTPS를 통해 제공되어야하고 다음과 같은 형식으로 제공된다. 예로 "https://api.telegram.org/bot/METHOD_NAME"와 같다. GET,POST방식의 HTTP메소드를 지원하고 Bot API요청에서 매개 변수를 전달하는 방법은 URL쿼리 문자열, application / x-www-form-urlencoded, application / json(파일 업로드 제외), multipart / form-data(파일 업로드에 사용) 총 4가지를 지원한다.

 

응답에는 항상 부울 필드 "ok"가 있고 사람이 읽을 수 있는 결과 설명이 포함된 선택적 문자열 필드 JSON객체가 포함된다. "ok"가 true인 경우 요청이 성공했으며, "result"필드에서 쿼리 결과를 찾을 수 있다. 실패한 요청의 경우 "ok"는 false와 같으며 오류는 "설명"란에 설명되어 있다. 정수 "error_code"필드도 반환되지만 추후 변경 될 수 있으므로 알고만 있자. 텔레그램 봇 API의 모든 메소드는 대소 문자를 구분하지 않고 모든 쿼리는 UTF-8을 사용하여 이루어져야 한다.

 

 

 

텔레그램에서 채팅 아이디(chat_id)를 알아내기 위해서는 텔레그램 봇 API내 Update객체와 URL로 사용하는 getUpdates 메소드를 통해 알아낼 수 있는데, 웹 환경에서 메세지를 보내야 하기 때문에 getUpdates를 사용한다. 일반적으로 아무것도 하지 않고 getUpdates를 요청하게되면 아무것도 없는 빈 JSON 데이터를 결과로 받게 된다. 그래서 텔레그램 BotFather 봇으로 만든 나만의 봇에게 아무런 메세지를 전송하여 봇의 상태를 업데이트 시킨다.

 

 

 

 

 

업데이트 받기

봇에 대한 업데이트를 수신하는 상호 배타적 인 두 가지 방법이 있습니다. 한편으로  getUpdates 메소드와 다른 한편 으로는 Webhook 입니다. 수신 업데이트는 봇이 어느 쪽이든 수신 할 때까지 서버에 저장되지만 24 시간을 초과하지 않습니다.
어떤 옵션을 선택하든 결과적으로 JSON 직렬화 된 Update 객체가 수신됩니다.

 

 

 

getUpdates


getUpdates method


getUpdate 메소드를 사용하기위해 필요한 파라미터와 그에따른 설명을 확인할 수 있다. getUpdate 메소드를 직접 요청해보자. 어떤 결과를 확인할 수 있는지 확인해본다.

웹 상에서 요청 URL은 "https://api.telegram.org/bot[내가 만든 봇의 api token]/getUpdates"와 같다.

 

getUpdates 요청

getUpdates를 요청했다. "ok"라는 키의 값이 true로 요청은 성공했지만 "result"키의 값이 없는것으로 나온다. 텔레그램 봇과 상호작용한 내용이 없기 때문에 result의 값이 현재는 없다. result의 값을 받기 위해서는 텔레그램 봇 나만의 봇으로 만들었던 @StudyJ001Bot과 상호작용한다. 

 

StudyJ001Bot과 상호작용

텔레그램 메신져에서 @StudyJ001Bot을 검색한다. 검색결과로 나오는 StudyJ001Bot을 "시작(Start)"을 눌러 봇에게 상호작용을 하겠다고 알린다. 이때, 봇의 Update객체에 새로운 무언가가 생성된다. "/start"라는 메세지를 갖고 누가 언제 보냈는지에 대한 정보 또한 Update객체에 담겨있다. 나만의 봇인 @StudyJ001Bot과 상호작용을 했으니 다시 한번 getUpdates를 요청해본다.

 

getUpdates 재요청

처음과 달리 "result"키의 값으로 무언가가 많이 들어온것을 확인할 수 있다. "update_id", "message", "chat", "date", "text", "entities" 등 많은 정보가 생겼음을 확인할 수 있다. 이 중에서 우리는 "chat"키 안에 들어 있는 "id"키의 값이 필요하다. "chat"안에 "id"의 값이므로 텔레그램 봇을 이용해 웹 환경에서 URL로 메세지를 보낼 때 필요한 파라메터 채팅 아이디(chat_id)를 사용할 수 있게 되었다. "id"의 값은 정수로 123456789와 같은 값이 들어있다. 그 id는 텔레그램의 가입한 내 계정의 "id"값이기도 하다.

 

 

 

 

 

사용 가능한 방법

텔레그램 봇 API의 모든 메소드는 대소문자를 구분하지 않고 GET,POST방식의 HTTP 메소드를 지원한다. 텔레그램 봇 API 요청에서 매개 변수를 전달 하려면 URL 쿼리 문자열 또는 application/json 또는 application/x-www-form-urlencoded 또는 mulipart/form-data를 사용하면 된다. 메소드를 통해 호출에 성공한 결과는 결과를 포함한 JSON 객체가 반환된다.

 

 

 

sendMessage


sendMessage method


여기까지 메세지를 보낼 준비가 완료됬다. getUpdates 메소드로 요청해서 얻은 chat id와 sendMessage 메소드를 이용해서 웹 환경으로 메세지를 보낸다. https://api.telegram.org/bot123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11/sendMessage 와 같이 메세지를 보낸다.

 

전송 URL : https://api.telegram.org/bot1122204878:AAEqAgWH1DrRjpVjhaHiCM-y6jn3TXBpLZM/sendMessage?chat_id=123456789&text=Hello World!  

 

위와 같은 url을 요청하게되면 해당 chat_id를 가진 사용자에게 StudyJ001Bot이 "Hello World!"라는 메세지를 전송하는 모습을 확인할 수 있다. 

 

sendMessage URL
HelloWorld!

 

message result

텔레그램 봇 API에서 제공해주는 sendMessage URL 메소드를 통해서 웹 환경에서 메세지를 보낼 수 있다. 옵션 값으로 제공해주는 파라미터도 사용해서 메세지를 보내면 더 다양한 메세지를 웹 환경에서도 보낼 수 있다.

반응형

댓글