알림센터와 텔레그램 연동
사실 연동방법은 쉽지만, 텔레그램의 chat_id를 가져오는 방법이 쉽지않아서 바로 적용은 어렵습니다만..
소규모 커뮤니티 혹은 쇼핑몰 운영시 새글알림이나 댓글 확인을 할때 유용하긴 하더라구요
그런부분도 sms로 할필요는 없으니깐요.
텔레그램의 botfather 에서 /newbot 으로 자신이 생성할 텔레그램봇을 만들어줍니다.
여기서 bot_api를 얻을수 있습니다.
그러면 알림센터에서 알림이 발생했을때 알림을 텔레그램으로 보내주면 되는데요
ncenterlite.controller.php 에서
_insertnotify함수에서 보면
{
// 익명 노티가 아닐 때 로그인 세션의 회원정보 넣기
$args->target_member_srl = $logged_info->member_srl;
$args->target_nick_name = $logged_info->nick_name;
$args->target_user_id = $logged_info->user_id;
$args->target_email_address = $logged_info->email_address;
//텔레그램 변경
$oAppModuleModel = &getModel('ncenterlite');
$oAppModuleModel->getPushMessage($args);
}
저 익명노티가 아닐때.. 이부분을 찾아서 아래에 텔레그램 코드를 넣어줍니다.
그리고 아래 함수를 ncenterlite.model.php에 추가해줍니다.
switch($v->type)
{
case 'D':
$type = "글";
break;
case 'C':
$type = "댓글";
break;
// 메시지. 쪽지
case 'E':
$type = "쪽지";
break;
}
switch($v->target_type)
{
case 'C':
$str = sprintf('%s님이 회원님의 %s에 "%s" 댓글을 남겼습니다.', $v->target_nick_name, $type, $v->target_summary);
break;
case 'M':
$str = sprintf('%s님이 "%s" %s에서 회원님을 언급하였습니다.', $v->target_nick_name, $v->target_summary, $type);
break;
// 메시지. 쪽지
case 'E':
$str = sprintf('%s님이 회원님에게 쪽지를 보냈습니다', $v->target_nick_name);
case 'P':
$str = sprintf('%s님이 새글 %S 를 작성했습니다.', $v->target_nick_name,$v->target_summary);
break;
}
$msg = $v->target_summary;
$url2 = $v->target_url;
$oMemberModel = &getModel('member');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($v->member_srl);
$email = $member_info->email_address;
$str=$str.urlencode("\r\n".$url2);
$chat_id = '11111';
$bot_id = "botfather가 알려준 api";
$url = 'https://api.telegram.org/bot' . $bot_id . '/sendMessage?text='.$str.'&chat_id='.$chat_id;
$result = file_get_contents($url);
}
그러면 이제 준비완료인데요.
가장중요한 chat_id를 확인해야겠죠. chat_id는 얻는 방법이 좀 이상해요
일단 텔레그램에서 친구추가로 자신의 bot을 추가한다음 /start 를 해줍니다. 이것을 안해주면 안됩니다.
만약 이것을 안하면 그전에 했던 사람의 id가 나옵니다. ㅡㅡ;;
그런다음
https://api.telegram.org/bot/bot_api/getUpdates?offset=0
*bot_api 는 위에서 얻은 api를 입력하시면 됩니다.
를 브라우저에 입력해주거나 , 해당부분을 curl등으로 값을 리턴받으면 알수 있습니다.
원래 처음 계획은 텔레그램으로 개별 사용자들이 푸쉬메시지를 받게 하는 게 목적이었는데, 이 chat_id를 바로 알수 있는 방법이 없어서 힘들더군요. 지금은 운영자들 끼리만 사용하고 있습니다.
다음번엔 없어진 알림센터의 새글알림 코드를 되살려서 운영자만 새글알림을 텔레그램으로 받는 방법을..올려보도록 하겠습니다.
이 내용은 제 블로그에도 같이 올라갑니다... 오늘도 이렇게 10점 벌어갑니다 ㅎㅎㅎ
댓글 34
심지어 복잡하지도 않군요!
알림센터에서 알림발생시 트리거가 있나요 ? 몰랐네~
ncenterlite.controller.php 파일의
950 라인쯤에 보셔요
디비에 member_srl 과 함께 저장하면 누구의 chat_id 인지 구분이 되겠지요 :)
어줍잖은 공대출신 약삽니다.
대단하십니다!
많은 사람들이 사용하는 카톡으로 보낼수 있다면 더 좋지만... 카톡에서 제공을 안하니..
만약 회원의 챗아이디를 불러오거나 등록할수 있다면 텔레그램을 통해서 모든 알림을 받을 수 있는!
매우 좋은 푸시 기능이 되겠어요!
곰무룩ㅠ
저도 체형만 보면 곰입니다 ㅋ
카톡이나 라인도 API 가 있으면 좋을텐데 돈이 되는지 무료 개방은 안되어있는거 같더라구요.어줍짢은 약대생입니다. 반갑습니다!☺
제가 어줍잖은 이라고 한건 공대출신이란게.. 1년 6개월 다녀서.. 많이 어줍잖은 공대출신이죠 ㅎㅎ
화이팅!!
카톡으로 푸시할 수 있으면 유용하니까요.
get이라는건..가져온다는 함수이니.. 뭔가 좀 억암이 틀려지는거같아요.
insertPushMessage() 이러한 메소드로 controller에 저코드를 넣으면 될듯,.
그리고..
$oAppModuleModel = &getModel('ncenterlite');
$oAppModuleModel->getPushMessage($args);
이코드를 지워버리고,
$this->insertPushMessage($args); 형태로 하면될듯해요.
각각의 유저에게 맞게 줘야하는데 그 방식이 구현이 안되네요.
api읽어들여서 각각의 유저정보를 가져올 수 잇는 방법을 간구 해봤지만.. 흑.. 마땅히 생각나는 방법도 없고;ㅁ;
맴버모듈의 회원정보의 확장변수를 통해서 어떻게 알아볼 수 잇는 방법이 있는지부터 좀 보고, 그걸 각각 개인에게 쏠 수 잇는 방법으로 알아봐야할 것 같아요.
(chat_id 자체가, 가져오는 방식이 좀 그렇네요 ㅋㅋ)..
작동을 하지 않네요.. 다른건 제대로 된 것같은데
아쉽지만 다음 기회로 흑
echo phpinfo();
?>
요렇게 파일하나 만들어서 올려보시고
해당주소로 들어가서 ctrl+f 하시고 curl을 검색해보셔서 있으면 설치되어 있는겁니다.
호스팅은 지원안할수도 있겠네요..
else if($logged_info)
{
// 익명 노티가 아닐 때 로그인 세션의 회원정보 넣기
-------------------------------------------------------------------
이 부분이 많이 다른데요, 어디부분을 바꿔야하나요?
XE 1.8.42를 쓰고있습니다.
저는 알림센터를 업데이트 안하고 그대로 유지하고 있어서요.
아마도 1054번줄 else if(context::get('is_logged') 이부분이 아닌가 싶습니다.
제가 사용하지 않아서 확실하지는 않습니다.