가공된 정보를 텔레그램으로 수진하는것입니다. 네이버 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); |
사용에 대해서 캡쳐를 해야 하지만은 공개해도 될 내용이 없어서 추후에 공개해도 무관한 내용이 올라오면은 캡쳐 해서 올려 보겠습니다.