[PHP] 그누보드5 게시글 등록 텔레그램 Push 알림 플러그인
지난 주에 작성한 포스트를 바탕으로 그누보드5에서 게시글 등록 때 Telegram(텔레그램)에 Push 알림을 보내는 플러그인을 만들었다. 게시글 등록 때는 관리자에게 알림이 전송되고 댓글은 게시글 작성자에게 알림이 전송된다. 이 플러그인을 활용해서 그누보드5 메모 수신 등의 알림을 텔레그램으로 전송할 수 있는데 이것은 플러그인의 수정이 필요하다. 텔레그램으로 메세지를 전송하는 Class 는 아래와 같다.
<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
/**
* Author : chicpro (https://chicpro.dev)
*
* https://chicpro.dev/13536
* https://chicpro.dev/13541
* https://core.telegram.org/bots
* https://core.telegram.org/bots/api#sendmessage
**/
class TELEGRAM
{
private $apiURL;
private $chatID;
private $token;
private $text;
private $parseMode;
public function __construct($token) {
$this->token = $token;
$this->apiURL = 'https://api.telegram.org/bot';
$this->parseMode = 'Markdown';
}
public function setChatID($chatID) {
$this->chatID = $chatID;
}
public function setText($text) {
$this->text = $text;
}
public function setParseMode($mode) {
$this->parseMode = $mode;
}
public function sendMessage() {
$url = $this->apiURL . $this->token . '/sendmessage?chat_id=' . $this->chatID . '&text=' . $this->text;
if($this->parseMode && ($this->parseMode == 'HTML' || $this->parseMode == 'Markdown'))
$url .= '&parse_mode=' . $this->parseMode;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$response = curl_exec($ch);
curl_close($ch);
return $response;
}
}
Telegram 플러그인 : telegram.push.zip
플러그인을 사용하기 위해서는 첨부된 파일을 다운로드 후 압축을 해제하여 각 디렉토리에 파일을 복사한다. config.php 파일을 열어 TELEGRAM_TOKEN 값을 설정해야 하는데 이것은 Push 알림을 전송할 메세지봇의 토큰이다. 봇의 토큰을 확인하는 것은 이전 포스트 https://chicpro.dev/13536 에 설명되어 있다. 또한 알림을 수신하기 위해서는 텔레그램 Chat ID를 확인해야 하는데 Chat ID는 포스트 https://chicpro.dev/13541 를 참고하면 된다. write_update.tail.skin.php, write_comment_update.tail.skin.php 파일을 사용하는 게시판 스킨 디렉토리에 복사하면 Push 알림이 전송된다. 회원별 Chat ID는 member 테이블의 mb_10 필드에 저장된 것으로 설정돼 있으며 config.php 파일에서 G5_TELEGRAM_CHAT_ID 값을 변경할 수 있다. 그리고 관리자 외에 사이트 방문자가 텔레그램 알림을 수신하기 위해서는 텔레그램에서 메세지봇을 검색한 후 아래 이미지와 같이 hello 등의 간단한 대화를 해야만 그 다음부터 알림이 수신된다.
텔레그램에서 표시되는 알림은 아래 이미지와 같다.
플러그인에서는 메세지 타입을 Markdown 형식에 맞춰 보낸다. HTML 형식으로 보내려면 아래 문서를 참고하면 된다. 텔레그램에서는 아래 문서에 나열된 태그외 다른 태그가 있을 경우 메세지 전송이 되지 않는 것으로 보인다.
메세지타입 : https://core.telegram.org/bots/api#sendmessage
플러그인 Git Repo : https://github.com/chicpro/youngcart5/commits/telegram
안녕하세요!!
감사하게 알려주신대로 설정을 끝냈는데요.
글쓸때마다 접속자에 +1 씩 계속늘어나는데 상관없이 그냥 사용하면되나요?.
접속자보면 같은아이피에 봇?인거같은데요.
좋은 지식 감사합니다.!
접속자수가 증가하는 것과 이 플러그인은 관련이 없을 것입니다.
다른 문제가 있는 것이 아니라면 그냥 사용하시면 될 것 같습니다.
답변감사합니다! 정말 죄송하지만 하나만 더여쭤보겠습니다..!!
알람작동이 잘되다가 시간이 좀지나면 봇이 접속자에 사라져서 없게되면 글작성할때 알람이 오지않는거 같습니다.
글한번 작성후 접속자에 봇아이피가 나타나게 되면 그때부터 다시 글작성하면 알람이 제대로 오는데요.
제가 지금 생긴 문제점이 (1. 시간이 지나고 나서 글 다시 작성시 봇 알람이 오지 않음, 2. 첫번째 글 작성후 두번째 글 부터 제대로 봇 알람이 작동함)
염치없지만 어떤 문제인지 힌트좀 주시면 감사하겠습니다..!
제 테스트 계정에서 게시글을 계속해서 작성해보니 아무 이상없이 알림이 전송됩니다.
이 플러그인은 사이트에 접속하는 봇과는 관련이 없고 게시글이 작성됐을 때 텔레그램 API 서버로 알림내용을 보내고 API 서버에서 알림 내용을 텔레그램으로 전송하는 것입니다. 알림이 오지 않는다면 알림 내용을 텔레그램 API에서 제한하는 태그 등이 포함되어 있지 않은지 확인해 보시거나 API 서버와의 통신 후 리턴되는 값을 확인하셔서 오류를 직접 확인해 보셔야 합니다.
답변 해주셔서 감사합니다 알려주신대로 참고해서 해보겠습니다!
다시한번 좋은 지식 공유 감사합니다 (_ _)