/*
POSTリクエスト受信
request:受信リクエスト
*/
function doPost(request) {
//POSTリクエストをJSONデータにパース
var receiveJSON = JSON.parse(request.postData.contents);
for (var i = 0; i < receiveJSON.events.length; i++){
var event = receiveJSON.events[i];
//応答トークン取得
var replyToken = event.replyToken;
//メッセージ受信の場合
if (event.type == "message"){
//テキストメッセージの場合
if (event.message.type == "text"){
//テキストメッセージ取得
var msg = event.message.text;
//リッチメニューからのメッセージ送信は"開始"か"終了"
if (msg == "開始" || msg == "終了"){
//クイックリプライメッセージの生成
var quickReplyMsg = createQuickReplyMsg(msg);
//LINEの応答
replyMessage(replyToken, quickReplyMsg);
}
}
}
//クイックリプライからのポストバックの場合
if (event.type == "postback"){
//ポストバックされたデータを取得
var data = event.postback.data;
//カンマ区切りで配列に分解
var dataAry = data.split(",");
var actType = dataAry[0]; //"開始"または"終了"
var actTime = dataAry[1]; //何時何分
//時刻選択ダイアログからの時刻選択の場合
if (actTime == "時刻選択"){
//選択された時刻を取得
actTime = event.postback.params.time;
}
//メール送信【テレワーク開始・終了】
sendMail_telework(actType, actTime);
//LINEの応答
var msg = [{"type": "text",
"text": "メール送信:" + actType + actTime}];
replyMessage(replyToken, msg);
}
}
}
/*
メール送信【テレワーク開始・終了】
actType:"開始"または"終了"
actTime:何時何分
*/
function sendMail_telework(actType, actTime) {
var sheetAddress = SpreadsheetApp.getActive().getSheetByName("宛先");
var sheetTemplate = SpreadsheetApp.getActive().getSheetByName("定型文");
//【宛先】
//宛先シートからA1セルの値を取得
var toAddress = sheetAddress.getRange("A1").getValue();
//【メール本文】
var body = "";
//定型文シートのすべてのセルデータを取得
var values = sheetTemplate.getDataRange().getValues();
for (var i = 0; i < values.length; i++){
if (body != ""){
body += "\n";
}
body += values[i][0];
}
//"{TIME}"キーワードを置換
body = body.replace("{TIME}", actTime);
//"{ACTION}"キーワードを置換
body = body.replace("{ACTION}", actType);
//件名
var subject = "テレワーク" + actType;
//オプション
var option = {name: "わん太郎"}; //送信者名
//Gmail送信
MailApp.sendEmail(toAddress,subject,body,option);
}
/*
クイックリプライメッセージの生成
actType:"開始"または"終了"
*/
function createQuickReplyMsg(actType){
// 現在時刻を15分単位で取得
var dt_now = new Date();
dt_now.setMinutes(dt_now.getMinutes() - (dt_now.getMinutes() % 15) );
// 15分前の時刻を取得
var dt_before15 = new Date();
dt_before15.setMinutes(dt_now.getMinutes() - 15);
// 15分後の時刻を取得
var dt_after15 = new Date();
dt_after15.setMinutes(dt_now.getMinutes() + 15);
var msg = [
{
"type": "text",
"text": "下のボタンより、" + actType + "時間を選択してください。",
"quickReply": {
"items": [
{
"type": "action",
"action": {
"type": "postback",
"label": Utilities.formatDate(dt_before15, 'Asia/Tokyo', 'HH:mm'),
"displayText": Utilities.formatDate(dt_before15, 'Asia/Tokyo', 'HH:mm'),
"data": actType + "," + Utilities.formatDate(dt_before15, 'Asia/Tokyo', 'HH:mm')
}
},
{
"type": "action",
"action": {
"type": "postback",
"label": Utilities.formatDate(dt_now, 'Asia/Tokyo', 'HH:mm'),
"displayText": Utilities.formatDate(dt_now, 'Asia/Tokyo', 'HH:mm'),
"data": actType + "," + Utilities.formatDate(dt_now, 'Asia/Tokyo', 'HH:mm')
}
},
{
"type": "action",
"action": {
"type": "postback",
"label": Utilities.formatDate(dt_after15, 'Asia/Tokyo', 'HH:mm'),
"displayText": Utilities.formatDate(dt_after15, 'Asia/Tokyo', 'HH:mm'),
"data": actType + "," + Utilities.formatDate(dt_after15, 'Asia/Tokyo', 'HH:mm')
}
},
{
"type": "action",
"action": {
"type": "datetimepicker",
"label": "時刻選択",
"mode": "time",
"data": actType + "," + "時刻選択"
}
}
]
}
}
];
return msg;
}
/*
LINEの応答
replyToken:応答トークン
messages:応答メッセージ
*/
function replyMessage(replyToken, messages){
var replyURL = "https://api.line.me/v2/bot/message/reply";
var ACCESS_TOKEN = "xxxxxxxxxxxxxxxxxxxx";
UrlFetchApp.fetch(replyURL, {
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + ACCESS_TOKEN
},
"method": "post",
"payload": JSON.stringify({
"replyToken": replyToken,
"messages": messages
}),
});
}