「ボタン」テンプレートメッセージは以前
LINE BOTで「ボタン」テンプレートメッセージを表示する
ということをやってみました
それを元にして
今回はPUSHメッセージを利用して
任意のタイミングでこのようなテンプレートメッセージを表示してみます
元の記事と異なる点
- アクセストークンとuser IDはスクリプトのプロパティに保存しています
- thumbnailImageUrlは今回利用しないのでコメントアウトしています
- fetch_data(postData, url)でそれぞれのurlを渡すようにしています
- 理由は「今回ぶつかった壁」に書きました
元の記事でやっていたことのおさらい
コード.gs
function get_token() {
return PropertiesService.getScriptProperties().getProperty('token');
}
function get_user_id() {
return PropertiesService.getScriptProperties().getProperty('user_id');
}
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 == "postback") {
post_back(events[i]);
}
}
}
function push_message(e) {
var postData = {
"to": get_user_id(),
"messages": [{
"type": "template",
"altText": "select",
"template": {
"type": "buttons",
//"thumbnailImageUrl": "https://~.png",
"title": "Menu",
"text": "Please select",
"actions": [{
"type": "postback",
"label": "postback",
"data": "postback selected"
},
{
"type": "message",
"label": "message",
"text": "text:message"
},
{
"type": "uri",
"label": "uri",
"uri": "https://linecorp.com"
},
{
"type": "datetimepicker",
"label": "datetimepicker",
"data": "datetimepicker selected",
"mode": "datetime",
"initial": "2018-12-29T00:00",
"max": "2019-10-15T23:59",
"min": "2018-12-29T00:00"
}
]
}
}]
};
var url = "https://api.line.me/v2/bot/message/push";
fetch_data(postData, url);
}
function post_back(e) {
var data = e.postback.data;
var replay_text = "";
if (data == "postback selected") {
replay_text = data;
} else if (data == "datetimepicker selected") {
replay_text = data + "\n" + e.postback.params['datetime'];
}
var postData = {
"replyToken": e.replyToken,
"messages": [{
"type": "text",
"text": replay_text + "\n" + JSON.stringify(e.postback)
}]
};
var url = "https://api.line.me/v2/bot/message/reply";
fetch_data(postData, url);
}
function fetch_data(postData, url) {
var options = {
"method": "post",
"headers": {
"Content-Type": "application/json",
"Authorization": "Bearer " + get_token()
},
"payload": JSON.stringify(postData)
};
UrlFetchApp.fetch(url, options);
}
|
関連記事
今回ぶつかった壁
fetch_data(){} の関数が元の記事ではfunction fetch_data(postData) {}
になっていますが、今回はurlも渡して
function fetch_data(postData, url) {}
のようにしました。
これはpushで使うurlとreplyで使うurlが異なるためです。
UrlFetchApp.fetch(url, options)を共通処理にしているので、
元記事のまま
"https://api.line.me/v2/bot/message/reply"
にしたらPUSHできなくて
PUSHしたくて
"https://api.line.me/v2/bot/message/push"
にしたらpostbackでreplyが効かなくなってしまい、、
それに気づくのにちょっと手こずってしまいました。

