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