[PHP] 텔레그램봇으로 정보 수신 받기


가공된 정보를 텔레그램으로 수진하는것입니다. 네이버 LINE이나 kakaotalk도 있지만 해당 메신저들은 공개된 API가 없어서 우회해서 받아야 하기 때문에 귀찮은 작업이 동반되지만 텔레그램은 봇을 통해서 제가 직접 메세지를 작성해서 보내면은 제가 수진을 할 수도 있습니다.

제가 활용하는것은 RSS수집후 필요한 정보 알림과, 서버의 정보를 일정시간마다 수신하는 방법으로 쓰고 있습니다.
이 방법외에도 봇을 통해서 계속 메세지를 받을 수 있습니다.

뭐 거창한것도 아니며, 제가 PHP로 사용하는 소스 코드입니다.
class를 흉내내서 만들어 둔것입니다.

※ PHP (cli)에서 작동합니다.

<?php
/*
https://telegram.me/botfather 접속하여 봇아빠를 채팅창에 호출 하고 다음 커맨드를 입력
 
-------------------------------
봇이름 /newbot
봇실제아이디(끝에 bot을 붙여준다)
/token
/setabouttext
봇정보 안내문구
/setdescription
접속문구
-------------------------------
 
token이 바로 api
*/
class telegram {
    
// 기본환경설정
    private $tokenKey = '토큰키';
    private $baseUrl = 'https://api.telegram.org/bot';
    private $sendBool = false;
    private $messageChatId = '';
    private $messageText = '';
    
    /**
     * @brief
     *
     **/
    public function __construct() {
        $this->baseUrl = $this->baseUrl.$this->tokenKey;
    }
    /**
     * @brief   curl 요청
     *
     **/
    private function GetCurl($url, $data=array()) {
        
        // 서버로 전송 및 결과 반환
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, false);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);
        curl_close($ch);
        
        return json_decode($result, true);
    }
     
     
    /**
     * @brief   텔레그램에서 정보를 가져오는것
     *
     **/
    public function getData($offsetId) {
        
        $url $this->baseUrl.'/getUpdates?limit=100&offset='.$offsetId; //?limit=1
        $return = $this->GetCurl($url);
        $returnData = array();
        foreach($return['result'] as $key=>$value) {
            //$Room_id[] = $value['message']['chat']['id'];
            $returnData[$key]['updateId']             = $value['update_id'];
            $returnData[$key]['messageText']          = $value['message']['text'];
            $returnData[$key]['messageDate']          = $value['message']['date'];
            $returnData[$key]['messageFromId']        = $value['message']['from']['id'];
            $returnData[$key]['messageFromUsername']  = $value['message']['from']['username'];
            $returnData[$key]['messageChatId']        = $value['message']['chat']['id'];
            $returnData[$key]['messageChatUsername']  = $value['message']['chat']['username'];
            
            // 단체방처리
            if( empty($returnData[$key]['messageChatUsername']) == true) {
                $returnData[$key]['messageChatUsername'] = $value['message']['chat']['title'];
            }
        }
        // 일단 받아온 정보 리턴
        return $returnData;
    }
    
    /**
     * @brief   텔레그램으로 전달하는것
     *
     **/
    public function setData($msg='', $chatId='') {
        
        $returnBool = false;
        
        if( empty($msg) == false && empty($chatId) == false) {
            //echo '전송 완료'.chr(10);
            
            // 메세제 URL 조합하기
            $urlSum = '';
            $urlSum .= $this->baseUrl.'/sendMessage?chat_id=';
            $urlSum .= $chatId;
            $urlSum .= '&text='.urlencode($msg);
            
            $sendStatus = $this->GetCurl($urlSum);
            $returnBool = $sendStatus['ok'];
            
        }
        
        return $returnBool;
    }
}

위에것이 전체적으로 사용되는 class 파일리며, 이제 Chat ID를 획득 해야 합니다.
전체 코드를 모두 공개 할 수는 없지만은 일단 일부 코드를 공개 합니다.

$tg = new telegram();
$returnData = $tg->getData($offsetId);
foreach($returnData as $key=>$value) {
        //echo "V 체크할ID         : ".$offsetId.Chr(10);
        //echo "V updateId      : ".$value['updateId'].Chr(10);
        //echo "V message Text: ".$value['messageText'].Chr(10);
        //echo "V message Date       : ".$value['messageDate'].Chr(10);
        //echo "V message From Id      : ".$value['messageFromId'].Chr(10);
        //echo "V message From Username     : ".$value['messageFromUsername'].Chr(10);
        //echo "V message Chat Id      : ".$value['messageChatId'].Chr(10);
        //echo "V message Chat Username      : ".$value['messageChatUsername'].Chr(10);
}

위코드를 가지고 이제 DB에 chatID를 저장하고 하면 됩니다.
그러면은 이제 봇을 통해서 대화방에 들어온 ID는 모두 DB에 저장되기 때문에 이 ID로 구분해서 전송을 할 수 있습니다.

호출하는것은 쉽게 아래와 같습니다.
일단 전송하는것인데…… 전송할 채팅방ID는 위에서 획득한 정보를 가지고 조합하시면 됩니다.

    $tg = new telegram();
    $returnBool = $tg->setData($value['sendText'], 채팅ID);

사용에 대해서 캡쳐를 해야 하지만은 공개해도 될 내용이 없어서 추후에 공개해도 무관한 내용이 올라오면은 캡쳐 해서 올려 보겠습니다.


답글 남기기

이메일 주소는 공개되지 않습니다.