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