Node로 간단한 Telegram bot 생성하기

filoscoder·2019년 12월 15일
7
post-thumbnail

많은 회사들이 협업을 중시하고 그리고 그것을 극대화하기 위해 소통의 효율성을 중요하게 생각할 것이다. 대부분에 회사들이 slack을 많이 사용하는 것 같다. 하지만 규모가 조금 작은 스타트업이며 근무자들의 대다수가 컴퓨터에 앉아서 하는 작업이 많지 않다면? 그렇다면 핸드폰으로 빠르고 간편하게 그리고 안전성을 포기하지 않고 사용할 수 있는 서비스로 telegram이 있다.

🎯 필자는 Plating의 소프트웨어 개발자로 근무 중이며 사내 커뮤니케이션 툴로 telegram을 이용한다. 텔레그램의 가장 큰 장점 중 하나는 bot API를 커스터마이징 하여 사내 업무 효율을 높이는데 상당한 도움이 될 것이라고 생각한다.

🤔 Telegram 은 무엇인가?

텔레그램(Telegram)은 러시아 사업가 파벨 듀로프(Pavel Durov)가 설립한 멀티플랫폼 메시징 서비스다. 2013년 10월 20일에 안드로이드로 알파 버전이 출시 되었으며 현재 월간 이용자는 2억명으로 추산된다.

텔레그램의 주요 특징은 프라이버시며, 이를 위해 End to End (E2E) 암호화를 채택한다. 이것이 기업, 정부, 해커, 또는 다른 누군가가 보낸 메시지들을 보안성을 보장한다.

🤖 Telegram-bot 간단한 소개

bot은 텔레그램 내부에서 실행되는 third-party 애플리케이션이다. 사용자는 메시지, 명령 및 인라인 요청을 전송하여 bot과 소통 할 수 있다. Telegram-bot API는 HTTPS 요청을 사용하여 활용 할 수 있다.

👀 BOT은 어떻게 작동하는가?

Telegram-bot을 설정하기 위해 추가적인 전화번호가 필요하지 않은 특별유저로 생각하면 쉬울 것이다.
사용자는 두 가지 방법으로 봇과 소통 할 수 있다:

  1. BOT과 대화창을 열거나 그룹에 추가하여 메시지 및 (약속된) 명령을 통해 봇이 작동하도록 한다. 이것은 간단한 채팅봇이나 뉴스봇에 유용하다.

  2. BOT@username 을 언급하고 (약속된) 명령을 통해 직접 요청을 전송할 수 있다. 이를 통해 채팅, 그룹 또는 채널로 직접 콘텐츠를 전송할 수 있다.

사용자가 보낸 메시지, 명령 및 요청은 서버에서 실행 중인 프로그램으로 전달되어 핸들링한다. 텔레그램의 중간 서버는 Token으로 접근해 모든 데이터를 암호화 및 통신을 처리한다.

🙋‍♂️ 나만의 BOT 만들기!

일단 원하는 라이브러리와 기술 스택이 있을 수 있다. 필자는 다음과 같은 것을 사용하여 나만의 BOT을 만들어 볼 것이다:

📝 간단한 FLOW

  • Telegram에서 제공하는 BotFather에게 말을 건다
  • 새로운 Bot 생성을 요청한다 (/newbot)
  • BotFather에게 승인 토큰을 요청하여 복사해놓는다 (Telegram의 Bot API에 요청을 보낼때 필요하다)
  • Token을 이용하여 API와 통신하며 Bot 프로그램을 구현한다
  • local 서버를 구동하고 테스팅한다

🗿 #1. BotFather에게 말을 걸어 새로운 Bot 생성 요청

  1. /newbot 명령어를 사용하여 새로운 Bot 생성 요청
  2. 생성된 botname을 지정해준다 (예: simple_telegram_bot_test)
  3. 생성된 botusername을 지정해준다
    1. 사용되지 않은 username이여야 한다
    2. username은 무조건 bot 또는 Bot으로 끝나야 한다 (예: simple_telegram_test_bot)
  4. 새로운 bot 생성 성공: "Done! Congratulations on your new bot."
  5. 제공된 token을 복사해둔다.

📥 #2. Node.js 모듈 설치 및 프로그램 구현

  1. telegram-bot-api 다운 및 설치

    1. 원하는 폴더로 이동한 후 "npm init"로 프로젝트 초기화 (mac 터미널 기준)
    2. 텔레그램 api 모듈 설치: "npm i node-telegram-bot-api" (터미널 실행)
  2. npm 커뮤니티의 에시를 사용하여 프로그램 구현

    1. 프로젝트 폴더에서 새로운 js 파일 만들기 (simpleBot.js)
    2. telegram-bot-api에서 제공하는 예시simpleBot.js에 복사 붙여놓기
    3. botFather가 제공한 token으로 API 통신에 사용한다
    4. 간단한 프로그램 구현: simpleBot에게 /echo 명령 후 "msg" 메시지를 전송하면 앵무새처럼 재전송해 회신한다.
      // npm 모듈 호출
    const TelegramBot = require('node-telegram-bot-api');
    
    // `botFather`가 제공한 `token`으로 API 통신에 사용한다
    const token= '954234423:AAFVCGLtM_dE5JmhvDGlu2iC7ufO8DKGp4k'; // <--- 나의 Token
    
    // 새로운 'bot' 인스턴스를 생성해 'polling'으로 업데이트를 fetch 하게 한다
    const bot = new TelegramBot(token, {polling: true});
    
    // 정규식으로 '/echo'를 판별하고 그 뒤에 어떤 메시지든 'msg'에 담는다
    bot.onText(/\/echo (.+)/, (msg, match) => {   
        const chatId = msg.chat.id;
        const resp = "꺄악: "+match[1]; 
        // 식별된 "msg"는 보내온 채팅방('chatId')에게 앵무새처럼 재전송한다 ("꺄악: 'msg'")
        bot.sendMessage(chatId, resp);
     });
    
     bot.on('message', (msg) => {
         const chatId = msg.chat.id;
        
         // send a message to the chat acknowledging receipt of their message
         bot.sendMessage(chatId, 'Received your message');
       });
    1. simple_telegram_bot_test에게 메시지를 전송하면 꺄악 따라한다!

🏆 npm의 node-telegram-bot-api을 사용하여 간단한 텔레그램 bot 구현이 완료되었습니다.
이외에 telegram bot api는 무궁무진한 커스터마이징이 가능하다:
간단한 정보 알림이나 리마인더 뿐만 아니라, 정보 요청, 싱글/멀티 플레이어 게임, 다른 bot 서비스와 연동, 심지어 결제 서비스까지 개발가능하다. (자세히 더 보기)

🙏 긴 글 읽어주셔서 감사합니다!
오타, 잘못된 개념, 의견공유 언제든 환영입니다 🖖

profile
Keep thinking code should be altruistic

3개의 댓글

comment-user-thumbnail
2019년 12월 15일

캬 흥미로운 주제였네요. 감사합니다 ^_^

1개의 답글
comment-user-thumbnail
2019년 12월 20일

우와 정말 쏙쏙 이해가 갑니다 감사해요 😀✌🏽

답글 달기