텔레그램 메신저는 프로토콜이 공개 되어 있는 메신저이다.

 

이로 인해 전세계 수많은 사람들이 각각 자신만의 방식으로 메신저를 만들수 있는 구조이다.

 

여기서는 https://github.com/vysheng/tg 이 github 에서 제공 되는 Telegram CLI 를 가지고 설치를 할 것이다.

 

 

필자는 라즈베리파이2 에 raspbian OS 를 기준으로 설명한다.

 

 

 

라즈베리파이에 Telegram CLI 설치하기

 

 

1. pi 계정 디렉토리로 이동

cd /home/pi

 

2. apt-get 패키지 업데이트

sudo apt-get update

 

3. Telegram CLI 에서 사용하는 필수 라이브러리 설치

sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make git-core python2.7-dev libjansson-dev sqlite3

 

sqlite3 는 bot 을 만들때 사용할 DB 도구이다.

 

4. Telegram CLI Source 다운로드

git clone --recursive https://github.com/vysheng/tg.git && cd tg

 

5. Makefile 생성하기.

./configure

 

6. Source 빌드 하기

make 

 

컴파일 시간이 꽤 오래 걸린다.

 

 

컴파일이 완료 되면 다음과 같이 실행해보자.

 

 

bin/telegram-cli -k server.pub

 

Telegram CLI 를 처음 실행 하고 조금 기다리다 보면 다음과 같은 메시지를 볼 수 있다.

 

phone number: +821012341234               <-- 만약 010-1234-1234 라면 +821012341234  라고 입력한다.

code :              <-- 위 핸드폰 번호를 제대로 입력 했다면 해당 번호로 SMS 메시지가 오거나 이미 텔레그램을 사용중이라면 해당 번호로 사용중인 텔레그램 앱으로 인증 코드가 전송되는데 그 코드 값을 입력하면 된다.

 

 

팁 : 필자는 KT 폰을 사용중인데 KT 부가서비스 중에 투넘버 서비스가 있다. 핸드폰 하나에 번호를 하나 더 부여 받을 수 있는 기능인데... 유료다.

무려 월3000원이나 하는 비싼 서비스이다.

 

하지만 부가서비스를 신청 하고 Telegram 만 인증을 한 다음 그 다음날 부가서비스를 해지했더니 100원 정도가 추가되는걸 확인했다.

100원으로 Telegram 계정을 하나 더 만들어서 사용하자.

단점 : 부여 받은 전화번호는 부가 서비스를 해제하면서 다른 사용자가 가져 갈 수도 있는 번호이니 왠만하면 텔레그램을 안쓰는 사람의 번호를 이용하는게 좋을듯 하다.

최근, NextPlus 라는 앱을 이용해서 무료 SMS 번호를 하나 생성하고 그 번호로 텔레그램 인증을 받으니 잘 됩니다.

투넘버 서비스보다는 위 앱을 이용해서 가상 번호 하나 만들어서 쓰시는게 좋을듯 합니다.

 

자세한 사용 방법은 TextPlus 나 NextPlus 로 검색해보시면 많이 나오더군요 ^^

 

 

텔레그램 CLI 가 실행 되면

>  이 기호가 보일것이다.

 

여기서 help 라고 명령을 치면 Telegram CLI 에서 사용 할 수 있는 명령어 목록들이 보인다.

 

 

※ 텔레그램이 한번 인증 되었다면 인증 파일이 생성이 되는데 그 경로는 다음과 같다.

 

/home/pi/.telegram-cli

 

 

여기서 .telegram-cli 이 디렉토리만 백업해서 가지고 있으면 라즈베리파이를 포멧했다가 다시 설치 해도

 

.telegram-cli 만 복구 해주면 인증하지 않아도 그전에 인증한데로 작동한다.

 

인증 과정이 귀찮으신 분들은 이 디렉토리를 백업해두자.

 

cd /home/pi

tar cvfz tgauth.tgz ./.telegram-cli

 

tgauth.tgz 파일을 안전한곳에 보관한다.

 

 

 

 

