GoogleAppsScript에서 Gmail을 Linebot에 알립니다.

GMail to Line Bot



초등학교로부터의 긴급 메일이 묻혀 버려, 간과가 발생했다.
이 때문에 사용 빈도가 높은 LINE에서 관리할 수 있도록 이하로 변경했다.

GMAIL을 지정 조건(읽지 않고 지정 라벨)으로 검색한 결과를 LINE BOT에 통지한다.
이것은 Notify에서도 가능하지만, LINE BOT이라면 친구에게도 사용할 수 있도록 선택했다.



버전




date
ver
note


2020-07-08
v0.0.1

2020-07-14
v0.0.2
label 다중 조건 설정 방법 추가


Prerequisites


  • registration line-developers

  • Messaging API 사용 여기에서

    무료 플랜 OK
      - 월액 이용료: 무료
      -메시지 전달수(무료분): 1000통
      - 추가 메시지 요금: 추가 구매 불가

  • registration google account

    google Apps Script 사용 여기에서

  • 준비



    1) line-developers 로그인

    line-developers를 열고 로그인합니다.

    2) Provider 선택

    Provider가 없는 경우 Create하고 Provider를 클릭한다.

    2) Create a channel

    Messaging API를 선택하고 필요한 정보를 입력하고 Create합니다.
    Messaging API settings의 「Channel access token」은 나중에 사용합니다.

    Program



    1) 새로운 빈 프로젝트 만들기

    google apps Script 을 열고 새 빈 프로젝트를 클릭합니다.



    2) 소스 코드

    Apps Script 편집기에 아래 소스를 붙여넣습니다.



    ■ 설정 정보
    - LINEBOT_CHANNEL_TOKEN : Messaging API settings의 Channel access token에서 얻은 것
    - LINE_NOTIFY_TOKEN : LINE Notify를 사용하는 경우 여기
    - GMAIL_QUERY : gmail의 라벨 이름 지정

    github
    /* ------------------------------------------------------- */
    // setting: LINE BOT
    var LINEBOT_CHANNEL_TOKEN = 'XXXXXXXXXXXXXXXX'; 
    
    // setting: Line Notify ※必要であれば
    var LINE_NOTIFY_TOKEN = "XXXXXXXXXXXXXXXX";
    
    // setting: GAMIL ※未読 かつ ラベル名(下記サンプルのラベル条件は複数指定[OR])
    var GMAIL_QUERY = "is:unread label:{ラベル名1 ラベル名2}";
    /* ------------------------------------------------------- */
    
    // func: LINE BOT
    function pushMessageLineBot( _message ) {
        var _postData = {
            "messages": [{
            "type": "text",
            "text": _message,
            }]
        };
    
        var _url = "https://api.line.me/v2/bot/message/broadcast";
        var _headers = {
            "Content-Type": "application/json",
            'Authorization': 'Bearer ' + LINEBOT_CHANNEL_TOKEN,
        };
    
        var _options = {
            "method": "post",
            "headers": _headers,
            "payload": JSON.stringify(_postData)
        };
        var response = UrlFetchApp.fetch(_url, _options);
    }
    
    // func: LINE Notify ※必要であれば
    function pushLineNotify(_message){
        var _options = {
            "method"  : "post",
            "payload" : {'message' : _message},
            "headers" : {"Authorization" : "Bearer "+ LINE_NOTIFY_TOKEN}  
        };
        UrlFetchApp.fetch("https://notify-api.line.me/api/notify", _options);
    }
    
    // func: get GMAIL message
    function getMessageGmail() {
    
        // Search Gmail with the given query.
        var _gmailThread = GmailApp.search(GMAIL_QUERY);
        var _messages = GmailApp.getMessagesForThreads(_gmailThread);
        var _items = [];
    
        for(var _idx = 0; _idx < _messages.length;_idx++){
            _items[_idx] =            
                "\n[from]\n" + _messages[_idx].slice(-1)[0].getFrom()
                + "\n"
                + "\n[date]\n"
                + _messages[_idx].slice(-1)[0].getDate().getFullYear()
                + "/" + _messages[_idx].slice(-1)[0].getDate().getMonth()
                + "/" + _messages[_idx].slice(-1)[0].getDate().getDate() 
                + " " + _messages[_idx].slice(-1)[0].getDate().getHours()
                + ":" + _messages[_idx].slice(-1)[0].getDate().getMinutes()
                + "\n"
                + "\n[sbject]\n" + _messages[_idx].slice(-1)[0].getSubject()
                + "\n"
                + "\n[Message]\n"+ _messages[_idx].slice(-1)[0].getPlainBody()
                + "\n";
            _messages[_idx][0].markRead();
        }
    
        return _items;
    }
    
    // func: main
    function main() {
        _items = getMessageGmail()
        if( _items.length > 0 ){
            for( var _idx = ( _items.length - 1) ; _idx >= 0; _idx-- ){
                //pushLineNotify( _items[ _idx ] );
                pushMessageLineBot( _items[ _idx ] );
            }
        }
    }
    

    3) 트리거 생성

    시계 아이콘을 클릭합니다.


    아래 설정을 참고로 저장을 클릭합니다.


    이상

    Note



    GmailApp.search의 여러 조건에 대해(추기:2020.07.14)


  • AND 조건 : 반각 공간으로 구분 ※ 필요에 따라 ()로 둘러싸는
  • OR 조건 : {}로 둘러싸인
  • 좋은 웹페이지 즐겨찾기