Skip to main content

시놀로지 텔레그램 봇

시놀로지 텔레그램 봇을 만들어서 개인적으로 써오다가 몇가지 기능을 업그레이드하면서 미약하지만 공개를 해보면 어떨까 싶어서  GitHub(소스)와 블로그(사용법)에 남겨봅니다.

시스템정보확인, 다운로드 스테이션 목록보기/추가/삭제, 비디오목록보기 등의 명령처리가 가능하며, 작업 스케줄에 등록하면 다운로드 완료 알림, 최근 추가 비디오 알림 등이 가능 합니다.

 

준비

  • 시놀로지에 필요 패키지 설치 : Web Station(PHP), Git Server, Docker, MariaDB, phpMyAdmin
  • Web Station PHP 설정 변경 : open_basedir에 “/var/services/video” 추가
  • 텔레그램 봇 Token : 봇 Token 얻기
  • 시놀로지 HTTPS 적용 : 제어판에서 LetsEncrypt 적용하기

 

시놀로지에 소스 복사하기

시놀로지로 시놀로지 텔레그램 봇 소스를 복사하는 방법은 2가지가 있습니다.
첫번째는 시놀로지에 SSH로 접속하여 Git을 사용하는 방법이고, 두번째는 소스를 다운로드하여서 시놀로지에 직접 업로드 하는 방법 입니다. 여기서는 첫번째 방법을 설명하도록 하겠습니다. 두번째 방법의 경우 GitHub에 접속하여 “Clone or download”라는 초록색 버튼을 이용하여 다운로드 받은 후 시놀로지에 직접 업로드 하시면 됩니다.

먼저 SSH로 시놀로지에 접속합니다. 그리고 Web 폴더로 이동을 한 뒤 git clone 명령어를 사용하여 소스를 복사하여 주시면 됩니다.

 

의존성 패키지 설치

시놀로지 텔레그램 봇을 만들면서 PHP Telegram Bot을 기반으로하여 만들었기 때문에 해당 패키지의 설치도 필요로 합니다. 그래서 Composer가 필요로 하는데 Docker를 이용하여 쉽게 설치가 가능합니다.  (Docker + Composer 사용 방법)

이전에 복사한 시놀로지 텔레그램 봇 소스가 있는 폴더로 이동 후 Composer를 이용하여 의존성 패키지를 설치하여 줍니다.

 

봇 실행에 필요한 환경 설정

먼저 봇이 사용하는 폴더를 생성하고 생성된 폴더의 http 그룹에 쓰기 권한을 부여 합니다.

그리고 봇이 사용할 DB를 생성하고 “app/config/structure.sql” 을 이용하여 테이블을 생성하여 줍니다.

phpMyAdmin에 접속하여 root 계정으로 로그인을 합니다. “사용자 계정” 탭에 “사용자 추가” 메뉴를 통해서 DB 계정을 생성하여 줍니다. 이때 “동명의 데이터베이스를 생성하고 모든 권한을 부여”에 체크를 해주어 동명의 데이터베이스도 같이 생성을 합니다.

만들어진 DB로 이동을 하여 “SQL” 탭에 “app/config/structure.sql” 의 내용을 전부 복사하여 넣어준 뒤 실행하여 줍니다. 모든 테이블이 정상적으로 생성이 된다면 아래 이미지와 같은 모습을 확인 하실 수 있습니다.

마지막으로 “app/config/config-sample.php”를 복사하여 “app/config/config.php” 파일을 만들고 필요한 내용을 입력하여 줍니다.

vi에 익숙하신 분은 vi로.. 아니면 시놀로지 텍스트 편집기를 이용하여 Token 등 필요한 내용을 입력하여 줍니다. 이때 Admin Id만은 아직 그대로 두셔도 됩니다.

 

WebHook 등록하기

이제 봇에 명령어 등이 들어왔을 때 소스 쪽에서 처리 할 수 있도록 WebHook을 등록 할 차례 입니다.

방법은 간단합니다. 시놀로지 텔레그램 봇 소스 중 “set.php”를 실행하여 주시면 됩니다. 예를 들어 시놀로지 NAS의 URL이 “https://nas.mydomain.com/” 이라면 “https://nas.mydomain.com/synology-telegram-bot/set.php?secret=secret_key”를 웹 브라우저를 통해서 열어주시면 됩니다. 여기서 secret_key는 “app/config/config.php”에 입력하신 “secret”의 값 입니다.

 

텔레그램 봇 시작하기

텔레그램을 실행하여 준비과정에서 만든 봇과 채팅을 시작 합니다. 그리고 “/whoami” 명령을 통해서 봇 ID를 얻어 냅니다. 이렇게 얻은 봇 ID를 “app/config/config.php”의 Admin Id에 입력을 하여 줍니다.

이제 관리자 권한이 제대로 부여되었는지 확인하기 위해서 “/approval” 명령을 실행하여 봇 사용 승인 요청을 합니다. 만약, 정상적으로 관리자 권한이 부여되었다면 이미지와 같이 “봇 사용 승인 요청 알림” 메시지가 올 것 입니다. “/approve” 명령어를 통하여 승인 처리까지 하여 줍니다.

 

텔레그램 봇 작업 스케줄러 등록하기