다음 2부에서는 기본적인 메시지 전송과 활용 방법, BOT 의 기초를 만들어 보는 강좌를 공개합니다.

 

 

 

필자가 활용 중인 BOT

 

1. 동네 예보 조회

 

 

 

 

2. 간단한 사전 기능 

 

 

 

3. 사진 촬영 후 전송 , 토렌트 검색 및 토렌트 다운로드

 

 

 

4. 라즈베리파이 시스템 체크 기능

 

 

 

 

간략하게나마 위와 같은 기능들을 개발해서 사용중이며 강좌를 통해 공개 예정입니다.

 

이외에도 자신의 XE 게시판에 글이 등록되면 알림을 보내는 기능, Torrent 다운로드 완료 알림 등등 알림 메시지로도 사용중에 있습니다.

 

 

 

관련글
저작자 표시 비영리 변경 금지
신고

  • BlogIcon 종달 2015.07.27 21:36 신고

    투넘버보다 더 좋은게 있습니다... 유심 데이터 쉐어링이죠... 쉐어링 자식이 되는 유심에도 번호가 있어서 기본적으로... 문자수신이 가능합니다... 1회선은 무료이니 하나정도 개통해서 쓰셔도 될거라고 봅니다...

    1. BlogIcon Acidpop acidpop 2015.07.28 09:06 신고

      좋은 정보 감사합니다. ^^;

      저도 최근에 여러 시도를 해보다가 NextPlus 라는 앱을 사용해서 무료 SMS 번호를 하나 생성해서 인증해보니 잘 되더라구요

  • 카스 2015.11.23 18:59 신고

    위 내용 중 인증 시 휴대폰 번호를 적게 되는데, 그렇다면 이후 부터 텔레그램에게 메시지 전송은 인증받은 전화번호에서만 가능한가요?
    관리자가 여러명인 경우 그룹채팅방에서 같이 메시지를 보낸다거나 또는 특정 관리자가 별도의 방에서 보낼 순 없나요?

    1. BlogIcon Acidpop acidpop 2015.11.24 09:02 신고

      질문 내용을 정확히 이해 하지를 못했습니다...
      위 내용중 휴대폰 번호를 적는 부분은 Telegram 의 가입 절차입니다.
      Telegram 계정은 무조건 휴대폰 번호가 있어야만 됩니다.

    2. 카스 2015.11.24 18:17 신고

      질문이 다소 설명이 부족했던 것 같습니다.

      제가 윈도우 cygwin 환경에서 telegram-cli를 설치하여 테스트중입니다만,
      최초 실행 후 인증 시 제 휴대폰 번호를 입력하니, 자동으로 텔레그램 메신저 상에
      제 이름으로 된 채팅방이 생성되며 여기로 인증코드가 날라 왔습니다. (SMS 또한 왔습니다.)

      위 과정을 거친 후 테스트 진행 시(lua 스크립트 이용 실행)
      제 이름으로 된 채팅방에서만 메시지가 전달되고, 스크립트 상에서는 어떤 채팅방이든 메시지를 보낼 수 있었습니다.

      문의의 핵심은 저 말고 다른 사람이 telegram-cli쪽으로 메시지(명령)를 보낼 수 있는가 입니다.
      제 이름으로 된 채팅방은 누구를 초대할 수도 없고 저만 사용할 수 있는것으로 확인되고 있습니다.

    3. BlogIcon Acidpop acidpop 2015.11.24 18:58 신고

      Telegram CLI 는 휴대폰 번호 기반에 ID검색도 허용이 됩니다.

      다른 사람이 카스님이 인증한 휴대폰 번호를 연락처에 가지고 있고 Telegram 에 가입 하였다면 Telegram 친구 목록에 추가 됩니다.
      추가된 Telegram 계정에 메시지를 보내면 사용 할 수 있습니다.

      저 같은 경우도 Telegram BOT 계정을 따로 있고
      BOT 계정 외에 3명 정도가 BOT에게 메시지를 보내서 사용하고 있습니다.

      혹시 lua script 중에 basicbot.lua 파일의 최상에 보시면
      auth_phone 라는 변수가 있고 휴대폰 번호를 적는 부분이 있습니다.
      이 부분에 폰 번호를 안 쓰신건 아닌지요?
      bot lua 스크립트는 모든 사람이 BOT 에 메시지를 보내서 처리하지 못하도록 폰 번호를 가지고 걸러 내도록 프로그래밍 되어 있습니다.

    4. 카스 2015.11.25 17:40 신고

      오옷~ 감사합니다~

      단순히 다른사람이 저에게 메시지를 보내면 되는 거였네요.
      이걸 몰라 헤매다니.. 많은 도움 되었습니다.

  • urxtion 2016.01.18 20:59 신고

    텔레그램 cli를 통해서 위와같은 사전기능과 같이 파싱기술을 사용한 여러가지 기능들을 구현하고자하는데
    위와같은 사전기능은 어떤방식으로 만들어진건가요 curl을 이용한것인가요?..
    팁을주실수있으신지 ㅠㅠ! 부탁드립니다

    1. BlogIcon Acidpop acidpop 2016.01.19 00:29 신고

      사전 기능은 내부적으로 상당히 오래된 구식 사전 DB를 가지고 select 쿼리 해서 나온 결과를 보내주는 기능입니다.
      웹에서 가져오는건 아니에요

  • BlogIcon Dmasters 2016.05.19 12:11 신고

    좋은 글 정말 감사합니다 ^^ 너무나 유용한 정보이네요.
    저도 지금 비슷한 기능을 만들려고 할려고 하는데요... 저 같은 경우에는 라즈베리파이의 GPIO 핀에서 어떤 값을 받으면은 자동으로 특정 단어를 텔레그램으로 메시지를 보내는 기능을 만들려고 합니다...
    그런데 acidpop 님의 글 끝에 보니 " 자신의 XE 게시판에 글이 등록되면 알림을 보내는 기능" 라고 말씀하셨던 부분이 아무래도 제 기능과 좀 유사한 부분이 있지 않을까 싶은데요... 그래서 제가 이쪽 부분으로는 전혀 무지하다보니... 혹시나 조언을 들을 수 있을까 싶어 이렇게 글을 쓰게 됐습니다.

    저 같은 경우에는 아두이노에서 1개의 핀이랑 라즈베리파이 1개 GPIO핀이랑 연결을 해서 아두이노 핀에서 라즈베리파이로 신호를 보내면은 라즈베리파이에서 자동적으로 특정 텔레그램 사용자에게 메시지를 보낼려고 합니다.

    그런데 5부 까지의 글들을 쭉 읽어보면서 이해가 안되는 부분이 많아서 그런지... 제가 이해한 내용 중에는 일단 라즈베리파이 터미널로 텔레그램 관련 설치 다 끝내고 특정 명령어(msg 홍길동 ~~)를 입력하면은 대상에게 메시지를 보낼 수 있는 기능은 분명 되는것 같은데 !...
    이게 저희가 직접 명령어를 매일 입력하지 않고, 아두이노 핀에서 라즈베리파이 핀으로 신호가 오면은 바로 터미널창에 특정 명령어를 자동으로 입력해서 텔래그램 메시지를 보내고 싶은데.. 이게 가능할까요 ? 혹시 뭐... 파이썬을 다뤄야만 가능한가요 ?...

    1. BlogIcon Acidpop acidpop 2016.05.19 16:22 신고

      안녕하세요.

      충분히 가능합니다.

      만드신 프로그램이 어떤 언어로 만들어진지는 잘 모르겠지만
      C/C++ 이라면
      system 함수를 이용해서 하시면 됩니다.

      Telegram CLI 보다는 Telegram BOT 을 이용하시는게 더 편할것 같습니다.

      사용 방법은 다음과 같습니다.

      vi 등의 편집기로 tgbot.sh 파일을 생성합니다.

      ---------------------------------
      #!/bin/sh

      argc=$#

      if [ 0 -eq $# ]
      then
      exit 0
      fi

      TEXT=$2
      CHAT_ID=$1


      TOKEN="12345:ABCDEFG-TOKEN_TOKEN"

      curl -k -d "chat_id=$CHAT_ID" --data-urlencode "text=$TEXT" https://api.telegram.org/bot$TOKEN/sendMessage

      echo "send message : $TEXT"
      --------------------------------------------
      위 내용을 입력 하시고

      chmod 755 tgbot.sh

      tgbot.sh '메시지를받을사용자의chat_id' '메시지내용'

      이런식으로 사용이 가능합니다.

      C/C++ 에서는
      system("tgbot.sh \"메시지를받을사용자의chat_id\" \"메시지내용\"";);

      이렇게 사용하셔도 되고

      system 함수 안에

      "curl -k -d \"chat_id=12345\" --data-urlencode \"text=메시지내용\" https://api.telegram.org/bot$TOKEN/sendMessage"

      위 내용을 chat_id 와 text 내용을 바꿔서 그대로 실행 시켜도 됩니다.


      만약 Telegram CLI 를 사용하시고자 한다면

      telegram-cli -e "msg 홍길동 메시지"

      이 명령으로 사용이 가능합니다.

    2. BlogIcon Dmasters 2016.05.20 23:03 신고

      오우... 정말 친절하게 자세히 알려주셔서 감사합니다 !
      최대한 빠른 시일 안에 한 번 테스트해봐야겠네요 !
      그런데 혹시 죄송합니다만... GPIO핀 텔레그램BOT 연계하는 부분이 어떤 부분인지 잘 모르겠는데 혹시 알려주실수 있으신가요 ?
      제가 잘 몰라서 그런지 GPIO핀을 입력 받아서 텔레그램BOT과 연계해서 명령어를 전달하는 부분이 어느 부분인지 잘 모르겠네요 ...
      에고 괜히 귀찮게 해드리는것 같아 죄송합니다 ㅠ_ㅠ...

    3. BlogIcon Acidpop acidpop 2016.05.23 09:02 신고

      답변이 늦었습니다.

      GPIO 를 제어 하는 프로그램을 직접 만드신게 아닌가요?

      해당 소스에서 GPIO 를 입력 받은 후의 코드에

      c/c++ 이라면 system함수를 이용하셔서 위에 설명 드린 명령을
      그대로 문자열로 입력 하시면 작동 합니다.

    4. BlogIcon Dmasters 2016.05.28 13:35 신고

      답변 감사합니다 ^^
      오늘에서야 시험삼아 텔레그램 봇을 만들어서 간단한 명령을 파이썬으로 테스트는 해보았습니다.
      그런데 이번에는 텔레그램 CLI 를 설치해서 할려고 하는데,

      bin/telegram-cli -k server.pub

      명령어를 입력하면은 아래와 같이 에러가 납니다.

      Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
      Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
      This is free software, and you are welcome to redistribute it
      under certain conditions; type `show_license' for details.
      Telegram-cli uses libtgl version 2.1.0
      Telegram-cli includes software developed by the OpenSSL Project
      for use in the OpenSSL Toolkit. (http://www.openssl.org/)
      I: config dir=[/home/pi/.telegram-cli]
      > telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0' failed.
      SIGNAL received


      마지막 > 부분에서는 정상적이라면 폰넘버를 요구해야하는데 말이죠... 그래서 혹시나 설치하는 중간에 꼬였나 싶어서

      sudo apt-get remove libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev make git-core python2.7-dev libjansson-dev sqlite3

      sudo rm -r tg

      로 삭제를 해보고 다시 순서대로 설치해봤는데도 같은 에러가 뜨네요...
      현재 라즈베리파이3 를 사용하고 있는데 음...
      혹시 어떤 원인인지 알 수 있을까요?
      그리고 cli 관련 설치했던걸 완벽히 지우는게 위 명령어로 지우면 되는건가요 ?

  • BlogIcon Dmasters 2016.05.28 14:38 신고

    찾아보니 텔레그램 cli 가 1.2 에서 1.4.1 로 업그레이드 되면서 아무래도 저와 같은 동일 증상을 겪는 사람들이 꽤 있는걸로 보입니다...
    https://github.com/vysheng/tg/issues/925
    해당 사이트에서 댓글을 보면은..

    same error for me .. I had to comment line 101 of tgl/mtproto-utils.c and re-run make to make it work!

    라고 적혀 있는데... 어떤 분이 해결을 하시고 다른 분들도 같은 방법으로 해결했다는 것 같은데
    어떻게 하란 것인지 잘 이해가 가질 않네요.. ㅠㅠ

    //

    꼭 이렇게 질문글을 남기고 나면은 이상하게 해결하게 되네요 ...
    해결방안은 아래 사이트에서 찾았습니다..
    https://github.com/vysheng/tg/issues/1070

    텔레그램 1.4 cli 부터는 tg/tgl 경로에 있는 mtproto-utils.c ㅏ파일에서
    assert (0); // As long as~~~~
    이 부분에서
    // assert(0); // As long as ~~~
    로 바꿔줘야하네요 총 이 문구가 2개가 있는데 다 바꾸고 나니 정상적으로 폰 넘버를 요구하네요

    그런데 또 폰 넘버가 현재 사용하고 있는 번호로 하면 없는 번호라고 해서... NextPlus로 가상 번호로 얻어서 해도 안되더라구요...
    처음엔 등록하겠냐는 문구가 나오고 code 입력 나왔는데 문자가 전혀 안오더니만 다시 폰 넘버 써서 하니 가상 번호는 안되요 ! 라고 하면서 안되서... 만지작만지작 하다가....
    NextPlus 설정에서 휴대폰 번호 추가하기 해서 제 실제 번호를 추가하고 다시 cli 에서 폰넘버 제 실제 번호 넣으니 정상적으로 되고 code 도 정상적으로 와서 cli 등록하고 실행 정상적으로 되네요

    1. BlogIcon Acidpop acidpop 2016.05.30 09:40 신고

      좋은 정보 감사합니다. ^^

      Telegram CLI 를 요즘은 안쓰고 있다보니 버전이 1.4.1 까지 올라간지 모르고 있었네요..

      NextPlus 가상 번호는 최근에는 막힌거 같더라구요

  • Chobong 2016.11.13 20:36 신고

    저 텔레그램을 재설치한 이후, 계속 Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
    Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
    This is free software, and you are welcome to redistribute it
    under certain conditions; type `show_license' for details.
    Telegram-cli uses libtgl version 2.1.0
    Telegram-cli includes software developed by the OpenSSL Project
    for use in the OpenSSL Toolkit. (http://www.openssl.org/)
    I: config dir=[/home/pi/.telegram-cli]
    > [warn] Epoll ADD(4) on fd 6 failed. Old events were 0; read change was 0 (none); write change was 1 (add): Bad file descriptor
    라고 계속 에러가 뜨네요 혹시 해결법 알고 계신 분 있나요?

    1. BlogIcon Acidpop acidpop 2016.11.14 09:47 신고

      /home/pi 아래에
      .telegram-cli 디렉토리를

      rm -rf ./.telegram-cli 명령으로
      삭제 하시고 다시 실행 해 보시면

      인증 과정을 다시 물어 보게 될겁니다.

      .telegram-cli 디렉토리 안에 인증 파일들이 깨진것 같아요.

    2. Chobong 2016.11.17 16:43 신고

      감사합니다. 덕분에 시원하게 문제가 해결됐네요

    3. BlogIcon Acidpop acidpop 2016.11.17 19:41 신고

      해결이 되셨다니 다행입니다. ^^

    4. Chobong 2016.11.20 20:19 신고

      한 가지 더 질문이 있어요!!
      Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
      Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
      This is free software, and you are welcome to redistribute it
      under certain conditions; type `show_license' for details.
      Telegram-cli uses libtgl version 2.1.0
      Telegram-cli includes software developed by the OpenSSL Project
      for use in the OpenSSL Toolkit. (http://www.openssl.org/)
      I: config dir=[/home/pi/.telegram-cli]
      > telegram-cli: tgl/mtproto-utils.c:101: BN2ull: Assertion `0' failed.
      SIGNAL received

      라고 에러가 뜨는데요, 이 에러는 위의 댓글에 해결방법이 나와있어, mtproto-utils.c 의 2줄을 주석처리 했음에도 이와 같이 에러가 뜨네요. 혹시 위의 에러를 해결하기 위해 주석처리하는 방법 외에도 추가적인 방법 알고 계신 분 있나요?

    5. BlogIcon Acidpop acidpop 2016.11.21 09:22 신고

      요즘 Telegram CLI 의 소스에 문제가 많은건지..

      잦은 오류가 있나보네요.

      일단 에러 메시지데로

      mtproto-utils.c 파일의 101번째 라인

      assert (0);

      이 코드를 주석 처리 해주시고
      다시 컴파일 해서 사용해 보세요

    6. seohyeon 2016.11.24 10:01 신고

      조금 늦은 감이 있지만 해결방법을 못 찾으셨을때는 주석처리 하신 뒤에 ~/tg에서 make 명령어를 한번 더 써주시는 것을 권잡합니다.

    7. Chobong 2016.11.27 21:04 신고

      드디어 해결되었네요. 주석처리한 다음 다시 한번 컴파일을 할 생각을 못했네요.. 위의 두분 모두 해결법을 알려주셔서 정말 감사해요.

  • KD 2016.12.07 21:51 신고

    안녕하세요. 블로그를 보고 라즈베리 파이로 텔레그램 봇을 만드는 중인데요. 제가 보낸 메시지를 받아서 그 내용을 코드 안쪽에서 변수에 저장하려면 어떻게 해야하나요? 저는 지금 pyTelegramBotAPI을 써서 제어하고 있습니다.

    1. BlogIcon Acidpop acidpop 2016.12.08 10:10 신고

      안녕하세요

      pyTelegramBotApi 를 사용해보지는 않았지만 해당 github 를 보니 아래와 같이 Message Handler 를 사용하더군요.

      @bot.message_handler(commands=['start', 'help'])
      def handle_start_help(message):
      pass


      위 내용은 /start 또는 /help 를 보냈을때 아래 함수가 작동 하는 구조인데

      변수를 하나 선언 하고 그냥 대입 시키면 되는게 아닌가요?

      @bot.message_handler(commands=['start', 'help'])
      def handle_start_help(message):
      saveMessage = message.text

      이렇게 하면 saveMessage 라는 변수에 저장 될것 같은데요

    2. KD 2016.12.08 21:33 신고

      오, 해보니까 되네요! 이걸로 며칠동안 고민했는데요 ㅋㅋㅋ

      정말 감사합니다!!

  • BlogIcon xoskd 2017.03.24 00:02 신고

    작성자분께서 하신 동네예보조회를 만들어보고싶은대 이 블로거에있는 5단계 까지 다했습니다
    그담에 어떻게 해야되는지 알려주실수 있으신가여?

    1. BlogIcon Acidpop acidpop 2017.03.24 09:07 신고

      안녕하세요

      날씨 예보 조회는 단순히 기상청 웹사이트의 동네 예보 조회 기능의 RSS 를 가져와서
      각 값에 맞게 설명만 붙여주는 형태 입니다.

      https://github.com/acidpop/bot

      여기 소스에서 webapi.lua 파일은 각 동네의 동네 코드를 db 조회 하는 기능을 담담하고

      shell/getwether.sh 는

      http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=동네코드값

      위 url 을 가져 와서 그냥 파싱 하는 역할을 합니다.

      각 소스들을 분석해 보시면 되고
      동네 코드는 tgbot.db 파일이 sqlite 로 만들어진 파일입니다.
      db 파일 안에 동네 이름과 동네 코드가 매치 되어 있으니 사용해 보시면 됩니다.

다른 카테고리의 글 목록

강좌/RaspberryPI 활용 카테고리의 포스트 목록