前提・実現したいこと
最近、GASを始めたthaireoと言います。業務改善ツールとしてLINEを活用したツールを作り始めました。
GMail to Line Bot
GMAILを指定条件(未読かつ指定ラベル)で検索した結果をに通知するLINE BOTを作りたくてチャレンジしています。
Notifyでは作成できましたが、グループLINEではなく、登録者の情報が他の人に見れないLINE BOTで作成したいです。
初心者の質問で申し訳ありませんが、どなたかアドバイスよろしくお願いします
前提条件
CHANNEL_TOKENやLINE_NOTIFY_TOKENは他のツールを作ったときに使用し問題ありません。
ネットで希望の条件の作成方法が載っていましたが途中でエラーが出てつまっています。いろいろネットで調べていますが解決できません。
参考にしたページ
https://qiita.com/sanlike/items/82f732fa98c5b61a1307
機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ TypeError: Cannot read property 'postData' of undefined doPost @ コード.gs:7 ### 該当のソースコード
ソースコード
/* ------------------------------------------------------- */
// 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 ] );
}
}
}
試したこと
デパックで以下のところで止まります。
var event = JSON.parse(e.postData.contents).events[0];
調べた結果、エラーメッセージにあるようにpostData が定義されていないからと
思いますが解決方法が見いだせていません。
補足情報(FW/ツールのバージョンなど)
・PC(win10)
・LINEDEVELOPER
・GAS