GASでLINEbot作成中 リプライメッセージを2通返したい
メッセージを2通返したい
GASを使い、LINEbotに画像を送ると、GoogleDriveに保存してくれるコードを書いています。
画像を検知し、保存完了後に「保存完了!」とメッセージが返されるのですが、
その前に「保存中です・・・」というようなメッセージを一旦返したいです。
下記が現状のコードになります。どなたかアドバイス頂けますとありがたいです!
// 応答メッセージURL
const REPLY = "https://api.line.me/v2/bot/message/reply";
// アクセストークン
const ACCESS_TOKEN = "アクセストークン";
// スプレッドシート情報
const SHEET_ID = '1X8sR_aCzZydKSdAInkBZG9TcDeWInoq38TeTKRt9-KA';
const SHEET = SpreadsheetApp.openById(SHEET_ID).getSheetByName('シート名');
// Google Drive ID
const GOOGLE_DRIVE_ID = "18_nKu4nsFCdRvX_zSKx4NK9lFaBwwxKq";
// LINEから送られてきたデータを取得 doPost()
function doPost(e) {
//メッセージ受信
const data = JSON.parse(e.postData.contents).events[0];
//ユーザーID取得
const lineUserId = data.source.userId;
// リプレイトークン取得
const replyToken = data.replyToken;
// 送信されたメッセージの種類を取得
// https://developers.line.biz/ja/docs/messaging-api/message-types/#sticker-messages
const postType = data.message.type;
const userMessage = JSON.parse(e.postData.contents).events[0].message.text;
// 写真の時
if ( "image" === postType ) {
imageSave(replyToken, lineUserId, data);
} else {
SHEET.getRange('D' + 2).setValue(userMessage);
}
}
// 送信された画像を保存 imageSave()
function imageSave(replyToken, lineUserId, data) {
// LINEから画像取得 getImg()
const imgData = getImg(data);
// Googleドライブに保存 saveImg()
const imgInfo = saveImg(imgData, lineUserId);
// //「保存完了」とLINEにメッセージを送る
sendMessage(replyToken, imgInfo);
}
// LINEから画像取得 getImg()
function getImg(data) {
const IMG_URL = 'https://api-data.line.me/v2/bot/message/' + data.message.id + '/content';
const HEAD = {
"method":"get",
"headers": {
"Authorization" : "Bearer " + ACCESS_TOKEN
}
}
const imgData = UrlFetchApp.fetch(IMG_URL, HEAD);
return imgData;
}
// Googleドライブに保存 saveImg()
function saveImg(imgBinary, lineUserId){
//GoogleDriveフォルダID
const folder = DriveApp.getFolderById(GOOGLE_DRIVE_ID);
//ランダムな文字列を生成して、画像のファイル名とする
const fileName = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')
//Googleドライブのフォルダに画像を生成
const imageFile = folder.createFile(imgBinary.getBlob().setName(fileName));
//「保存しました」としたメッセージを変数に代入
const imgInfo = '投稿完了!コメントをどうぞ!';
//画像ファイルURL取得
const imageURL = '画像ファイルURL'
//画像ファイルにリンクでアクセスの権限付与
imageFile.setSharing(DriveApp.Access.ANYONE_WITH_LINK, DriveApp.Permission.VIEW);
debugImgLog(imageURL, lineUserId);
return imgInfo;
}
// スプレッドシートに画像を保存 debugImgLog()
function debugImgLog(text, userId) {
if ('' == text) {
return;
}
const date = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd HH:mm:ss')
const userName = getUserDisplayName(userId)
const userImg = getUserDisplayImg(userId)
SHEET.appendRow([userId,userId,text,userName,date,userName]);
// 日付順に並び替え
const numColumn = SHEET.getLastColumn(); // 最後列の列番号を取得
const numRow = SHEET.getLastRow()-1; // 最後行の行番号を取得
const dataRange = SHEET.getRange(2, 1, numRow, numColumn);
dataRange.sort([{column: 5, ascending: false}]);
}
// ユーザーのプロフィール名取得 getUserDisplayName()
function getUserDisplayName(userId) {
const url = 'https://api.line.me/v2/bot/profile/' + userId;
const userProfile = UrlFetchApp.fetch(url,{
'headers': {
'Authorization' : 'Bearer ' + ACCESS_TOKEN,
},
})
return JSON.parse(userProfile).displayName;
}
// ユーザーのプロフィール画像取得 getUserDisplayImg()
function getUserDisplayImg(userId) {
const url = 'https://api.line.me/v2/bot/profile/' + userId;
const userProfile = UrlFetchApp.fetch(url,{
'headers': {
'Authorization' : 'Bearer ' + ACCESS_TOKEN,
},
})
return JSON.parse(userProfile).pictureUrl;
}
// LINEにメッセージ送信 sendMessage()
function sendMessage(replyToken, replyText) {
const postData = {
"replyToken" : replyToken,
"messages" : [
{
"type" : "text",
"text" : replyText
}
]
};
const headers = {
"Content-Type" : "application/json; charset=UTF-8",
"Authorization" : "Bearer " + ACCESS_TOKEN
};
const options = {
"method" : "POST",
"headers" : headers,
"payload" : JSON.stringify(postData)
};
return UrlFetchApp.fetch(REPLY, options);
}
0