텔레그램 채널에 봇(bot)으로 자동 포스팅하기

알림: IFTTT가 텔레그램을 이제 정식 지원하기 때문에 이 글을 보시기 전에 먼저 새로운 방법을 시도해보시기 바랍니다. 그 쪽이 더 쉽거든요.

보러가기:  텔레그램과 IFTTT 서비스를 결합하여 나만의 인공지능 비서를 만들자

텔레그램 채널을 운영하거나, 또는 그룹채팅방의 관리자일 때 주기적으로 공지사항 올리는 게 번거로울 수 있습니다. 가령 과대표인데 홈페이지 공지사항 나오면 매번 링크 따서 단톡방에 올려줘야 하는 경우, RSS 리더로 받아보면 해결될 일을 단지 메신저 환경이라는 이유로 사람이 복사-붙여넣기 작업을 해야 하는 상황이 생기지요.

이럴 때 텔레그램 봇(bot)을 만들어 일을 시키면 좋습니다. 서버를 마련해서 본격적으로 복잡한 일을 시킬 수도 있고, 대화형 서비스를 제공할 수도 있겠지만 그런 건 제 능력을 벗어난 일이므로 1) 봇을 만들고, 2) 인터넷에 있는 다른 서비스와 연동하여, 3) 자동으로 내 대신 단톡방에 글을 올리는 심부름을 할 수 있도록 구성하는 것만 살펴보도록 하죠.

뭐 이것도 사실 구글링하면 다 나오는 얘기이지만, 저처럼 초보인 분들을 위해 … 정리합니다.

목표

트위터나 페이스북페이지, 또는 블로그에 새 글이 발행되었을 때 자동으로 긁어다가 내가 운영하는 채널에 포스팅하도록 하기.

단계

  1. 일을 대신 해 줄 텔레그램 봇을 만든다. API 토큰을 얻는다.
  2. IFTTT 서비스로 자세히 조건을 만들어주고 원하는 조건에 봇이 나 대신 채널에 포스팅하도록 한다.

텔레그램 봇 만들기

봇파더(@Botfather)를 통해 만들면 됩니다.

  1. 친구초대 방식으로 채팅방에 입장하여
  2. /help 치면 명령어가 정리되어 나옵니다.
  3. /newbot 명령어로 새 봇을 만들겠다고 선언하고
  4. name을 정해달라고 물어오면, “이것저것링크” 등과 같이 이름을 정해줍니다.
  5. username을 물어보면 영문과 숫자를 사용하여 정해줍니다. 단, 끝문자는 bot으로 끝나야 합니다. 저는 “ththlink_Bot” 이라고 적었네요.
  6. 그럼 token이라면서 복잡한 문자열을 알려주는데, 잘 메모해두도록 합니다. 채팅방 바깥에서 이 봇에게 명령을 내리려면 반드시 필요합니다.

IFTTT 설정 (예시)

이제 IFTTT.com에서 새로운 레시피를 만듭니다. 가령 저는 모든 트위터 게시물이 아니라, 트위터에 특정 해시태그를 달아서 올린 게시물만 텔레그램 봇이 읽어들여 내가 운영하는 텔레그램 채널에 업로드했으면 좋겠습니다.

이런 경우엔 IF 영역에 관련 조건을 만들어주시면 됩니다. 설명은 생략하지요.

중요한 건 THEN(조건에 따른 결과액션) 부분인데, 채널은 Maker로 지정해주시면 됩니다. 일종의 DIY 채널입니다. 텔레그램 채널을 따로 지원하고 있지 않기 때문에 이 채널의 상세 설정을 통해 결과적으로 텔레그램에 글을 올리도록 하는 거죠.

우선 URL에는 내가 만든 텔레그램봇이 메시지를 보내도록 명령하는 주소를 적어줘야 합니다. 아까 받아둔 token이 있을텐데요, 가령 토큰이 123:abcde라고 할 때, 아래와 같은 형식으로 주소를 작성하여 URL 필드에 넣어줍니다.

https://api.telegram.org/bot123:abcde/SendMessage

이렇게 하면 내가 만든 텔레그램 봇이 문자를 보내도록 명령할 수 있습니다. 123:abcde는 열쇠키이죠. 이 키값을 알면 다른 사람도 내 봇에게 명령을 내릴 수 있겠죠? 따라서 키값을 잘 보관해야 합니다.

두 번째로, 방식(Method)에는 POST를 적어주시고, 세 번째 Content Type에는 application/json 을 선택해주세요.

