コード.gs
var CHANNEL_ACCESS_TOKEN = "TOKEN";
function doPost(e) {
var contents = e.postData.contents;
var obj = JSON.parse(contents);
var events = obj["events"];
for (var i = 0; i < events.length; i++) {
if (events[i].type == "message") {
reply_message(events[i]);
} else if (events[i].type == "postback") {
post_back(events[i]);
}
}
}
function reply_message(e) {
var input_text = e.message.text;
if (input_text == "carousel") {
var postData = {
"replyToken": e.replyToken,
"messages": [{
"type": "template",
"altText": "this is a carousel template",
"template": {
"type": "carousel",
"columns": [{
"thumbnailImageUrl": "https://lh3.googleusercontent.com/l-ZZOFGyeKYz3stUbxTECHYnXcRD66C9g0tjiWA_okVIxZyb0E7_esU8LRpq_0LFCu8Y=w300",
"title": "When are you available?",
"text": "2017/10/29",
"actions": [{
"type": "datetimepicker",
"label": "First choice",
"data": "2017/10/29 First choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Second choice",
"data": "2017/10/29 Second choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Third choice",
"data": "2017/10/29 Third choice",
"mode": "time"
},
]
},
{
"thumbnailImageUrl": "https://lh3.googleusercontent.com/l-ZZOFGyeKYz3stUbxTECHYnXcRD66C9g0tjiWA_okVIxZyb0E7_esU8LRpq_0LFCu8Y=w300",
"title": "When are you available?",
"text": "2017/10/30",
"actions": [{
"type": "datetimepicker",
"label": "First choice",
"data": "2017/10/30 First choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Second choice",
"data": "2017/10/30 Second choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Third choice",
"data": "2017/10/30 Third choice",
"mode": "time"
},
]
},
{
"thumbnailImageUrl": "https://lh3.googleusercontent.com/l-ZZOFGyeKYz3stUbxTECHYnXcRD66C9g0tjiWA_okVIxZyb0E7_esU8LRpq_0LFCu8Y=w300",
"title": "When are you available?",
"text": "2017/10/31",
"actions": [{
"type": "datetimepicker",
"label": "First choice",
"data": "2017/10/31 First choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Second choice",
"data": "2017/10/31 Second choice",
"mode": "time"
},
{
"type": "datetimepicker",
"label": "Third choice",
"data": "2017/10/31 Third choice",
"mode": "time"
},
]
}
]
}
}]
};
}
fetch_data(postData);
}
function post_back(e) {
var data = e.postback.data;
var selected_time = e.postback.params['time'];
var replay_text = data + "\n" + selected_time;
var postData = {
"replyToken": e.replyToken,
"messages": [{
"type": "text",
"text": replay_text
}]
};
fetch_data(postData);
}
function fetch_data(postData) {
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN
},
"payload": JSON.stringify(postData)
};
UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}
|
意訳.gs
アクセストークンを設定する
この処理は以下を実行する
送信されたデータの内容を取得し
そのJSONをオブジェクトに変換し
eventsを取得する
eventsの数だけ以下を繰り返す
もしtypeが message なら
reply_messageに渡す
もしtypeが postback なら
post_backに渡す
この処理は以下を実行する
入力されたtextを取得して
もしそれが carousel なら
postDataに
replyTokenを設定し
messagesの
typeをtemplateに設定し
altTextを設定し
templateの
typeをcarouselに設定し
columnsを以下のように設定する
一つ目のcolumnのthumbnailImageUrlを設定する
titleを設定する
textを設定する
actionsの
1つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
2つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
3つ目のtypeを設定し
labelを設定し
dataを設定する
modeを設定する
2つめのcolumnのthumbnailImageUrlを設定する
titleを設定する
textを設定する
actionsの
1つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
2つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
3つ目のtypeを設定し
labelを設定し
dataを設定する
modeを設定する
3つめのcolumnのthumbnailImageUrlを設定する
titleを設定する
textを設定する
actionsの
1つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
2つ目のtypeを設定し
labelを設定し
dataを設定し
modeを設定する
3つ目のtypeを設定し
labelを設定し
dataを設定する
modeを設定する
fetch_dataにpostDataを渡す
この処理は以下を実行する
受け取ったpostbackからdataを取得し
選択された時間を取得し
replay_textにdataと改行と時間を入れる
postDataに
replyTokenを設定し
messagesの
typeをtextに設定し
textにreplay_textと改行とJSON文字列に変換した値を設定する
fetch_dataにpostDataを渡す
この処理は以下を実行する
optionsに
methodを設定し
headersに
Content-Typeを設定し
Authorizationを設定し
payloadにはpostDataをJSONに変換したものを設定する
optionをつけてLINEのmessage reply APIをたたく
|