下期第15堂[雲端服務機器人] Line機器人-寫入資料
今天介紹 將Line機器人接收到的訊息,插入資料表中。
今天使用的工具是Google sheets, 比起正規資料庫,建置起來快速方便,
當然這適合小型的資料,大概幾千筆之內較適合。
程式碼
function doPost(e) {
// LINE Messenging API Token
var CHANNEL_ACCESS_TOKEN = '......................';
// 以 JSON 格式解析 User 端傳來的 e 資料
var msg = JSON.parse(e.postData.contents);
const replyToken = msg.events[0].replyToken;
const userMessage = msg.events[0].message.text; // 使用者傳的訊息內容
const user_id = msg.events[0].source.userId; // 抓取使用者的 ID
const event_type = msg.events[0].source.type; // 分辨是個人聊天室還是群組
const sheet_url = '......................'; // 網址
const sheet_name = '....................................'; // 工作表名稱
const SpreadSheet = SpreadsheetApp.openByUrl(sheet_url);
const reserve_list = SpreadSheet.getSheetByName(sheet_name);
var current_list_row = reserve_list.getLastRow(); // 取得工作表最後一欄
var reply_message = []; // 空白回覆訊息陣列,後期會加入 JSON
// 查詢傳訊者的 LINE 帳號名稱
function get_user_name() {
// 判斷為群組成員還是單一使用者
switch (event_type) {
case "user":
var nameurl = "https://api.line.me/v2/bot/profile/" + user_id;
break;
case "group":
var groupid = msg.events[0].source.groupId;
var nameurl = "https://api.line.me/v2/bot/group/" + groupid + "/member/" + user_id;
break;
}
try {
// 呼叫 LINE User Info API,以 user ID 取得該帳號的使用者名稱
var response = UrlFetchApp.fetch(nameurl, {
"method": "GET",
"headers": {
"Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
"Content-Type": "application/json"
},
});
var namedata = JSON.parse(response);
var reserve_name = namedata.displayName;
}
catch {
reserve_name = "not avaliable";
}
return String(reserve_name)
}
//定義 回傳訊息函數
function send_to_line() {
var url = 'https://api.line.me/v2/bot/message/reply';
UrlFetchApp.fetch(url, {
'headers': {
'Content-Type': 'application/json; charset=UTF-8',
'Authorization': 'Bearer ' + CHANNEL_ACCESS_TOKEN,
},
'method': 'post',
'payload': JSON.stringify({
'replyToken': replyToken,
'messages': reply_message,
}),
});
}
// 將輸入值 word 轉為 LINE 文字訊息格式之 JSON
function format_text_message(word) {
let text_json = [{
"type": "text",
"text": word
}]
return text_json;
}
var reserve_name = get_user_name();
if (typeof replyToken === 'undefined') {
return;
};
if (userMessage == "顯示" | userMessage == "清單") {
var list="全部資料";
for (var x = 1; x <= current_list_row; x++) {
list = list + "\n" + reserve_list.getRange(x, 1).getValue();
}
reply_message = [{
"type": "text",
"text": "共有 " + current_list_row + "筆清單"
},{
"type": "text",
"text": list
}]
send_to_line();
}else{
var Today=new Date();
reserve_list.getRange(current_list_row + 1, 1).setValue(reserve_name);
reserve_list.getRange(current_list_row + 1, 2).setValue(userMessage);
current_list_row = reserve_list.getLastRow();
// 回傳成功訊息
reply_message = [{
"type": "text",
"text": reserve_name + "插入資料"
}]
send_to_line();
}
}
今日挑戰
上網搜尋 java script語法,在第三欄加上當時時間
小挑戰參考答案
reserve_list.getRange(current_list_row + 1, 3).setValue((Today.getMonth()+1)+"月"+Today.getDate()+"日");
思考與發展
今天的程式只是一個示範,他會把沒有關鍵字的對話全部抄錄起來。
同學當然可以改成有關鍵字才紀錄,例如句子裡面有“請記錄”,
才把這一個對話插到資料庫裡面
小叮嚀
學期已經接近尾聲,同學可以開始製作期末成果了。