GoogleAppsScript에서 Gmail을 Linebot에 알립니다.
16993 단어 MessagingAPIlinebotGoogleAppsScript
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
date
ver
note
2020-07-08
v0.0.1
2020-07-14
v0.0.2
label 다중 조건 설정 방법 추가
Prerequisites
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)
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)
Reference
이 문제에 관하여(GoogleAppsScript에서 Gmail을 Linebot에 알립니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sanlike/items/82f732fa98c5b61a1307텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)