
1. Vấn đề và những việc sẽ làm.
Tiếp nối 2 bài trước thì hôm nay mình sẽ làm việc với Google Sheet + Chatwork.
Google Sheet là một công cụ mạnh. Có thể làm nhiều thứ. Hôm nay mình làm con BOT với chức năng là nhắc nhở công việc.
Công việc:
- Lấy danh sách members.
- Nhắc nhở công việc tương ứng với member đó.
2. Làm thôi
a. Thiết lập bên chatwork (1 em BOT và 1 group) + Google Sheet.
- Thiết lập bên chatwork (1 em BOT và 1 group).
Như ở Phần 1 và Phần 2 mình đã có bài cụ thể.
- Google Sheet.
Mình có tạo 1 google sheet gồm 2 sheet:
https://www.screencast.com/t/oRLutFxq
Sheet jobs
gồm những công việc cần làm. Gồm các mục STT
Date
Job
Pic
Sheet members
gồm STT
Name
ChatworkID

Ý tưởng sẽ là. Nếu đến hôm nay trùng với Date
con Bot sẽ tìm người Pic
tương ứng rồi lấy ChatworkID
tương ứng ở bên Sheet members
rồi notifi trong group với Job
tương ứng.
Ở Google Sheet bạn vào Tools
-> Script Editor
để mở code ra để code.
Mình xin gửi đoạn code lên rồi giải thích sau
function remindJobs() {
var sheetJob = SpreadsheetApp.getActive().getSheetByName('jobs');
for (var i = 2; i <= sheetJob.getLastRow(); i ++) {
var job = sheetJob.getRange(i,3).getValue();
var members = findMembers();
if (job != "") {
var member = sheetJob.getRange(i,4).getValue();
var dateOfJobStr = sheetJob.getRange(i,2).getValue();
if (dateOfJobStr != "" && member != "") {
var today = new Date();
var dateOfJob = new Date(dateOfJobStr);
var diffDay = dateDiffInDays(today, dateOfJob);
var message = "";
if (diffDay == 0 && today.getHours() == 08 && today.getMinutes() == 00) {
message = "[To:" + members[member] + "] " + member + "さん\n" + "Hôm nay hãy " + job + " nhé!";
sendToChatwork(message);
}
}
}
}
}
function findMembers() {
var sheetData = SpreadsheetApp.getActive().getSheetByName('members');
var members = {};
for (var i = 2; i <= sheetData.getLastRow(); i++) {
var member = sheetData.getRange(i,2).getValue();
if (member != "") {
members[member] = sheetData.getRange(i,3).getValue();
}
}
return members;
}
function dateDiffInDays(a, b) {
const _MS_PER_DAY = 1000 * 60 * 60 * 24;
// Discard the time and time-zone information.
const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate());
const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate());
return Math.floor((utc2 - utc1) / _MS_PER_DAY);
}
function sendToChatwork(message) {
if (message == "") {
return;
}
var scriptProperties = PropertiesService.getScriptProperties();
var api_token = scriptProperties.getProperty("cw_token");
var room_id = scriptProperties.getProperty("cw_room_id");
var cw = ChatWorkClient.factory({token: api_token});
cw.sendMessage({room_id: room_id, body: message});
}
Đoạn code trên cũng không có gì. Mọi người đọc chắc sẽ hiểu. Cái core
chính là việc lấy thông tin có sẵn trong google sheet. Mình xin giải thích function findMembers()
.

function findMembers() {
var sheetData = SpreadsheetApp.getActive().getSheetByName('members');
var members = {};
for (var i = 2; i <= sheetData.getLastRow(); i++) {
var member = sheetData.getRange(i,2).getValue();
if (member != "") {
members[member] = sheetData.getRange(i,3).getValue();
}
}
return members;
}
- Trước hết lấy
sheetData
tương ứng với Sheet có tên làmember
. - Mình cho chạy vòng for từ 2 (vì row 1 ghi STT Name ChatworkID) đến row cuối cùng.
- getRange(i, 2) tương ứng với cột Name.
- getRange(i, 3) tương ứng với cột ChatworkID.
- Vậy
members
sẽ là một mảng sẽ có value là ChatworkID tương ứng với key là Name. Ví dụ members[‘thaivd’] = 21****46.
Kết quả là

4. Tổng kết.
Tạm thời mình sẽ dừng tại đây.
Sắp tới sẽ có bài viết tạo Bot thông qua Google Calendar. Để tìm hiểu đã. Ahihi