구글 스프레드시트와 스크립트를 사용해 자동 텔레그램 메세지 발송하기 ..

오늘은 Google Apps Script를 사용해서 자동으로 텔레그램 메세지를 발송하는 방법에 대해 포스팅해 보겠습니다.​제 경우 지금 Apps Script로 사용자 추가 및 카카오톡 알림톡 발송 등을 하고 있는데, 로그 스프레드시트를 따로 만들어두긴 했지만, 그걸 보지 않는 한 실행 결과에 대해 알기가 어렵습니다.​예를 들어 가입신청한 사람이 있어서 그 사람을 선택하고 사용자 추가 스크립트를 실행했는데, 같은 메일 주소를 이미 다른 사람이 쓰고있어서 가입 처리가 안 되었습니다. 혹은 가입처리는 되었는데, 그 사람의 휴대폰 번호가 유효하지 않은 번호라 알림톡이 가지 않았습니다. 이럴 경우 제가 알 방법이 없는 거죠.​그래서 상황에 따라 텔레그램 메세지를 저에게 보내서 알려줄 수 있도록 코딩을 해 보았습니다.​이번 코딩도 아주아주 쉽습니다. ​텔레그램에 대해서 모르는 분이 혹시나 계실까봐 한 줄 요약을 하자면, 텔레그램은 카카오톡같은 메신저 앱입니다.​우선 저희는 텔레그램 봇이라는 것을 이용할 건데요, 텔레그램에서 공식적으로 봇을 생성하고 직접 프로그래밍하여 운용하는 것을 지원해 주고 있습니다. 원래 이 봇이라는 건 상호작용이 가능한 것이 장점입니다. 제가 봇에게 말을 걸면 봇이 해당 메세지를 분석해서 자동으로 답장을 하는 거죠. 예를 들면

이렇게 말입니다. 이렇게 작동하도록 만들려면 당연히 메세지가 도착할 때마다 답장을 위한 프로세싱을 해야하니 시스템이 상시 돌아가고 있어야 하고, 메세지가 도착하면 그 메세지 내용을 분석해서 그에 맞는 답을 보내주도록 프로그래밍을 해 줘야겠죠?​근데 이렇게 하려면 중간 서버가 필요합니다. 봇이 24시간 상시 대기하다가 메세지가 “띠링” 울리면 바로 분석하고 답장을 해 줘야하니까요.​제 경우 Google Apps Script와 연동하여 스프레드시트에서 특정 동작을 실행하고, 그 결과에 대한 내용만 http 요청을 통해 텔레그램 봇에 보내면, 해당 봇이 제가 있는 채팅방에 그 내용을 뿌려주는 겁니다. 이런 수동적인 동작만 하기 때문에 제 경우 서버가 필요없습니다. 코딩도 아주 간단합니다.​자 시작해 보겠습니다.​먼저 텔레그램은 당연히 설치가 되어있겠지요? 텔레그램을 켜서 검색창을 엽니다.

>

검색창에 @BotFather를 검색합니다. 다른 건 사칭이거나 다른 계정인 것 같고요, 맨 위에 저 공식 인증 마크 표시가 보이시죠? 저 계정에게 대화를 걸면 됩니다.

>

이제 “시작”을 눌러 대화를 시작합니다.

>

/newbot 을 입력하여 새로운 봇 생성을 요청합니다.

>

그럼 봇 이름(아이디가 아닙니다. 대화방 상단에 보이는 저 이름을 말하는 겁니다)을 물어봅니다.​저는 L Suite로 하겠습니다.

>

이번엔 봇 아이디를 입력합니다. 검색할 때 @ 뒤에 붙이는 그겁니다. 봇 이름은 반드시 아이디의 끝이 bot으로 끝나야 합니다. 저는 lsuite_bot으로 하였습니다.

>

자 이제 봇 생성이 완료되었습니다.​저기에서 Use this token to access the HTTP API: 뒤에 있는 내용이 바로 HTTP 요청을 넣을 때 필요한 토큰값입니다. 아주아주 중요한 값이고, 또 남에게 노출되면 안되기 때문에 잘 보관해 주세요.​이제 웹브라우저에 아래 주소를 입력해 보세요.