다운로드 스테이션 완료 알림이나 사용자 접속 알림 등을 실시간으로 받기 위해서는 작업 스케줄러에 “cron.php”를 등록 할 필요가 있습니다.

DSM 제어판을 실행하여 작업 스케줄러 메뉴로 이동 한 뒤 “사용자 정의 스크립트”를 생성하여 줍니다. 스케줄은 매 1 분마다 실행이 되도록하고 작업 설정에 사용자 정의 스크립트를 입력하여 줍니다.

 

텔레그램 봇 SMS 알림 등록하기

시놀로지 중요 이벤트에 대한 알림을 받기 위해서는 SMS 알림을 등록 할 필요가 있습니다.

DSM 제어판을 실행하여 알림 메뉴로 이동 한 뒤 “SMS 서비스 제공업체 추가”를 하여 줍니다. SMS URL을 입력하고 다음을 눌러 필요한 값이 매챙되도록 해줍니다. 이때 chat_id는 “/whoami” 명령을 통해 얻은 봇 ID 값을 입력하여 주시면 됩니다.

 

12 thoughts to “시놀로지 텔레그램 봇”

  1. 중간에 phpMyAdmin에서 데이터베이스가 정상적으로 생성되었을 때의 이미지를 볼 수 없는데 부탁 드립니다.

  2. WEB HOOK 등록 시에 다음과 같은 에러가 나는데 이유가 무얼까요. 메세지를 봐서는 권한 문제인거 같아서 텔레그램봇 폴더에 http 쓰기 등록을 했는데도 같은 메세지가 나오는군요.

    exception ‘Longman\TelegramBot\Exception\TelegramException’ with message ‘Webhook was not set! Error: 401 Unauthorized’ in /volume1/web/synology-telegram-bot/vendor/longman/telegram-bot/src/Telegram.php:808 Stack trace: #0 /volume1/web/synology-telegram-bot/set.php(13): Longman\TelegramBot\Telegram->setWebhook(‘http://youngbin…&#8217😉 #1 {main}

  3. 감사합니다. 많은 오류가 있었습니다. 일단 토큰 id를 입력할 때 수기로 하다보니 숫자 1과 소문자 l의 오류, 말씀하신 https 오류가 있었습니다. 일단 webhook은 set 되었다는 메세지가 나왔습니다.

  4. 산 넘어 산입니다. 텔레그램 봇에서 /whoami 명령을 보내도 아무 소식이 없는데 admin id 라는게 저의 텔레그램 id를 찾는 거죠? 텔레그램 api를 통하여 9자리 숫자를 찾았는데 넣어도 반응이 없습니다.
    api를 통해서 보내보면 텔레그램 메세지가 가는 것 같은데, 시놀로지 쪽에서는 반응이 없네요.

  5. 이렇세 보내면
    https://api.telegram.org/bot봇토큰/sendMessage?chat_id=제텔레그램id&text=ok
    오는데

    현재 저의 config.php는 다음과 같습니다.

    ‘localhost’,
    ‘user’ => ‘phpMyAdmin에서 만든 사용자’,
    ‘password’ => ‘phpMyAdmin에서 만든 사용자 암호’,
    ‘database’ => ‘phpMyAdmin에서 만든 사용자’,
    ];

    // Commands
    define(‘COMMANDS_PATH’, dirname(__DIR__) . ‘/commands/’);

    // Admin chat id
    define(‘ADMIN_ID’, 제 텔레그램 id);

    // synology address
    define(‘SYNOLOGY_URL’, ‘http://localhost:5000’);

    // Synology credentials
    $synology_credentials = [
    ‘account’ => ‘시놀로지 계정’,
    ‘password’ => ‘시놀로지 암호’,
    ];

    // Synology video directory path
    define(‘SYNOLOGY_VIDEO_PATH’, ‘/var/services/video/’);

    // Synology video sub directory name
    // ‘label’ => ‘real directory name’
    $synology_video_category = [
    ‘Movie’ => ‘movie’,
    ‘Animation’ => ‘animation’,
    ‘TV-Show’ => ‘TV show’,
    ‘TV-Drama’ => ‘TV drama’,
    ];
    $hard_scan_video_category = [
    ‘TV-Show’,
    ]
    ?>

  6. 테짱님 안녕하세요
    텔레그램 챗 봇을 설치하려고 여기저기 헤메다가 테짱님께 들어왔습니다.

    텔레그램 채팅방에 보면

    /price@btc

    뭐 이런식으로 입력하면

    btc의 가격부터 변동사항까지 쭈루륵 뜨는 외국 채팅방이 있더군요

    혹시 어떻게 만들줄 아실까요?

    제가 설치하려는 코인은 퓨전코인이라는 fsn코인인데요..

    혹시 그리고 저희가 어떤 기업의 한국 커뮤니티를 구성했습니다.
    이와 관련해서 컨택좀 하고 싶습니다..

    soler1789@naver.com 입니다.

    1. 데이터만 제공되는 곳이 있다면 /price@btc 에서 @기준으로 파싱해서 결과값을 전달하는 것은 조금만 찾아보시면 될 듯 합니다. 텔레그램봇 관련 예제는 많다고 생각되네요.

      요즘 개인적인 시간이 없다보니 다 자세한 도움은 드리기 힘들듯 합니다. 죄송합니다.

댓글 남기기