Bot-Chatwork-3: Chatwork Bot và Google Sheet
White

Văn Đức Thái viết ngày 16/04/2019

alt text

1. Vấn đề và những việc sẽ làm.

https://kipalog.com/posts/Bot-Chatwork-1---Tao-Bot-Chat-tren-Chatwork-thong-qua-Google-Apps-Script
https://kipalog.com/posts/Bot-Chatwork-2---Lam-cho-Bot-thong-minh-hon

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 1Phầ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

alt text

Ý 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().
alt text

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à
alt text

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
Bài Bái

(。◕‿◕。) NyLaa (。◕‿◕。)

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Văn Đức Thái

17 bài viết.
93 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
25 18
1. Tản mạn ngoài lề (Ảnh) MySQL với DB thì có cái quần què gì chứ? Đọc thôi để thấy cũng vài cái hay ho và này nọ. 2. MySQL: MyISAM & InnoDB & ...
Văn Đức Thái viết 1 năm trước
25 18
White
24 13
1. Tản mạn ngoài lề Khuya vật vã. Chẳng ngủ được. Mà chẳng biết làm gì giữa cái lúc dở dở ương ương này. Viết blog vậy :(. Bài viết dành cho các...
Văn Đức Thái viết 1 năm trước
24 13
White
18 3
1. Tản mạn ngoài lề (Ảnh) Khi gặp một vấn đề trong cuộc sống bạn sẽ làm gì? Người yêu đá đít, cuối tháng hết tiền lương, sếp đì trên đi xuống, bl...
Văn Đức Thái viết 1 năm trước
18 3
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
17 bài viết.
93 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!