[웹] 텔레그램 Bot 이용하기

telegram bot

Telegram bot

Telegram 은 @BotFather 를 제공하는데 @BotFather 를 통해 간단히 Bot 을 만들 수 있다.

Bot 만들기

  1. @BotFather 와 대화를 시작한다
  2. /newbot
  3. "bot 이름" / "user 이름" 을 알려준다
  4. bot 이 만들어지고, access token 을 알려준다.


Bot 에 메시지 보내기

telegram 에서 bot 을 등록한다.(찾기에서 "bot 이름" 을 치면 나온다.)

getUpdates 를 하면 chat_id 를 얻을 수 있다.

  1. bot 을 등록하지 않으면, update 할 내용이 없어서, 아무런 내용이 나오지 않는다. 그래서 chat_id 를 얻을 수 없다.
  2. https://api.telegram.org/bot<token>/getUpdates

telegram 에 메시지 보내기

  1. https://api.telegram.org/bot<token>/sendMessage?chat_id=234324&text=helloworld

여러명에게 메시지 보내기

텔레그램에서 기본적으로 봇도 일종의 사람의 역할을 한다. 그래서 이 봇을 찾아서 등록 하는 것은 그 봇과 채팅방을 하나 여는 것이 된다. 이때 chat id 가 생긴다.

처음에 필자가 오해했던 부분은 봇을 등록하기만 하면 모두에게 문자가 갈 것이라 생각했다. 하지만 지정된 채팅방(chat id) 로만 보낸다. 그래서 만약 단체알림의 용도로 쓰고 싶다면 이 봇이 참여한 그룹을 하나 만들어야 한다. 그리고 알람을 받을 인원을 이 그룹에 참여시켜야 한다. 그리고 봇이 이 그룹채팅방(chat id)에 문자를 보내도록 해야 한다.

Get TELEGRAM Channel/Group ID, StackOverflow 에 나온 것처럼 web telegram 을 이용하면, 쉽게 group chat id 를 알 수 있다.

조심할 점은 group 이 super group 으로 자동으로 변경되는 경우가 있다. 이때는 chat id 가 변경되기 때문에 api 의 parameter 에 쓰이는 chat_id 값도 변경이 필요하다.

전송방식

Bot <--> Someone

아래 4가지 방식으로 message 를 보내고 받을 수 있다.(UTF-8 이다.)

  1. URL query string
  2. application/x-www-form-urlencoded
  3. application/json (except for uploading files)
  4. multipart/form-data (use to upload files)

전송 한계


API 가 초당 한 user에게 최대 30개의 문자(30 messages) 만 보낼 수 있게 되어 있다. 이 이상보내면 429 error 가 뜬다.

그리고 같은 group 으로 보내는 메시지는 1분에 20개 이상은 안된다.

이것을 피하려면 하나의 알림에 대해 여러개의 bot 을 사용해야 할 듯 하다. 또는 보내는 message 를 모아서 한번에 보내면 된다. 대략 3초에 1번 정도만 send 를 한다.

한번에 보낼 수 있는 길이는 4096 UTF character 이다. 너무 긴 글자를 보내면 400 error code 가 뜬다.

update 받는 방식

Someone --> Bot


이건 누군가가 bot 에게 보낸 내용을 확인하는 방법이다. 이것은 텔레그램 client 채팅방 같은 것을 구성할 때 필요하다고 보면 된다. client 를 구성하려면 상대가 한 이야기를 가져와야 한다. 그 방법을 제공하는 것이다.

또는 텔레그램을 통해서 서버에 명령을 내리거나 하는 기능을 구현할 때 등에 사용해도 된다.

2중 한개를 쓰면 다른 하나는 사용이 안된다.

  1. getUpdates : pull, 이녀석은 우리가 호출할 때 bot 이 받은 내용을 알려주는 것이고,
  2. setWebhook : push, 이 녀석은 메시지가 오면 자동으로 특정 url 로 날려주게 설정해서 사용할 수 있다. 그래서 이녀석의 사용을 위해서는 server 가 필요하다.

setWebhook


bot 설정 변경

이름 변경

  1. @BotFather 에서 /setuserpic을 치면, 현재 소유한 bot 들이 나온다. 
  2. 그러면, 이제 bot 을 선택하면, 
  3. image 를 send 해달라고 메시지가 나온다.
  4. image 를 보내면 된다.(채팅창에서)

기타 변경

@BotFather 에서 /help 를 치면 가능한 명령어가 나온다.

  • /setname - change a bot's name
  • /setdescription - change bot description
  • /setabouttext - change bot about info
  • /setuserpic - change bot profile photo
  • /setcommands - change the list of commands
  • /deletebot - delete a bot
  • /mybots - 내가 만든 모든 bot 들이 보인다. 여기서 bot 을 선택하면 Bot Settings 를 메뉴가 나온다.
    • group privacy : group 안에 있을 때 privacy mode 일때는 '/'로 시작되는 message 만 받게 된다. admin 인 경우는 모든 message 를 수신한다.(Bots: privacy mode)
    • allow groups: group 에 초대가 안되게 할 수 있다.

댓글 없음:

댓글 쓰기