토큰값이 1340823080:as#Kjf3jF+3fj89f3#+ 뭐 이런 식으로 되어있을 건데요, :까지 포함해서 전부 토큰값 맞습니다. 그대로 입력하시면 돼요.

>

해당 주소에 접속했을 때 이렇게 나오면 잘 들어가신 겁니다.​위의 BotFater 계정에서 알려준 t.me/ 로 시작하는 주소를 터치하거나, 텔레그램 검색창에서 아까 만든 아이디를 @를 붙여서 검색하시면 자신이 방금 생성한 봇이 검색되니 그걸 눌러서 채팅을 시작하세요.

>

“시작”을 누르고 아무 대화나 쳐 봅니다.

>

이제 다시 아까 그 주소로 들어가 봅시다.

>

이번엔 나오는 내용이 바뀌었네요. 보니까 딱 감이 오죠. getUpdates 페이지는 최근에 받은 메세지에 대한 정보를 보여줍니다. 여기에서 id 부분의 숫자로 된 내용을 복사해 둡니다. 이게 채팅방 ID입니다. 앞으로 제 봇은 이 채팅방(저와 연결된 1:1 채팅방)에 말을 할 거기 때문에 이 채팅방 ID를 사용할 것입니다.​메세지를 보내기 위해서는 이런 형태의 URL을 사용하면 됩니다.​https://api.telegram.org/botTOKEN/sendmessage?chat_id=CHATID&text=MESSAGE​아시겠지만 TOKEN 부분에는 토큰값을, CHATID 부분에는 채팅방 ID를, MESSAGE 부분에는 원하는 메세지를 쓰면 됩니다.​전 처음에 https://api.telegram.org/botTOKEN/sendmessage?chat_id=CHATID&text=’hi hello’​라고 보냈는데 알고보니 ‘로 묶어줄 필요도 없더군요.​https://api.telegram.org/botTOKEN/sendmessage?chat_id=CHATID&text=hi hello​라고 보내면 됩니다.

>

브라우저에 URL을 붙여넣기만 해도 잘 갑니다.​이제 그럼 Google Apps Script로 보내는 예제를 만들어 봅시다.​스프레드시트에서 도구 – 스크립트 편집기를 열고 간단히 코딩을 해 봅니다.

>

상당히 긴 메세지를 적어서 테스트를 해 보았습니다.

>

>

Apps Script 쪽에서 Log로 응답값을 출력해 봤습니다. 응답도 잘 오네요.

>

이번엔 줄바꿈을 테스트해 보았습니다.

>

하지만 에러가 뙇!​아… n은 안 먹히는구나…​그래서 HTML 파싱모드로 보내보기로 했습니다. 텔레그램 공식 웹사이트에서 sendMessage와 관련한 자세한 명세를 소개하고 있습니다.​sendMessage(메세지 전송)이 메소드를 사용해 텍스트 메세지를 전송하세요. 전송이 성공하면 전송한 메세지가 반환됩니다.

https://core.telegram.org/bots/api#sendmessage텍스트 말고 사진이나 파일 등도 보낼 수 있고 기능이 많더라고요. 물론 저는 텍스트만 보낼 거기에 다른 건 필요 없습니다.​저는 parse_mode를 HTML로 해서 다시 한 번 시도해 보겠습니다.(

>

이렇게 하면 당연히 되겠지? 하고 실행을 해 보니…

>

하… HTML 요청에는 같은 태그가 들어가면 안되나 봅니다..​인터넷에 찾아보니 n을 %0A로 바꾸어서 해보라는 내용이 있네요.

>

이렇게 해서 보내 봤습니다. 이거 웹 URL에서 한글같은 글자 표시할 때 보던 형태인데, %0A가 줄바꿈이라는 뜻 같네요.

>

오 이번엔 잘 갑니다.

>

굵은 글씨로 한 번 테스트를 해봤는데 마찬가지로 안됩니다.;;​도대체 어떻게 하면 HTML 형태로 메세지를 보낼 수 있는 것인가… 인터넷을 한참 찾다가 제가 기본적인 함수 기능도 제대로 모르고 쓰고있었다는 사실을 알았습니다.​Google Apps Script 레퍼런스 웹사이트의 fetch(url. params)에 대한 내용입니다.​fetch(url, params)부가적인 인자를 사용해 URL 페치 요청을 만듭니다.이 함수는 HTTP 뿐만 아니라 HTTPS 상에서도 동작합니다.

