I am trying to get the answer of date from users via LINE messaging api+GAS.
The template shows on LINE correctly but doesn’t seem like postback works as I expect.
So as I mentioned in the title, I cannot get postback (or datetimepicker) value correctly.
Is there any advice to correct my code?
Appreciate any help.
var channel_token = "●●●"
var url = "https://api.line.me/v2/bot/message/reply";
var user_id = "●●●"
var push_url = "https://api.line.me/v2/bot/message/push"
var spreadsheet = SpreadsheetApp.openById("●●●");
var sheet = spreadsheet.getSheetByName("●●●");
function getUserName(userId) {
const url = "https://api.line.me/v2/bot/profile/" + userId;
const response = UrlFetchApp.fetch(url, {
"headers" : {
"Authorization" : "Bearer " + channel_token
}
});
return JSON.parse(response.getContentText()).displayName;
}
//LINEからのイベントがdoPostにとんでくる
function doPost(e) {
//とんできた情報を扱いやすいように変換している
var json = e.postData.contents
var events = JSON.parse(json).events;
//送られてきたテキストを取得
var user_massage = events[0].message.text;
const lastRow = sheet.getLastRow() + 1;
const uidCol = 1
const nameCol = 2
const phoneCol = 3
const bdyCol = 4
const bdmCol = 5
const bddCol = 6
//ここでスプレッドシートの一番下の行に書き込む
//sheet.appendRow([user_massage]);
var event=events[0]
//もしイベントの種類がトークによるテキストメッセージだったら
if (event.type == "message") {
if (event.message.type == "text" && event.message.text == "情報を入力してクーポンをゲットします!") {
//自動返信メッセージの内容
var uid = event.source.userId;
sheet.getRange(lastRow, uidCol).setValue(uid)
sheet.getRange(lastRow, nameCol).setValue(getUserName(uid))
//もしIDも電話も誕生日もすでにある場合は"すでに登録が完了しています。"//
//もしIDはあるけど電話がない場合は↓//
//もしIDはあるけど誕生日がない場合は一番↓//
var message = {
"replyToken": event.replyToken,
"messages": [{ "type": "text", "text": getUserName(uid) + "さん!登録ありがとうございます!電話番号を入力して下さい。※ハイフンなし" }]
};
}
else if (/^[0-9]+$/.test(event.message.text) == true) {
//もしIDがすでにあったらもう登録がありますを出す。//
sheet.getRange(lastRow,phoneCol).setValue("'" + event.message.text)
var flexMessage = {
"type": "template",
"altText": "datetime_picker",
"template": {
"type": "buttons",
"thumbnailImageUrl": "https://placehold.jp/00dd82/ffffff/640x480.jpg?text=日時選択", // 画像のURL
"imageAspectRatio": "rectangle", // 画像のアスペクト比、「rectangle: 1.51:1」・「square: 1:1」、デフォルト値はrectangle
"imageSize": "cover", // 画像の表示形式
"imageBackgroundColor": "#3a687e", // 画像の背景色
"title": "メニュー",
"text": "以下より選択してください。",
"defaultAction": {
"type": "uri",
"label": "View detail",
"uri": "https://line.me/ja/"
},
"actions": [
{
"type": "datetimepicker",
"label": "日時を選択してください。",
"data": "action=settime",
"mode": "datetime",
"initial": "2021-05-12t00:00",
"max": "2022-05-12t23:59",
"min": "2017-12-25t00:00"
}
]
}
};
var message = {
"replyToken": event.replyToken,
//"messages": [{ "type": "text", "text": "生年月日を入力して下さい。お誕生日月にクーポンをお送りします!" }]
"messages": [flexMessage]
};
}
}
else if (event.type == "postback"){
var message = {
"replyToken": event.replyToken,
"messages": [{ "type": "text", "text": "postback成功!" }]
}
}
else {
var message = {
"replyToken": event.replyToken,
"messages": [{ "type": "text", "text": "何かが間違ってます。" }]
}
}
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + channel_token
},
"payload": JSON.stringify(message)
};
//自動返信メッセージを送信する
UrlFetchApp.fetch(url, options);
}```