Method : POST
Content Type: application/json

이제 “Body”에는 실제 전송할 메시지 내용을 적습니다. 여기에 “바보”라고 쓰면 조건이 될 때마다 봇이 “바보”라는 메시지를 날릴 겁니다. 대신 “{{Text}}”와 같이 적으면 조건이 될 때, 즉 지금의 경우엔 내가 정한 특정 해시태그가 있는 글이 올라올 때, 텔레그램 봇이 그 해당 트윗의 내용 텍스트를 텔레그램에 올리게 됩니다.

하늘색 버튼을 누르면 다른 내용도 삽입할 수 있도록 되어 있습니다. 한 개만 쓸 수 있는 것도 아니고 다양하게 조합하여 사용할 수 있습니다.

우리가 원하는 것은 봇이 모든 채팅방에서 말하게 하려는 게 아니라, 특정 단톡방이나 채널 안에서 글을 올리도록 하는 것입니다. 이를 위해 아래와 같은 형식으로 Body에 넣어주세요.

{"chat\_id": "@채널아이디", "text": "{{TextNoHashtag}}"}

두 군데만 고쳐주시면 됩니다. 먼저 “@채널아이디”를 고쳐주세요. 단톡방 아이디도 됩니다. 비공개로만 접속할 수 있는 채널은 아이디가 없어서 적기 힘들 거 같습니다. (어떻게 하는지 모릅니다..)

그리고 {{TextNoHashtag}} 대신 다른 것을 넣고 싶으면 넣으세요. 저는 해시태그를 제외한 트윗 내용을 넣고 싶어서 이렇게 정했습니다.

채널에 봇 추가

이제 봇이 포스팅을 실제로 수행할 채널에 봇을 관리자로 추가합니다. 그리고 일을 잘 하는지 기다려보면 되겠습니다.

추가 아이디어

IFTTT에서는 복수의 레시피를 만들 수 있기 때문에 다양한 작업을 봇에게 명령내릴 수 있습니다. 사실 봇에게 이런 작업을 시키려면 사람이 브라우저로 매번 명령을 내리거나 다른 서비스를 통해야 하겠지만, IFTTT 만으로 상당히 안정적으로 구성할 수 있습니다. 기타 무슨무슨 서비스를 대행해준다는 텔레그램 봇을 구독하는 것도 방법이지만, 내 취향대로 손쉽게 봇을 구성할 수 있게 되는 거죠. 게다가 특정 대화방에서 봇이 하는 일을 따로따로 지정하는 것도 손쉽습니다.

개인이 나 혼자만 가입한 채널을 만들고, 거기에 봇을 추가한 뒤에, 개인용 알림도구로 사용해도 좋습니다. IFTTT 에는 아주 많은 채널이 있거든요. 특정 인스타그램 계정에 사진이 올라오면, 오늘 눈 올 확률이 있으면, 드롭박스 특정 공유폴더에 새 파일이 추가되면 .. 등등.. 아주 다양한 조건에서 나에게 텔레그램 메시지를 보내도록 할 수 있습니다.

메신저로 알림을 받는 건 확실히 별도의 앱이나 이메일로 받는 것보다 안 놓치고 잘 보게 되더군요. 느려터진 Pushbullet이나 Boxcar보다 더 좋더군요 저는.