인자

부가적인 인자

반환형HTTPResponse — HTTP 응답 데이터https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-params​기존에 개발 외주를 줬던 코드를 그대로 재활용하고 있었기 때문에 함수의 구체적인 사용법도 모르고 사용하고 있었습니다. 메세지 내용을 JSON payload에 담아 보내면 해결이 되는 문제더라고요.

>

위와 같이 코딩해 주니 별 문제가 없이 잘 작동하였습니다.​사실 HTTP 요청에 대해 1도 몰라서 POST가 뭔지 GET이 뭔지 잘 모릅니다만, 왠지 POST가 맞을 것 같아 POST로 했습니다.

>

이렇게 하니 (굵은 글씨) 속성도 아주 잘 먹힙니다.​메세지 전송을 위한 최종 소스 코드는 이렇게 만들었습니다.

이제 소스 코드 중 텔레그램 메세지가 전송되어야 할 부분부분에 sendTelegram 함수를 사용해 주면 됩니다. 제 경우 몇 개만 보여드리자면,

>

>

이렇게 알림톡을 먼저 보내보고, 유효하지 않은 번호거나 다른 어떤 이유로 알림톡이 가지 않으면 메일을 보내도록 되어 있습니다. 메일 보내기는 어제 올렸던 포스트를 참고하시면 되겠습니다.​이런 하나 하나의 함수 실행에 대한 결과는 로그 파일에도 모두 기록되도록 하였지만, 텔레그램으로도 보내지도록 하여 가입처리가 잘 진행되었는지, 혹시 문제가 생기지 않았는지 등에 대해서 즉각적으로 알 수 있도록 했습니다.

>

신규 가입자 신청 알림과 가입처리 완료 알림. 혹시 알림톡이 잘 갔는지 확인하기 위해서 이 이후에는 알림톡 내용까지 아래에 붙여주는 걸로 수정했습니다.

>

테스트용으로 도메인 신청에 대한 알림을 보내봤습니다. 알림톡 발송 내용도 다시 받아오게 하려고 서버쪽 코드를 좀 수정했네요.​이제 은행 입출금내역만 API로 가져오는 방법을 알아내면 완전 자동화의 끝인데, 그 부분이 정말 힘드네요. 저같은 개인한테는 그런 기능을 열어주지 않습니다. 그나마 방법이라면 이니페이나 그런 결제대행 업체를 이용하는 건데 수수료를 좀 많이 받아먹어서 못 쓰겠더라고요.​아무튼 이런 것들은 사실 L Suite 서비스 시작 초기에 다 했어야하는 부분인데 작년까지는 대학원 학업때문에 바쁘다고 못하고 또 졸업하고는 수술이나 재활때문에 미루다가 여기까지 왔네요. 최근 일주일 간은 정말 개발에만 매달린 것 같습니다.​오늘 포스트에서 소개한 텔레그램 메세지 발송은 HTTP 요청을 통해 단순하게 메세지를 보내는 것만이기 때문에 어려운 내용은 아닙니다. 이것 외에도 Google Apps Script를 사용하면 할 수 있는 일들이 아주 많으니 여러분들 하시는 업무에 도움이 될 수 있도록 한 번 코딩을 해보시기 바랍니다. 좋은 건 이 모든 게 무료라는 겁니다.(카카오톡 알림톡만 빼고… ㅠ)​Google 스프레드시트도 무료 툴이고 텔레그램 메세지 발송도, Apps Script도 모두 무료로 사용할 수 있습니다. 외국 기업들의 대인배적인 면모가 엿보이는 부분입니다.(카톡은 친구 등록된 사용자한테 보내는 메세지도 돈을 받던데 말입니다)​다음에 또 유용한 팁이나 소개할 기능이 있다면 포스팅을 해 보겠습니다. ㅎ​참고한 글들https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app#fetchurl,-paramshttps://core.telegram.org/bots/api#sendmessage