(2015년 11월)

  • ROK

    “chat_id_”:에서 id뒤에 _ 빼야 실행이 제대로 되는 것 같은데 맞는지요?

    • 1. 그렇군요 오타 수정하겠습니다. 알려주셔서 감사합니다 ^^

      2. 그것보다는 {{TEXT}} 가 quotation mark 를 포함할 때 계속 오류를 뿜어대서 .. 해결책을 찾고 있습니다 ㅠㅠ 따옴표가 포함된 트윗은 따옴표 앞까지만 전달하더라고요 흑…

      2015년 12월 9일 (수) 오후 12:36, Disqus 님이 작성:

  • 박상연

    며칠째 해보는데 도저히 안되네요. 이해력이 부족한건지.

    • 어디부터 안 되시는지요?^^ 텔레그램으로 쪽지주세요 @seoulrain

  • SEYOUNG KIM

    새해 복 많이 받으세요. @채널아이디라는 게 제가 만든 텔레그램 채널의 아이디를 말하는 건가요? 그건 어떻게 확인할 수 있는지 모르겠습니다.

    • 쌤 새해 복많이 받으세요^^
      채널 아이디는 그 채널방의 아이디입니다.
      채널 방의 오른쪽 위 프로필 눌러 정보 화면 진입해서 “링크 공유”항목에서 확인 가능해요^^
      없으면 부여하시면 됩니다

  • SEYOUNG KIM

    그렇군요 ㅎㅎ 이 레시피를 응용해서 Pocket에 저장하면 텔레그램 채널에도 전송되는 걸 만들어 보려 하는데 생각대로 안 되네요. 더 연구해 봐야겠습니다.

    • ^^ 저도 그렇게 잘 사용중이에요! 어떤 부준에 막히는지 나중에 얘기해주세요~~

  • seoulrain

    test

  • 민영근

    채널에 봇 추가 이부분에서 막혔는데요 ㅜ.ㅜ
    채널정보로 들어간 후, 관리자를 눌러서 새로운 관리자를 누르면 리스트에넌 봇이 뜨지 않네요. 어떻게 봇을 추가할 수 있을까요?

    • 봇이름 찾으셔서 해결하신 거 맞으시죠? ^^ 보통 타이핑 마칠 때까지 안 뜨더라구요.

      2016년 3월 2일 (수) 오후 2:45, Disqus 님이 작성:

  • Sang-In CHUN

    서울비님 인녕하세요..
    포스팅해주신 글을 보고 트위터 글을 봇채널로 보내는
    IFTTT 활용해 보고싶어서 따라하던 중 아래 그림과 같이
    봇생성 및 트위터 계정을 IFTTT통해서 텔레그램으로 보내도록 설정했는데 잘 되질 않네요..뭘 실수 한걸까요?
    조언을 부탁드려봅니다..
    혹시 티스토리 블로그에서 바로 채널로 보내기나 페이스북에서 보내기도 혹시 알고 계시면 도움을 좀 부탁드려도 될까요?

    • 봇으로 보내기하신 거 같은데 오리지날에서는 지원하지 않는 걸로 알고요. 과거 Paquebot (http://paquebot.io/en/) 은 봇으로 뿌릴 수 있습니다. 제가 포스트에 올린 건 채널로 전송하는 예제입니다.

      chat_id 에 봇 아이디 대신 공개채널명을 적어주셔야해요.

      채널 아이디는 채널 환경설정에서 부여하실 수 있습니다.
      telegram.me/myid 형태로 됩니다.

      블로그나 페이스북페이지도 트리거로 이용하시면 구현 가능할 거 같은데 text가 아니라 사용하는 ingredient 가 다를 수도 있으니 IFTTT 사이트에서 제시되는 항목을 풀다운메뉴에서 선택해보시면 될 거 같아요.

      혹시 너무 어려우시면 더 자세히 설명드릴게요. ^^ 해보시고 다시 말씀해주셔요~

      • Sang-In CHUN

        전문적으로 설명해주셔서 조금 이해가 어려워요~^^;;

        먼저 제가 이해한 부분은 오리지날 트위터나, 페이스북에서는 텔레그램 봇으로 ㅇ뿌리는게 힘들고,
        Paquebot으로는 뿌리는게 가능하단 말씀은 트위터->Paquebot으로 뿌린후, 제 채널 봇으로 뿌린다는 말씀이신가요?

        우선 Paquebot을 등록해서 봐보니..

        2016년 3월 10일 목요일, Disqus님이 작성한 메시지:

        • 음.. 그게 아니라 지금 스크린샷에서는 봇이랑 대화하는 채팅방을 만드셨잖아요? 그게 아니라 따로 채널을 개설하시는 겁니다. 그리고 그 채널에 봇을 관리자로 위임해주셔야 해요. 그리고 chat_id 에는 봇 아이디가 아니라 채널 아이디를 적어주셔야 합니다.

          트위터에 어떤 글이 올라오면 무조건 봇이 말하게 하는 경우, 해당 봇이랑 대화하는 모든 사람이 그 목소리를 듣게 되는데 .. 그게 아니라,

          트위터에 글이 올라온다 -> 특정 채널에 있는 봇이 그 말을 해라 ..

          이런 순서인 거죠.

          chat_id: @gom34_bot 이 부분을 수정하셔야 합니다.

          채널방 하나 만드시고 채널 아이디를 부여하세요.

  • ₩А¥₩!$€ ₩А£К€R

    RSS 피드를 봇으로 만들어 그룹채팅방에 추가하려고 시도중입니다. 저기 수식대로 해봤는데 감감무소식이네요. 해서 도움을 청합니다.
    1. 트위터가 아닌 RSS일 때 포스팅에 적힌 수식에서 달라지는 부분이 있나요?
    2. 채널이 아닌 그룹채팅방을 대상으로 한다면 이 역시 달라지는 부분이 있나요?

    • 보내고자 하는 서비스에 따라 사용하는 요소의 이름이 달라집니다 IF 어플에서 아마 리스트를 제공할 거에요. RSS 의 경우는 피드에 피드주소 적어넣으시고, 바디에 저는 {“chat_id”: “@채널아이디”, “text”: “<<>>{{EntryTitle}}<<>> {{EntryUrl}}<<>>”} 등과 같이 적어 사용하고 있네요.

      그룹채팅방은 아마도 그룹채팅방에 공개 아이디가 있는 경우 가능하지 않을까 싶은데 동일한 설정에서 포스팅이 안 되시는 건가요?

  • A님과의 대화 참고 위해 포스팅합니다.

  • 유승윤

    혹시라도 댓글 확인하시면 도와주세요. 부탁드립니다. (눙물)
    Feed와 Maker를 사용하서 만들었는데요. IFTTT가 활성화가 안됩니다. 봇(@Leopard_RSS_bot)도 만들고 채널(https://telegram.me/LRtorrent)도 만들고 해볼 수 있는 건 다 해봤는데도 안됩니다. 도와주세요 (눙물 X 100)

    https://uploads.disquscdn.com/images/c0b4222cf2892c8f1d3e1a75b11cf7d21b5100e126442dac6c72045e2ba0ef09.png

    • 에 .. 안 될 이유는 없을 거 같은데 … 해당 api 사용해서 간단한 텍스트 정도가 잘 전송되는지, 채널에 봇 초대하고 관리자 권한 주신 게 맞는지 체크해보세요.

      그래도 안 되면..

      그림과 같이 URL 에 센드메시지까지 문자열로 같이 넣어주고 한 번 더 해보시고요 ;; 혹시 모르니까 이스케이프 <<>> 이런 거 가뒀다 풀었다도 해보시고 ;;

      https://uploads.disquscdn.com/images/e760f9ce97c58fb255255f6f4741e7cf393a2b3f7862c5d7dc86b71f3a4d7c9b.png

      • 유승윤

        URL부분의 chat_id=@ththlink&의 ththlink는 혹시 채널 아이디를 넣은 건가요?
        Body 부분의 {“text: “RT @<<<(생략)"} 부분은 이전에는 채널 아이디를 입력했던 거 같은데 굳이 그럴 필요가 없는 건가요?

    • 2. 두 번째로 최근에 IFTTT 에서 텔레그램을 직접 지원하기 시작했기 때문에 이제 특별한 경우가 아니면 Maker 채널 사용하지 않아도 됩니다. 제 블로그에 자세히 설명했으니 http://seoulrain.net/2016/12/11/telegramifttt/ 참고하세요.

      더 쉽고, 이스케이프 문자 안 챙겨줘도 더 잘 됩니다.

      https://lh3.googleusercontent.com/-GpfkBpWpGpU/WHP5enHwWcI/AAAAAAADiwI/Oam-3lNpty4/s0/%2525E3%252585%252581%2525E3%252585%252581%2525E3%252585%252581.png

      • 유승윤

        사실 이 방법은 어제 해서 성공하긴 했습니다. 단지, 텔레그램에서 IFTTT봇이 하나만 주어지기 때문에 어떻게 사용해야 할지 난감한 부분이 있어요. 제가 모든 기능을 알지 못해서 그런 걸 수 도 있는데요… 문제는 두 곳의 사이트에서(A, B로 가정) rss를 받아서 서로 다른 두 채널(a, b)(또는 그룹)로 따로 나눠서 보내야 할 경우 어떻게 해야 할지를 모르겠습니다.

        요약하면 저는 A에서 발행하는 rss를 a채널로 보내고, B에서 발행하는 rss를 b채널로 받아보고 싶은 경우입니다.

        문제는 1인당 IFTTT봇이 하나만 주어지는 것 같은데요. 제 나름대로 IFTTT에서 해본 결과 둘중 하나가 작동을 안합니다. 상황이 이렇다보니 Maker 채널을 이용하는 것을 포기할 수 가 없을 거 같습니다.(눙물)

    • 3. 그리고 공개된 공간에 봇 api 공개는 안 좋아요. 나중에 다시 받으시길.

      • 유승윤

        일단 다 해결되면 바꾸겠습니다. 아직도 해결될 기미가 보이지 않네요.